skip prereleases & use versioned json for devdiskimgs

This commit is contained in:
uncor3
2025-11-16 04:04:22 +00:00
parent 629109d735
commit 5a18865b1d
10 changed files with 739 additions and 545 deletions
+519
View File
@@ -0,0 +1,519 @@
{
">0.0.0": {
"6.0": {
"Image": [
"https://github.com/filsv/iOSDeviceSupport/raw/master/6.0/DeveloperDiskImage.dmg"
],
"Signature": [
"https://github.com/filsv/iOSDeviceSupport/raw/master/6.0/DeveloperDiskImage.dmg.signature"
]
},
"6.1": {
"Image": [
"https://github.com/filsv/iOSDeviceSupport/raw/master/6.1/DeveloperDiskImage.dmg"
],
"Signature": [
"https://github.com/filsv/iOSDeviceSupport/raw/master/6.1/DeveloperDiskImage.dmg.signature"
]
},
"7.0": {
"Image": [
"https://github.com/filsv/iOSDeviceSupport/raw/master/7.0/DeveloperDiskImage.dmg"
],
"Signature": [
"https://github.com/filsv/iOSDeviceSupport/raw/master/7.0/DeveloperDiskImage.dmg.signature"
]
},
"7.1": {
"Image": [
"https://github.com/filsv/iOSDeviceSupport/raw/master/7.1/DeveloperDiskImage.dmg"
],
"Signature": [
"https://github.com/filsv/iOSDeviceSupport/raw/master/7.1/DeveloperDiskImage.dmg.signature"
]
},
"8.0": {
"Image": [
"https://github.com/filsv/iOSDeviceSupport/raw/master/8.0/DeveloperDiskImage.dmg"
],
"Signature": [
"https://github.com/filsv/iOSDeviceSupport/raw/master/8.0/DeveloperDiskImage.dmg.signature"
]
},
"8.1": {
"Image": [
"https://github.com/filsv/iOSDeviceSupport/raw/master/8.1/DeveloperDiskImage.dmg"
],
"Signature": [
"https://github.com/filsv/iOSDeviceSupport/raw/master/8.1/DeveloperDiskImage.dmg.signature"
]
},
"8.2": {
"Image": [
"https://github.com/filsv/iOSDeviceSupport/raw/master/8.2/DeveloperDiskImage.dmg"
],
"Signature": [
"https://github.com/filsv/iOSDeviceSupport/raw/master/8.2/DeveloperDiskImage.dmg.signature"
]
},
"8.3": {
"Image": [
"https://github.com/filsv/iOSDeviceSupport/raw/master/8.3/DeveloperDiskImage.dmg"
],
"Signature": [
"https://github.com/filsv/iOSDeviceSupport/raw/master/8.3/DeveloperDiskImage.dmg.signature"
]
},
"8.4": {
"Image": [
"https://github.com/filsv/iOSDeviceSupport/raw/master/8.4/DeveloperDiskImage.dmg"
],
"Signature": [
"https://github.com/filsv/iOSDeviceSupport/raw/master/8.4/DeveloperDiskImage.dmg.signature"
]
},
"9.0": {
"Image": [
"https://github.com/filsv/iOSDeviceSupport/raw/master/9.0/DeveloperDiskImage.dmg"
],
"Signature": [
"https://github.com/filsv/iOSDeviceSupport/raw/master/9.0/DeveloperDiskImage.dmg.signature"
]
},
"9.1": {
"Image": [
"https://github.com/filsv/iOSDeviceSupport/raw/master/9.1/DeveloperDiskImage.dmg"
],
"Signature": [
"https://github.com/filsv/iOSDeviceSupport/raw/master/9.1/DeveloperDiskImage.dmg.signature"
]
},
"9.2": {
"Image": [
"https://github.com/filsv/iOSDeviceSupport/raw/master/9.2/DeveloperDiskImage.dmg"
],
"Signature": [
"https://github.com/filsv/iOSDeviceSupport/raw/master/9.2/DeveloperDiskImage.dmg.signature"
]
},
"9.3": {
"Image": [
"https://github.com/filsv/iOSDeviceSupport/raw/master/9.3%20(13E230)/DeveloperDiskImage.dmg"
],
"Signature": [
"https://github.com/filsv/iOSDeviceSupport/raw/master/9.3%20(13E230)/DeveloperDiskImage.dmg.signature"
]
},
"10.0": {
"Image": [
"https://github.com/xushuduo/Xcode-iOS-Developer-Disk-Image/raw/master/Developer%20Disk%20Image/10.0%20(14A345)/DeveloperDiskImage.dmg"
],
"Signature": [
"https://github.com/xushuduo/Xcode-iOS-Developer-Disk-Image/raw/master/Developer%20Disk%20Image/10.0%20(14A345)/DeveloperDiskImage.dmg.signature"
]
},
"10.1": {
"Image": [
"https://github.com/xushuduo/Xcode-iOS-Developer-Disk-Image/raw/master/Developer%20Disk%20Image/10.1%20(14B72)/DeveloperDiskImage.dmg"
],
"Signature": [
"https://github.com/xushuduo/Xcode-iOS-Developer-Disk-Image/raw/master/Developer%20Disk%20Image/10.1%20(14B72)/DeveloperDiskImage.dmg.signature"
]
},
"10.2": {
"Image": [
"https://github.com/xushuduo/Xcode-iOS-Developer-Disk-Image/raw/master/Developer%20Disk%20Image/10.2%20(14C5062c)/DeveloperDiskImage.dmg"
],
"Signature": [
"https://github.com/xushuduo/Xcode-iOS-Developer-Disk-Image/raw/master/Developer%20Disk%20Image/10.2%20(14C5062c)/DeveloperDiskImage.dmg.signature"
]
},
"10.3": {
"Image": [
"https://github.com/xushuduo/Xcode-iOS-Developer-Disk-Image/blob/master/Developer%20Disk%20Image/10.3%20(14E269)/DeveloperDiskImage.dmg"
],
"Signature": [
"https://github.com/xushuduo/Xcode-iOS-Developer-Disk-Image/blob/master/Developer%20Disk%20Image/10.3%20(14E269)/DeveloperDiskImage.dmg.signature"
]
},
"11.0": {
"Image": [
"https://github.com/luannguyenkhoa/LocationSimulator/raw/master/LocationSimulator/11.0/DeveloperDiskImage.dmg"
],
"Signature": [
"https://github.com/luannguyenkhoa/LocationSimulator/raw/master/LocationSimulator/11.0/DeveloperDiskImage.dmg.signature"
]
},
"11.1": {
"Image": [
"https://github.com/luannguyenkhoa/LocationSimulator/raw/master/LocationSimulator/11.1/DeveloperDiskImage.dmg"
],
"Signature": [
"https://github.com/luannguyenkhoa/LocationSimulator/raw/master/LocationSimulator/11.1/DeveloperDiskImage.dmg.signature"
]
},
"11.2": {
"Image": [
"https://github.com/luannguyenkhoa/LocationSimulator/raw/master/LocationSimulator/11.2/DeveloperDiskImage.dmg"
],
"Signature": [
"https://github.com/luannguyenkhoa/LocationSimulator/raw/master/LocationSimulator/11.2/DeveloperDiskImage.dmg.signature"
]
},
"11.3": {
"Image": [
"https://github.com/luannguyenkhoa/LocationSimulator/raw/master/LocationSimulator/11.3/DeveloperDiskImage.dmg"
],
"Signature": [
"https://github.com/luannguyenkhoa/LocationSimulator/raw/master/LocationSimulator/11.3/DeveloperDiskImage.dmg.signature"
]
},
"11.4": {
"Image": [
"https://github.com/luannguyenkhoa/LocationSimulator/raw/master/LocationSimulator/11.4/DeveloperDiskImage.dmg"
],
"Signature": [
"https://github.com/luannguyenkhoa/LocationSimulator/raw/master/LocationSimulator/11.4/DeveloperDiskImage.dmg.signature"
]
},
"12.0": {
"Image": [
"https://github.com/luannguyenkhoa/LocationSimulator/raw/master/LocationSimulator/12.0/DeveloperDiskImage.dmg"
],
"Signature": [
"https://github.com/luannguyenkhoa/LocationSimulator/raw/master/LocationSimulator/12.0/DeveloperDiskImage.dmg.signature"
]
},
"12.1": {
"Image": [
"https://github.com/luannguyenkhoa/LocationSimulator/raw/master/LocationSimulator/12.1/DeveloperDiskImage.dmg"
],
"Signature": [
"https://github.com/luannguyenkhoa/LocationSimulator/raw/master/LocationSimulator/12.1/DeveloperDiskImage.dmg.signature"
]
},
"12.2": {
"Image": [
"https://github.com/luannguyenkhoa/LocationSimulator/raw/master/LocationSimulator/12.2/DeveloperDiskImage.dmg"
],
"Signature": [
"https://github.com/luannguyenkhoa/LocationSimulator/raw/master/LocationSimulator/12.2/DeveloperDiskImage.dmg.signature"
]
},
"12.3": {
"Image": [
"https://github.com/luannguyenkhoa/LocationSimulator/raw/master/LocationSimulator/12.3/DeveloperDiskImage.dmg"
],
"Signature": [
"https://github.com/luannguyenkhoa/LocationSimulator/raw/master/LocationSimulator/12.3/DeveloperDiskImage.dmg.signature"
]
},
"12.4": {
"Image": [
"https://github.com/pdso/DeveloperDiskImage/raw/master/12/12.4/DeveloperDiskImage.dmg"
],
"Signature": [
"https://github.com/pdso/DeveloperDiskImage/raw/master/12/12.4/DeveloperDiskImage.dmg.signature"
]
},
"12.5": {
"Image": [
"https://github.com/pdso/DeveloperDiskImage/raw/master/12/12.4/DeveloperDiskImage.dmg"
],
"Signature": [
"https://github.com/pdso/DeveloperDiskImage/raw/master/12/12.4/DeveloperDiskImage.dmg.signature"
]
},
"13.0": {
"Image": [
"https://github.com/pdso/DeveloperDiskImage/raw/master/13/13.0/DeveloperDiskImage.dmg"
],
"Signature": [
"https://github.com/pdso/DeveloperDiskImage/raw/master/13/13.0/DeveloperDiskImage.dmg.signature"
]
},
"13.1": {
"Image": [
"https://github.com/pdso/DeveloperDiskImage/raw/master/13/13.1/DeveloperDiskImage.dmg"
],
"Signature": [
"https://github.com/pdso/DeveloperDiskImage/raw/master/13/13.1/DeveloperDiskImage.dmg.signature"
]
},
"13.2": {
"Image": [
"https://github.com/pdso/DeveloperDiskImage/raw/master/13/13.2/DeveloperDiskImage.dmg"
],
"Signature": [
"https://github.com/pdso/DeveloperDiskImage/raw/master/13/13.2/DeveloperDiskImage.dmg.signature"
]
},
"13.3": {
"Image": [
"https://github.com/pdso/DeveloperDiskImage/raw/master/13/13.3/DeveloperDiskImage.dmg"
],
"Signature": [
"https://github.com/pdso/DeveloperDiskImage/raw/master/13/13.3/DeveloperDiskImage.dmg.signature"
]
},
"13.4": {
"Image": [
"https://github.com/pdso/DeveloperDiskImage/raw/master/13/13.4/DeveloperDiskImage.dmg"
],
"Signature": [
"https://github.com/pdso/DeveloperDiskImage/raw/master/13/13.4/DeveloperDiskImage.dmg.signature"
]
},
"13.5": {
"Image": [
"https://github.com/pdso/DeveloperDiskImage/raw/master/13/13.5/DeveloperDiskImage.dmg"
],
"Signature": [
"https://github.com/pdso/DeveloperDiskImage/raw/master/13/13.5/DeveloperDiskImage.dmg.signature"
]
},
"13.6": {
"Image": [
"https://github.com/pdso/DeveloperDiskImage/raw/master/13/13.6/DeveloperDiskImage.dmg"
],
"Signature": [
"https://github.com/pdso/DeveloperDiskImage/raw/master/13/13.6/DeveloperDiskImage.dmg.signature"
]
},
"13.7": {
"Image": [
"https://github.com/pdso/DeveloperDiskImage/raw/master/13/13.7/DeveloperDiskImage.dmg"
],
"Signature": [
"https://github.com/pdso/DeveloperDiskImage/raw/master/13/13.7/DeveloperDiskImage.dmg.signature"
]
},
"14.0": {
"Image": [
"https://github.com/pdso/DeveloperDiskImage/raw/master/14/14.0/DeveloperDiskImage.dmg"
],
"Signature": [
"https://github.com/pdso/DeveloperDiskImage/raw/master/14/14.0/DeveloperDiskImage.dmg.signature"
]
},
"14.1": {
"Image": [
"https://github.com/pdso/DeveloperDiskImage/raw/master/14/14.1/DeveloperDiskImage.dmg"
],
"Signature": [
"https://github.com/pdso/DeveloperDiskImage/raw/master/14/14.1/DeveloperDiskImage.dmg.signature"
]
},
"14.2": {
"Image": [
"https://github.com/pdso/DeveloperDiskImage/raw/master/14/14.2/DeveloperDiskImage.dmg"
],
"Signature": [
"https://github.com/pdso/DeveloperDiskImage/raw/master/14/14.2/DeveloperDiskImage.dmg.signature"
]
},
"14.3": {
"Image": [
"https://github.com/pdso/DeveloperDiskImage/raw/master/14/14.3/DeveloperDiskImage.dmg"
],
"Signature": [
"https://github.com/pdso/DeveloperDiskImage/raw/master/14/14.3/DeveloperDiskImage.dmg.signature"
]
},
"14.4": {
"Image": [
"https://github.com/pdso/DeveloperDiskImage/raw/master/14/14.4/DeveloperDiskImage.dmg"
],
"Signature": [
"https://github.com/pdso/DeveloperDiskImage/raw/master/14/14.4/DeveloperDiskImage.dmg.signature"
]
},
"14.5": {
"Image": [
"https://github.com/pdso/DeveloperDiskImage/raw/master/14/14.5/DeveloperDiskImage.dmg"
],
"Signature": [
"https://github.com/pdso/DeveloperDiskImage/raw/master/14/14.5/DeveloperDiskImage.dmg"
]
},
"14.6": {
"Image": [
"https://github.com/pdso/DeveloperDiskImage/raw/master/14/14.5/DeveloperDiskImage.dmg"
],
"Signature": [
"https://github.com/pdso/DeveloperDiskImage/raw/master/14/14.5/DeveloperDiskImage.dmg.signature"
]
},
"14.7": {
"Image": [
"https://github.com/pdso/DeveloperDiskImage/raw/master/14/14.5/DeveloperDiskImage.dmg"
],
"Signature": [
"https://github.com/pdso/DeveloperDiskImage/raw/master/14/14.5/DeveloperDiskImage.dmg.signature"
]
},
"14.8": {
"Image": [
"https://github.com/pdso/DeveloperDiskImage/raw/master/14/14.5/DeveloperDiskImage.dmg"
],
"Signature": [
"https://github.com/pdso/DeveloperDiskImage/raw/master/14/14.5/DeveloperDiskImage.dmg.signature"
]
},
"15.0": {
"Image": [
"https://github.com/pdso/DeveloperDiskImage/raw/master/15/15.0/DeveloperDiskImage.dmg"
],
"Signature": [
"https://github.com/pdso/DeveloperDiskImage/raw/master/15/15.0/DeveloperDiskImage.dmg.signature"
]
},
"15.1": {
"Image": [
"https://github.com/pdso/DeveloperDiskImage/raw/master/15/15.0/DeveloperDiskImage.dmg"
],
"Signature": [
"https://github.com/pdso/DeveloperDiskImage/raw/master/15/15.0/DeveloperDiskImage.dmg.signature"
]
},
"15.2": {
"Image": [
"https://github.com/pdso/DeveloperDiskImage/raw/master/15/15.2/DeveloperDiskImage.dmg"
],
"Signature": [
"https://github.com/pdso/DeveloperDiskImage/raw/master/15/15.2/DeveloperDiskImage.dmg.signature"
]
},
"15.3": {
"Image": [
"https://github.com/pdso/DeveloperDiskImage/raw/master/15/15.2/DeveloperDiskImage.dmg"
],
"Signature": [
"https://github.com/pdso/DeveloperDiskImage/raw/master/15/15.2/DeveloperDiskImage.dmg.signature"
]
},
"15.4": {
"Image": [
"https://github.com/pdso/DeveloperDiskImage/raw/master/15/15.4/DeveloperDiskImage.dmg"
],
"Signature": [
"https://github.com/pdso/DeveloperDiskImage/raw/master/15/15.4/DeveloperDiskImage.dmg.signature"
]
},
"15.5": {
"Image": [
"https://github.com/pdso/DeveloperDiskImage/raw/master/15/15.5/DeveloperDiskImage.dmg"
],
"Signature": [
"https://github.com/pdso/DeveloperDiskImage/raw/master/15/15.5/DeveloperDiskImage.dmg.signature"
]
},
"15.6": {
"Image": [
"https://github.com/pdso/DeveloperDiskImage/raw/master/15/15.6/DeveloperDiskImage.dmg"
],
"Signature": [
"https://github.com/pdso/DeveloperDiskImage/raw/master/15/15.6/DeveloperDiskImage.dmg.signature"
]
},
"15.7": {
"Image": [
"https://github.com/pdso/DeveloperDiskImage/raw/master/15/15.7/DeveloperDiskImage.dmg"
],
"Signature": [
"https://github.com/pdso/DeveloperDiskImage/raw/master/15/15.7/DeveloperDiskImage.dmg.signature"
]
},
"15.8": {
"Image": [
"https://github.com/pdso/DeveloperDiskImage/raw/master/15/15.5/DeveloperDiskImage.dmg"
],
"Signature": [
"https://github.com/pdso/DeveloperDiskImage/raw/master/15/15.5/DeveloperDiskImage.dmg.signature"
]
},
"16.0": {
"Image": [
"https://github.com/mspvirajpatel/Xcode_Developer_Disk_Images/raw/master/Developer%20Disk%20Image/16.0/DeveloperDiskImage.dmg"
],
"Signature": [
"https://github.com/mspvirajpatel/Xcode_Developer_Disk_Images/raw/master/Developer%20Disk%20Image/16.0/DeveloperDiskImage.dmg.signature"
]
},
"16.1": {
"Image": [
"https://github.com/mspvirajpatel/Xcode_Developer_Disk_Images/raw/master/Developer%20Disk%20Image/16.1/DeveloperDiskImage.dmg"
],
"Signature": [
"https://github.com/mspvirajpatel/Xcode_Developer_Disk_Images/raw/master/Developer%20Disk%20Image/16.1/DeveloperDiskImage.dmg.signature"
]
},
"16.2": {
"Image": [
"https://github.com/mspvirajpatel/Xcode_Developer_Disk_Images/raw/master/Developer%20Disk%20Image/16.2/DeveloperDiskImage.dmg"
],
"Signature": [
"https://github.com/mspvirajpatel/Xcode_Developer_Disk_Images/raw/master/Developer%20Disk%20Image/16.2/DeveloperDiskImage.dmg.signature"
]
},
"16.3": {
"Image": [
"https://github.com/mspvirajpatel/Xcode_Developer_Disk_Images/raw/master/Developer%20Disk%20Image/16.3/DeveloperDiskImage.dmg"
],
"Signature": [
"https://github.com/mspvirajpatel/Xcode_Developer_Disk_Images/raw/master/Developer%20Disk%20Image/16.3/DeveloperDiskImage.dmg.signature"
]
},
"16.4": {
"Image": [
"https://github.com/mspvirajpatel/Xcode_Developer_Disk_Images/raw/master/Developer%20Disk%20Image/16.4/DeveloperDiskImage.dmg"
],
"Signature": [
"https://github.com/mspvirajpatel/Xcode_Developer_Disk_Images/raw/master/Developer%20Disk%20Image/16.4/DeveloperDiskImage.dmg.signature"
]
},
"16.5": {
"Image": [
"https://github.com/mspvirajpatel/Xcode_Developer_Disk_Images/raw/master/Developer%20Disk%20Image/16.5/DeveloperDiskImage.dmg"
],
"Signature": [
"https://github.com/mspvirajpatel/Xcode_Developer_Disk_Images/raw/master/Developer%20Disk%20Image/16.5/DeveloperDiskImage.dmg.signature"
]
},
"16.6": {
"Image": [
"https://github.com/mspvirajpatel/Xcode_Developer_Disk_Images/raw/master/Developer%20Disk%20Image/16.5/DeveloperDiskImage.dmg"
],
"Signature": [
"https://github.com/mspvirajpatel/Xcode_Developer_Disk_Images/raw/master/Developer%20Disk%20Image/16.5/DeveloperDiskImage.dmg.signature"
]
},
"16.7": {
"Image": [
"https://github.com/mspvirajpatel/Xcode_Developer_Disk_Images/raw/master/Developer%20Disk%20Image/16.5/DeveloperDiskImage.dmg"
],
"Signature": [
"https://github.com/mspvirajpatel/Xcode_Developer_Disk_Images/raw/master/Developer%20Disk%20Image/16.5/DeveloperDiskImage.dmg.signature"
]
},
"17.0": {
"Image": [
"https://github.com/doronz88/DeveloperDiskImage/raw/main/PersonalizedImages/Xcode_iOS_DDI_Personalized/Image.dmg"
],
"Trustcache": [
"https://github.com/doronz88/DeveloperDiskImage/raw/main/PersonalizedImages/Xcode_iOS_DDI_Personalized/Image.dmg.trustcache"
],
"BuildManifest": [
"https://github.com/doronz88/DeveloperDiskImage/raw/main/PersonalizedImages/Xcode_iOS_DDI_Personalized/BuildManifest.plist"
]
},
"Fallback": {
"Image": [
"https://github.com/mspvirajpatel/Xcode_Developer_Disk_Images/raw/master/Developer%20Disk%20Image/%@/DeveloperDiskImage.dmg"
],
"Signature": [
"https://github.com/mspvirajpatel/Xcode_Developer_Disk_Images/raw/master/Developer%20Disk%20Image/%@/DeveloperDiskImage.dmg.signature"
]
}
}
}
+1 -1
View File
@@ -62,7 +62,7 @@
<file>resources/connect.png</file>
<file>resources/airplayer-tutorial.mp4</file>
<file>resources/ipad-mockups/ipad.png</file>
<file>resources/DeveloperDiskImages.json</file>
<file>DeveloperDiskImages.json</file>
<file>resources/keychain.mp4</file>
<file>resources/wireless-gallery-import.mp4</file>
</qresource>
-413
View File
@@ -1,413 +0,0 @@
{
"10.0": {
"Image": [
"https://github.com/xushuduo/Xcode-iOS-Developer-Disk-Image/raw/master/Developer%20Disk%20Image/10.0%20(14A345)/DeveloperDiskImage.dmg"
],
"Signature": [
"https://github.com/xushuduo/Xcode-iOS-Developer-Disk-Image/raw/master/Developer%20Disk%20Image/10.0%20(14A345)/DeveloperDiskImage.dmg.signature"
]
},
"10.1": {
"Image": [
"https://github.com/xushuduo/Xcode-iOS-Developer-Disk-Image/raw/master/Developer%20Disk%20Image/10.1%20(14B72)/DeveloperDiskImage.dmg"
],
"Signature": [
"https://github.com/xushuduo/Xcode-iOS-Developer-Disk-Image/raw/master/Developer%20Disk%20Image/10.1%20(14B72)/DeveloperDiskImage.dmg.signature"
]
},
"10.2": {
"Image": [
"https://github.com/xushuduo/Xcode-iOS-Developer-Disk-Image/raw/master/Developer%20Disk%20Image/10.2%20(14C5062c)/DeveloperDiskImage.dmg"
],
"Signature": [
"https://github.com/xushuduo/Xcode-iOS-Developer-Disk-Image/raw/master/Developer%20Disk%20Image/10.2%20(14C5062c)/DeveloperDiskImage.dmg.signature"
]
},
"10.3": {
"Image": [
"https://github.com/xushuduo/Xcode-iOS-Developer-Disk-Image/blob/master/Developer%20Disk%20Image/10.3%20(14E269)/DeveloperDiskImage.dmg"
],
"Signature": [
"https://github.com/xushuduo/Xcode-iOS-Developer-Disk-Image/blob/master/Developer%20Disk%20Image/10.3%20(14E269)/DeveloperDiskImage.dmg.signature"
]
},
"11.0": {
"Image": [
"https://github.com/luannguyenkhoa/LocationSimulator/raw/master/LocationSimulator/11.0/DeveloperDiskImage.dmg"
],
"Signature": [
"https://github.com/luannguyenkhoa/LocationSimulator/raw/master/LocationSimulator/11.0/DeveloperDiskImage.dmg.signature"
]
},
"11.1": {
"Image": [
"https://github.com/luannguyenkhoa/LocationSimulator/raw/master/LocationSimulator/11.1/DeveloperDiskImage.dmg"
],
"Signature": [
"https://github.com/luannguyenkhoa/LocationSimulator/raw/master/LocationSimulator/11.1/DeveloperDiskImage.dmg.signature"
]
},
"11.2": {
"Image": [
"https://github.com/luannguyenkhoa/LocationSimulator/raw/master/LocationSimulator/11.2/DeveloperDiskImage.dmg"
],
"Signature": [
"https://github.com/luannguyenkhoa/LocationSimulator/raw/master/LocationSimulator/11.2/DeveloperDiskImage.dmg.signature"
]
},
"11.3": {
"Image": [
"https://github.com/luannguyenkhoa/LocationSimulator/raw/master/LocationSimulator/11.3/DeveloperDiskImage.dmg"
],
"Signature": [
"https://github.com/luannguyenkhoa/LocationSimulator/raw/master/LocationSimulator/11.3/DeveloperDiskImage.dmg.signature"
]
},
"11.4": {
"Image": [
"https://github.com/luannguyenkhoa/LocationSimulator/raw/master/LocationSimulator/11.4/DeveloperDiskImage.dmg"
],
"Signature": [
"https://github.com/luannguyenkhoa/LocationSimulator/raw/master/LocationSimulator/11.4/DeveloperDiskImage.dmg.signature"
]
},
"12.0": {
"Image": [
"https://github.com/luannguyenkhoa/LocationSimulator/raw/master/LocationSimulator/12.0/DeveloperDiskImage.dmg"
],
"Signature": [
"https://github.com/luannguyenkhoa/LocationSimulator/raw/master/LocationSimulator/12.0/DeveloperDiskImage.dmg.signature"
]
},
"12.1": {
"Image": [
"https://github.com/luannguyenkhoa/LocationSimulator/raw/master/LocationSimulator/12.1/DeveloperDiskImage.dmg"
],
"Signature": [
"https://github.com/luannguyenkhoa/LocationSimulator/raw/master/LocationSimulator/12.1/DeveloperDiskImage.dmg.signature"
]
},
"12.2": {
"Image": [
"https://github.com/luannguyenkhoa/LocationSimulator/raw/master/LocationSimulator/12.2/DeveloperDiskImage.dmg"
],
"Signature": [
"https://github.com/luannguyenkhoa/LocationSimulator/raw/master/LocationSimulator/12.2/DeveloperDiskImage.dmg.signature"
]
},
"12.3": {
"Image": [
"https://github.com/luannguyenkhoa/LocationSimulator/raw/master/LocationSimulator/12.3/DeveloperDiskImage.dmg"
],
"Signature": [
"https://github.com/luannguyenkhoa/LocationSimulator/raw/master/LocationSimulator/12.3/DeveloperDiskImage.dmg.signature"
]
},
"12.4": {
"Image": [
"https://github.com/pdso/DeveloperDiskImage/raw/master/12/12.4/DeveloperDiskImage.dmg"
],
"Signature": [
"https://github.com/pdso/DeveloperDiskImage/raw/master/12/12.4/DeveloperDiskImage.dmg.signature"
]
},
"12.5": {
"Image": [
"https://github.com/pdso/DeveloperDiskImage/raw/master/12/12.4/DeveloperDiskImage.dmg"
],
"Signature": [
"https://github.com/pdso/DeveloperDiskImage/raw/master/12/12.4/DeveloperDiskImage.dmg.signature"
]
},
"13.0": {
"Image": [
"https://github.com/pdso/DeveloperDiskImage/raw/master/13/13.0/DeveloperDiskImage.dmg"
],
"Signature": [
"https://github.com/pdso/DeveloperDiskImage/raw/master/13/13.0/DeveloperDiskImage.dmg.signature"
]
},
"13.1": {
"Image": [
"https://github.com/pdso/DeveloperDiskImage/raw/master/13/13.1/DeveloperDiskImage.dmg"
],
"Signature": [
"https://github.com/pdso/DeveloperDiskImage/raw/master/13/13.1/DeveloperDiskImage.dmg.signature"
]
},
"13.2": {
"Image": [
"https://github.com/pdso/DeveloperDiskImage/raw/master/13/13.2/DeveloperDiskImage.dmg"
],
"Signature": [
"https://github.com/pdso/DeveloperDiskImage/raw/master/13/13.2/DeveloperDiskImage.dmg.signature"
]
},
"13.3": {
"Image": [
"https://github.com/pdso/DeveloperDiskImage/raw/master/13/13.3/DeveloperDiskImage.dmg"
],
"Signature": [
"https://github.com/pdso/DeveloperDiskImage/raw/master/13/13.3/DeveloperDiskImage.dmg.signature"
]
},
"13.4": {
"Image": [
"https://github.com/pdso/DeveloperDiskImage/raw/master/13/13.4/DeveloperDiskImage.dmg"
],
"Signature": [
"https://github.com/pdso/DeveloperDiskImage/raw/master/13/13.4/DeveloperDiskImage.dmg.signature"
]
},
"13.5": {
"Image": [
"https://github.com/pdso/DeveloperDiskImage/raw/master/13/13.5/DeveloperDiskImage.dmg"
],
"Signature": [
"https://github.com/pdso/DeveloperDiskImage/raw/master/13/13.5/DeveloperDiskImage.dmg.signature"
]
},
"13.6": {
"Image": [
"https://github.com/pdso/DeveloperDiskImage/raw/master/13/13.6/DeveloperDiskImage.dmg"
],
"Signature": [
"https://github.com/pdso/DeveloperDiskImage/raw/master/13/13.6/DeveloperDiskImage.dmg.signature"
]
},
"13.7": {
"Image": [
"https://github.com/pdso/DeveloperDiskImage/raw/master/13/13.7/DeveloperDiskImage.dmg"
],
"Signature": [
"https://github.com/pdso/DeveloperDiskImage/raw/master/13/13.7/DeveloperDiskImage.dmg.signature"
]
},
"14.0": {
"Image": [
"https://github.com/pdso/DeveloperDiskImage/raw/master/14/14.0/DeveloperDiskImage.dmg"
],
"Signature": [
"https://github.com/pdso/DeveloperDiskImage/raw/master/14/14.0/DeveloperDiskImage.dmg.signature"
]
},
"14.1": {
"Image": [
"https://github.com/pdso/DeveloperDiskImage/raw/master/14/14.1/DeveloperDiskImage.dmg"
],
"Signature": [
"https://github.com/pdso/DeveloperDiskImage/raw/master/14/14.1/DeveloperDiskImage.dmg.signature"
]
},
"14.2": {
"Image": [
"https://github.com/pdso/DeveloperDiskImage/raw/master/14/14.2/DeveloperDiskImage.dmg"
],
"Signature": [
"https://github.com/pdso/DeveloperDiskImage/raw/master/14/14.2/DeveloperDiskImage.dmg.signature"
]
},
"14.3": {
"Image": [
"https://github.com/pdso/DeveloperDiskImage/raw/master/14/14.3/DeveloperDiskImage.dmg"
],
"Signature": [
"https://github.com/pdso/DeveloperDiskImage/raw/master/14/14.3/DeveloperDiskImage.dmg.signature"
]
},
"14.4": {
"Image": [
"https://github.com/pdso/DeveloperDiskImage/raw/master/14/14.4/DeveloperDiskImage.dmg"
],
"Signature": [
"https://github.com/pdso/DeveloperDiskImage/raw/master/14/14.4/DeveloperDiskImage.dmg.signature"
]
},
"14.5": {
"Image": [
"https://github.com/pdso/DeveloperDiskImage/raw/master/14/14.5/DeveloperDiskImage.dmg"
],
"Signature": [
"https://github.com/pdso/DeveloperDiskImage/raw/master/14/14.5/DeveloperDiskImage.dmg"
]
},
"14.6": {
"Image": [
"https://github.com/pdso/DeveloperDiskImage/raw/master/14/14.5/DeveloperDiskImage.dmg"
],
"Signature": [
"https://github.com/pdso/DeveloperDiskImage/raw/master/14/14.5/DeveloperDiskImage.dmg.signature"
]
},
"14.7": {
"Image": [
"https://github.com/pdso/DeveloperDiskImage/raw/master/14/14.5/DeveloperDiskImage.dmg"
],
"Signature": [
"https://github.com/pdso/DeveloperDiskImage/raw/master/14/14.5/DeveloperDiskImage.dmg.signature"
]
},
"14.8": {
"Image": [
"https://github.com/pdso/DeveloperDiskImage/raw/master/14/14.5/DeveloperDiskImage.dmg"
],
"Signature": [
"https://github.com/pdso/DeveloperDiskImage/raw/master/14/14.5/DeveloperDiskImage.dmg.signature"
]
},
"15.0": {
"Image": [
"https://github.com/pdso/DeveloperDiskImage/raw/master/15/15.0/DeveloperDiskImage.dmg"
],
"Signature": [
"https://github.com/pdso/DeveloperDiskImage/raw/master/15/15.0/DeveloperDiskImage.dmg.signature"
]
},
"15.1": {
"Image": [
"https://github.com/pdso/DeveloperDiskImage/raw/master/15/15.0/DeveloperDiskImage.dmg"
],
"Signature": [
"https://github.com/pdso/DeveloperDiskImage/raw/master/15/15.0/DeveloperDiskImage.dmg.signature"
]
},
"15.2": {
"Image": [
"https://github.com/pdso/DeveloperDiskImage/raw/master/15/15.2/DeveloperDiskImage.dmg"
],
"Signature": [
"https://github.com/pdso/DeveloperDiskImage/raw/master/15/15.2/DeveloperDiskImage.dmg.signature"
]
},
"15.3": {
"Image": [
"https://github.com/pdso/DeveloperDiskImage/raw/master/15/15.2/DeveloperDiskImage.dmg"
],
"Signature": [
"https://github.com/pdso/DeveloperDiskImage/raw/master/15/15.2/DeveloperDiskImage.dmg.signature"
]
},
"15.4": {
"Image": [
"https://github.com/pdso/DeveloperDiskImage/raw/master/15/15.4/DeveloperDiskImage.dmg"
],
"Signature": [
"https://github.com/pdso/DeveloperDiskImage/raw/master/15/15.4/DeveloperDiskImage.dmg.signature"
]
},
"15.5": {
"Image": [
"https://github.com/pdso/DeveloperDiskImage/raw/master/15/15.5/DeveloperDiskImage.dmg"
],
"Signature": [
"https://github.com/pdso/DeveloperDiskImage/raw/master/15/15.5/DeveloperDiskImage.dmg.signature"
]
},
"15.6": {
"Image": [
"https://github.com/pdso/DeveloperDiskImage/raw/master/15/15.6/DeveloperDiskImage.dmg"
],
"Signature": [
"https://github.com/pdso/DeveloperDiskImage/raw/master/15/15.6/DeveloperDiskImage.dmg.signature"
]
},
"15.7": {
"Image": [
"https://github.com/pdso/DeveloperDiskImage/raw/master/15/15.7/DeveloperDiskImage.dmg"
],
"Signature": [
"https://github.com/pdso/DeveloperDiskImage/raw/master/15/15.7/DeveloperDiskImage.dmg.signature"
]
},
"15.8": {
"Image": [
"https://github.com/pdso/DeveloperDiskImage/raw/master/15/15.5/DeveloperDiskImage.dmg"
],
"Signature": [
"https://github.com/pdso/DeveloperDiskImage/raw/master/15/15.5/DeveloperDiskImage.dmg.signature"
]
},
"16.0": {
"Image": [
"https://github.com/mspvirajpatel/Xcode_Developer_Disk_Images/raw/master/Developer%20Disk%20Image/16.0/DeveloperDiskImage.dmg"
],
"Signature": [
"https://github.com/mspvirajpatel/Xcode_Developer_Disk_Images/raw/master/Developer%20Disk%20Image/16.0/DeveloperDiskImage.dmg.signature"
]
},
"16.1": {
"Image": [
"https://github.com/mspvirajpatel/Xcode_Developer_Disk_Images/raw/master/Developer%20Disk%20Image/16.1/DeveloperDiskImage.dmg"
],
"Signature": [
"https://github.com/mspvirajpatel/Xcode_Developer_Disk_Images/raw/master/Developer%20Disk%20Image/16.1/DeveloperDiskImage.dmg.signature"
]
},
"16.2": {
"Image": [
"https://github.com/mspvirajpatel/Xcode_Developer_Disk_Images/raw/master/Developer%20Disk%20Image/16.2/DeveloperDiskImage.dmg"
],
"Signature": [
"https://github.com/mspvirajpatel/Xcode_Developer_Disk_Images/raw/master/Developer%20Disk%20Image/16.2/DeveloperDiskImage.dmg.signature"
]
},
"16.3": {
"Image": [
"https://github.com/mspvirajpatel/Xcode_Developer_Disk_Images/raw/master/Developer%20Disk%20Image/16.3/DeveloperDiskImage.dmg"
],
"Signature": [
"https://github.com/mspvirajpatel/Xcode_Developer_Disk_Images/raw/master/Developer%20Disk%20Image/16.3/DeveloperDiskImage.dmg.signature"
]
},
"16.4": {
"Image": [
"https://github.com/mspvirajpatel/Xcode_Developer_Disk_Images/raw/master/Developer%20Disk%20Image/16.4/DeveloperDiskImage.dmg"
],
"Signature": [
"https://github.com/mspvirajpatel/Xcode_Developer_Disk_Images/raw/master/Developer%20Disk%20Image/16.4/DeveloperDiskImage.dmg.signature"
]
},
"16.5": {
"Image": [
"https://github.com/mspvirajpatel/Xcode_Developer_Disk_Images/raw/master/Developer%20Disk%20Image/16.5/DeveloperDiskImage.dmg"
],
"Signature": [
"https://github.com/mspvirajpatel/Xcode_Developer_Disk_Images/raw/master/Developer%20Disk%20Image/16.5/DeveloperDiskImage.dmg.signature"
]
},
"16.6": {
"Image": [
"https://github.com/mspvirajpatel/Xcode_Developer_Disk_Images/raw/master/Developer%20Disk%20Image/16.5/DeveloperDiskImage.dmg"
],
"Signature": [
"https://github.com/mspvirajpatel/Xcode_Developer_Disk_Images/raw/master/Developer%20Disk%20Image/16.5/DeveloperDiskImage.dmg.signature"
]
},
"16.7": {
"Image": [
"https://github.com/mspvirajpatel/Xcode_Developer_Disk_Images/raw/master/Developer%20Disk%20Image/16.5/DeveloperDiskImage.dmg"
],
"Signature": [
"https://github.com/mspvirajpatel/Xcode_Developer_Disk_Images/raw/master/Developer%20Disk%20Image/16.5/DeveloperDiskImage.dmg.signature"
]
},
"17.0": {
"Image": [
"https://github.com/doronz88/DeveloperDiskImage/raw/main/PersonalizedImages/Xcode_iOS_DDI_Personalized/Image.dmg"
],
"Trustcache": [
"https://github.com/doronz88/DeveloperDiskImage/raw/main/PersonalizedImages/Xcode_iOS_DDI_Personalized/Image.dmg.trustcache"
],
"BuildManifest": [
"https://github.com/doronz88/DeveloperDiskImage/raw/main/PersonalizedImages/Xcode_iOS_DDI_Personalized/BuildManifest.plist"
]
},
"Fallback": {
"Image": [
"https://github.com/mspvirajpatel/Xcode_Developer_Disk_Images/raw/master/Developer%20Disk%20Image/%@/DeveloperDiskImage.dmg"
],
"Signature": [
"https://github.com/mspvirajpatel/Xcode_Developer_Disk_Images/raw/master/Developer%20Disk%20Image/%@/DeveloperDiskImage.dmg.signature"
]
}
}
+78
View File
@@ -0,0 +1,78 @@
{
">0.0.0": {
"sponsors": {
"platinum": {
"members": [
{
"name": "Spotify",
"url": "https://www.spotify.com",
"logo": "sponsors/spotify.png",
"description": "Leading music streaming service.",
"bundleId": "com.spotify.client"
},
{
"name": "Shopify",
"url": "https://www.shopify.com",
"logo": "sponsors/shopify.png",
"description": "Create an online store within minutes and start selling.",
"bundleId": "com.jadedpixel.shopify"
}
]
},
"gold": {
"members": [
{
"name": "Spotify",
"url": "https://www.spotify.com",
"logo": "sponsors/spotify.png",
"description": "Leading music streaming service.",
"bundleId": "com.spotify.client"
},
{
"name": "Shopify",
"url": "https://www.shopify.com",
"logo": "sponsors/shopify.png",
"description": "Create an online store within minutes and start selling.",
"bundleId": "com.jadedpixel.shopify"
}
]
},
"silver": {
"members": [
{
"name": "Spotify",
"url": "https://www.spotify.com",
"logo": "sponsors/spotify.png",
"description": "Leading music streaming service.",
"bundleId": "com.spotify.client"
},
{
"name": "Shopify",
"url": "https://www.shopify.com",
"logo": "sponsors/shopify.png",
"description": "Create an online store within minutes and start selling.",
"bundleId": "com.jadedpixel.shopify"
}
]
},
"bronze": {
"members": [
{
"name": "Spotify",
"url": "https://www.spotify.com",
"logo": "sponsors/spotify.png",
"description": "Leading music streaming service.",
"bundleId": "com.spotify.client"
},
{
"name": "Shopify",
"url": "https://www.shopify.com",
"logo": "sponsors/shopify.png",
"description": "Create an online store within minutes and start selling.",
"bundleId": "com.jadedpixel.shopify"
}
]
}
}
}
}
+38 -118
View File
@@ -25,6 +25,7 @@
#include "appstoremanager.h"
#include "creddialog.h"
#include "iDescriptor-ui.h"
#include "iDescriptor.h"
#include "keychaindialog.h"
#include "logindialog.h"
#include "mainwindow.h"
@@ -56,7 +57,6 @@
#include <QPixmap>
#include <QProgressBar>
#include <QPushButton>
#include <QRegularExpression>
#include <QScrollArea>
#include <QStyle>
#include <QTimer>
@@ -64,84 +64,7 @@
#include <QWidget>
#include <QtConcurrent/QtConcurrent>
// Helper struct for semantic version comparison
struct AppVersion {
int major = 0;
int minor = 0;
int patch = 0;
static AppVersion fromString(QString versionString)
{
// Keep only digits and dots for comparison
versionString.remove(QRegularExpression("[^\\d.]"));
AppVersion v;
QStringList parts = versionString.split('.');
if (parts.size() > 0)
v.major = parts[0].toInt();
if (parts.size() > 1)
v.minor = parts[1].toInt();
if (parts.size() > 2)
v.patch = parts[2].toInt();
return v;
}
bool operator<(const AppVersion &other) const
{
if (major != other.major)
return major < other.major;
if (minor != other.minor)
return minor < other.minor;
return patch < other.patch;
}
bool operator==(const AppVersion &other) const
{
return major == other.major && minor == other.minor &&
patch == other.patch;
}
bool operator>(const AppVersion &other) const
{
return !(*this < other || *this == other);
}
bool operator<=(const AppVersion &other) const
{
return (*this < other || *this == other);
}
bool operator>=(const AppVersion &other) const { return !(*this < other); }
};
// Checks if the current app version matches a given version condition
bool versionMatches(const QString &currentVersionStr,
const QString &conditionStr)
{
AppVersion currentVersion = AppVersion::fromString(currentVersionStr);
AppVersion conditionVersion = AppVersion::fromString(conditionStr);
if (conditionStr.startsWith("<="))
return currentVersion <= conditionVersion;
if (conditionStr.startsWith(">="))
return currentVersion >= conditionVersion;
if (conditionStr.startsWith("<"))
return currentVersion < conditionVersion;
if (conditionStr.startsWith(">"))
return currentVersion > conditionVersion;
// Exact match
return currentVersion == conditionVersion;
}
QJsonObject getVersionedConfig(const QJsonObject &rootObj)
{
QStringList keys = rootObj.keys();
for (const QString &key : keys) {
if (versionMatches(APP_VERSION, key)) {
return rootObj[key].toObject();
}
}
}
// TODO: watch for login and logout events
// FIXME: we dont watch for login and logout events because there is no such api
AppsWidget *AppsWidget::sharedInstance()
{
static AppsWidget *instance = new AppsWidget();
@@ -229,8 +152,7 @@ void AppsWidget::setupUI()
void AppsWidget::init()
{
// FIXME:update url
QUrl sponsorsUrl("http://localhost:5173/sponsors.json");
QUrl sponsorsUrl(SPONSORS_JSON_URL);
QNetworkRequest request(sponsorsUrl);
QNetworkReply *reply = m_networkManager->get(request);
connect(reply, &QNetworkReply::finished, this, [this, reply]() {
@@ -489,6 +411,38 @@ void AppsWidget::populateDefaultApps()
advanceGridPos();
}
for (const QJsonValue &sponsorValue : m_silverSponsors) {
QJsonObject sponsorObj = sponsorValue.toObject();
QString name = sponsorObj.value("name").toString();
QString bundleId = sponsorObj.value("bundleId").toString();
QString description = sponsorObj.value("description").toString();
QString url = sponsorObj.value("url").toString();
QString logoUrl = sponsorObj.value("logo").toString();
bool useBundleIdForIcon =
sponsorObj.value("useBundleIdForIcon").toBool(true);
createAppCard(name, bundleId, description, logoUrl, url, gridLayout,
row, col, useBundleIdForIcon,
SponsorType(SponsorType::Silver));
advanceGridPos();
}
for (const QJsonValue &sponsorValue : m_bronzeSponsors) {
QJsonObject sponsorObj = sponsorValue.toObject();
QString name = sponsorObj.value("name").toString();
QString bundleId = sponsorObj.value("bundleId").toString();
QString description = sponsorObj.value("description").toString();
QString url = sponsorObj.value("url").toString();
QString logoUrl = sponsorObj.value("logo").toString();
bool useBundleIdForIcon =
sponsorObj.value("useBundleIdForIcon").toBool(true);
createAppCard(name, bundleId, description, logoUrl, url, gridLayout,
row, col, useBundleIdForIcon,
SponsorType(SponsorType::Bronze));
advanceGridPos();
}
if (m_platinumSponsors.empty() && m_goldSponsors.empty()) {
createSponsorCard(gridLayout, row, col);
advanceGridPos();
@@ -525,37 +479,6 @@ void AppsWidget::populateDefaultApps()
col);
advanceGridPos();
for (const QJsonValue &sponsorValue : m_silverSponsors) {
QJsonObject sponsorObj = sponsorValue.toObject();
QString name = sponsorObj.value("name").toString();
QString bundleId = sponsorObj.value("bundleId").toString();
QString description = sponsorObj.value("description").toString();
QString url = sponsorObj.value("url").toString();
QString logoUrl = sponsorObj.value("logo").toString();
bool useBundleIdForIcon =
sponsorObj.value("useBundleIdForIcon").toBool(true);
createAppCard(name, bundleId, description, logoUrl, url, gridLayout,
row, col, useBundleIdForIcon,
SponsorType(SponsorType::Silver));
advanceGridPos();
}
for (const QJsonValue &sponsorValue : m_bronzeSponsors) {
QJsonObject sponsorObj = sponsorValue.toObject();
QString name = sponsorObj.value("name").toString();
QString bundleId = sponsorObj.value("bundleId").toString();
QString description = sponsorObj.value("description").toString();
QString url = sponsorObj.value("url").toString();
QString logoUrl = sponsorObj.value("logo").toString();
bool useBundleIdForIcon =
sponsorObj.value("useBundleIdForIcon").toBool(true);
createAppCard(name, bundleId, description, logoUrl, url, gridLayout,
row, col, useBundleIdForIcon,
SponsorType(SponsorType::Bronze));
advanceGridPos();
}
gridLayout->setRowStretch(gridLayout->rowCount(), 1);
}
@@ -688,18 +611,15 @@ void AppsWidget::createAppCard(
// Add sponsor type indicator
if (!sponsorType.isEmpty()) {
QLabel *sponsorLabel = new QLabel(sponsorType.name);
QString textColor = (sponsorType.level == SponsorType::Platinum ||
sponsorType.level == SponsorType::Silver)
? "#333"
: "white";
sponsorLabel->setStyleSheet(QString("font-size: 10px; "
"font-weight: bold; "
"color: %1; "
"color: #333; "
"background-color: %2; "
"border-radius: 4px; "
"padding: 2px 6px; "
"margin-left: 8px;")
.arg(textColor, sponsorType.color));
.arg(sponsorType.color));
sponsorLabel->setFixedHeight(16);
sponsorLabel->setAlignment(Qt::AlignCenter);
nameLayout->addWidget(sponsorLabel);
}
+9 -4
View File
@@ -80,7 +80,7 @@ void DevDiskManager::populateImageList()
connect(reply, &QNetworkReply::finished, this, [this, localPath, reply]() {
if (reply->error() == QNetworkReply::NoError) {
// FIXME: better have this settings
// FIXME: better have this in settings
QDir().mkdir(QDir::homePath() + "/.idescriptor");
m_imageListJsonData = reply->readAll();
QFile file(localPath);
@@ -97,14 +97,19 @@ QMap<QString, QMap<QString, QString>> DevDiskManager::parseDiskDir()
{
QJsonDocument doc = QJsonDocument::fromJson(m_imageListJsonData);
if (!doc.isObject()) {
qWarning() << "Invalid JSON response from image list API";
qWarning() << "parseDiskDir: Invalid JSON response from image list API";
return {};
}
QMap<QString, QMap<QString, QString>>
imageFiles; // version -> {type -> url}
QJsonObject root = doc.object();
QJsonObject root = getVersionedConfig(doc.object());
if (root.isEmpty()) {
qWarning() << "parseDiskDir: No valid versioned config found in image "
"list JSON";
return {};
}
for (auto it = root.constBegin(); it != root.constEnd(); ++it) {
const QString version = it.key();
const QJsonObject versionData = it.value().toObject();
@@ -166,7 +171,7 @@ QList<ImageInfo> DevDiskManager::getImagesSorted(
uint64_t mounted_sig_len)
{
QList<ImageInfo> allImages;
// TODO: what is this ?
// FIXME: i guess we could do better here but works for now
bool hasConnectedDevice = (deviceMajorVersion > 0);
for (auto it = imageFiles.constBegin(); it != imageFiles.constEnd(); ++it) {
+2 -2
View File
@@ -128,8 +128,8 @@ QString DeviceImageWidget::getWallpaperPath() const
QString DeviceImageWidget::getMockupNameFromDisplayName(
const QString &displayName) const
{
// Map device names to mockup files
if (displayName.contains("iPhone 16", Qt::CaseInsensitive)) {
if (displayName.contains("iPhone 16", Qt::CaseInsensitive) ||
displayName.contains("iPhone 17", Qt::CaseInsensitive)) {
return "16";
} else if (displayName.contains("iPhone 15", Qt::CaseInsensitive) ||
displayName.contains("iPhone 14", Qt::CaseInsensitive)) {
+87 -2
View File
@@ -20,7 +20,9 @@
#pragma once
#include <QDebug>
#include <QImage>
#include <QJsonObject>
#include <QNetworkAccessManager>
#include <QRegularExpression>
#include <QtCore/QObject>
#include <libimobiledevice/afc.h>
#include <libimobiledevice/installation_proxy.h>
@@ -41,7 +43,11 @@
#define AFC2_SERVICE_NAME "com.apple.afc2"
#define RECOVERY_CLIENT_CONNECTION_TRIES 3
#define APPLE_VENDOR_ID 0x05ac
#define REPO_URL "https://github.com/uncor3/iDescriptor"
#define REPO_URL "https://github.com/iDescriptor/iDescriptor"
#define SPONSORS_JSON_URL \
"https://raw.githubusercontent.com/iDescriptor/iDescriptor/refs/heads/" \
"main/sponsors.json"
// This is because afc_read_directory accepts "/var/mobile/Media" as "/"
#define POSSIBLE_ROOT "../../../../"
@@ -424,4 +430,83 @@ QByteArray read_afc_file_to_byte_array(afc_client_t afcClient,
bool isDarkMode();
instproxy_error_t install_IPA(idevice_t device, afc_client_t afc,
const char *filePath);
const char *filePath);
// Helper struct for semantic version comparison
struct AppVersion {
int major = 0;
int minor = 0;
int patch = 0;
static AppVersion fromString(QString versionString)
{
// Keep only digits and dots for comparison
versionString.remove(QRegularExpression("[^\\d.]"));
AppVersion v;
QStringList parts = versionString.split('.');
if (parts.size() > 0)
v.major = parts[0].toInt();
if (parts.size() > 1)
v.minor = parts[1].toInt();
if (parts.size() > 2)
v.patch = parts[2].toInt();
return v;
}
bool operator<(const AppVersion &other) const
{
if (major != other.major)
return major < other.major;
if (minor != other.minor)
return minor < other.minor;
return patch < other.patch;
}
bool operator==(const AppVersion &other) const
{
return major == other.major && minor == other.minor &&
patch == other.patch;
}
bool operator>(const AppVersion &other) const
{
return !(*this < other || *this == other);
}
bool operator<=(const AppVersion &other) const
{
return (*this < other || *this == other);
}
bool operator>=(const AppVersion &other) const { return !(*this < other); }
};
// Checks if the current app version matches a given version condition
inline bool versionMatches(const QString &currentVersionStr,
const QString &conditionStr)
{
AppVersion currentVersion = AppVersion::fromString(currentVersionStr);
AppVersion conditionVersion = AppVersion::fromString(conditionStr);
if (conditionStr.startsWith("<="))
return currentVersion <= conditionVersion;
if (conditionStr.startsWith(">="))
return currentVersion >= conditionVersion;
if (conditionStr.startsWith("<"))
return currentVersion < conditionVersion;
if (conditionStr.startsWith(">"))
return currentVersion > conditionVersion;
// Exact match
return currentVersion == conditionVersion;
}
inline QJsonObject getVersionedConfig(const QJsonObject &rootObj)
{
QStringList keys = rootObj.keys();
for (const QString &key : keys) {
if (versionMatches(APP_VERSION, key)) {
qDebug() << "getVersionedConfig picked version:" << key;
return rootObj[key].toObject();
}
}
return QJsonObject();
}
+4 -4
View File
@@ -246,7 +246,7 @@ MainWindow::MainWindow(QWidget *parent)
UpdateProcedure updateProcedure;
bool packageManagerManaged = false;
bool isPortable = false;
bool skipPrerelease = true;
#ifdef WIN32
// dynamic portable detection read .portable file in app dir on Windows
QString appDir = QApplication::applicationDirPath();
@@ -309,9 +309,9 @@ MainWindow::MainWindow(QWidget *parent)
}
// FIXME: fix repo name
m_updater =
new ZUpdater("uncor3/libtest", APP_VERSION, "iDescriptor",
updateProcedure, isPortable, packageManagerManaged, this);
m_updater = new ZUpdater("uncor3/libtest", APP_VERSION, "iDescriptor",
updateProcedure, isPortable, packageManagerManaged,
skipPrerelease, this);
#if defined(PACKAGE_MANAGER_MANAGED) && defined(__linux__)
m_updater->setPackageManagerManagedMessage(
QString(