-
-
Save Siguza/0331c183c8c59e4850cd0b62fd501424 to your computer and use it in GitHub Desktop.
#!/usr/bin/env zsh | |
set -e; | |
set +m; # Job control would've been nice, but manual round robin it is, sigh. | |
if [ -z "${ZSH_VERSION+x}" ]; then | |
echo 'Try again with zsh.'; | |
exit 1; | |
fi; | |
if ! hash curl &>/dev/null; then | |
echo 'Need curl.'; | |
exit 1; | |
fi; | |
if ! hash jq &>/dev/null; then | |
echo 'Need jq.'; | |
exit 1; | |
fi; | |
num_workers=256; | |
debug=false; | |
incr=false; | |
fatal=true; | |
legacy=true; | |
test=false; | |
rsr=false; | |
version=''; | |
devices=(); | |
filter='all'; | |
while [ "$#" -gt 0 ]; do | |
case "$1" in | |
'-d') # debug | |
debug=true; | |
;; | |
'-i') # incremental | |
incr=true; | |
;; | |
'-l') # latest | |
legacy=false; | |
;; | |
'-n') # non-fatal | |
fatal=false; | |
;; | |
'-t') # test | |
test=true; | |
;; | |
'-r') # rsr | |
rsr=true; | |
;; | |
'ios'|'tvos'|'watchos'|'audioos'|'macos') | |
filter="$1"; | |
;; | |
[1-9]*) | |
version="$1"; | |
;; | |
*) | |
devices+=("$1"); | |
;; | |
esac; | |
shift; | |
done; | |
dir="$(mktemp -d)"; | |
echo "$dir" >&2; | |
# Apple Root CA is not universally trusted. | |
cat >"$dir/AppleCA.pem" <<'EOF' | |
-----BEGIN CERTIFICATE----- | |
MIIEuzCCA6OgAwIBAgIBAjANBgkqhkiG9w0BAQUFADBiMQswCQYDVQQGEwJVUzET | |
MBEGA1UEChMKQXBwbGUgSW5jLjEmMCQGA1UECxMdQXBwbGUgQ2VydGlmaWNhdGlv | |
biBBdXRob3JpdHkxFjAUBgNVBAMTDUFwcGxlIFJvb3QgQ0EwHhcNMDYwNDI1MjE0 | |
MDM2WhcNMzUwMjA5MjE0MDM2WjBiMQswCQYDVQQGEwJVUzETMBEGA1UEChMKQXBw | |
bGUgSW5jLjEmMCQGA1UECxMdQXBwbGUgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkx | |
FjAUBgNVBAMTDUFwcGxlIFJvb3QgQ0EwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAw | |
ggEKAoIBAQDkkakJH5HbHkdQ6wXtXnmELes2oldMVeyLGYne+Uts9QerIjAC6Bg+ | |
+FAJ039BqJj50cpmnCRrEdCju+QbKsMflZ56DKRHi1vUFjczy8QPTc4UadHJGXL1 | |
XQ7Vf1+b8iUDulWPTV0N8WQ1IxVLFVkds5T39pyez1C6wVhQZ48ItCD3y6wsIG9w | |
tj8BMIy3Q88PnT3zK0koGsj+zrW5DtleHNbLPbU6rfQPDgCSC7EhFi501TwN22IW | |
q6NxkkdTVcGvL0Gz+PvjcM3mo0xFfh9Ma1CWQYnEdGILEINBhzOKgbEwWOxaBDKM | |
aLOPHd5lc/9nXmW8Sdh2nzMUZaF3lMktAgMBAAGjggF6MIIBdjAOBgNVHQ8BAf8E | |
BAMCAQYwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUK9BpR5R2Cf70a40uQKb3 | |
R01/CF4wHwYDVR0jBBgwFoAUK9BpR5R2Cf70a40uQKb3R01/CF4wggERBgNVHSAE | |
ggEIMIIBBDCCAQAGCSqGSIb3Y2QFATCB8jAqBggrBgEFBQcCARYeaHR0cHM6Ly93 | |
d3cuYXBwbGUuY29tL2FwcGxlY2EvMIHDBggrBgEFBQcCAjCBthqBs1JlbGlhbmNl | |
IG9uIHRoaXMgY2VydGlmaWNhdGUgYnkgYW55IHBhcnR5IGFzc3VtZXMgYWNjZXB0 | |
YW5jZSBvZiB0aGUgdGhlbiBhcHBsaWNhYmxlIHN0YW5kYXJkIHRlcm1zIGFuZCBj | |
b25kaXRpb25zIG9mIHVzZSwgY2VydGlmaWNhdGUgcG9saWN5IGFuZCBjZXJ0aWZp | |
Y2F0aW9uIHByYWN0aWNlIHN0YXRlbWVudHMuMA0GCSqGSIb3DQEBBQUAA4IBAQBc | |
NplMLXi37Yyb3PN3m/J20ncwT8EfhYOFG5k9RzfyqZtAjizUsZAS2L70c5vu0mQP | |
y3lPNNiiPvl4/2vIB+x9OYOLUyDTOMSxv5pPCmv/K/xZpwUJfBdAVhEedNO3iyM7 | |
R6PVbyTi69G3cN8PReEnyvFteO3ntRcXqNx+IjXKJdXZD9Zr1KIkIxH3oayPc4Fg | |
xhtbCS+SsvhESPBgOJ4V9T0mZyCKM2r3DYLP3uujL/lTaltkwGMzd/c6ByxW69oP | |
IQ7aunMZT7XZNn/Bh1XZp5m5MkL72NVxnn6hUrcbvZNCJBIqxw8dtk2cXmPIS4AX | |
UKqK1drk/NAJBzewdXUh | |
-----END CERTIFICATE----- | |
EOF | |
# ---------- ---------- ---------- ---------- ---------- ---------- ---------- ---------- | |
iOS_device=(); | |
iOS_model=(); | |
iOS_version=(); | |
iOS_build=(); | |
display_device=(); | |
display_model=(); | |
idevice() # device model | |
{ | |
iOS_device+=("$1"); | |
iOS_model+=("$2"); | |
} | |
ios() # version build | |
{ | |
iOS_version+=("$1"); | |
iOS_build+=("$2"); | |
} | |
display() # device model | |
{ | |
display_device+=("$1"); | |
display_model+=("$2"); | |
} | |
if ! $rsr; then | |
idevice 'iPhone6,1' 'N51AP' # iPhone 5s | |
idevice 'iPhone6,2' 'N53AP' # iPhone 5s | |
idevice 'iPhone7,1' 'N56AP' # iPhone 6+ | |
idevice 'iPhone7,2' 'N61AP' # iPhone 6 | |
idevice 'iPhone8,1' 'N71AP' # iPhone 6s | |
idevice 'iPhone8,1' 'N71mAP' # iPhone 6s | |
idevice 'iPhone8,2' 'N66AP' # iPhone 6s+ | |
idevice 'iPhone8,2' 'N66mAP' # iPhone 6s+ | |
idevice 'iPhone8,4' 'N69AP' # iPhone SE | |
idevice 'iPhone8,4' 'N69uAP' # iPhone SE | |
idevice 'iPhone9,1' 'D10AP' # iPhone 7 | |
idevice 'iPhone9,2' 'D11AP' # iPhone 7+ | |
idevice 'iPhone9,3' 'D101AP' # iPhone 7 | |
idevice 'iPhone9,4' 'D111AP' # iPhone 7+ | |
fi; | |
idevice 'iPhone10,1' 'D20AP' # iPhone 8 | |
idevice 'iPhone10,1' 'D20AAP' # iPhone 8 | |
idevice 'iPhone10,2' 'D21AP' # iPhone 8+ | |
idevice 'iPhone10,2' 'D21AAP' # iPhone 8+ | |
idevice 'iPhone10,3' 'D22AP' # iPhone X | |
idevice 'iPhone10,4' 'D201AP' # iPhone 8 | |
idevice 'iPhone10,4' 'D201AAP' # iPhone 8 | |
idevice 'iPhone10,5' 'D211AP' # iPhone 8+ | |
idevice 'iPhone10,5' 'D211AAP' # iPhone 8+ | |
idevice 'iPhone10,6' 'D221AP' # iPhone X | |
idevice 'iPhone11,2' 'D321AP' # iPhone XS | |
idevice 'iPhone11,4' 'D331AP' # iPhone XS Max | |
idevice 'iPhone11,6' 'D331pAP' # iPhone XS Max | |
idevice 'iPhone11,8' 'N841AP' # iPhone XR | |
idevice 'iPhone12,1' 'N104AP' # iPhone 11 | |
idevice 'iPhone12,3' 'D421AP' # iPhone 11 Pro | |
idevice 'iPhone12,5' 'D431AP' # iPhone 11 Pro Max | |
idevice 'iPhone12,8' 'D79AP' # iPhone SE 2 | |
idevice 'iPhone13,1' 'D52gAP' # iPhone 12 mini | |
idevice 'iPhone13,2' 'D53gAP' # iPhone 12 | |
idevice 'iPhone13,3' 'D53pAP' # iPhone 12 Pro | |
idevice 'iPhone13,4' 'D54pAP' # iPhone 12 Pro Max | |
idevice 'iPhone14,2' 'D63AP' # iPhone 13 Pro | |
idevice 'iPhone14,3' 'D64AP' # iPhone 13 Pro Max | |
idevice 'iPhone14,4' 'D16AP' # iPhone 13 mini | |
idevice 'iPhone14,5' 'D17AP' # iPhone 13 | |
idevice 'iPhone14,6' 'D49AP' # iPhone SE 3 | |
idevice 'iPhone14,7' 'D27AP' # iPhone 14 | |
idevice 'iPhone14,8' 'D28AP' # iPhone 14 Plus | |
idevice 'iPhone15,2' 'D73AP' # iPhone 14 Pro | |
idevice 'iPhone15,3' 'D74AP' # iPhone 14 Pro Max | |
idevice 'iPhone15,4' 'D37AP' # iPhone 15 | |
idevice 'iPhone15,5' 'D38AP' # iPhone 15 Plus | |
idevice 'iPhone16,1' 'D83AP' # iPhone 15 Pro | |
idevice 'iPhone16,2' 'D84AP' # iPhone 15 Pro Max | |
if ! $rsr; then | |
idevice 'iPod7,1' 'N102AP' # iPod touch 6 | |
idevice 'iPod9,1' 'N112AP' # iPod touch 7 | |
fi; | |
idevice 'iPad6,11' 'J71sAP' # iPad 5 | |
idevice 'iPad6,11' 'J71tAP' # iPad 5 | |
idevice 'iPad6,12' 'J72sAP' # iPad 5 | |
idevice 'iPad6,12' 'J72tAP' # iPad 5 | |
idevice 'iPad7,5' 'J71bAP' # iPad 6 | |
idevice 'iPad7,6' 'J72bAP' # iPad 6 | |
idevice 'iPad7,11' 'J171AP' # iPad 7 | |
idevice 'iPad7,12' 'J172AP' # iPad 7 | |
idevice 'iPad11,6' 'J171aAP' # iPad 8 | |
idevice 'iPad11,7' 'J172aAP' # iPad 8 | |
idevice 'iPad12,1' 'J181AP' # iPad 9 | |
idevice 'iPad12,2' 'J182AP' # iPad 9 | |
idevice 'iPad13,18' 'J271AP' # iPad 10 | |
idevice 'iPad13,19' 'J272AP' # iPad 10 | |
if ! $rsr; then | |
idevice 'iPad4,1' 'J71AP' # iPad Air 1 | |
idevice 'iPad4,2' 'J72AP' # iPad Air 1 | |
idevice 'iPad4,3' 'J73AP' # iPad Air 1 | |
idevice 'iPad5,3' 'J81AP' # iPad Air 2 | |
idevice 'iPad5,4' 'J82AP' # iPad Air 2 | |
fi; | |
idevice 'iPad11,3' 'J217AP' # iPad Air 3 | |
idevice 'iPad11,4' 'J218AP' # iPad Air 3 | |
idevice 'iPad13,1' 'J307AP' # iPad Air 4 | |
idevice 'iPad13,2' 'J308AP' # iPad Air 4 | |
idevice 'iPad13,16' 'J407AP' # iPad Air 5 | |
idevice 'iPad13,17' 'J408AP' # iPad Air 5 | |
if ! $rsr; then | |
idevice 'iPad4,4' 'J85AP' # iPad mini 2 | |
idevice 'iPad4,5' 'J86AP' # iPad mini 2 | |
idevice 'iPad4,6' 'J87AP' # iPad mini 2 | |
idevice 'iPad4,7' 'J85mAP' # iPad mini 3 | |
idevice 'iPad4,8' 'J86mAP' # iPad mini 3 | |
idevice 'iPad4,9' 'J87mAP' # iPad mini 3 | |
idevice 'iPad5,1' 'J96AP' # iPad mini 4 | |
idevice 'iPad5,2' 'J97AP' # iPad mini 4 | |
fi; | |
idevice 'iPad11,1' 'J210AP' # iPad mini 5 | |
idevice 'iPad11,2' 'J211AP' # iPad mini 5 | |
idevice 'iPad14,1' 'J310AP' # iPad mini 6 | |
idevice 'iPad14,2' 'J311AP' # iPad mini 6 | |
idevice 'iPad6,3' 'J127AP' # iPad Pro 1 (9.7") | |
idevice 'iPad6,4' 'J128AP' # iPad Pro 1 (9.7") | |
idevice 'iPad6,7' 'J98aAP' # iPad Pro 1 (12.9") | |
idevice 'iPad6,8' 'J99aAP' # iPad Pro 1 (12.9") | |
idevice 'iPad7,1' 'J120AP' # iPad Pro 2 (12.9") | |
idevice 'iPad7,2' 'J121AP' # iPad Pro 2 (12.9") | |
idevice 'iPad7,3' 'J207AP' # iPad Pro 2 (10.5") | |
idevice 'iPad7,4' 'J208AP' # iPad Pro 2 (10.5") | |
idevice 'iPad8,1' 'J317AP' # iPad Pro 3 (11.0") | |
idevice 'iPad8,2' 'J317xAP' # iPad Pro 3 (11.0") | |
idevice 'iPad8,3' 'J318AP' # iPad Pro 3 (11.0") | |
idevice 'iPad8,4' 'J318xAP' # iPad Pro 3 (11.0") | |
idevice 'iPad8,5' 'J320AP' # iPad Pro 3 (12.9") | |
idevice 'iPad8,6' 'J320xAP' # iPad Pro 3 (12.9") | |
idevice 'iPad8,7' 'J321AP' # iPad Pro 3 (12.9") | |
idevice 'iPad8,8' 'J321xAP' # iPad Pro 3 (12.9") | |
idevice 'iPad8,9' 'J417AP' # iPad Pro 4 (11.0") | |
idevice 'iPad8,10' 'J418AP' # iPad Pro 4 (11.0") | |
idevice 'iPad8,11' 'J420AP' # iPad Pro 4 (12.9") | |
idevice 'iPad8,12' 'J421AP' # iPad Pro 4 (12.9") | |
idevice 'iPad13,4' 'J517AP' # iPad Pro 5 (11.0") | |
idevice 'iPad13,5' 'J517xAP' # iPad Pro 5 (11.0") | |
idevice 'iPad13,6' 'J518AP' # iPad Pro 5 (11.0") | |
idevice 'iPad13,7' 'J518xAP' # iPad Pro 5 (11.0") | |
idevice 'iPad13,8' 'J522AP' # iPad Pro 5 (12.9") | |
idevice 'iPad13,9' 'J522xAP' # iPad Pro 5 (12.9") | |
idevice 'iPad13,10' 'J523AP' # iPad Pro 5 (12.9") | |
idevice 'iPad13,11' 'J523xAP' # iPad Pro 5 (12.9") | |
idevice 'iPad14,3' 'J617AP' # iPad Pro 6 (11.0") | |
idevice 'iPad14,4' 'J618AP' # iPad Pro 6 (11.0") | |
idevice 'iPad14,5' 'J620AP' # iPad Pro 6 (12.9") | |
idevice 'iPad14,6' 'J621AP' # iPad Pro 6 (12.9") | |
# Bruh | |
display 'AppleDisplay2,1' 'J327AP' # Studio Display | |
if ! $rsr; then | |
ios '0' '0' | |
fi; | |
if $incr && ! $rsr; then | |
ios '10.0' '14A5261v' # beta 1 | |
ios '10.0' '14A5297c' # beta 2 | |
ios '10.0' '14A5309d' # beta 3 | |
ios '10.0' '14A5322e' # beta 4 | |
ios '10.0' '14A5335b' # beta 5 | |
ios '10.0' '14A5341a' # beta 6 | |
ios '10.0' '14A5345a' # beta 7 | |
ios '10.0' '14A5346a' # beta 8 | |
ios '10.0' '14A346' | |
ios '10.0.1' '14A403' | |
ios '10.0.2' '14A456' | |
ios '10.0.3' '14A551' | |
ios '10.1' '14B5072' | |
ios '10.1' '14B55c' # beta 1 | |
ios '10.1' '14B67' # beta 2 | |
ios '10.1' '14B71' # beta 3 | |
ios '10.1' '14B72b' # beta 4 | |
ios '10.1' '14B72c' # beta 5 | |
ios '10.1' '14B72' | |
ios '10.1.1' '14B100' | |
ios '10.1.1' '14B150' | |
ios '10.2' '14C5062e' # beta 1 | |
ios '10.2' '14C5069c' # beta 2 | |
ios '10.2' '14C5077b' # beta 3 | |
ios '10.2' '14C82' # beta 4 | |
ios '10.2' '14C89' # beta 5 | |
ios '10.2' '14C90' # beta 6 | |
ios '10.2' '14C91' # beta 6 | |
ios '10.2' '14C92' | |
ios '10.2.1' '14D10' # beta 1 | |
ios '10.2.1' '14D15' # beta 2 | |
ios '10.2.1' '14D23' # beta 3 | |
ios '10.2.1' '14D27' | |
ios '10.3' '14E5230e' # beta 1 | |
ios '10.3' '14E5239e' # beta 2 | |
ios '10.3' '14E5249d' # beta 3 | |
ios '10.3' '14E5260b' # beta 4 | |
ios '10.3' '14E5269a' # beta 5 | |
ios '10.3' '14E5273a' # beta 6 | |
ios '10.3' '14E5277a' # beta 7 | |
ios '10.3' '14E277' | |
ios '10.3.1' '14E304' | |
ios '10.3.2' '14F5065b' # beta 1 | |
ios '10.3.2' '14F5075a' # beta 2 | |
ios '10.3.2' '14F5080a' # beta 3 | |
ios '10.3.2' '14F5086a' # beta 4 | |
ios '10.3.2' '14F5089a' # beta 5 | |
ios '10.3.2' '14F89' | |
ios '10.3.2' '14F90' | |
ios '10.3.2' '14F91' | |
ios '10.3.2' '14F8089' | |
ios '10.3.3' '14G5028a' # beta 1 | |
ios '10.3.3' '14G5037b' # beta 2 | |
ios '10.3.3' '14G5047a' # beta 3 | |
ios '10.3.3' '14G5053a' # beta 4 | |
ios '10.3.3' '14G5057a' # beta 5 | |
ios '10.3.3' '14G57' # beta 6 | |
ios '10.3.3' '14G58' # beta 6 | |
ios '10.3.3' '14G60' | |
ios '10.3.3' '14G61' | |
ios '11.0' '15A5278f' # beta 1 | |
ios '11.0' '15A5304i' # beta 2 | |
ios '11.0' '15A5304j' # beta 2 | |
ios '11.0' '15A5318g' # beta 3 | |
ios '11.0' '15A5327g' # beta 4 | |
ios '11.0' '15A5341f' # beta 5 | |
ios '11.0' '15A5354b' # beta 6 | |
ios '11.0' '15A5362a' # beta 7 | |
ios '11.0' '15A5368a' # beta 8 | |
ios '11.0' '15A5370a' # beta 9 | |
ios '11.0' '15A5372a' # beta 10 | |
ios '11.0' '15A372' | |
ios '11.0.1' '15A402' | |
ios '11.0.1' '15A403' | |
ios '11.0.2' '15A421' | |
ios '11.0.3' '15A432' | |
ios '11.1' '15B5066f' # beta 1 | |
ios '11.1' '15B5078e' # beta 2 | |
ios '11.1' '15B5086a' # beta 3 | |
ios '11.1' '15B92' # beta 4 | |
ios '11.1' '15B93' | |
ios '11.1' '15B101' | |
ios '11.1.1' '15B150' | |
ios '11.1.2' '15B202' | |
ios '11.2' '15C5092b' # beta 1 | |
ios '11.2' '15C5097d' # beta 2 | |
ios '11.2' '15C5107a' # beta 3 | |
ios '11.2' '15C5110b' # beta 4 | |
ios '11.2' '15C5111a' # beta 5 | |
ios '11.2' '15C114' | |
ios '11.2.1' '15C153' | |
ios '11.2.2' '15C202' | |
ios '11.2.5' '15D5037e' # beta 1 | |
ios '11.2.5' '15D5046b' # beta 2 | |
ios '11.2.5' '15D5049a' # beta 3 | |
ios '11.2.5' '15D5054a' # beta 4 | |
ios '11.2.5' '15D5057a' # beta 5 | |
ios '11.2.5' '15D5059a' # beta 6 | |
ios '11.2.5' '15D60' | |
ios '11.2.6' '15D100' | |
ios '11.3' '15E5167f' # beta 1 | |
ios '11.3' '15E5178f' # beta 2 | |
ios '11.3' '15E5189f' # beta 3 | |
ios '11.3' '15E5201e' # beta 4 | |
ios '11.3' '15E5211a' # beta 5 | |
ios '11.3' '15E5216a' # beta 6 | |
ios '11.3' '15E216' | |
ios '11.3' '15E218' | |
ios '11.3.1' '15E302' | |
ios '11.4' '15F5037c' # beta 1 | |
ios '11.4' '15F5049c' # beta 2 | |
ios '11.4' '15F5061d' # beta 3 | |
ios '11.4' '15F5061e' # beta 3 | |
ios '11.4' '15F5071a' # beta 4 | |
ios '11.4' '15F5077a' # beta 5 | |
ios '11.4' '15F5079a' # beta 6 | |
ios '11.4' '15F79' | |
ios '11.4.1' '15G5054c' # beta 1 | |
ios '11.4.1' '15G5063b' # beta 2 | |
ios '11.4.1' '15G5072a' # beta 3 | |
ios '11.4.1' '15G5074a' # beta 4 | |
ios '11.4.1' '15G5077a' # beta 5 | |
ios '11.4.1' '15G77' | |
ios '12.0' '16A5288q' # beta 1 | |
ios '12.0' '16A5308e' # beta 2 | |
ios '12.0' '16A5318d' # beta 3 | |
ios '12.0' '16A5327f' # beta 4 | |
ios '12.0' '16A5339e' # beta 5 | |
ios '12.0' '16A5345f' # beta 6 | |
ios '12.0' '16A5354b' # beta 7 | |
ios '12.0' '16A5357b' # beta 8 | |
ios '12.0' '16A5362a' # beta 9 | |
ios '12.0' '16A5364a' # beta 10 | |
ios '12.0' '16A5365b' # beta 11 | |
ios '12.0' '16A5366a' # beta 12 | |
ios '12.0' '16A366' | |
ios '12.0' '16A367' # preinstalled | |
ios '12.0.1' '16A404' | |
ios '12.0.1' '16A405' | |
ios '12.1' '16B5059d' # beta 1 | |
ios '12.1' '16B5068i' # beta 2 | |
ios '12.1' '16B5077c' # beta 3 | |
ios '12.1' '16B5084a' # beta 4 | |
ios '12.1' '16B5089b' # beta 5 | |
ios '12.1' '16B92' | |
ios '12.1' '16B93' | |
ios '12.1' '16B94' | |
ios '12.1.1' '16C5036c' # beta 1 | |
ios '12.1.1' '16C5043b' # beta 2 | |
ios '12.1.1' '16C5050a' # beta 3 | |
ios '12.1.1' '16C50' | |
ios '12.1.2' '16D5024a' # beta 1 | |
ios '12.1.2' '16C101' | |
ios '12.1.2' '16C104' | |
ios '12.1.3' '16D5032a' # beta 2 | |
ios '12.1.3' '16D5037a' # beta 3 | |
ios '12.1.3' '16D5039a' # beta 4 | |
ios '12.1.3' '16D39' | |
ios '12.1.3' '16D40' | |
ios '12.1.4' '16D57' | |
ios '12.2' '16E5181f' # beta 1 | |
ios '12.2' '16E5191d' # beta 2 | |
ios '12.2' '16E5201e' # beta 3 | |
ios '12.2' '16E5212f' # beta 4 | |
ios '12.2' '16E5223a' # beta 5 | |
ios '12.2' '16E5227a' # beta 6 | |
ios '12.2' '16E227' | |
ios '12.3' '16F5117h' # beta 1 | |
ios '12.3' '16F5129d' # beta 2 | |
ios '12.3' '16F5139e' # beta 3 | |
ios '12.3' '16F5148a' # beta 4 | |
ios '12.3' '16F5155a' # beta 5 | |
ios '12.3' '16F5156a' # beta 6 | |
ios '12.3' '16F156' | |
ios '12.3.1' '16F203' | |
ios '12.3.1' '16F8202' | |
ios '12.3.2' '16F250' | |
ios '12.4' '16G5027g' # beta 1 | |
ios '12.4' '16G5027i' # beta 2 | |
ios '12.4' '16G5038d' # beta 3 | |
ios '12.4' '16G5046d' # beta 4 | |
ios '12.4' '16G5056d' # beta 5 | |
ios '12.4' '16G5069a' # beta 6 | |
ios '12.4' '16G5077a' # beta 7 | |
ios '12.4' '16G77' | |
ios '12.4.1' '16G102' | |
ios '12.4.2' '16G114' | |
ios '12.4.3' '16G130' | |
ios '12.4.4' '16G140' | |
ios '12.4.5' '16G161' | |
ios '12.4.6' '16G183' | |
ios '12.4.7' '16G192' | |
ios '12.4.8' '16G201' | |
ios '12.4.9' '16H5' | |
ios '12.5' '16H20' | |
ios '12.5.1' '16H22' | |
ios '12.5.2' '16H30' | |
ios '12.5.3' '16H41' | |
ios '12.5.4' '16H50' | |
ios '12.5.5' '16H62' | |
ios '12.5.6' '16H71' | |
ios '12.5.7' '16H81' | |
ios '13.0' '17A5492t' # beta 1 | |
ios '13.0' '17A5508m' # beta 2 | |
ios '13.0' '17A5522f' # beta 3 | |
ios '13.0' '17A5522g' # beta 3 | |
ios '13.0' '17A5534f' # beta 4 | |
ios '13.0' '17A5547d' # beta 5 | |
ios '13.0' '17A5556d' # beta 6 | |
ios '13.0' '17A5565b' # beta 7 | |
ios '13.0' '17A5572a' # beta 8 | |
ios '13.0' '17A577' | |
ios '13.1' '17A5821e' # beta 1 | |
ios '13.1' '17A5831c' # beta 2 | |
ios '13.1' '17A5837a' # beta 3 | |
ios '13.1' '17A5844a' # beta 4 | |
ios '13.1' '17A5844b' # beta 4 | |
ios '13.1' '17A844' | |
ios '13.1.1' '17A854' | |
ios '13.1.2' '17A860' | |
ios '13.1.2' '17A861' | |
ios '13.1.3' '17A878' | |
ios '13.2' '17B5059g' | |
ios '13.2' '17B5068e' | |
ios '13.2' '17B5077a' | |
ios '13.2' '17B5084a' | |
ios '13.2' '17B84' | |
ios '13.2.2' '17B102' | |
ios '13.2.3' '17B111' | |
ios '13.3' '17C5032d' # beta 1 | |
ios '13.3' '17C5038a' # beta 2 | |
ios '13.3' '17C5046a' # beta 3 | |
ios '13.3' '17C5053a' # beta 4 | |
ios '13.3' '17C54' | |
ios '13.3.1' '17D5026c' # beta 1 | |
ios '13.3.1' '17D5044a' # beta 2 | |
ios '13.3.1' '17D5050a' # beta 3 | |
ios '13.3.1' '17D50' | |
ios '13.4' '17E5223h' # beta 1 | |
ios '13.4' '17E5233g' # beta 2 | |
ios '13.4' '17E5241d' # beta 3 | |
ios '13.4' '17E5249a' # beta 4 | |
ios '13.4' '17E5255a' # beta 5 | |
ios '13.4' '17E255' | |
ios '13.4' '17E8255' # preinstalled | |
ios '13.4.1' '17E262' | |
ios '13.4.1' '17E8258' | |
ios '13.4.5' '17F5034c' # beta 1 | |
ios '13.4.5' '17F5044d' # beta 2 | |
ios '13.5' '17F5054h' # beta 3 | |
ios '13.5' '17F5065a' # beta 4 | |
ios '13.5' '17F75' | |
ios '13.5.1' '17F80' | |
ios '13.5.5' '17G5035d' # beta 1 | |
ios '13.6' '17G5045c' # beta 2 | |
ios '13.6' '17G5059c' # beta 3 | |
ios '13.6' '17G68' | |
ios '13.6.1' '17G80' | |
ios '13.7' '17H33' # beta 1 | |
ios '13.7' '17H35' | |
ios '14.0' '18A5301v' # beta 1 | |
ios '14.0' '18A5319i' # beta 2 | |
ios '14.0' '18A5332f' # beta 3 | |
ios '14.0' '18A5342e' # beta 4 | |
ios '14.0' '18A5351d' # beta 5 | |
ios '14.0' '18A5357e' # beta 6 | |
ios '14.0' '18A5369b' # beta 7 | |
ios '14.0' '18A5373a' # beta 8 | |
ios '14.0' '18A373' | |
ios '14.0.1' '18A393' | |
ios '14.1' '18A8395' | |
ios '14.2' '18B5052h' # beta 1 | |
ios '14.2' '18B5052i' # still beta 1, but more extra | |
ios '14.2' '18B5061e' # beta 2 | |
ios '14.2' '18B5072f' # beta 3 | |
ios '14.2' '18B5083a' # beta 4 | |
ios '14.2' '18B91' # RC 1 | |
ios '14.2' '18B92' | |
ios '14.2' '18B111' | |
ios '14.2.1' '18B121' | |
ios '14.3' '18C5044f' # beta 1 | |
ios '14.3' '18C5054c' # beta 2 | |
ios '14.3' '18C5061a' # beta 3 | |
ios '14.3' '18C65' # RC 1 | |
ios '14.3' '18C66' | |
ios '14.4' '18D5030e' # beta 1 | |
ios '14.4' '18D5043d' # beta 2 | |
ios '14.4' '18D52' | |
ios '14.4.1' '18D61' | |
ios '14.4.2' '18D70' | |
ios '14.5' '18E5140j' # beta 1 | |
ios '14.5' '18E5140k' # beta 1 again | |
ios '14.5' '18E5154f' # beta 2 | |
ios '14.5' '18E5164h' # beta 3 | |
ios '14.5' '18E5178a' # beta 4 | |
ios '14.5' '18E5186a' # beta 5 | |
ios '14.5' '18E5194a' # beta 6 | |
ios '14.5' '18E5198a' # beta 7 | |
ios '14.5' '18E5199a' # beta 8 | |
ios '14.5' '18E199' | |
ios '14.5.1' '18E212' | |
ios '14.6' '18F5046e' # beta 1 | |
ios '14.6' '18F5046f' # beta 1 | |
ios '14.6' '18F5055b' # beta 2 | |
ios '14.6' '18F5065a' # beta 3 | |
ios '14.6' '18F71' # RC 1 | |
ios '14.6' '18F72' | |
ios '14.7' '18G5023c' # beta 1 | |
ios '14.7' '18G5033e' # beta 2 | |
ios '14.7' '18G5023c' # beta 1 | |
ios '14.7' '18G5033e' # beta 2 | |
ios '14.7' '18G5042c' # beta 3 | |
ios '14.7' '18G5052d' # beta 4 | |
ios '14.7' '18G5063a' # beta 5 | |
ios '14.7' '18G68' # RC 1 | |
ios '14.7' '18G69' | |
ios '14.7' '18G70' | |
ios '14.7.1' '18G82' | |
ios '14.8' '18H17' | |
ios '14.8.1' '18H107' | |
ios '15.0' '19A5261w' # beta 1 | |
ios '15.0' '19A5281h' # beta 2 | |
ios '15.0' '19A5281j' # beta 2 | |
ios '15.0' '19A5297e' # beta 3 | |
ios '15.0' '19A5307g' # beta 4 | |
ios '15.0' '19A5318f' # beta 5 | |
ios '15.0' '19A5325f' # beta 6 | |
ios '15.0' '19A5337a' # beta 7 | |
ios '15.0' '19A5340a' # beta 8 | |
ios '15.0' '19A344' # RC 1 | |
ios '15.0' '19A341' # preinstalled | |
ios '15.0' '19A345' # preinstalled | |
ios '15.0' '19A346' | |
ios '15.0.1' '19A348' | |
ios '15.0.2' '19A404' | |
ios '15.1' '19B5042h' # beta 1 | |
ios '15.1' '19B5052f' # beta 2 | |
ios '15.1' '19B5060d' # beta 3 | |
ios '15.1' '19B5068a' # beta 4 | |
ios '15.1' '19B74' | |
ios '15.1' '19B75' | |
ios '15.1' '19B81' | |
ios '15.2' '19C5026i' # beta 1 | |
ios '15.2' '19C5036e' # beta 2 | |
ios '15.2' '19C5044b' # beta 3 | |
ios '15.2' '19C5050b' # beta 4 | |
ios '15.2' '19C56' | |
ios '15.2' '19C57' | |
ios '15.2.1' '19C63' | |
ios '15.3' '19D5026g' # beta 1 | |
ios '15.3' '19D5040e' # beta 2 | |
ios '15.3' '19D49' # RC 1 | |
ios '15.3' '19D50' | |
ios '15.3' '19D8050' # Studio Display preinstalled | |
ios '15.3.1' '19D52' | |
ios '15.4' '19E5209h' # beta 1 | |
ios '15.4' '19E5219e' # beta 2 | |
ios '15.4' '19E5225g' # beta 3 | |
ios '15.4' '19E5235a' # beta 4 | |
ios '15.4' '19E5241a' # beta 5 | |
ios '15.4' '19E241' | |
ios '15.4.1' '19E258' | |
ios '15.5' '19F5047e' # beta 1 | |
ios '15.5' '19F5057e' # beta 2 | |
ios '15.5' '19F5062g' # beta 3 | |
ios '15.5' '19F5070b' # beta 4 | |
ios '15.5' '19F77' | |
ios '15.5' '19F80' # Studio Display only | |
ios '15.6' '19G5027e' # beta 1 | |
ios '15.6' '19G5037d' # beta 2 | |
ios '15.6' '19G5046d' # beta 3 | |
ios '15.6' '19G5056c' # beta 4 | |
ios '15.6' '19G5063a' # beta 5 | |
ios '15.6' '19G69' # RC 1 | |
ios '15.6' '19G71' | |
ios '15.6.1' '19G82' | |
ios '15.7' '19H12' | |
ios '15.7.1' '19H115' # RC 1 | |
ios '15.7.1' '19H117' | |
ios '15.7.2' '19H218' | |
ios '15.7.3' '19H307' | |
ios '15.7.4' '19H321' | |
ios '15.7.5' '19H332' | |
ios '15.7.6' '19H349' | |
ios '15.7.7' '19H357' | |
ios '15.7.8' '19H364' | |
ios '15.7.9' '19H365' | |
ios '15.8' '19H370' | |
fi; | |
if $incr || $rsr; then | |
ios '16.0' '20A5283p' # beta 1 | |
ios '16.0' '20A5303i' # beta 2 | |
ios '16.0' '20A5312g' # beta 3 | |
ios '16.0' '20A5312j' # beta 3 update | |
ios '16.0' '20A5328h' # beta 4 | |
ios '16.0' '20A5339d' # beta 5 | |
ios '16.0' '20A5349b' # beta 6 | |
ios '16.0' '20A5356a' # beta 7 | |
ios '16.0' '20A5358a' # beta 8 | |
ios '16.0' '20A357' # preinstalled | |
ios '16.0' '20A362' | |
ios '16.0' '20A8372' # preinstalled iPadOS | |
ios '16.0.1' '20A371' | |
ios '16.0.2' '20A380' | |
ios '16.0.3' '20A392' | |
ios '16.1' '20B5027f' # cursed iPadOS | |
ios '16.1' '20B5045d' # beta 1 | |
ios '16.1' '20B5050f' # beta 2 | |
ios '16.1' '20B5056e' # beta 3 | |
ios '16.1' '20B5064c' # beta 4 | |
ios '16.1' '20B5072b' # beta 5 | |
ios '16.1' '20B79' # RC 1 | |
ios '16.1' '20B82' | |
ios '16.1.1' '20B101' | |
ios '16.1.2' '20B110' | |
ios '16.2' '20C5032e' # beta 1 | |
ios '16.2' '20C5043e' # beta 2 | |
ios '16.2' '20C5049e' # beta 3 | |
ios '16.2' '20C5058d' # beta 4 | |
ios '16.2' '20C65' | |
ios '16.3' '20D5024e' # beta 1 | |
ios '16.3' '20D5035i' # beta 2 | |
ios '16.3' '20D47' | |
ios '16.3.1' '20D67' | |
ios '16.4' '20E5212f' # beta 1 | |
ios '16.4' '20E5223e' # beta 2 | |
ios '16.4' '20E5229e' # beta 3 | |
ios '16.4' '20E5239b' # beta 4 | |
ios '16.4' '20E246' # RC 1 | |
ios '16.4' '20E247' | |
ios '16.4.1' '20E252' | |
ios '16.5' '20F5028e' # beta 1 | |
ios '16.5' '20F5039e' # beta 2 | |
ios '16.5' '20F5050f' # beta 3 | |
ios '16.5' '20F5059a' # beta 4 | |
ios '16.5' '20F65' # RC 1 | |
ios '16.5' '20F66' | |
ios '16.5.1' '20F75' | |
ios '16.6' '20G5026e' # beta 1 | |
ios '16.6' '20G5037d' # beta 2 | |
ios '16.6' '20G5047d' # beta 3 | |
ios '16.6' '20G5058d' # beta 4 | |
ios '16.6' '20G5070a' # beta 5 | |
ios '16.6' '20G75' | |
ios '16.6.1' '20G81' | |
ios '16.7' '20H18' # RC 1 | |
ios '16.7' '20H19' | |
ios '16.7.1' '20H30' | |
ios '16.7.2' '20H115' | |
ios '16.7.3' '20H232' | |
ios '16.7.4' '20H240' | |
ios '17.0' '21A5248v' # beta 1 | |
ios '17.0' '21A5268h' # beta 2 | |
ios '17.0' '21A5277h' # beta 3 | |
ios '17.0' '21A5277j' # beta 3 update | |
ios '17.0' '21A5291h' # beta 4 | |
ios '17.0' '21A5291j' # beta 4 update | |
ios '17.0' '21A5303d' # beta 5 | |
ios '17.0' '21A5312c' # beta 6 | |
ios '17.0' '21A5319a' # beta 7 | |
ios '17.0' '21A5326a' # beta 8 | |
ios '17.0' '21A326' # preinstalled | |
ios '17.0' '21A327' # preinstalled | |
ios '17.0' '21A329' | |
ios '17.0' '21A331' | |
ios '17.0.1' '21A340' | |
ios '17.0.2' '21A350' | |
ios '17.0.2' '21A351' | |
ios '17.0.3' '21A360' | |
ios '17.1' '21B5045h' # beta 1 | |
ios '17.1' '21B5056e' # beta 2 | |
ios '17.1' '21B5066a' # beta 3 | |
ios '17.1' '21B74' | |
ios '17.1' '21B77' # RC 1 | |
ios '17.1' '21B80' | |
ios '17.1.1' '21B91' | |
ios '17.1.2' '21B101' | |
ios '17.2' '21C5029g' # beta 1 | |
ios '17.2' '21C5040g' # beta 2 | |
ios '17.2' '21C5046c' # beta 3 | |
ios '17.2' '21C5054b' # beta 4 | |
ios '17.2' '21C62' | |
ios '17.2.1' '21C66' | |
ios '17.3' '21D5026f' # beta 1 | |
ios '17.3' '21D5036c' # beta 2 | |
ios '17.3' '21D5044a' # beta 3 | |
fi; | |
# ---------- ---------- ---------- ---------- ---------- ---------- ---------- ---------- | |
tvOS_device=(); | |
tvOS_model=(); | |
tvOS_version=(); | |
tvOS_build=(); | |
atv() # device model | |
{ | |
tvOS_device+=("$1"); | |
tvOS_model+=("$2"); | |
} | |
tvos() # version build | |
{ | |
tvOS_version+=("$1"); | |
tvOS_build+=("$2"); | |
} | |
atv 'AppleTV5,3' 'J42dAP' # AppleTV 4 | |
atv 'AppleTV6,2' 'J105aAP' # AppleTV 4k | |
atv 'AppleTV11,1' 'J305AP' # AppleTV 4k 2 | |
atv 'AppleTV14,1' 'J255AP' # AppleTV 4k 3 | |
tvos '0' '0' | |
if $incr; then | |
tvos '11.0' '15J5284e' # beta 1 | |
tvos '11.0' '15J5284g' # beta 1 reloaded | |
tvos '11.0' '15J5310e' # beta 2 | |
tvos '11.0' '15J5310h' # beta 2 reloaded | |
tvos '11.0' '15J5324f' # beta 3 | |
tvos '11.0' '15J5333f' # beta 4 | |
tvos '11.0' '15J5347f' # beta 5 | |
tvos '11.0' '15J5360b' # beta 6 | |
tvos '11.0' '15J5369a' # beta 7 | |
tvos '11.0' '15J5374a' # beta 8 | |
tvos '11.0' '15J5378a' # beta 9 | |
tvos '11.0' '15J5380a' # beta 10 | |
tvos '11.0' '15J381' # GM | |
tvos '11.0' '15J6381' | |
tvos '11.1' '15J5559d' # beta 1 | |
tvos '11.1' '15J5571d' # beta 2 | |
tvos '11.1' '15J5580a' # beta 3 | |
tvos '11.1' '15J5582a' # beta 4 | |
tvos '11.1' '15J582' | |
tvos '11.1' '15J6582' | |
tvos '11.2' '15K5085b' # beta 1 | |
tvos '11.2' '15K5090c' # beta 2 | |
tvos '11.2' '15K5099a' # beta 3 | |
tvos '11.2' '15K5102a' # beta 4 | |
tvos '11.2' '15K5105a' # beta 5 | |
tvos '11.2' '15K106' | |
tvos '11.2' '15K6106' | |
tvos '11.2.1' '15K152' | |
tvos '11.2.1' '15K6152' | |
tvos '11.2.5' '15K5531d' # beta 1 | |
tvos '11.2.5' '15K5539b' # beta 2 | |
tvos '11.2.5' '15K5544a' # beta 3 | |
tvos '11.2.5' '15K5544b' # beta 4 | |
tvos '11.2.5' '15K5549a' # beta 5 | |
tvos '11.2.5' '15K5552a' # beta 6 | |
tvos '11.2.5' '15K552' | |
tvos '11.2.5' '15K6552' | |
tvos '11.2.6' '15K600' | |
tvos '11.2.6' '15K6600' | |
tvos '11.3' '15L5164e' # beta 1 | |
tvos '11.3' '15L5175d' # beta 2 | |
tvos '11.3' '15L5186e' # beta 3 | |
tvos '11.3' '15L5198d' # beta 4 | |
tvos '11.3' '15L5208a' # beta 5 | |
tvos '11.3' '15L5211b' # beta 6 | |
tvos '11.3' '15L211' | |
tvos '11.3' '15L6211' | |
tvos '11.4' '15L5536c' # beta 1 | |
tvos '11.4' '15L5546a' # beta 2 | |
tvos '11.4' '15L5560b' # beta 3 | |
tvos '11.4' '15L5570a' # beta 4 | |
tvos '11.4' '15L5576a' # beta 5 | |
tvos '11.4' '15L577' | |
tvos '11.4' '15L6577' | |
tvos '11.4.1' '15M5054b' # beta 1 | |
tvos '11.4.1' '15M5063a' # beta 2 | |
tvos '11.4.1' '15M5071b' # beta 3 | |
tvos '11.4.1' '15M5072a' # beta 4 | |
tvos '11.4.1' '15M6073' | |
tvos '11.4.1' '15M73' | |
tvos '12.0' '16J5283n' # beta 1 | |
tvos '12.0' '16J5303e' # beta 2 | |
tvos '12.0' '16J5313d' # beta 3 | |
tvos '12.0' '16J5322d' # beta 4 | |
tvos '12.0' '16J5334e' # beta 5 | |
tvos '12.0' '16J5340e' # beta 6 | |
tvos '12.0' '16J5349a' # beta 7 | |
tvos '12.0' '16J5355a' # beta 8 | |
tvos '12.0' '16J5360a' # beta 9 | |
tvos '12.0' '16J5364a' # beta 10 | |
tvos '12.0' '16J364' # GM | |
tvos '12.0' '16J6364' | |
tvos '12.0.1' '16J380' | |
tvos '12.0.1' '16J6380' | |
tvos '12.1' '16J5575c' # beta 1 | |
tvos '12.1' '16J5584c' # beta 2 | |
tvos '12.1' '16J5593c' # beta 3 | |
tvos '12.1' '16J5600a' # beta 4 | |
tvos '12.1' '16J5602a' # beta 5 | |
tvos '12.1' '16J602' | |
tvos '12.1' '16J6602' | |
tvos '12.1.1' '16K5035b' # beta 1 | |
tvos '12.1.1' '16K5041a' # beta 2 | |
tvos '12.1.1' '16K5044a' # beta 3 | |
tvos '12.1.1' '16K5045a' # beta 4 | |
tvos '12.1.1' '16K45' | |
tvos '12.1.1' '16K6045' | |
tvos '12.1.2' '16K5524a' # beta 1 | |
tvos '12.1.2' '16K5532a' # beta 2 | |
tvos '12.1.2' '16K5534a' # beta 3 | |
tvos '12.1.2' '16K534' | |
tvos '12.1.2' '16K6534' | |
tvos '12.2' '16L5181f' # beta 1 | |
tvos '12.2' '16L5191d' # beta 2 | |
tvos '12.2' '16L5201d' # beta 3 | |
tvos '12.2' '16L5212e' # beta 4 | |
tvos '12.2' '16L5221a' # beta 5 | |
tvos '12.2' '16L5226a' # beta 6 | |
tvos '12.2' '16L226' | |
tvos '12.2' '16L6226' | |
tvos '12.2.1' '16L250' | |
tvos '12.2.1' '16L6250' | |
tvos '12.3' '16M5117f' # beta 1 | |
tvos '12.3' '16M5129d' # beta 2 | |
tvos '12.3' '16M5139a' # beta 3 | |
tvos '12.3' '16M5146a' # beta 4 | |
tvos '12.3' '16M5151a' # beta 5 | |
tvos '12.3' '16M153' | |
tvos '12.3' '16M6153' | |
tvos '12.4' '16M5526d' # beta 1 | |
tvos '12.4' '16M5537c' # beta 2 | |
tvos '12.4' '16M5545c' # beta 3 | |
tvos '12.4' '16M568' | |
tvos '12.4' '16M6568' | |
tvos '12.4.1' '16M600' | |
tvos '12.4.1' '16M6600' | |
tvos '13.0' '17J5485s' # beta 1 | |
tvos '13.0' '17J5501l' # beta 2 | |
tvos '13.0' '17J5515e' # beta 3 | |
tvos '13.0' '17J5526e' # beta 4 | |
tvos '13.0' '17J5540d' # beta 5 | |
tvos '13.0' '17J5549c' # beta 6 | |
tvos '13.0' '17J5557a' # beta 7 | |
tvos '13.0' '17J5564c' # beta 8 | |
tvos '13.0' '17J5573a' # beta 9 | |
tvos '13.0' '17J5579a' # beta 10 | |
tvos '13.0' '17J5584a' # beta 11 | |
tvos '13.0' '17J586' # GM | |
tvos '13.0' '17J6586' | |
tvos '13.2' '17K5059d' # beta 1 | |
tvos '13.2' '17K5068b' # beta 2 | |
tvos '13.2' '17K5078a' # beta 3 | |
tvos '13.2' '17K5082a' # beta 4 | |
tvos '13.2' '17K82' | |
tvos '13.2' '17K6082' | |
tvos '13.3' '17K5433c' # beta 1 | |
tvos '13.3' '17K5440a' # beta 2 | |
tvos '13.3' '17K5445a' # beta 3 | |
tvos '13.3' '17K5449a' # beta 4 | |
tvos '13.3' '17K449' | |
tvos '13.3' '17K6449' | |
tvos '13.3.1' '17K5775c' # beta 1 | |
tvos '13.3.1' '17K5792a' # beta 2 | |
tvos '13.3.1' '17K5795a' # beta 3 | |
tvos '13.3.1' '17K795' | |
tvos '13.3.1' '17K6795' | |
tvos '13.4' '17L5225g' # beta 1 | |
tvos '13.4' '17L5235e' # beta 2 | |
tvos '13.4' '17L5245b' # beta 3 | |
tvos '13.4' '17L5251a' # beta 4 | |
tvos '13.4' '17L5255a' # beta 5 | |
tvos '13.4' '17L256' | |
tvos '13.4' '17L6256' | |
tvos '13.4.5' '17L5533c' # beta 1 | |
tvos '13.4.5' '17L5543d' # beta 2 | |
tvos '13.4.5' '17L5553c' # beta 3 | |
tvos '13.4.5' '17L5560a' # beta 4 | |
tvos '13.4.5' '17L562' | |
tvos '13.4.5' '17L6562' | |
tvos '13.4.6' '17L570' | |
tvos '13.4.6' '17L6570' | |
tvos '13.4.8' '17M5535f' # beta 1 | |
tvos '13.4.8' '17M5545a' # beta 2 | |
tvos '13.4.8' '17M5558b' # beta 3 | |
tvos '13.4.8' '17M61' | |
tvos '13.4.8' '17M6061' | |
tvos '14.0' '18J5313t' # beta 1 | |
tvos '14.0' '18J5331g' # beta 2 | |
tvos '14.0' '18J5344d' # beta 3 | |
tvos '14.0' '18J5354d' # beta 4 | |
tvos '14.0' '18J5364d' # beta 5 | |
tvos '14.0' '18J5370e' # beta 6 | |
tvos '14.0' '18J5379a' # beta 7 | |
tvos '14.0' '18J5385a' # beta 8 | |
tvos '14.0' '18J386' | |
tvos '14.0.1' '18J400' | |
tvos '14.0.2' '18J411' | |
tvos '14.2' '18K5027e' # beta 1 | |
tvos '14.2' '18K5036d' # beta 2 | |
tvos '14.2' '18K5047f' # beta 3 | |
tvos '14.2' '18K5057a' # beta 4 | |
tvos '14.2' '18K57' | |
tvos '14.3' '18K5545e' # beta 1 | |
tvos '14.3' '18K5556a' # beta 2 | |
tvos '14.3' '18K5559a' # beta 3 | |
tvos '14.3' '18K561' | |
tvos '14.4' '18K5780c' # beta 1 | |
tvos '14.4' '18K5793d' # beta 2 | |
tvos '14.4' '18K802' | |
tvos '14.5' '18L5149j' # beta 1 | |
tvos '14.5' '18L5163d' # beta 2 | |
tvos '14.5' '18L5173f' # beta 3 | |
tvos '14.5' '18L5186a' # beta 4 | |
tvos '14.5' '18L5193a' # beta 5 | |
tvos '14.5' '18L5200a' # beta 6 | |
tvos '14.5' '18L5203a' # beta 7 | |
tvos '14.5' '18L204' | |
tvos '14.6' '18L5546f' # beta 1 | |
tvos '14.6' '18L5555c' # beta 2 | |
tvos '14.6' '18L5565a' # beta 3 | |
tvos '14.6' '18L569' | |
tvos '14.7' '18M5523d' # beta 1 | |
tvos '14.7' '18M5533c' # beta 2 | |
tvos '14.7' '18M5542c' # beta 3 | |
tvos '14.7' '18M5552d' # beta 4 | |
tvos '14.7' '18M5559a' # beta 5 | |
tvos '14.7' '18M60' | |
tvos '15.0' '19J5268r' # beta 1 | |
tvos '15.0' '19J5288e' # beta 2 | |
tvos '15.0' '19J5304d' # beta 3 | |
tvos '15.0' '19J5314e' # beta 4 | |
tvos '15.0' '19J5325f' # beta 5 | |
tvos '15.0' '19J5332e' # beta 6 | |
tvos '15.0' '19J5340a' # beta 7 | |
tvos '15.0' '19J5345a' # beta 8 | |
tvos '15.0' '19J5346a' # beta 9 | |
tvos '15.0' '19J346' | |
tvos '15.1' '19J5542e' # beta 1 | |
tvos '15.1' '19J5552f' # beta 2 | |
tvos '15.1' '19J5560d' # beta 3 | |
tvos '15.1' '19J5567a' # beta 4 | |
tvos '15.1' '19J572' | |
tvos '15.1.1' '19J581' | |
tvos '15.2' '19K5025g' # beta 1 | |
tvos '15.2' '19K5035d' # beta 2 | |
tvos '15.2' '19K5043b' # beta 3 | |
tvos '15.2' '19K5050a' # beta 4 | |
tvos '15.2' '19K53' | |
tvos '15.3' '19K5527e' # beta 1 | |
tvos '15.3' '19K5541d' # beta 2 | |
tvos '15.3' '19K545' # RC 1 | |
tvos '15.3' '19K547' | |
tvos '15.4' '19L5409j' # beta 1 | |
tvos '15.4' '19L5419e' # beta 2 | |
tvos '15.4' '19L5425e' # beta 3 | |
tvos '15.4' '19L5436a' # beta 4 | |
tvos '15.4' '19L5440a' # beta 5 | |
tvos '15.4' '19L440' | |
tvos '15.4.1' '19L452' | |
tvos '15.5' '19L5547e' # beta 1 | |
tvos '15.5' '19L5557d' # beta 2 | |
tvos '15.5' '19L5562e' # beta 3 | |
tvos '15.5' '19L5569a' # beta 4 | |
tvos '15.5' '19L570' | |
tvos '15.5.1' '19L580' | |
tvos '15.6' '19M5027c' # beta 1 | |
tvos '15.6' '19M5037c' # beta 2 | |
tvos '15.6' '19M5046c' # beta 3 | |
tvos '15.6' '19M5056c' # beta 4 | |
tvos '15.6' '19M5062a' # beta 5 | |
tvos '15.6' '19M63' # RC 1 | |
tvos '15.6' '19M65' | |
tvos '16.0' '20J5299n' # beta 1 | |
tvos '16.0' '20J5319h' # beta 2 | |
tvos '16.0' '20J5328g' # beta 3 | |
tvos '16.0' '20J5344f' # beta 4 | |
tvos '16.0' '20J5355f' # beta 5 | |
tvos '16.0' '20J5366a' # beta 6 | |
tvos '16.0' '20J5371a' # beta 7 | |
tvos '16.0' '20J8378' # preinstalled | |
tvos '16.0' '20J373' | |
tvos '16.1' '20K5041d' # beta 1 | |
tvos '16.1' '20K5046d' # beta 2 | |
tvos '16.1' '20K5052c' # beta 3 | |
tvos '16.1' '20K5062a' # beta 4 | |
tvos '16.1' '20K5068a' # beta 5 | |
tvos '16.1' '20K71' | |
tvos '16.1.1' '20K80' | |
tvos '16.2' '20K5331f' # beta 1 | |
tvos '16.2' '20K5342d' # beta 2 | |
tvos '16.2' '20K5348d' # beta 3 | |
tvos '16.2' '20K5357b' # beta 4 | |
tvos '16.2' '20K362' | |
tvos '16.3' '20K5626c' # beta 1 | |
tvos '16.3' '20K5637g' # beta 2 | |
tvos '16.3' '20K650' | |
tvos '16.3.1' '20K661' | |
tvos '16.3.2' '20K672' | |
tvos '16.3.3' '20K680' | |
tvos '16.4' '20L5463g' # beta 1 | |
tvos '16.4' '20L5474e' # beta 2 | |
tvos '16.4' '20L5480g' # beta 3 | |
tvos '16.4' '20L5490a' # beta 4 | |
tvos '16.4' '20L497' | |
tvos '16.4.1' '20L6498' | |
tvos '16.5' '20L5527d' # beta 1 | |
tvos '16.5' '20L5538d' # beta 2 | |
tvos '16.5' '20L5549e' # beta 3 | |
tvos '16.5' '20L5559a' # beta 4 | |
tvos '16.5' '20L562' # RC 1 | |
tvos '16.5' '20L563' | |
tvos '16.6' '20M5527e' # beta 1 | |
tvos '16.6' '20M5538d' # beta 2 | |
tvos '16.6' '20M5548b' # beta 3 | |
tvos '16.6' '20M5559c' # beta 4 | |
tvos '16.6' '20M5571a' # beta 5 | |
tvos '16.6' '20M73' | |
tvos '17.0' '21J5273q' # beta 1 | |
tvos '17.0' '21J5293g' # beta 2 | |
tvos '17.0' '21J5303f' # beta 3 | |
tvos '17.0' '21J5303h' # beta 3 update | |
tvos '17.0' '21J5318f' # beta 4 | |
tvos '17.0' '21J5330e' # beta 5 | |
tvos '17.0' '21J5339b' # beta 6 | |
tvos '17.0' '21J5347a' # beta 7 | |
tvos '17.0' '21J5353a' # beta 8 | |
tvos '17.0' '21J5354a' # beta 9 | |
tvos '17.0' '21J354' | |
tvos '17.1' '21K5043e' # beta 1 | |
tvos '17.1' '21K5054e' # beta 2 | |
tvos '17.1' '21K5064b' # beta 3 | |
tvos '17.1' '21K69' | |
tvos '17.2' '21K5330g' # beta 1 | |
tvos '17.2' '21K5341f' # beta 2 | |
tvos '17.2' '21K5348f' # beta 3 | |
tvos '17.2' '21K5356c' # beta 4 | |
tvos '17.2' '21K364' # RC 1 | |
tvos '17.2' '21K365' | |
tvos '17.3' '21K5625e' # beta 1 | |
tvos '17.3' '21K5635c' # beta 2 | |
tvos '17.3' '21K5643b' # beta 3 | |
fi; | |
# ---------- ---------- ---------- ---------- ---------- ---------- ---------- ---------- | |
watchOS_device=(); | |
watchOS_model=(); | |
watchOS_version=(); | |
watchOS_build=(); | |
iwatch() # device model | |
{ | |
watchOS_device+=("$1"); | |
watchOS_model+=("$2"); | |
} | |
watchos() # version build | |
{ | |
watchOS_version+=("$1"); | |
watchOS_build+=("$2"); | |
} | |
iwatch 'Watch1,1' 'N27aAP' # Apple Watch | |
iwatch 'Watch1,2' 'N28aAP' # Apple Watch | |
iwatch 'Watch2,6' 'N27dAP' # Apple Watch Series 1 | |
iwatch 'Watch2,7' 'N28dAP' # Apple Watch Series 1 | |
iwatch 'Watch2,3' 'N74AP' # Apple Watch Series 2 | |
iwatch 'Watch2,4' 'N75AP' # Apple Watch Series 2 | |
iwatch 'Watch3,1' 'N111sAP' # Apple Watch Series 3 | |
iwatch 'Watch3,2' 'N111bAP' # Apple Watch Series 3 | |
iwatch 'Watch3,3' 'N121sAP' # Apple Watch Series 3 | |
iwatch 'Watch3,4' 'N121bAP' # Apple Watch Series 3 | |
iwatch 'Watch4,1' 'N131sAP' # Apple Watch Series 4 | |
iwatch 'Watch4,2' 'N131bAP' # Apple Watch Series 4 | |
iwatch 'Watch4,3' 'N141sAP' # Apple Watch Series 4 | |
iwatch 'Watch4,4' 'N141bAP' # Apple Watch Series 4 | |
iwatch 'Watch5,1' 'N144sAP' # Apple Watch Series 5 | |
iwatch 'Watch5,2' 'N144bAP' # Apple Watch Series 5 | |
iwatch 'Watch5,3' 'N146sAP' # Apple Watch Series 5 | |
iwatch 'Watch5,4' 'N146bAP' # Apple Watch Series 5 | |
iwatch 'Watch5,9' 'N140sAP' # Apple Watch SE | |
iwatch 'Watch5,10' 'N140bAP' # Apple Watch SE | |
iwatch 'Watch5,11' 'N142sAP' # Apple Watch SE | |
iwatch 'Watch5,12' 'N142bAP' # Apple Watch SE | |
iwatch 'Watch6,1' 'N157sAP' # Apple Watch Series 6 | |
iwatch 'Watch6,2' 'N157bAP' # Apple Watch Series 6 | |
iwatch 'Watch6,3' 'N158sAP' # Apple Watch Series 6 | |
iwatch 'Watch6,4' 'N158bAP' # Apple Watch Series 6 | |
iwatch 'Watch6,6' 'N187sAP' # Apple Watch Series 7 | |
iwatch 'Watch6,7' 'N187bAP' # Apple Watch Series 7 | |
iwatch 'Watch6,8' 'N188sAP' # Apple Watch Series 7 | |
iwatch 'Watch6,9' 'N188bAP' # Apple Watch Series 7 | |
iwatch 'Watch6,10' 'N143sAP' # Apple Watch SE 2 | |
iwatch 'Watch6,11' 'N143bAP' # Apple Watch SE 2 | |
iwatch 'Watch6,12' 'N149sAP' # Apple Watch SE 2 (Cellular) | |
iwatch 'Watch6,13' 'N149bAP' # Apple Watch SE 2 (Cellular) | |
iwatch 'Watch6,14' 'N197sAP' # Apple Watch Series 8 | |
iwatch 'Watch6,15' 'N197bAP' # Apple Watch Series 8 | |
iwatch 'Watch6,16' 'N198sAP' # Apple Watch Series 8 (Cellular) | |
iwatch 'Watch6,17' 'N198bAP' # Apple Watch Series 8 (Cellular) | |
iwatch 'Watch6,18' 'N199AP' # Apple Watch Ultra | |
iwatch 'Watch7,1' 'N207sAP' # Apple Watch Series 9 | |
iwatch 'Watch7,2' 'N207bAP' # Apple Watch Series 9 | |
iwatch 'Watch7,3' 'N208sAP' # Apple Watch Series 9 (Cellular) | |
iwatch 'Watch7,4' 'N208bAP' # Apple Watch Series 9 (Cellular) | |
iwatch 'Watch7,5' 'N210AP' # Apple Watch Ultra 2 | |
watchos '0' '0' | |
if $incr; then | |
watchos '4.0' '15R5281f' # beta 1 | |
watchos '4.0' '15R5307f' # beta 2 | |
watchos '4.0' '15R5321h' # beta 3 | |
watchos '4.0' '15R5331g' # beta 4 | |
watchos '4.0' '15R5345g' # beta 5 | |
watchos '4.0' '15R5357b' # beta 6 | |
watchos '4.0' '15R5365a' # beta 7 | |
watchos '4.0' '15R5371a' # beta 8 | |
watchos '4.0' '15R372' | |
watchos '4.1' '15R5823c' # beta 1 | |
watchos '4.1' '15R5835d' # beta 2 | |
watchos '4.1' '15R5843a' # beta 3 | |
watchos '4.1' '15R846' | |
watchos '4.2' '15S5085b' # beta 1 | |
watchos '4.2' '15S5090c' # beta 2 | |
watchos '4.2' '15S5100a' # beta 3 | |
watchos '4.2' '15S5102b' # beta 4 | |
watchos '4.2' '15S102' | |
watchos '4.2.2' '15S5530d' # beta 1 | |
watchos '4.2.2' '15S5534a' # beta 2 | |
watchos '4.2.2' '15S5536a' # beta 3 | |
watchos '4.2.2' '15S5540a' # beta 4 | |
watchos '4.2.2' '15S542' | |
watchos '4.2.3' '15S600b' | |
watchos '4.3' '15T5165e' # beta 1 | |
watchos '4.3' '15T5176c' # beta 2 | |
watchos '4.3' '15T5187e' # beta 3 | |
watchos '4.3' '15T5199f' # beta 4 | |
watchos '4.3' '15T5209a' # beta 5 | |
watchos '4.3' '15T5212a' # beta 6 | |
watchos '4.3' '15T212' | |
watchos '4.3.1' '15T5535b' # beta 1 | |
watchos '4.3.1' '15T5545b' # beta 2 | |
watchos '4.3.1' '15T5555c' # beta 3 | |
watchos '4.3.1' '15T5565a' # beta 4 | |
watchos '4.3.1' '15T5567a' # beta 5 | |
watchos '4.3.1' '15T567' | |
watchos '4.3.2' '15U5053b' # beta 1 | |
watchos '4.3.2' '15U5062a' # beta 2 | |
watchos '4.3.2' '15U5069a' # beta 3 | |
watchos '4.3.2' '15U70' | |
watchos '5.0' '16R5283q' # beta 1 | |
watchos '5.0' '16R5283r' # beta 1 | |
watchos '5.0' '16R5303d' # beta 2 | |
watchos '5.0' '16R5313d' # beta 3 | |
watchos '5.0' '16R5322d' # beta 4 | |
watchos '5.0' '16R5334f' # beta 5 | |
watchos '5.0' '16R5340g' # beta 6 | |
watchos '5.0' '16R5349a' # beta 7 | |
watchos '5.0' '16R5357a' # beta 8 | |
watchos '5.0' '16R5360a' # beta 9 | |
watchos '5.0' '16R5363a' # beta 10 | |
watchos '5.0' '16R364' | |
watchos '5.0.1' '16R381' | |
watchos '5.0.1' '16R382' | |
watchos '5.1' '16R5559d' # beta 1 | |
watchos '5.1' '16R5568d' # beta 2 | |
watchos '5.1' '16R5577c' # beta 3 | |
watchos '5.1' '16R5584a' # beta 4 | |
watchos '5.1' '16R5589c' # beta 5 | |
watchos '5.1' '16R591' | |
watchos '5.1.1' '16R600' | |
watchos '5.1.2' '16S5042a' # beta 1 | |
watchos '5.1.2' '16S5046a' # beta 2 | |
watchos '5.1.2' '16S46' | |
watchos '5.1.3' '16S5523a' # beta 1 | |
watchos '5.1.3' '16S5531a' # beta 2 | |
watchos '5.1.3' '16S5535a' # beta 3 | |
watchos '5.1.3' '16S535' | |
watchos '5.2' '16T5181f' # beta 1 | |
watchos '5.2' '16T5191d' # beta 2 | |
watchos '5.2' '16T5201c' # beta 3 | |
watchos '5.2' '16T5212e' # beta 4 | |
watchos '5.2' '16T5222a' # beta 5 | |
watchos '5.2' '16T5225a' # beta 6 | |
watchos '5.2' '16T225' | |
watchos '5.2.1' '16U5079d' # beta 1 | |
watchos '5.2.1' '16U5091b' # beta 2 | |
watchos '5.2.1' '16U5101c' # beta 3 | |
watchos '5.2.1' '16U5110a' # beta 4 | |
watchos '5.2.1' '16U5113a' # beta 5 | |
watchos '5.2.1' '16U113' | |
watchos '5.3' '16U5526f' # beta 1 | |
watchos '5.3' '16U5537b' # beta 2 | |
watchos '5.3' '16U5545c' # beta 3 | |
watchos '5.3' '16U5558b' # beta 4 | |
watchos '5.3' '16U5566a' # beta 5 | |
watchos '5.3' '16U5569a' # beta 6 | |
watchos '5.3.1' '16U600' | |
watchos '5.3.2' '16U611' | |
watchos '5.3.3' '16U620' | |
watchos '5.3.4' '16U627' | |
watchos '5.3.5' '16U652' | |
watchos '5.3.6' '16U662' | |
watchos '5.3.7' '16U674' | |
watchos '5.3.8' '16U680' | |
watchos '6.0' '17R5491t' # beta 1 | |
watchos '6.0' '17R5507l' # beta 2 | |
watchos '6.0' '17R5521e' # beta 3 | |
watchos '6.0' '17R5532f' # beta 4 | |
watchos '6.0' '17R5546f' # beta 5 | |
watchos '6.0' '17R5556d' # beta 6 | |
watchos '6.0' '17R5566a' # beta 7 | |
watchos '6.0' '17R5571a' # beta 8 | |
watchos '6.0' '17R5575a' # beta 9 | |
watchos '6.0' '17R575' | |
watchos '6.0.1' '17R604' | |
watchos '6.0.1' '17R605' | |
watchos '6.1' '17S5054e' # beta 1 | |
watchos '6.1' '17S5059e' # beta 2 | |
watchos '6.1' '17S5068e' # beta 3 | |
watchos '6.1' '17S5076a' # beta 4 | |
watchos '6.1' '17S5083a' # beta 5 | |
watchos '6.1' '17S84' | |
watchos '6.1.1' '17S5433b' # beta 1 | |
watchos '6.1.1' '17S5439a' # beta 2 | |
watchos '6.1.1' '17S5446a' # beta 3 | |
watchos '6.1.1' '17S5449b' # beta 4 | |
watchos '6.1.1' '17S449' | |
watchos '6.1.2' '17S5775c' # beta 1 | |
watchos '6.1.2' '17S5792a' # beta 2 | |
watchos '6.1.2' '17S5796a' # beta 3 | |
watchos '6.1.2' '17S796' | |
watchos '6.1.3' '17S811' | |
watchos '6.2' '17T5224g' # beta 1 | |
watchos '6.2' '17T5234f' # beta 2 | |
watchos '6.2' '17T5244c' # beta 3 | |
watchos '6.2' '17T5251a' # beta 4 | |
watchos '6.2' '17T5254a' # beta 5 | |
watchos '6.2' '17T529' | |
watchos '6.2.1' '17T530' | |
watchos '6.2.5' '17T5580e' # beta 1 | |
watchos '6.2.5' '17T5590d' # beta 2 | |
watchos '6.2.5' '17T5600c' # beta 3 | |
watchos '6.2.5' '17T5607a' # beta 4 | |
watchos '6.2.5' '17T608' | |
watchos '6.2.6' '17T620' | |
watchos '6.2.8' '17U5535e' # beta 1 | |
watchos '6.2.8' '17U5545c' # beta 2 | |
watchos '6.2.8' '17U5559d' # beta 3 | |
watchos '6.2.8' '17U63' | |
watchos '6.3' '17U208' | |
watchos '6.3' '17U216' | |
watchos '7.0' '18R5310a' # beta 1 | |
watchos '7.0' '18R5327h' # beta 2 | |
watchos '7.0' '18R5340d' # beta 3 | |
watchos '7.0' '18R5350e' # beta 4 | |
watchos '7.0' '18R5361d' # beta 5 | |
watchos '7.0' '18R5368d' # beta 6 | |
watchos '7.0' '18R5378a' # beta 7 | |
watchos '7.0' '18R5382a' # beta 8 | |
watchos '7.0' '18R382' | |
watchos '7.0.1' '18R395' | |
watchos '7.0.2' '18R402' | |
watchos '7.0.3' '18R410' | |
watchos '7.1' '18R5552f' # beta 1 | |
watchos '7.1' '18R5561e' # beta 2 | |
watchos '7.1' '18R5572f' # beta 3 | |
watchos '7.1' '18R5572g' # beta 3 | |
watchos '7.1' '18R5585a' # beta 4 | |
watchos '7.1' '18R5586a' # beta 4 | |
watchos '7.1' '18R589' # RC 1 | |
watchos '7.1' '18R590' | |
watchos '7.2' '18S5545f' # beta 1 | |
watchos '7.2' '18S5555c' # beta 2 | |
watchos '7.2' '18S5561a' # beta 3 | |
watchos '7.2' '18S563' | |
watchos '7.2' '18S564' | |
watchos '7.3' '18S5780d' # beta 1 | |
watchos '7.3' '18S5793d' # beta 2 | |
watchos '7.3' '18S801' | |
watchos '7.3.1' '18S801' | |
watchos '7.3.2' '18S821' | |
watchos '7.3.3' '18S830' | |
watchos '7.4' '18T5144k' # beta 1 | |
watchos '7.4' '18T5159f' # beta 2 | |
watchos '7.4' '18T5169f' # beta 3 | |
watchos '7.4' '18T5183b' # beta 4 | |
watchos '7.4' '18T5190a' # beta 5 | |
watchos '7.4' '18T5193a' # beta 6 | |
watchos '7.4' '18T5194a' # beta 7 | |
watchos '7.4' '18T195' | |
watchos '7.4.1' '18T201' | |
watchos '7.5' '18T5546f' # beta 1 | |
watchos '7.5' '18T5555c' # beta 2 | |
watchos '7.5' '18T5564a' # beta 3 | |
watchos '7.5' '18T567' | |
watchos '7.6' '18U5523d' # beta 1 | |
watchos '7.6' '18U5533b' # beta 2 | |
watchos '7.6' '18U5542b' # beta 3 | |
watchos '7.6' '18U5552d' # beta 4 | |
watchos '7.6' '18U5561a' # beta 5 | |
watchos '7.6' '18U63' | |
watchos '7.6.1' '18U70' | |
watchos '7.6.2' '18U80' | |
watchos '8.0' '19R5266q' # beta 1 | |
watchos '8.0' '19R5286f' # beta 2 | |
watchos '8.0' '19R5302f' # beta 3 | |
watchos '8.0' '19R5312e' # beta 4 | |
watchos '8.0' '19R5323g' # beta 5 | |
watchos '8.0' '19R5330d' # beta 6 | |
watchos '8.0' '19R5340a' # beta 7 | |
watchos '8.0' '19R5342a' # beta 8 | |
watchos '8.0' '19R343' # preinstalled | |
watchos '8.0' '19R346' | |
watchos '8.0.1' '19R354' | |
watchos '8.1' '19R5541f' # beta 1 | |
watchos '8.1' '19R5551d' # beta 2 | |
watchos '8.1' '19R5559e' # beta 3 | |
watchos '8.1' '19R5566a' # beta 4 | |
watchos '8.1' '19R570' | |
watchos '8.1.1' '19R580' | |
watchos '8.3' '19S5026e' # beta 1 | |
watchos '8.3' '19S5036d' # beta 2 | |
watchos '8.3' '19S5044c' # beta 3 | |
watchos '8.3' '19S5050c' # beta 4 | |
watchos '8.3' '19S55' | |
watchos '8.4' '19S5525f' # beta 1 | |
watchos '8.4' '19S5539e' # beta 2 | |
watchos '8.4' '19S546' | |
watchos '8.4.1' '19S550' | |
watchos '8.4.2' '19S553' | |
watchos '8.5' '19T5212h' # beta 1 | |
watchos '8.5' '19T5223e' # beta 2 | |
watchos '8.5' '19T5228d' # beta 3 | |
watchos '8.5' '19T5238a' # beta 4 | |
watchos '8.5' '19T5241a' # beta 5 | |
watchos '8.5' '19T242' | |
watchos '8.5.1' '19T252' | |
watchos '8.6' '19T5547f' # beta 1 | |
watchos '8.6' '19T5557d' # beta 2 | |
watchos '8.6' '19T5562f' # beta 3 | |
watchos '8.6' '19T5570a' # beta 4 | |
watchos '8.6' '19T572' | |
watchos '8.7' '19U5027c' # beta 1 | |
watchos '8.7' '19U5037d' # beta 2 | |
watchos '8.7' '19U5046b' # beta 3 | |
watchos '8.7' '19U5056c' # beta 4 | |
watchos '8.7' '19U5063a' # beta 5 | |
watchos '8.7' '19U66' | |
watchos '8.7.1' '19U67' | |
watchos '8.8.1' '19U512' | |
watchos '9.0' '20R5287q' # beta 1 | |
watchos '9.0' '20R5307h' # beta 2 | |
watchos '9.0' '20R5316f' # beta 3 | |
watchos '9.0' '20R5332g' # beta 4 | |
watchos '9.0' '20R5343e' # beta 5 | |
watchos '9.0' '20R5353a' # beta 6 | |
watchos '9.0' '20R5359a' # beta 7 | |
watchos '9.0' '20R361' | |
watchos '9.0.1' '20R8380' | |
watchos '9.0.2' '20R383' | |
watchos '9.0.2' '20R8391' | |
watchos '9.1' '20S5044e' # beta 1 | |
watchos '9.1' '20S5049d' # beta 2 | |
watchos '9.1' '20S5055e' # beta 3 | |
watchos '9.1' '20S5063c' # beta 4 | |
watchos '9.1' '20S5072a' # beta 5 | |
watchos '9.1' '20S75' | |
watchos '9.2' '20S5331e' # beta 1 | |
watchos '9.2' '20S5342d' # beta 2 | |
watchos '9.2' '20S5348d' # beta 3 | |
watchos '9.2' '20S5357b' # beta 4 | |
watchos '9.2' '20S361' | |
watchos '9.3' '20S5626e' # beta 1 | |
watchos '9.3' '20S5637h' # beta 2 | |
watchos '9.3' '20S648' | |
watchos '9.3.1' '20S664' | |
watchos '9.4' '20T5222g' # beta 1 | |
watchos '9.4' '20T5233d' # beta 2 | |
watchos '9.4' '20T5239f' # beta 3 | |
watchos '9.4' '20T5249a' # beta 4 | |
watchos '9.4' '20T253' | |
watchos '9.5' '20T5527c' # beta 1 | |
watchos '9.5' '20T5538d' # beta 2 | |
watchos '9.5' '20T5549e' # beta 3 | |
watchos '9.5' '20T5560a' # beta 4 | |
watchos '9.5' '20T562' | |
watchos '9.5.1' '20T570' | |
watchos '9.5.2' '20T571' | |
watchos '9.6' '20U5527c' # beta 1 | |
watchos '9.6' '20U5538d' # beta 2 | |
watchos '9.6' '20U5548c' # beta 3 | |
watchos '9.6' '20U5559c' # beta 4 | |
watchos '9.6' '20U5570a' # beta 5 | |
watchos '9.6' '20U73' | |
watchos '9.6.1' '20U80' | |
watchos '9.6.2' '20U90' | |
watchos '9.6.3' '20U502' | |
watchos '10.0' '21R5275t' # beta 1 | |
watchos '10.0' '21R5295g' # beta 2 | |
watchos '10.0' '21R5305e' # beta 3 | |
watchos '10.0' '21R5320i' # beta 4 | |
watchos '10.0' '21R5332f' # beta 5 | |
watchos '10.0' '21R5341c' # beta 6 | |
watchos '10.0' '21R5349b' # beta 7 | |
watchos '10.0' '21R5355a' # beta 8 | |
watchos '10.0' '21R355' | |
watchos '10.0' '21R356' | |
watchos '10.0.1' '21R360' | |
watchos '10.0.2' '21R371' | |
watchos '10.1' '21S5042f' # beta 1 | |
watchos '10.1' '21S5053f' # beta 2 | |
watchos '10.1' '21S5063a' # beta 3 | |
watchos '10.1' '21S67' | |
watchos '10.1.1' '21S71' | |
watchos '10.2' '21S5331f' # beta 1 | |
watchos '10.2' '21S5342e' # beta 2 | |
watchos '10.2' '21S5349e' # beta 3 | |
watchos '10.2' '21S5358a' # beta 4 | |
watchos '10.2' '21S364' # RC 1 | |
watchos '10.3' '21S5625c' # beta 1 | |
watchos '10.3' '21S5635d' # beta 2 | |
watchos '10.3' '21S5642a' # beta 3 | |
fi; | |
# ---------- ---------- ---------- ---------- ---------- ---------- ---------- ---------- | |
audioOS_device=(); | |
audioOS_model=(); | |
audioOS_version=(); | |
audioOS_build=(); | |
homepod() # device model | |
{ | |
audioOS_device+=("$1"); | |
audioOS_model+=("$2"); | |
} | |
audioos() # version build | |
{ | |
audioOS_version+=("$1"); | |
audioOS_build+=("$2"); | |
} | |
homepod 'AudioAccessory1,1' 'B238aAP' | |
homepod 'AudioAccessory1,2' 'B238AP' | |
homepod 'AudioAccessory5,1' 'B520AP' | |
homepod 'AudioAccessory6,1' 'B620AP' | |
audioos '0' '0' | |
if $incr; then | |
audioos '11.0.2' '15C25' | |
audioos '11.2' '15C4092b' # beta 1 | |
audioos '11.2' '15C4097d' # beta 2 | |
audioos '11.2.5' '15D5037e' # beta 3 | |
audioos '11.2.5' '15D5046b' # beta 4 | |
audioos '11.2.5' '15D59' | |
audioos '11.2.5' '15D5059' | |
audioos '11.3' '15E217' | |
audioos '11.4' '15F80' | |
audioos '11.4.1' '15G77' | |
audioos '12.0' '16A366' | |
audioos '12.1' '16B92' | |
audioos '12.1' '16B6092' | |
audioos '12.1.1' '16C50' | |
audioos '12.1.3' '16D39' | |
audioos '12.2' '16E227' | |
audioos '12.3' '16F156' | |
audioos '12.4' '16G78' | |
audioos '13.2' '17B84' | |
audioos '13.2' '17B6084' | |
audioos '13.2.1' '17B90' | |
audioos '13.2.1' '17B6090' | |
audioos '13.3' '17C54' | |
audioos '13.3' '17C6054' | |
audioos '13.3.1' '17D50' | |
audioos '13.3.1' '17D6050' | |
audioos '13.4' '17L256' | |
audioos '13.4' '17L6256' | |
audioos '13.4.5' '17L562' | |
audioos '13.4.5' '17L6562' | |
audioos '13.4.6' '17L570' | |
audioos '13.4.6' '17L6570' | |
audioos '13.4.8' '17M61' | |
audioos '13.4.8' '17M6061' | |
audioos '14.0' '18J5313t' # beta 1 | |
audioos '14.0' '18J5331g' # beta 2 | |
audioos '14.0' '18J5344d' # beta 3 | |
audioos '14.0' '18J5354f' # beta 4 | |
audioos '14.1' '18J6370e' # beta 5 | |
audioos '14.1' '18J6379c' # beta 6 | |
audioos '14.1' '18J6385b' # beta 7 | |
audioos '14.1' '18J8394' | |
audioos '14.2' '18K5027e' # beta 1 | |
audioos '14.2' '18K5036d' # beta 2 | |
audioos '14.2' '18K5047f' # beta 3 | |
audioos '14.2' '18K5057c' # beta 4 | |
audioos '14.2' '18K60' | |
audioos '14.2.1' '18K75' | |
audioos '14.3' '18K5545e' # beta 1 | |
audioos '14.3' '18K5556a' # beta 2 | |
audioos '14.3' '18K5559a' # beta 3 | |
audioos '14.3' '18K561' # RC 1 | |
audioos '14.3' '18K563' | |
audioos '14.4' '18K5780c' # beta 1 | |
audioos '14.4' '18K5793d' # beta 2 | |
audioos '14.4' '18K802' | |
audioos '14.5' '18L5149j' # beta 1 | |
audioos '14.5' '18L5173f' # beta 3 | |
audioos '14.5' '18L5186a' # beta 4 | |
audioos '14.5' '18L5193a' # beta 5 | |
audioos '14.5' '18L5200a' # beta 6 | |
audioos '14.5' '18L5203a' # beta 7 | |
audioos '14.5' '18L203' | |
audioos '14.6' '18L5546f' # beta 1 | |
audioos '14.6' '18L5555c' # beta 2 | |
audioos '14.6' '18L5565a' # beta 3 | |
audioos '14.6' '18L569' | |
audioos '14.7' '18M5523d' # beta 1 | |
audioos '14.7' '18M5533c' # beta 2 | |
audioos '14.7' '18M5542c' # beta 3 | |
audioos '14.7' '18M5552d' # beta 4 | |
audioos '14.7' '18M5558a' # beta 5 | |
audioos '14.7' '18M60' | |
audioos '15.0' '19J5268r' # beta 1 | |
audioos '15.0' '19J5288e' # beta 2 | |
audioos '15.0' '19J5304b' # beta 3 | |
audioos '15.0' '19J5304e' # beta 4 | |
audioos '15.0' '19J5314e' # beta 5 | |
audioos '15.0' '19J5332b' # beta 6 | |
audioos '15.0' '19J5332d' # beta 7 | |
audioos '15.0' '19J5340a' # beta 8 | |
audioos '15.0' '19J5345a' # beta 9 | |
audioos '15.0' '19J5346a' # RC 1 | |
audioos '15.0' '19J346' | |
audioos '15.1' '19J5542e' # beta 1 | |
audioos '15.1' '19J5552e' # beta 2 | |
audioos '15.1' '19J5560d' # beta 3 | |
audioos '15.1' '19J5567a' # beta 4 | |
audioos '15.1' '19J572' | |
audioos '15.1.1' '19J582' | |
audioos '15.2' '19K5025g' # beta 1 | |
audioos '15.2' '19K5035d' # beta 2 | |
audioos '15.2' '19K5043b' # beta 3 | |
audioos '15.2' '19K5050a' # beta 4 | |
audioos '15.2' '19K52' | |
audioos '15.3' '19K5527d' # beta 1 | |
audioos '15.3' '19K5541d' # beta 2 | |
audioos '15.3' '19K546' # RC 1 | |
audioos '15.3' '19K547' | |
audioos '15.4' '19L5409j' # beta 1 | |
audioos '15.4' '19L5419e' # beta 2 | |
audioos '15.4' '19L5425e' # beta 3 | |
audioos '15.4' '19L5436a' # beta 4 | |
audioos '15.4' '19L5440a' # beta 5 | |
audioos '15.4' '19L440' | |
audioos '15.4.1' '19L452' | |
audioos '15.5' '19L5547e' # beta 1 | |
audioos '15.5' '19L5557d' # beta 2 | |
audioos '15.5' '19L5562e' # beta 3 | |
audioos '15.5' '19L5569a' # beta 4 | |
audioos '15.5' '19L570' | |
audioos '15.5.1' '19L580' | |
audioos '15.6' '19M5027c' # beta 1 | |
audioos '15.6' '19M5037c' # beta 2 | |
audioos '15.6' '19M5046c' # beta 3 | |
audioos '15.6' '19M5056c' # beta 4 | |
audioos '15.6' '19M5062a' # beta 5 | |
audioos '15.6' '19M63' # RC 1 | |
audioos '15.6' '19M65' | |
audioos '16.0' '20J5299n' # beta 1 | |
audioos '16.0' '20J5319h' # beta 2 | |
audioos '16.0' '20J5328f' # beta 3 | |
audioos '16.0' '20J5344f' # beta 4 | |
audioos '16.0' '20J5355f' # beta 5 | |
audioos '16.0' '20J5366a' # beta 6 | |
audioos '16.0' '20J5371a' # beta 7 | |
audioos '16.0' '20J373' | |
audioos '16.1' '20K5041d' # beta 1 | |
audioos '16.1' '20K5046d' # beta 2 | |
audioos '16.1' '20K5052c' # beta 3 | |
audioos '16.1' '20K5062a' # beta 4 | |
audioos '16.1' '20K5068a' # beta 5 | |
audioos '16.1' '20K71' | |
audioos '16.2' '20K5331f' # beta 1 | |
audioos '16.2' '20K5342d' # beta 2 | |
audioos '16.2' '20K5348d' # beta 3 | |
audioos '16.2' '20K5357b' # beta 4 | |
audioos '16.2' '20K362' | |
audioos '16.3' '20K5626c' # beta 1 | |
audioos '16.3' '20K5637g' # beta 2 | |
audioos '16.3' '20K649' | |
audioos '16.3.1' '20K661' | |
audioos '16.3.2' '20K672' | |
audioos '16.4' '20L5463g' # beta 1 | |
audioos '16.4' '20L5474e' # beta 2 | |
audioos '16.4' '20L5480g' # beta 3 | |
audioos '16.4' '20L5490a' # beta 4 | |
audioos '16.4' '20L6497' | |
audioos '16.4.1' '20L498' | |
audioos '16.5' '20L5527d' # beta 1 | |
audioos '16.5' '20L5538d' # beta 2 | |
audioos '16.5' '20L5549e' # beta 3 | |
audioos '16.5' '20L5559a' # beta 4 | |
audioos '16.5' '20L562' # RC 1 | |
audioos '16.5' '20L563' | |
audioos '16.6' '20M5527e' # beta 1 | |
audioos '16.6' '20M5538d' # beta 2 | |
audioos '16.6' '20M5548b' # beta 3 | |
audioos '16.6' '20M5559c' # beta 4 | |
audioos '16.6' '20M5571a' # beta 5 | |
audioos '16.6' '20M73' | |
audioos '17.0' '21J5273q' # beta 1 | |
audioos '17.0' '21J5303f' # beta 3 | |
audioos '17.0' '21J5318f' # beta 4 | |
audioos '17.0' '21J5330e' # beta 5 | |
audioos '17.0' '21J5339b' # beta 6 | |
audioos '17.0' '21J5347a' # beta 7 | |
audioos '17.0' '21J5353a' # beta 8 | |
audioos '17.0' '21J354' | |
audioos '17.1' '21K5043e' # beta 1 | |
audioos '17.1' '21K5054e' # beta 2 | |
audioos '17.1' '21K5064b' # beta 3 | |
audioos '17.1' '21K69' | |
audioos '17.1.1' '21K82' | |
audioos '17.2' '21K5330g' # beta 1 | |
audioos '17.2' '21K5341f' # beta 2 | |
audioos '17.2' '21K5348f' # beta 3 | |
audioos '17.2' '21K5356c' # beta 4 | |
audioos '17.2' '21K364' # RC 1 | |
audioos '17.2' '21K365' | |
audioos '17.3' '21K5625e' # beta 1 | |
audioos '17.3' '21K5635c' # beta 2 | |
audioos '17.3' '21K5643b' # beta 3 | |
fi; | |
# ---------- ---------- ---------- ---------- ---------- ---------- ---------- ---------- | |
xrOS_device=(); | |
xrOS_model=(); | |
xrOS_version=(); | |
xrOS_build=(); | |
vision() # device model | |
{ | |
xrOS_device+=("$1"); | |
xrOS_model+=("$2"); | |
} | |
xros() # version build | |
{ | |
xrOS_version+=("$1"); | |
xrOS_build+=("$2"); | |
} | |
vision 'RealityDevice14,1' 'N301AP' # Vision Pro | |
xros '0' '0' | |
if $incr; then | |
xros '1.0' '21N5165g' # beta 1 | |
xros '1.0' '21N5207g' # beta 2 | |
xros '1.0' '21N5233f' # beta 3 | |
xros '1.0' '21N5259k' # beta 4 | |
xros '1.0' '21N5260b' # beta 5 | |
xros '1.0' '21N5300a' # beta 6 | |
xros '1.0' '21N6307' # beta 7 | |
fi; | |
# ---------- ---------- ---------- ---------- ---------- ---------- ---------- ---------- | |
macOS_device=(); | |
macOS_model=(); | |
macOS_version=(); | |
macOS_build=(); | |
mac() # device model | |
{ | |
macOS_device+=("$1"); | |
macOS_model+=("$2"); | |
} | |
macos() # version build | |
{ | |
macOS_version+=("$1"); | |
macOS_build+=("$2"); | |
} | |
if ! $rsr; then | |
mac 'ADP3,1' 'J273AP' # DTK | |
mac 'ADP3,2' 'J273aAP' # DTK | |
mac 'iProd99,1' 'T485AP' # DTK | |
fi; | |
mac 'Macmini9,1' 'J274AP' # M1 Mac mini | |
mac 'MacBookAir10,1' 'J313AP' # M1 MacBook Air | |
mac 'MacBookPro17,1' 'J293AP' # M1 MacBook Pro | |
mac 'iMac21,1' 'J456AP' # M1 iMac | |
mac 'iMac21,2' 'J457AP' # M1 iMac | |
mac 'MacBookPro18,3' 'J314sAP' # M1 Pro MacBook Pro (14") | |
mac 'MacBookPro18,1' 'J316sAP' # M1 Pro MacBook Pro (16") | |
mac 'MacBookPro18,4' 'J314cAP' # M1 Max MacBook Pro (14") | |
mac 'MacBookPro18,2' 'J316cAP' # M1 Max MacBook Pro (16") | |
mac 'Mac13,1' 'J375cAP' # M1 Max Mac Studio | |
mac 'Mac13,2' 'J375dAP' # M1 Ultra Mac Studio | |
mac 'Mac14,2' 'J413AP' # M2 MacBook Air (13") | |
mac 'Mac14,15' 'J415AP' # M2 MacBook Air (15") | |
mac 'Mac14,7' 'J493AP' # M2 MacBook Pro | |
mac 'Mac14,3' 'J473AP' # M2 Mac mini | |
mac 'Mac14,12' 'J474sAP' # M2 Pro Mac mini | |
mac 'Mac14,9' 'J414sAP' # M2 Pro MacBook Pro (14") | |
mac 'Mac14,10' 'J416sAP' # M2 Pro MacBook Pro (16") | |
mac 'Mac14,5' 'J414cAP' # M2 Max MacBook Pro (14") | |
mac 'Mac14,6' 'J416cAP' # M2 Max MacBook Pro (16") | |
mac 'Mac14,13' 'J475cAP' # M2 Max Mac Studio | |
mac 'Mac14,14' 'J475dAP' # M2 Ultra Mac Studio | |
mac 'Mac14,8' 'J180dAP' # M2 Ultra Mac Pro | |
mac 'Mac15,3' 'J504AP' # M3 MacBook Pro | |
mac 'Mac15,4' 'J433AP' # M3 iMac | |
mac 'Mac15,5' 'J434AP' # M3 iMac | |
mac 'Mac15,6' 'J514sAP' # M3 Pro MacBook Pro (14") | |
mac 'Mac15,7' 'J516sAP' # M3 Pro MacBook Pro (16") | |
mac 'Mac15,8' 'J514cAP' # M3 Max (16core) MacBook Pro (14") | |
mac 'Mac15,9' 'J516cAP' # M3 Max (16core) MacBook Pro (16") | |
mac 'Mac15,10' 'J514mAP' # M3 Max (14core) MacBook Pro (14") | |
mac 'Mac15,11' 'J516mAP' # M3 Max (14core) MacBook Pro (16") | |
mac 'VirtualMac1,1' 'VMA1AP' | |
mac 'VirtualMac2,1' 'VMA2MACOSAP' | |
if ! $rsr; then | |
mac 'iBridge2,1' 'J137AP' | |
mac 'iBridge2,3' 'J680AP' | |
mac 'iBridge2,4' 'J132AP' | |
mac 'iBridge2,5' 'J174AP' | |
mac 'iBridge2,6' 'J160AP' | |
mac 'iBridge2,7' 'J780AP' | |
mac 'iBridge2,8' 'J140kAP' | |
mac 'iBridge2,10' 'J213AP' | |
mac 'iBridge2,11' 'J230AP' | |
mac 'iBridge2,12' 'J140aAP' | |
mac 'iBridge2,13' 'J214AP' | |
mac 'iBridge2,14' 'J152fAP' | |
mac 'iBridge2,15' 'J230kAP' | |
mac 'iBridge2,16' 'J214kAP' | |
mac 'iBridge2,19' 'J185AP' | |
mac 'iBridge2,20' 'J185fAP' | |
mac 'iBridge2,21' 'J223AP' | |
mac 'iBridge2,22' 'J215AP' | |
fi; | |
if ! $rsr; then | |
macos '0' '0' | |
fi; | |
if $incr && ! $rsr; then | |
macos '11.0' '20A5299w' # beta 1 | |
macos '11.0' '20A5323l' # beta 3 | |
macos '11.0' '20A5343i' # beta 4 (dev) | |
macos '11.0' '20A5343j' # beta 4 (public) | |
macos '11.0' '20A5354i' # beta 5 | |
macos '11.0' '20A5364e' # beta 6 | |
macos '11.0' '20A5374g' # beta 7 | |
macos '11.0' '20A5374i' # beta 8 | |
macos '11.0' '20A5384c' # beta 9 | |
macos '11.0' '20A5395g' # beta 10 | |
macos '11.0' '20A2411' # preinstalled | |
macos '11.0.1' '20B5012d' # beta 1 | |
macos '11.0.1' '20B5022a' # RC 1 | |
macos '11.0.1' '20B28' # RC 2 | |
macos '11.0.1' '20B29' | |
macos '11.0.1' '20B50' | |
macos '11.1' '20C5048k' # beta 1 (ipsw) | |
macos '11.1' '20C5048l' # beta 1 (ia) | |
macos '11.1' '20C5061b' # beta 2 | |
macos '11.1' '20C69' | |
macos '11.2' '20D5029f' # beta 1 | |
macos '11.2' '20D5042d' # beta 2 | |
macos '11.2' '20D53' # RC 1 | |
macos '11.2' '20D62' # RC 2 | |
macos '11.2' '20D64' | |
macos '11.2.1' '20D74' | |
macos '11.2.1' '20D75' | |
macos '11.2.2' '20D80' | |
macos '11.2.3' '20D91' | |
macos '11.3' '20E5172i' # beta 1 | |
macos '11.3' '20E5186d' # beta 2 (ipsw) | |
macos '11.3' '20E5186e' # beta 2 (ia) | |
macos '11.3' '20E5196f' # beta 3 | |
macos '11.3' '20E5210c' # beta 4 | |
macos '11.3' '20E5217a' # beta 5 | |
macos '11.3' '20E5224a' # beta 6 | |
macos '11.3' '20E5229a' # beta 7 | |
macos '11.3' '20E5231a' # beta 8 | |
macos '11.3' '20E217' # preinstalled | |
macos '11.3' '20E232' | |
macos '11.3.1' '20E241' | |
macos '11.4' '20F5046g' # beta 1 | |
macos '11.4' '20F5055c' # beta 2 | |
macos '11.4' '20F5065a' # beta 3 | |
macos '11.4' '20F71' | |
macos '11.5' '20G5023d' # beta 1 | |
macos '11.5' '20G5033c' # beta 2 | |
macos '11.5' '20G5042c' # beta 3 | |
macos '11.5' '20G5052c' # beta 4 | |
macos '11.5' '20G5065a' # beta 5 | |
macos '11.5' '20G70' # RC 1 | |
macos '11.5' '20G71' | |
macos '11.5.1' '20G80' | |
macos '11.5.2' '20G95' | |
macos '11.6' '20G165' | |
macos '11.6.1' '20G211' # RC 1 | |
macos '11.6.1' '20G214' # RC 2 | |
macos '11.6.1' '20G219' # RC 3 | |
macos '11.6.1' '20G221' # RC 4 | |
macos '11.6.1' '20G224' | |
macos '11.6.2' '20G303' # RC 1 | |
macos '11.6.2' '20G306' # RC 2 | |
macos '11.6.2' '20G311' # RC 3 | |
macos '11.6.2' '20G313' # RC 4 | |
macos '11.6.2' '20G314' | |
macos '11.6.3' '20G405' # RC 1 | |
macos '11.6.3' '20G409' # RC 2 | |
macos '11.6.3' '20G413' # RC 3 | |
macos '11.6.3' '20G415' | |
macos '11.6.4' '20G507' # RC 1 | |
macos '11.6.4' '20G417' | |
macos '11.6.5' '20G517' # RC 1 | |
macos '11.6.5' '20G521' # RC 2 | |
macos '11.6.5' '20G525' # RC 3 | |
macos '11.6.5' '20G526' # RC 4 | |
macos '11.6.5' '20G527' | |
macos '11.6.6' '20G604' # RC 1 | |
macos '11.6.6' '20G608' # RC 2 | |
macos '11.6.6' '20G614' # RC 3 | |
macos '11.6.6' '20G618' # RC 4 | |
macos '11.6.6' '20G623' # RC 5 | |
macos '11.6.6' '20G624' | |
macos '11.6.7' '20G704' # RC 1 | |
macos '11.6.7' '20G710' # RC 2 | |
macos '11.6.7' '20G630' | |
macos '11.6.8' '20G715' # RC 1 | |
macos '11.6.8' '20G720' # RC 2 | |
macos '11.6.8' '20G725' # RC 3 | |
macos '11.6.8' '20G728' # RC 4 | |
macos '11.6.8' '20G730' | |
macos '11.7' '20G817' | |
macos '11.7.1' '20G908' # RC 1 | |
macos '11.7.1' '20G912' # RC 2 | |
macos '11.7.1' '20G916' # RC 3 | |
macos '11.7.1' '20G918' | |
macos '11.7.2' '20G1008' # RC 1 | |
macos '11.7.2' '20G1011' # RC 2 | |
macos '11.7.2' '20G1020' | |
macos '11.7.3' '20G1102' # RC 1 | |
macos '11.7.3' '20G1113' # RC 2 | |
macos '11.7.3' '20G1116' | |
macos '11.7.4' '20G1120' | |
macos '11.7.5' '20G1205' # RC 1 | |
macos '11.7.5' '20G1210' # RC 2 | |
macos '11.7.5' '20G1215' # RC 3 | |
macos '11.7.5' '20G1220' # RC 4 | |
macos '11.7.5' '20G1225' | |
macos '11.7.6' '20G1329' # RC 1 | |
macos '11.7.6' '20G1231' | |
macos '11.7.7' '20G1332' # RC 1 | |
macos '11.7.7' '20G1338' # RC 2 | |
macos '11.7.7' '20G1342' # RC 3 | |
macos '11.7.7' '20G1345' | |
macos '11.7.8' '20G1403' # RC 1 | |
macos '11.7.8' '20G1407' # RC 2 | |
macos '11.7.8' '20G1351' | |
macos '11.7.9' '20G1413' # RC 1 | |
macos '11.7.9' '20G1416' # RC 2 | |
macos '11.7.9' '20G1424' # RC 3 | |
macos '11.7.9' '20G1426' | |
macos '11.7.10' '20G1427' | |
macos '12.0' '21A5248p' # beta 1 | |
macos '12.0' '21A5268h' # beta 2 | |
macos '12.0' '21A5284e' # beta 3 | |
macos '12.0' '21A5294g' # beta 4 | |
macos '12.0' '21A5304g' # beta 5 | |
macos '12.0' '21A5506j' # beta 6 | |
macos '12.0' '21A5522h' # beta 7 | |
macos '12.0' '21A5534d' # beta 8 | |
macos '12.0' '21A5543b' # beta 9 | |
macos '12.0' '21A5552a' # beta 10 | |
macos '12.0' '21A344' # preinstalled | |
macos '12.0.1' '21A558' # RC 1 | |
macos '12.0.1' '21A559' | |
macos '12.1' '21C5021h' # beta 1 | |
macos '12.1' '21C5031d' # beta 2 | |
macos '12.1' '21C5039b' # beta 3 | |
macos '12.1' '21C5045a' # beta 4 | |
macos '12.1' '21C51' # RC 1 | |
macos '12.1' '21C52' | |
macos '12.2' '21D5025f' # beta 1 | |
macos '12.2' '21D5039d' # beta 2 | |
macos '12.2' '21D48' # RC 1 | |
macos '12.2' '21D49' | |
macos '12.2' '21D2048' # preinstalled | |
macos '12.2.1' '21D62' | |
macos '12.3' '21E5196i' # beta 1 | |
macos '12.3' '21E5206e' # beta 2 | |
macos '12.3' '21E5212f' # beta 3 | |
macos '12.3' '21E5222a' # beta 4 | |
macos '12.3' '21E5227a' # beta 5 | |
macos '12.3' '21E230' | |
macos '12.3.1' '21E258' | |
macos '12.4' '21F5048e' # beta 1 | |
macos '12.4' '21F5058e' # beta 2 | |
macos '12.4' '21F5063e' # beta 3 | |
macos '12.4' '21F5071b' # beta 4 | |
macos '12.4' '21F79' | |
macos '12.4' '21F2081' | |
macos '12.4' '21F2092' | |
macos '12.5' '21G5027d' # beta 1 | |
macos '12.5' '21G5037d' # beta 2 | |
macos '12.5' '21G5046c' # beta 3 | |
macos '12.5' '21G5056b' # beta 4 | |
macos '12.5' '21G5063a' # beta 5 | |
macos '12.5' '21G69' # RC 1 | |
macos '12.5' '21G72' | |
macos '12.5.1' '21G83' | |
macos '12.6' '21G115' | |
macos '12.6.1' '21G207' # RC 1 | |
macos '12.6.1' '21G211' # RC 2 | |
macos '12.6.1' '21G215' # RC 3 | |
macos '12.6.1' '21G217' | |
macos '12.6.2' '21G309' # RC 1 | |
macos '12.6.2' '21G312' # RC 2 | |
macos '12.6.2' '21G317' # RC 3 | |
macos '12.6.2' '21G320' | |
macos '12.6.3' '21G403' # RC 1 | |
macos '12.6.3' '21G417' # RC 2 | |
macos '12.6.3' '21G419' | |
macos '12.6.4' '21G506' # RC 1 | |
macos '12.6.4' '21G511' # RC 2 | |
macos '12.6.4' '21G516' # RC 3 | |
macos '12.6.4' '21G521' # RC 4 | |
macos '12.6.4' '21G526' | |
macos '12.6.5' '21G630' # RC 1 | |
macos '12.6.5' '21G531' | |
macos '12.6.6' '21G633' # RC 1 | |
macos '12.6.6' '21G639' # RC 2 | |
macos '12.6.6' '21G644' # RC 3 | |
macos '12.6.6' '21G646' | |
macos '12.6.7' '21G703' # RC 1 | |
macos '12.6.7' '21G708' # RC 2 | |
macos '11.6.7' '21G651' | |
macos '12.6.8' '21G713' # RC 1 | |
macos '12.6.8' '21G716' # RC 2 | |
macos '12.6.8' '21G724' # RC 3 | |
macos '12.6.8' '21G725' | |
macos '12.6.9' '21G726' | |
macos '12.7' '21G808' # RC 1 | |
macos '12.7' '21G813' # RC 2 | |
macos '12.7' '21G814' # RC 3 | |
macos '12.7' '21G816' | |
macos '12.7.1' '21G913' # RC 1 | |
macos '12.7.1' '21G918' # RC 2 | |
macos '12.7.1' '21G920' | |
macos '12.7.2' '21G1925' # RC 1 | |
macos '12.7.2' '21G1965' # RC 2 | |
macos '12.7.2' '21G1967' # RC 3 | |
macos '12.7.2' '21G1971' # RC 4 | |
macos '12.7.2' '21G1974' | |
macos '12.7.3' '21H1006' # RC 1 | |
macos '12.7.3' '21H1009' # RC 2 | |
macos '12.7.3' '21H1013' # RC 3 | |
fi; | |
if $incr || $rsr; then | |
macos '13.0' '22A5266r' # beta 1 | |
macos '13.0' '22A5286j' # beta 2 | |
macos '13.0' '22A5295h' # beta 3 | |
macos '13.0' '22A5295i' # beta 3 update | |
macos '13.0' '22A5311f' # beta 4 | |
macos '13.0' '22A5321d' # beta 5 | |
macos '13.0' '22A5331f' # beta 6 | |
macos '13.0' '22A5342f' # beta 7 | |
macos '13.0' '22A5352e' # beta 8 | |
macos '13.0' '22A5358e' # beta 9 | |
macos '13.0' '22A5365d' # beta 10 | |
macos '13.0' '22A5373b' # beta 11 | |
macos '13.0' '22A379' # RC 1 | |
macos '13.0' '22A380' | |
macos '13.0' '22A8380' # preinstalled | |
macos '13.0' '22A8381' # preinstalled | |
macos '13.0.1' '22A400' | |
macos '13.1' '22C5033e' # beta 1 | |
macos '13.1' '22C5044e' # beta 2 | |
macos '13.1' '22C5050e' # beta 3 | |
macos '13.1' '22C5059b' # beta 4 | |
macos '13.1' '22C65' | |
macos '13.2' '22D5027d' # beta 1 | |
macos '13.2' '22D5038i' # beta 2 | |
macos '13.2' '22D49' | |
macos '13.2.1' '22D68' | |
macos '13.3' '22E5219e' # beta 1 | |
macos '13.3' '22E5230e' # beta 2 | |
macos '13.3' '22E5236f' # beta 3 | |
macos '13.3' '22E5246b' # beta 4 | |
macos '13.3' '22E252' | |
macos '13.3' '22E8252' # preinstalled | |
macos '13.3.1' '22E261' | |
macos '13.4' '22F5027f' # beta 1 | |
macos '13.4' '22F5037d' # beta 2 | |
macos '13.4' '22F5049e' # beta 3 | |
macos '13.4' '22F5059b' # beta 4 | |
macos '13.4' '22F62' # RC 1 | |
macos '13.4' '22F63' # RC 2 | |
macos '13.4' '22F66' | |
macos '13.4' '22F2063' # preinstalled | |
macos '13.4' '22F2073' | |
macos '13.4.1' '22F82' | |
macos '13.4.1' '22F2083' | |
macos '13.5' '22G5027e' # beta 1 | |
macos '13.5' '22G5038d' # beta 2 | |
macos '13.5' '22G5048d' # beta 3 | |
macos '13.5' '22G5059d' # beta 4 | |
macos '13.5' '22G5072a' # beta 5 | |
macos '13.5' '22G74' | |
macos '13.5' '22G2074' # preinstalled | |
macos '13.5' '22G2080' # preinstalled | |
macos '13.5.1' '22G90' | |
macos '13.5.2' '22G91' | |
macos '13.6' '22G109' # RC 1 | |
macos '13.6' '22G115' # RC 2 | |
macos '13.6' '22G116' # RC 3 | |
macos '13.6' '22G120' | |
macos '13.6.1' '22G213' # RC 1 | |
macos '13.6.1' '22G311' # RC 2 | |
macos '13.6.1' '22G313' | |
macos '13.6.2' '22G417' # RC 1 | |
macos '13.6.2' '22G320' | |
macos '13.6.2' '22G2321' | |
macos '13.6.3' '22G423' # RC 1 | |
macos '13.6.3' '22G430' # RC 2 | |
macos '13.6.3' '22G433' # RC 3 | |
macos '13.6.3' '22G436' | |
macos '13.6.4' '22G504' # RC 1 | |
macos '13.6.4' '22G507' # RC 2 | |
macos '13.6.4' '22G511' # RC 3 | |
macos '14.0' '23A5257q' # beta 1 | |
macos '14.0' '23A5276g' # beta 2 | |
macos '14.0' '23A5286g' # beta 3 | |
macos '14.0' '23A5286i' # beta 3 update | |
macos '14.0' '23A5301g' # beta 4 | |
macos '14.0' '23A5301h' # beta 4 update | |
macos '14.0' '23A5312d' # beta 5 | |
macos '14.0' '23A5328b' # beta 6 | |
macos '14.0' '23A5337a' # beta 7 | |
macos '14.0' '23A339' # RC 1 | |
macos '14.0' '23A344' | |
macos '14.1' '23B5046f' # beta 1 | |
macos '14.1' '23B5056e' # beta 2 | |
macos '14.1' '23B5067a' # beta 3 | |
macos '14.1' '23B73' # RC 1 | |
macos '14.1' '23B74' | |
macos '14.1' '23B2073' # preinstalled | |
macos '14.1' '23B2077' | |
macos '14.1.1' '23B81' | |
macos '14.1.1' '23B2082' | |
macos '14.1.2' '23B92' | |
macos '14.1.2' '23B2091' | |
macos '14.2' '23C5030f' # beta 1 | |
macos '14.2' '23C5041e' # beta 2 | |
macos '14.2' '23C5047e' # beta 3 | |
macos '14.2' '23C5055b' # beta 4 | |
macos '14.2' '23C63' # RC 1 | |
macos '14.2' '23C64' | |
macos '14.2.1' '23C71' | |
macos '14.3' '23D5033f' # beta 1 | |
macos '14.3' '23D5043d' # beta 2 | |
macos '14.3' '23D5051b' # beta 3 | |
fi; | |
# ---------- ---------- ---------- ---------- ---------- ---------- ---------- ---------- | |
# AssetAudiences: | |
# 01c1d682-6e8f-4908-b724-5501fe3f5e5c iOS release | |
# ce9c2203-903b-4fb3-9f03-040dc2202694 iOS internal (not publicly accessible) | |
# 0c88076f-c292-4dad-95e7-304db9d29d34 iOS generic | |
# c724cb61-e974-42d3-a911-ffd4dce11eda iOS security updates | |
# f23050eb-bdfa-4b23-9eca-453e3b1a247c iOS 11 customer beta | |
# b7580fda-59d3-43ae-9488-a81b825e3c73 iOS 11 developer beta | |
# 5839f7cf-9610-483a-980f-6c4266a22f17 iOS 11 public beta | |
# ef473147-b8e7-4004-988e-0ae20e2532ef iOS 12 developer beta | |
# 94bf0742-38e6-4379-adf9-ec9995dde586 iOS 12 public beta | |
# d8ab8a45-ee39-4229-891e-9d3ca78a87ca iOS 13 developer beta | |
# 98bcaac1-66ed-4691-80e4-739f8ed5bb19 iOS 13 public beta | |
# 84da8706-e267-4554-8207-865ae0c3a120 iOS 14 customer beta | |
# dbbb0481-d521-4cdf-a2a4-5358affc224b iOS 14 developer beta | |
# 1506c359-28af-4ee1-a043-42df9d496d38 iOS 14 public beta | |
# a98cc469-7f15-4e60-aca5-11a26d60f1e7 iOS 15 customer beta | |
# ce48f60c-f590-4157-a96f-41179ca08278 iOS 15 developer beta | |
# 9e12a7a5-36ac-4583-b4fb-484736c739a8 iOS 15 public beta | |
# 817ce601-f365-4294-8982-b00f547bbe4a iOS 16 customer beta | |
# a6050bca-50d8-4e45-adc2-f7333396a42c iOS 16 developer beta | |
# 7466521f-cc37-4267-8f46-78033fa700c2 iOS 16 public beta | |
# 6ce634ea-92a6-4cb9-9610-9c8ba98d67a6 iOS 17 customer beta | |
# 9dcdaf87-801d-42f6-8ec6-307bd2ab9955 iOS 17 developer beta | |
# 48407998-4446-46b0-9f57-f76b935dc223 iOS 17 public beta | |
# 356d9da0-eee4-4c6c-bbe5-99b60eadddf0 tvOS release | |
# fe6f26f9-ec98-46d2-8faf-565375a83ba7 tvOS generic | |
# ebd90ea1-6216-4a7c-920e-666faccb2d50 tvOS 11 developer beta (returns 404) | |
# 5b220c65-fe50-460b-bac5-b6774b2ff475 tvOS 12 developer beta | |
# b79e95a7-1e51-4a6d-94f8-2bc2f9dbb000 tvOS 13 customer beta | |
# 975af5cb-019b-42db-9543-20327280f1b2 tvOS 13 developer beta | |
# a46c2f97-0afb-4a36-bcf6-8c0d74ec21be tvOS 14 customer beta | |
# 65254ac3-f331-4c19-8559-cbe22f5bc1a6 tvOS 14 developer beta | |
# 3565d2d0-06b5-450d-9c01-7086cdd13f97 tvOS 15 customer beta | |
# 4d0dcdf7-12f2-4ebf-9672-ac4a4459a8bc tvOS 15 developer beta | |
# 305f5233-93ed-45a4-9c91-985789b6506b tvOS 16 customer beta | |
# d6bac98b-9e2a-4f87-9aba-22c898b25d84 tvOS 16 developer beta | |
# 0c995cbe-84b5-4ea3-844a-a15a265ac0be tvOS 16 public beta | |
# 0e718292-408a-463d-bcc5-8ffc4bdeaabf tvOS 17 customer beta | |
# 61693fed-ab18-49f3-8983-7c3adf843913 tvOS 17 developer beta | |
# d9159cba-c93c-4e6d-8f9f-4d77b27b3a5e tvOS 17 public beta | |
# b82fcf9c-c284-41c9-8eb2-e69bf5a5269f watchOS release | |
# fe4c7f1c-f44c-4c00-b3df-eef225a1ac9d watchOS generic | |
# f659e06d-86a2-4bab-bcbb-61b7c60969ce watchOS 4 developer beta (returns 404) | |
# e841259b-ad2e-4046-b80f-ca96bc2e17f3 watchOS 5 developer beta | |
# 7303680f-f711-4020-acbd-58a706de6bf7 watchOS 6 customer beta | |
# d08cfd47-4a4a-4825-91b5-3353dfff194f watchOS 6 developer beta | |
# ff6df985-3cbe-4d54-ba5f-50d02428d2a3 watchOS 7 developer beta | |
# 6ac47c79-d0c4-42dc-b499-baa45e363c40 watchOS 7 public beta | |
# b407c130-d8af-42fc-ad7a-171efea5a3d0 watchOS 8 developer beta | |
# f755ea49-3d47-4829-9cdf-87aa76456282 watchOS 8 public beta | |
# 2778ab0c-de2e-46b9-83ce-f4b6fd659fa4 watchOS 9 customer beta | |
# 341f2a17-0024-46cd-968d-b4444ec3699f watchOS 9 developer beta | |
# 4935cf61-2a58-437a-be3f-4db423970e43 watchOS 9 public beta | |
# 982769a5-7551-424f-a599-7a855dddc9e8 watchOS 10 customer beta | |
# 7ae7f3b9-886a-437f-9b22-e9f017431b0e watchOS 10 developer beta | |
# f3d4d255-9db8-425c-bf9a-fea7dcdb940b watchOS 10 public beta | |
# 0322d49d-d558-4ddf-bdff-c0443d0e6fac audioOS release | |
# 33c017cc-b820-4b88-8917-6776d7f42b66 audioOS generic | |
# b05ddb59-b26d-4c89-9d09-5fda15e99207 audioOS 14 customer beta | |
# 58ff8d56-1d77-4473-ba88-ee1690475e40 audioOS 15 customer beta | |
# 59377047-7b3f-45b9-8e99-294c0daf3c85 audioOS 16 customer beta | |
# 3c3d5f0c-1016-426a-9890-11d68820eb13 audioOS 16 public beta | |
# 17536d4c-1a9d-4169-bc62-920a3873f7a5 audioOS 17 customer beta | |
# f7655fc0-7a0a-43fa-b781-170a834a3108 audioOS 17 public beta | |
# c59ff9d1-5468-4f6c-9e54-f68d5eeab93b visionOS release | |
# 5cb41593-0f8a-45ba-89c6-52928b9caaae visionOS generic | |
# 4d282764-95fe-4e0e-b7da-ea218fd1f75a visionOS 1 developer beta | |
# 60b55e25-a8ed-4f45-826c-c1495a4ccc65 macOS release | |
# 02d8e57e-dd1c-4090-aa50-b4ed2aef0062 macOS generic | |
# 215447a0-bb03-4e18-8598-7b6b6e7d34fd macOS 11 customer beta | |
# ca60afc6-5954-46fd-8cb9-60dde6ac39fd macOS 11 developer beta | |
# 902eb66c-8e37-451f-b0f2-ffb3e878560b macOS 11 public beta | |
# a3799e8a-246d-4dee-b418-76b4519a15a2 macOS 12 customer beta | |
# 298e518d-b45e-4d36-94be-34a63d6777ec macOS 12 developer beta | |
# 9f86c787-7c59-45a7-a79a-9c164b00f866 macOS 12 public beta | |
# 3c45c074-41be-4b5b-a511-8592336e6783 macOS 13 customer beta | |
# 683e9586-8a82-4e5f-b0e7-767541864b8b macOS 13 developer beta | |
# 800034a9-994c-4ecc-af4d-7b3b2ee0a5a6 macOS 13 public beta | |
# 01b45520-b12e-48b3-b30f-46e2795b3eb1 macOS 14 customer beta | |
# 77c3bd36-d384-44e8-b550-05122d7da438 macOS 14 developer beta | |
# 707ddc61-9c3d-4040-a3d0-2a6521b1c2df macOS 14 public beta | |
if "$test"; then | |
source "$(dirname "$0")/test.sh"; | |
fi; | |
workers=(); | |
running=0; | |
failed=0; | |
n=0; | |
all=0; | |
if $rsr; then | |
if [ "$filter" = 'all' ] || [ "$filter" = 'ios' ]; then | |
#x=7; | |
x=4; | |
#if $legacy; then | |
# x=$((x+0)); | |
#fi; | |
if [ "${#devices}" -eq 0 ]; then | |
y="${#iOS_device}"; | |
else | |
y=0; | |
for ((i = 1; i <= ${#iOS_device}; i++)); do | |
d="${iOS_device[$i]}"; | |
if [[ "${devices[(ie)$d]}" -le "${#devices}" ]]; then | |
y=$((y+1)); | |
fi; | |
done; | |
fi; | |
all="$((all + x*y*${#iOS_version}))"; | |
fi; # ios | |
if [ "$filter" = 'all' ] || [ "$filter" = 'macos' ]; then | |
#x=7; | |
x=4; | |
#if $legacy; then | |
# x=$((x+0)); | |
#fi; | |
if [ "${#devices}" -eq 0 ]; then | |
y="${#macOS_device}"; | |
else | |
y=0; | |
for ((i = 1; i <= ${#macOS_device}; i++)); do | |
d="${macOS_device[$i]}"; | |
if [[ "${devices[(ie)$d]}" -le "${#devices}" ]]; then | |
y=$((y+1)); | |
fi; | |
done; | |
fi; | |
all="$((all + x*y*${#macOS_version}))"; | |
fi; # macos | |
else # rsr | |
if [ "$filter" = 'all' ] || [ "$filter" = 'ios' ]; then | |
x=8; | |
if $legacy; then | |
x=$((x+13)); | |
fi; | |
if [ "${#devices}" -eq 0 ]; then | |
y="${#iOS_device}"; | |
else | |
y=0; | |
for ((i = 1; i <= ${#iOS_device}; i++)); do | |
d="${iOS_device[$i]}"; | |
if [[ "${devices[(ie)$d]}" -le "${#devices}" ]]; then | |
y=$((y+1)); | |
fi; | |
done; | |
fi; | |
all="$((all + x*y*${#iOS_version}))"; | |
x=8; | |
if $legacy; then | |
x=$((x+3)); | |
fi; | |
if [ "${#devices}" -eq 0 ]; then | |
y="${#display_device}"; | |
else | |
y=0; | |
for ((i = 1; i <= ${#display_device}; i++)); do | |
d="${display_device[$i]}"; | |
if [[ "${devices[(ie)$d]}" -le "${#devices}" ]]; then | |
y=$((y+1)); | |
fi; | |
done; | |
fi; | |
all="$((all + x*y*${#iOS_version}))"; | |
fi; # ios | |
if [ "$filter" = 'all' ] || [ "$filter" = 'tvos' ]; then | |
x=7; | |
if $legacy; then | |
x=$((x+7)); | |
fi; | |
if [ "${#devices}" -eq 0 ]; then | |
y="${#tvOS_device}"; | |
else | |
y=0; | |
for ((i = 1; i <= ${#tvOS_device}; i++)); do | |
d="${tvOS_device[$i]}"; | |
if [[ "${devices[(ie)$d]}" -le "${#devices}" ]]; then | |
y=$((y+1)); | |
fi; | |
done; | |
fi; | |
all="$((all + x*y*${#tvOS_version}))"; | |
fi; # tvos | |
if [ "$filter" = 'all' ] || [ "$filter" = 'watchos' ]; then | |
x=7; | |
if $legacy; then | |
x=$((x+7)); | |
fi; | |
if [ "${#devices}" -eq 0 ]; then | |
y="${#watchOS_device}"; | |
else | |
y=0; | |
for ((i = 1; i <= ${#watchOS_device}; i++)); do | |
d="${watchOS_device[$i]}"; | |
if [[ "${devices[(ie)$d]}" -le "${#devices}" ]]; then | |
y=$((y+1)); | |
fi; | |
done; | |
fi; | |
all="$((all + x*y*${#watchOS_version}))"; | |
fi; # watchos | |
if [ "$filter" = 'all' ] || [ "$filter" = 'audioos' ]; then | |
x=5; | |
if $legacy; then | |
x=$((x+2)); | |
fi; | |
if [ "${#devices}" -eq 0 ]; then | |
y="${#audioOS_device}"; | |
else | |
y=0; | |
for ((i = 1; i <= ${#audioOS_device}; i++)); do | |
d="${audioOS_device[$i]}"; | |
if [[ "${devices[(ie)$d]}" -le "${#devices}" ]]; then | |
y=$((y+1)); | |
fi; | |
done; | |
fi; | |
all="$((all + x*y*${#audioOS_version}))"; | |
fi; # audioos | |
if [ "$filter" = 'all' ] || [ "$filter" = 'xros' ]; then | |
x=2; | |
#if $legacy; then | |
# x=$((x+2)); | |
#fi; | |
if [ "${#devices}" -eq 0 ]; then | |
y="${#xrOS_device}"; | |
else | |
y=0; | |
for ((i = 1; i <= ${#xrOS_device}; i++)); do | |
d="${xrOS_device[$i]}"; | |
if [[ "${devices[(ie)$d]}" -le "${#devices}" ]]; then | |
y=$((y+1)); | |
fi; | |
done; | |
fi; | |
all="$((all + x*y*${#xrOS_version}))"; | |
fi; # xros | |
if [ "$filter" = 'all' ] || [ "$filter" = 'macos' ]; then | |
x=14; | |
if $legacy; then | |
x=$((x+12)); | |
fi; | |
if [ "${#devices}" -eq 0 ]; then | |
y="${#macOS_device}"; | |
else | |
y=0; | |
for ((i = 1; i <= ${#macOS_device}; i++)); do | |
d="${macOS_device[$i]}"; | |
if [[ "${devices[(ie)$d]}" -le "${#devices}" ]]; then | |
y=$((y+1)); | |
fi; | |
done; | |
fi; | |
all="$((all + x*y*${#macOS_version}))"; | |
fi; # macos | |
fi; # rsr | |
printf '\r%d/%d' "$n" "$all" >&2; | |
waitfor() # pid | |
{ | |
if ! wait "$1"; then | |
ret=$?; | |
if $fatal; then | |
echo "Pid $1 exited with status $ret"; | |
exit 1; | |
else | |
failed=$((failed+1)); | |
fi; | |
fi; | |
if ! $debug; then | |
n="$((n+1))"; | |
fi; | |
} | |
_dl() # type audience device model version build extra | |
{ | |
extra=''; | |
if [ $# -ge 7 ] && ! [ -z "$7" ]; then | |
extra="$extra, $7"; | |
fi; | |
if ! [ -z "$version" ]; then | |
extra="$extra"', "RequestedProductVersion": "'"$version"'", "Supervised": true, "DelayRequested": false'; | |
fi; | |
num=0; | |
while true; do | |
if a="$(curl --cacert "$dir/AppleCA.pem" -s -S -f --retry 3 -H 'Content-Type: application/json' -H 'Accept: application/json' 'https://gdmf.apple.com/v2/assets' --data '{"ClientVersion":2, "AssetType":"'"$1"'", "AssetAudience":"'"$2"'", "ProductType":"'"$3"'", "HWModelStr":"'"$4"'", "ProductVersion":"'"$5"'", "Build":"'"$6"'", "BuildVersion":"'"$6"'", "CompatibilityVersion":20'"$extra"'}')"; then | |
break; | |
fi; | |
num=$((num+1)); | |
if [ "$num" -ge 3 ]; then | |
if [ $# -ge 7 ]; then | |
echo "Failed to fetch: $1 $2 $3 $4 $5 $6 $7" >&2; | |
else | |
echo "Failed to fetch: $1 $2 $3 $4 $5 $6" >&2; | |
fi; | |
return 1; | |
fi; | |
done; | |
a=("${(@s/./)a}"); | |
a="$(tr '_' '/' <<<"${a[2]}" | tr '-' '+')"; | |
while [ $((${#a} % 4)) -ne 0 ]; do | |
a="${a}="; | |
done; | |
a="$(base64 -d <<<"$a")"; | |
jq '.Assets' <<<"$a" >"$dir/$2-$3-$(jq -r '.PallasNonce' <<<"$a").json"; | |
} | |
dl() # type audience device model version build | |
{ | |
while [ "${#workers[@]}" -ge $num_workers ]; do | |
waitfor "${workers[1]}"; | |
workers[1]=(); | |
done; | |
if $debug; then | |
n="$((n+1))"; | |
printf 'dl %s (%d/%d)\n' "$*" "$n" "$all" >&2; | |
else | |
printf '\r%d/%d' "$n" "$all" >&2; | |
fi; | |
_dl "$@" & | |
workers+=("$!"); | |
} | |
if $rsr; then | |
if [ "$filter" = 'all' ] || [ "$filter" = 'ios' ]; then | |
for ((i = 1; i <= ${#iOS_device[@]}; i++)); do | |
d="${iOS_device[$i]}"; | |
m="${iOS_model[$i]}"; | |
if [ "${#devices}" -eq 0 ] || [[ "${devices[(ie)$d]}" -le "${#devices}" ]]; then | |
for ((j = 1; j <= ${#iOS_version[@]}; j++)); do | |
v="${iOS_version[$j]}"; | |
b="${iOS_build[$j]}"; | |
z='"RestoreVersion":"0.0.0.0.0,0"'; | |
if egrep -q '[a-z]$' <<<"$b"; then | |
z="$z"',"ReleaseType":"Beta"'; | |
fi; | |
dl 'com.apple.MobileAsset.SplatSoftwareUpdate' '01c1d682-6e8f-4908-b724-5501fe3f5e5c' "$d" "$m" "$v" "$b" "$z"; | |
#if $legacy; then | |
# ... | |
#fi; | |
dl 'com.apple.MobileAsset.SplatSoftwareUpdate' '817ce601-f365-4294-8982-b00f547bbe4a' "$d" "$m" "$v" "$b" "$z"; | |
dl 'com.apple.MobileAsset.SplatSoftwareUpdate' 'a6050bca-50d8-4e45-adc2-f7333396a42c' "$d" "$m" "$v" "$b" "$z"; | |
dl 'com.apple.MobileAsset.SplatSoftwareUpdate' '7466521f-cc37-4267-8f46-78033fa700c2' "$d" "$m" "$v" "$b" "$z"; | |
#dl 'com.apple.MobileAsset.SplatSoftwareUpdate' '6ce634ea-92a6-4cb9-9610-9c8ba98d67a6' "$d" "$m" "$v" "$b" "$z"; | |
#dl 'com.apple.MobileAsset.SplatSoftwareUpdate' '9dcdaf87-801d-42f6-8ec6-307bd2ab9955' "$d" "$m" "$v" "$b" "$z"; | |
#dl 'com.apple.MobileAsset.SplatSoftwareUpdate' '48407998-4446-46b0-9f57-f76b935dc223' "$d" "$m" "$v" "$b" "$z"; | |
done; | |
fi; | |
done; | |
fi; | |
if [ "$filter" = 'all' ] || [ "$filter" = 'macos' ]; then | |
for ((i = 1; i <= ${#macOS_device[@]}; i++)); do | |
d="${macOS_device[$i]}"; | |
m="${macOS_model[$i]}"; | |
if [ "${#devices}" -eq 0 ] || [[ "${devices[(ie)$d]}" -le "${#devices}" ]]; then | |
for ((j = 1; j <= ${#macOS_version[@]}; j++)); do | |
v="${macOS_version[$j]}"; | |
b="${macOS_build[$j]}"; | |
dl 'com.apple.MobileAsset.MacSplatSoftwareUpdate' '60b55e25-a8ed-4f45-826c-c1495a4ccc65' "$d" "$m" "$v" "$b" '"RestoreVersion":"0.0.0.0.0,0"'; | |
#if $legacy; then | |
# ... | |
#fi; | |
dl 'com.apple.MobileAsset.MacSplatSoftwareUpdate' '3c45c074-41be-4b5b-a511-8592336e6783' "$d" "$m" "$v" "$b" '"RestoreVersion":"0.0.0.0.0,0"'; | |
dl 'com.apple.MobileAsset.MacSplatSoftwareUpdate' '683e9586-8a82-4e5f-b0e7-767541864b8b' "$d" "$m" "$v" "$b" '"RestoreVersion":"0.0.0.0.0,0"'; | |
dl 'com.apple.MobileAsset.MacSplatSoftwareUpdate' '800034a9-994c-4ecc-af4d-7b3b2ee0a5a6' "$d" "$m" "$v" "$b" '"RestoreVersion":"0.0.0.0.0,0"'; | |
#dl 'com.apple.MobileAsset.MacSplatSoftwareUpdate' '01b45520-b12e-48b3-b30f-46e2795b3eb1' "$d" "$m" "$v" "$b" '"RestoreVersion":"0.0.0.0.0,0"'; | |
#dl 'com.apple.MobileAsset.MacSplatSoftwareUpdate' '77c3bd36-d384-44e8-b550-05122d7da438' "$d" "$m" "$v" "$b" '"RestoreVersion":"0.0.0.0.0,0"'; | |
#dl 'com.apple.MobileAsset.MacSplatSoftwareUpdate' '707ddc61-9c3d-4040-a3d0-2a6521b1c2df' "$d" "$m" "$v" "$b" '"RestoreVersion":"0.0.0.0.0,0"'; | |
done; | |
fi; | |
done; | |
fi; | |
else # rsr | |
if [ "$filter" = 'all' ] || [ "$filter" = 'ios' ]; then | |
for ((i = 1; i <= ${#iOS_device[@]}; i++)); do | |
d="${iOS_device[$i]}"; | |
m="${iOS_model[$i]}"; | |
if [ "${#devices}" -eq 0 ] || [[ "${devices[(ie)$d]}" -le "${#devices}" ]]; then | |
for ((j = 1; j <= ${#iOS_version[@]}; j++)); do | |
v="${iOS_version[$j]}"; | |
b="${iOS_build[$j]}"; | |
z=''; | |
if egrep -q '[a-z]$' <<<"$b"; then | |
z='"ReleaseType":"Beta"'; | |
fi; | |
dl 'com.apple.MobileAsset.SoftwareUpdate' '01c1d682-6e8f-4908-b724-5501fe3f5e5c' "$d" "$m" "$v" "$b" "$z"; | |
dl 'com.apple.MobileAsset.SoftwareUpdate' 'c724cb61-e974-42d3-a911-ffd4dce11eda' "$d" "$m" "$v" "$b" "$z"; | |
if $legacy; then | |
dl 'com.apple.MobileAsset.SoftwareUpdate' 'f23050eb-bdfa-4b23-9eca-453e3b1a247c' "$d" "$m" "$v" "$b" "$z"; | |
dl 'com.apple.MobileAsset.SoftwareUpdate' 'b7580fda-59d3-43ae-9488-a81b825e3c73' "$d" "$m" "$v" "$b" "$z"; | |
dl 'com.apple.MobileAsset.SoftwareUpdate' '5839f7cf-9610-483a-980f-6c4266a22f17' "$d" "$m" "$v" "$b" "$z"; | |
dl 'com.apple.MobileAsset.SoftwareUpdate' 'ef473147-b8e7-4004-988e-0ae20e2532ef' "$d" "$m" "$v" "$b" "$z"; | |
dl 'com.apple.MobileAsset.SoftwareUpdate' '94bf0742-38e6-4379-adf9-ec9995dde586' "$d" "$m" "$v" "$b" "$z"; | |
dl 'com.apple.MobileAsset.SoftwareUpdate' 'd8ab8a45-ee39-4229-891e-9d3ca78a87ca' "$d" "$m" "$v" "$b" "$z"; | |
dl 'com.apple.MobileAsset.SoftwareUpdate' '98bcaac1-66ed-4691-80e4-739f8ed5bb19' "$d" "$m" "$v" "$b" "$z"; | |
dl 'com.apple.MobileAsset.SoftwareUpdate' '84da8706-e267-4554-8207-865ae0c3a120' "$d" "$m" "$v" "$b" "$z"; | |
dl 'com.apple.MobileAsset.SoftwareUpdate' 'dbbb0481-d521-4cdf-a2a4-5358affc224b' "$d" "$m" "$v" "$b" "$z"; | |
dl 'com.apple.MobileAsset.SoftwareUpdate' '1506c359-28af-4ee1-a043-42df9d496d38' "$d" "$m" "$v" "$b" "$z"; | |
dl 'com.apple.MobileAsset.SoftwareUpdate' 'a98cc469-7f15-4e60-aca5-11a26d60f1e7' "$d" "$m" "$v" "$b" "$z"; | |
dl 'com.apple.MobileAsset.SoftwareUpdate' 'ce48f60c-f590-4157-a96f-41179ca08278' "$d" "$m" "$v" "$b" "$z"; | |
dl 'com.apple.MobileAsset.SoftwareUpdate' '9e12a7a5-36ac-4583-b4fb-484736c739a8' "$d" "$m" "$v" "$b" "$z"; | |
fi; | |
dl 'com.apple.MobileAsset.SoftwareUpdate' '817ce601-f365-4294-8982-b00f547bbe4a' "$d" "$m" "$v" "$b" "$z"; | |
dl 'com.apple.MobileAsset.SoftwareUpdate' 'a6050bca-50d8-4e45-adc2-f7333396a42c' "$d" "$m" "$v" "$b" "$z"; | |
dl 'com.apple.MobileAsset.SoftwareUpdate' '7466521f-cc37-4267-8f46-78033fa700c2' "$d" "$m" "$v" "$b" "$z"; | |
dl 'com.apple.MobileAsset.SoftwareUpdate' '6ce634ea-92a6-4cb9-9610-9c8ba98d67a6' "$d" "$m" "$v" "$b" "$z"; | |
dl 'com.apple.MobileAsset.SoftwareUpdate' '9dcdaf87-801d-42f6-8ec6-307bd2ab9955' "$d" "$m" "$v" "$b" "$z"; | |
dl 'com.apple.MobileAsset.SoftwareUpdate' '48407998-4446-46b0-9f57-f76b935dc223' "$d" "$m" "$v" "$b" "$z"; | |
done; | |
fi; | |
done; | |
for ((i = 1; i <= ${#display_device[@]}; i++)); do | |
d="${display_device[$i]}"; | |
m="${display_model[$i]}"; | |
if [ "${#devices}" -eq 0 ] || [[ "${devices[(ie)$d]}" -le "${#devices}" ]]; then | |
for ((j = 1; j <= ${#iOS_version[@]}; j++)); do | |
v="${iOS_version[$j]}"; | |
b="${iOS_build[$j]}"; | |
dl 'com.apple.MobileAsset.DarwinAccessoryUpdate.A2525' '60b55e25-a8ed-4f45-826c-c1495a4ccc65' "$d" "$m" "$v" "$b"; | |
dl 'com.apple.MobileAsset.DarwinAccessoryUpdate.A2525' '02d8e57e-dd1c-4090-aa50-b4ed2aef0062' "$d" "$m" "$v" "$b"; | |
if $legacy; then | |
dl 'com.apple.MobileAsset.DarwinAccessoryUpdate.A2525' 'a3799e8a-246d-4dee-b418-76b4519a15a2' "$d" "$m" "$v" "$b"; | |
dl 'com.apple.MobileAsset.DarwinAccessoryUpdate.A2525' '298e518d-b45e-4d36-94be-34a63d6777ec' "$d" "$m" "$v" "$b"; | |
dl 'com.apple.MobileAsset.DarwinAccessoryUpdate.A2525' '9f86c787-7c59-45a7-a79a-9c164b00f866' "$d" "$m" "$v" "$b"; | |
fi; | |
dl 'com.apple.MobileAsset.DarwinAccessoryUpdate.A2525' '3c45c074-41be-4b5b-a511-8592336e6783' "$d" "$m" "$v" "$b"; | |
dl 'com.apple.MobileAsset.DarwinAccessoryUpdate.A2525' '683e9586-8a82-4e5f-b0e7-767541864b8b' "$d" "$m" "$v" "$b"; | |
dl 'com.apple.MobileAsset.DarwinAccessoryUpdate.A2525' '800034a9-994c-4ecc-af4d-7b3b2ee0a5a6' "$d" "$m" "$v" "$b"; | |
dl 'com.apple.MobileAsset.DarwinAccessoryUpdate.A2525' '01b45520-b12e-48b3-b30f-46e2795b3eb1' "$d" "$m" "$v" "$b"; | |
dl 'com.apple.MobileAsset.DarwinAccessoryUpdate.A2525' '77c3bd36-d384-44e8-b550-05122d7da438' "$d" "$m" "$v" "$b"; | |
dl 'com.apple.MobileAsset.DarwinAccessoryUpdate.A2525' '707ddc61-9c3d-4040-a3d0-2a6521b1c2df' "$d" "$m" "$v" "$b"; | |
done; | |
fi; | |
done; | |
fi; | |
if [ "$filter" = 'all' ] || [ "$filter" = 'tvos' ]; then | |
for ((i = 1; i <= ${#tvOS_device[@]}; i++)); do | |
d="${tvOS_device[$i]}"; | |
m="${tvOS_model[$i]}"; | |
if [ "${#devices}" -eq 0 ] || [[ "${devices[(ie)$d]}" -le "${#devices}" ]]; then | |
for ((j = 1; j <= ${#tvOS_version[@]}; j++)); do | |
v="${tvOS_version[$j]}"; | |
b="${tvOS_build[$j]}"; | |
z=''; | |
if egrep -q '[a-z]$' <<<"$b"; then | |
z='"ReleaseType":"Beta"'; | |
fi; | |
dl 'com.apple.MobileAsset.SoftwareUpdate' '356d9da0-eee4-4c6c-bbe5-99b60eadddf0' "$d" "$m" "$v" "$b" "$z"; | |
if $legacy; then | |
dl 'com.apple.MobileAsset.SoftwareUpdate' '5b220c65-fe50-460b-bac5-b6774b2ff475' "$d" "$m" "$v" "$b" "$z"; | |
dl 'com.apple.MobileAsset.SoftwareUpdate' 'b79e95a7-1e51-4a6d-94f8-2bc2f9dbb000' "$d" "$m" "$v" "$b" "$z"; | |
dl 'com.apple.MobileAsset.SoftwareUpdate' '975af5cb-019b-42db-9543-20327280f1b2' "$d" "$m" "$v" "$b" "$z"; | |
dl 'com.apple.MobileAsset.SoftwareUpdate' 'a46c2f97-0afb-4a36-bcf6-8c0d74ec21be' "$d" "$m" "$v" "$b" "$z"; | |
dl 'com.apple.MobileAsset.SoftwareUpdate' '65254ac3-f331-4c19-8559-cbe22f5bc1a6' "$d" "$m" "$v" "$b" "$z"; | |
dl 'com.apple.MobileAsset.SoftwareUpdate' '3565d2d0-06b5-450d-9c01-7086cdd13f97' "$d" "$m" "$v" "$b" "$z"; | |
dl 'com.apple.MobileAsset.SoftwareUpdate' '4d0dcdf7-12f2-4ebf-9672-ac4a4459a8bc' "$d" "$m" "$v" "$b" "$z"; | |
fi; | |
dl 'com.apple.MobileAsset.SoftwareUpdate' '305f5233-93ed-45a4-9c91-985789b6506b' "$d" "$m" "$v" "$b" "$z"; | |
dl 'com.apple.MobileAsset.SoftwareUpdate' 'd6bac98b-9e2a-4f87-9aba-22c898b25d84' "$d" "$m" "$v" "$b" "$z"; | |
dl 'com.apple.MobileAsset.SoftwareUpdate' '0c995cbe-84b5-4ea3-844a-a15a265ac0be' "$d" "$m" "$v" "$b" "$z"; | |
dl 'com.apple.MobileAsset.SoftwareUpdate' '0e718292-408a-463d-bcc5-8ffc4bdeaabf' "$d" "$m" "$v" "$b" "$z"; | |
dl 'com.apple.MobileAsset.SoftwareUpdate' '61693fed-ab18-49f3-8983-7c3adf843913' "$d" "$m" "$v" "$b" "$z"; | |
dl 'com.apple.MobileAsset.SoftwareUpdate' 'd9159cba-c93c-4e6d-8f9f-4d77b27b3a5e' "$d" "$m" "$v" "$b" "$z"; | |
done; | |
fi; | |
done; | |
fi; | |
if [ "$filter" = 'all' ] || [ "$filter" = 'watchos' ]; then | |
for ((i = 1; i <= ${#watchOS_device[@]}; i++)); do | |
d="${watchOS_device[$i]}"; | |
m="${watchOS_model[$i]}"; | |
if [ "${#devices}" -eq 0 ] || [[ "${devices[(ie)$d]}" -le "${#devices}" ]]; then | |
for ((j = 1; j <= ${#watchOS_version[@]}; j++)); do | |
v="${watchOS_version[$j]}"; | |
b="${watchOS_build[$j]}"; | |
dl 'com.apple.MobileAsset.SoftwareUpdate' 'b82fcf9c-c284-41c9-8eb2-e69bf5a5269f' "$d" "$m" "$v" "$b"; | |
if $legacy; then | |
dl 'com.apple.MobileAsset.SoftwareUpdate' 'e841259b-ad2e-4046-b80f-ca96bc2e17f3' "$d" "$m" "$v" "$b"; | |
dl 'com.apple.MobileAsset.SoftwareUpdate' '7303680f-f711-4020-acbd-58a706de6bf7' "$d" "$m" "$v" "$b"; | |
dl 'com.apple.MobileAsset.SoftwareUpdate' 'd08cfd47-4a4a-4825-91b5-3353dfff194f' "$d" "$m" "$v" "$b"; | |
dl 'com.apple.MobileAsset.SoftwareUpdate' 'ff6df985-3cbe-4d54-ba5f-50d02428d2a3' "$d" "$m" "$v" "$b"; | |
dl 'com.apple.MobileAsset.SoftwareUpdate' '6ac47c79-d0c4-42dc-b499-baa45e363c40' "$d" "$m" "$v" "$b"; | |
dl 'com.apple.MobileAsset.SoftwareUpdate' 'b407c130-d8af-42fc-ad7a-171efea5a3d0' "$d" "$m" "$v" "$b"; | |
dl 'com.apple.MobileAsset.SoftwareUpdate' 'f755ea49-3d47-4829-9cdf-87aa76456282' "$d" "$m" "$v" "$b"; | |
fi; | |
dl 'com.apple.MobileAsset.SoftwareUpdate' '2778ab0c-de2e-46b9-83ce-f4b6fd659fa4' "$d" "$m" "$v" "$b"; | |
dl 'com.apple.MobileAsset.SoftwareUpdate' '341f2a17-0024-46cd-968d-b4444ec3699f' "$d" "$m" "$v" "$b"; | |
dl 'com.apple.MobileAsset.SoftwareUpdate' '4935cf61-2a58-437a-be3f-4db423970e43' "$d" "$m" "$v" "$b"; | |
dl 'com.apple.MobileAsset.SoftwareUpdate' '982769a5-7551-424f-a599-7a855dddc9e8' "$d" "$m" "$v" "$b"; | |
dl 'com.apple.MobileAsset.SoftwareUpdate' '7ae7f3b9-886a-437f-9b22-e9f017431b0e' "$d" "$m" "$v" "$b"; | |
dl 'com.apple.MobileAsset.SoftwareUpdate' 'f3d4d255-9db8-425c-bf9a-fea7dcdb940b' "$d" "$m" "$v" "$b"; | |
done; | |
fi; | |
done; | |
fi; | |
if [ "$filter" = 'all' ] || [ "$filter" = 'audioos' ]; then | |
for ((i = 1; i <= ${#audioOS_device[@]}; i++)); do | |
d="${audioOS_device[$i]}"; | |
m="${audioOS_model[$i]}"; | |
if [ "${#devices}" -eq 0 ] || [[ "${devices[(ie)$d]}" -le "${#devices}" ]]; then | |
for ((j = 1; j <= ${#audioOS_version[@]}; j++)); do | |
v="${audioOS_version[$j]}"; | |
b="${audioOS_build[$j]}"; | |
z=''; | |
if egrep -q '[a-z]$' <<<"$b"; then | |
z='"ReleaseType":"Beta"'; | |
fi; | |
dl 'com.apple.MobileAsset.SoftwareUpdate' '0322d49d-d558-4ddf-bdff-c0443d0e6fac' "$d" "$m" "$v" "$b" "$z"; | |
if $legacy; then | |
dl 'com.apple.MobileAsset.SoftwareUpdate' 'b05ddb59-b26d-4c89-9d09-5fda15e99207' "$d" "$m" "$v" "$b" "$z"; | |
dl 'com.apple.MobileAsset.SoftwareUpdate' '58ff8d56-1d77-4473-ba88-ee1690475e40' "$d" "$m" "$v" "$b" "$z"; | |
fi; | |
dl 'com.apple.MobileAsset.SoftwareUpdate' '59377047-7b3f-45b9-8e99-294c0daf3c85' "$d" "$m" "$v" "$b" "$z"; | |
dl 'com.apple.MobileAsset.SoftwareUpdate' '3c3d5f0c-1016-426a-9890-11d68820eb13' "$d" "$m" "$v" "$b" "$z"; | |
dl 'com.apple.MobileAsset.SoftwareUpdate' '17536d4c-1a9d-4169-bc62-920a3873f7a5' "$d" "$m" "$v" "$b" "$z"; | |
dl 'com.apple.MobileAsset.SoftwareUpdate' 'f7655fc0-7a0a-43fa-b781-170a834a3108' "$d" "$m" "$v" "$b" "$z"; | |
done; | |
fi; | |
done; | |
fi; | |
if [ "$filter" = 'all' ] || [ "$filter" = 'xros' ]; then | |
for ((i = 1; i <= ${#xrOS_device[@]}; i++)); do | |
d="${xrOS_device[$i]}"; | |
m="${xrOS_model[$i]}"; | |
if [ "${#devices}" -eq 0 ] || [[ "${devices[(ie)$d]}" -le "${#devices}" ]]; then | |
for ((j = 1; j <= ${#xrOS_version[@]}; j++)); do | |
v="${xrOS_version[$j]}"; | |
b="${xrOS_build[$j]}"; | |
z=''; | |
if egrep -q '[a-z]$' <<<"$b"; then | |
z='"ReleaseType":"Beta"'; | |
fi; | |
dl 'com.apple.MobileAsset.SoftwareUpdate' 'c59ff9d1-5468-4f6c-9e54-f68d5eeab93b' "$d" "$m" "$v" "$b" "$z"; | |
#if $legacy; then | |
# ... | |
#fi; | |
dl 'com.apple.MobileAsset.SoftwareUpdate' '4d282764-95fe-4e0e-b7da-ea218fd1f75a' "$d" "$m" "$v" "$b" "$z"; | |
done; | |
fi; | |
done; | |
fi; | |
if [ "$filter" = 'all' ] || [ "$filter" = 'macos' ]; then | |
for ((i = 1; i <= ${#macOS_device[@]}; i++)); do | |
d="${macOS_device[$i]}"; | |
m="${macOS_model[$i]}"; | |
if [ "${#devices}" -eq 0 ] || [[ "${devices[(ie)$d]}" -le "${#devices}" ]]; then | |
for ((j = 1; j <= ${#macOS_version[@]}; j++)); do | |
v="${macOS_version[$j]}"; | |
b="${macOS_build[$j]}"; | |
dl 'com.apple.MobileAsset.MacSoftwareUpdate' '60b55e25-a8ed-4f45-826c-c1495a4ccc65' "$d" "$m" "$v" "$b"; | |
dl 'com.apple.MobileAsset.SFRSoftwareUpdate' '60b55e25-a8ed-4f45-826c-c1495a4ccc65' "$d" "$m" "$v" "$b"; | |
if $legacy; then | |
dl 'com.apple.MobileAsset.MacSoftwareUpdate' '215447a0-bb03-4e18-8598-7b6b6e7d34fd' "$d" "$m" "$v" "$b"; | |
dl 'com.apple.MobileAsset.SFRSoftwareUpdate' '215447a0-bb03-4e18-8598-7b6b6e7d34fd' "$d" "$m" "$v" "$b"; | |
dl 'com.apple.MobileAsset.MacSoftwareUpdate' 'ca60afc6-5954-46fd-8cb9-60dde6ac39fd' "$d" "$m" "$v" "$b"; | |
dl 'com.apple.MobileAsset.SFRSoftwareUpdate' 'ca60afc6-5954-46fd-8cb9-60dde6ac39fd' "$d" "$m" "$v" "$b"; | |
dl 'com.apple.MobileAsset.MacSoftwareUpdate' '902eb66c-8e37-451f-b0f2-ffb3e878560b' "$d" "$m" "$v" "$b"; | |
dl 'com.apple.MobileAsset.SFRSoftwareUpdate' '902eb66c-8e37-451f-b0f2-ffb3e878560b' "$d" "$m" "$v" "$b"; | |
dl 'com.apple.MobileAsset.MacSoftwareUpdate' 'a3799e8a-246d-4dee-b418-76b4519a15a2' "$d" "$m" "$v" "$b"; | |
dl 'com.apple.MobileAsset.SFRSoftwareUpdate' 'a3799e8a-246d-4dee-b418-76b4519a15a2' "$d" "$m" "$v" "$b"; | |
dl 'com.apple.MobileAsset.MacSoftwareUpdate' '298e518d-b45e-4d36-94be-34a63d6777ec' "$d" "$m" "$v" "$b"; | |
dl 'com.apple.MobileAsset.SFRSoftwareUpdate' '298e518d-b45e-4d36-94be-34a63d6777ec' "$d" "$m" "$v" "$b"; | |
dl 'com.apple.MobileAsset.MacSoftwareUpdate' '9f86c787-7c59-45a7-a79a-9c164b00f866' "$d" "$m" "$v" "$b"; | |
dl 'com.apple.MobileAsset.SFRSoftwareUpdate' '9f86c787-7c59-45a7-a79a-9c164b00f866' "$d" "$m" "$v" "$b"; | |
fi; | |
dl 'com.apple.MobileAsset.MacSoftwareUpdate' '3c45c074-41be-4b5b-a511-8592336e6783' "$d" "$m" "$v" "$b"; | |
dl 'com.apple.MobileAsset.SFRSoftwareUpdate' '3c45c074-41be-4b5b-a511-8592336e6783' "$d" "$m" "$v" "$b"; | |
dl 'com.apple.MobileAsset.MacSoftwareUpdate' '683e9586-8a82-4e5f-b0e7-767541864b8b' "$d" "$m" "$v" "$b"; | |
dl 'com.apple.MobileAsset.SFRSoftwareUpdate' '683e9586-8a82-4e5f-b0e7-767541864b8b' "$d" "$m" "$v" "$b"; | |
dl 'com.apple.MobileAsset.MacSoftwareUpdate' '800034a9-994c-4ecc-af4d-7b3b2ee0a5a6' "$d" "$m" "$v" "$b"; | |
dl 'com.apple.MobileAsset.SFRSoftwareUpdate' '800034a9-994c-4ecc-af4d-7b3b2ee0a5a6' "$d" "$m" "$v" "$b"; | |
dl 'com.apple.MobileAsset.MacSoftwareUpdate' '01b45520-b12e-48b3-b30f-46e2795b3eb1' "$d" "$m" "$v" "$b"; | |
dl 'com.apple.MobileAsset.SFRSoftwareUpdate' '01b45520-b12e-48b3-b30f-46e2795b3eb1' "$d" "$m" "$v" "$b"; | |
dl 'com.apple.MobileAsset.MacSoftwareUpdate' '77c3bd36-d384-44e8-b550-05122d7da438' "$d" "$m" "$v" "$b"; | |
dl 'com.apple.MobileAsset.SFRSoftwareUpdate' '77c3bd36-d384-44e8-b550-05122d7da438' "$d" "$m" "$v" "$b"; | |
dl 'com.apple.MobileAsset.MacSoftwareUpdate' '707ddc61-9c3d-4040-a3d0-2a6521b1c2df' "$d" "$m" "$v" "$b"; | |
dl 'com.apple.MobileAsset.SFRSoftwareUpdate' '707ddc61-9c3d-4040-a3d0-2a6521b1c2df' "$d" "$m" "$v" "$b"; | |
done; | |
fi; | |
done; | |
fi; | |
fi; # rsr | |
for x in "${workers[@]}"; do | |
waitfor "$x"; | |
if ! $debug; then | |
printf '\r%d/%d' "$n" "$all" >&2; | |
fi; | |
done; | |
printf '\n' >&2; | |
if [ "$failed" -gt 0 ]; then | |
printf '\e[93m%u requests failed\e[0m\n' "$failed" >&2; | |
fi; | |
if [ "$failed" -ge "$n" ]; then | |
return 1; | |
fi; | |
# Need to cd because glob expansion will exceed arg length otherwise. | |
cd "$dir"; | |
if $rsr; then | |
find . -name '*.json' -print0 | xargs -0 jq -r 'def pad(s;l): s|.+(" "*([1,l-(.|length)]|max)); .[] | (pad(.OSVersion + " " + .ProductVersionExtra;12) + pad(.Build;16) + pad(.PrerequisiteOSVersion;12) + pad(.PrerequisiteBuild;12) + pad(if has("SupportedDevices") then .SupportedDevices[] else "" end;20) + pad(.SupportedDeviceModels[];20) + .__BaseURL + .__RelativePath)' | sort -uV; | |
else | |
find . -name '*.json' -print0 | xargs -0 jq -r 'def pad(s;l): s|.+(" "*([1,l-(.|length)]|max)); .[] | (pad(.OSVersion;12) + pad(.Build;12) + pad(.PrerequisiteOSVersion;12) + pad(.PrerequisiteBuild;12) + pad(if has("SupportedDevices") then .SupportedDevices[] else "" end;24) + pad(.SupportedDeviceModels[];24) + .__BaseURL + .__RelativePath)' | sort -uV; | |
fi; |
@blacktop yes, I'm aware of that listing. But it's not all that useful, sadly. Pallas really doesn't support enumeration, but only lookup with known information. Usually the best place to obtain new device models and board IDs is an sqlite database inside XCode. For devices that Xcode doesn't target, you can usually find some strings inside the dyld shared cache of another device.
It seems like with something like Frida you could hook this to return true
(or maybe just call the func with a test bin and use lldb to return true
)
v17 = MGGetBoolAnswer(CFSTR("LBJfwOEzExRxzlAnSuI7eg"));
as well as set InternalBuild
to true
(that uses https://gdmf-staging-int.apple.com/v2/assets
) and maybe pull down an internal OTA 😬
Maybe you would also need to set the DownloadAuthorizationHeader
value?
It's so annoying that they are 403 Forbidden-ing the https://mesu.apple.com/assets/iOS14DeveloperSeed
even though you can see it's still in the beta.profile 😭
Hi, what is this file used for? And how to use it? I try to sh pallas.sh
but get no output.
I come across this file with google, it seems like it's what I am looking for, but don't know how to use it.
Thanks!
@kejiweixun should all be fixed now.
Are you actually able to ask for a specific version? Like ./pallas.sh 14.8.1
?
I doesn't seem to be working for me, but I might be misunderstanding your cli arg options.
@blacktop yes, you can ask for a specific version - so long as that version has been the latest available one in the past 90 days.
Unfortunately some asset audiences return errors though, so you'll want to use -n
too.
./pallas.sh -n ios 14.8.1
works for me (although 14.8.1 is considered the latest version on one asset audience already).
@Siguza I ran ./pallas.sh -n macos -l
I get 2 "unique" URLs for macOS12.3b5:
- 54edd28502b599dfb53b4c37f301bd599482bc13.zip
- dfc11aca30f2e97cb9424dd49c068cd1b33fdcdf.zip
however, https://www.theiphonewiki.com/wiki/Beta_OTA_Updates/Mac/12.3 lists 5 unique URLs?? 🤔 I think for most peeps they just need the bigun, but how are they getting the others?
@blacktop look at the URLs. One is actual macOS, the other is SFR (Recovery). The iPhone wiki lists incremental builds too, which you can get with -i
(but you'll need to add beta 4 into the script otherwise you'll only see 3 incremental ones).
@Siguza What are the prerequisites for this script? I am trying to run it, but it says syntax error on line 2.
@sydia1103 bruh line 2 is empty, wtf are you running this on?
@Siguza I am running this on MacOS Mojave 10.14.6. Something of note is that I have xcode command line tools installed but XCode itself is not installed.
@Siguza This is the output. /pallas.sh: line 1: {rtf1ansiansicpg1252cocoartf1671cocoasubrtf600: command not found ./pallas.sh: line 2: syntax error near unexpected token
}'
./pallas.sh: line 2: {\fonttbl\f0\fmodern\fcharset0 Courier;}'
I have no idea what is happening.
@sydia1103 dude you saved the source code in an RTF document.
@Siguza Well, it seems I did! I fixed that now, and now it gives an error server returned 422 unprocessable identity.
I made a proxy for pallas server https://github.com/notzheng/pallas-proxy to make test convenient , it just decode jwt body to json from original response. online demo here https://pallas-proxy.notzheng.com/v2/assets .
and did you find out how to receive two versions of oat like this? may be add some params to https://gdmf.apple.com?
I tried these params, and the server returns two iOS16 versions: 9.9.16.0
and 16.0
.
{
"BuildVersion": "19G71", // <--
"ProductVersion": "15.6", // <--
"AssetAudience": "01c1d682-6e8f-4908-b724-5501fe3f5e5c",
"AssetType": "com.apple.MobileAsset.SoftwareUpdate",
"ClientVersion": "2",
"HWModelStr": "D54pAP",
"ProductType": "iPhone13,4",
"AllowSameBuildVersion": true,
"DeviceName": "iPhone",
}
@notzheng AssetAudience c724cb61-e974-42d3-a911-ffd4dce11eda
@notzheng AssetAudience
c724cb61-e974-42d3-a911-ffd4dce11eda
Thanks! It is!
I looked up iOS 15.6's software update log, it sent two request to https://gdmf.apple.com/v2/assets
:
- First one use
AssetAudience = 01c1d682-6e8f-4908-b724-5501fe3f5e5c
and server responded with responded iOS 16 Version - Second one use
AssetAudience = c724cb61-e974-42d3-a911-ffd4dce11eda & OriginalAssetAudience = 01c1d682-6e8f-4908-b724-5501fe3f5e5c
(thoughOriginalAssetAudience
does not effect anything) and server responded with iOS 15.7 Version
So iOS render this UI by separate requests rather than single one.
And thanks again for your EXCELLENT work!
Can somebody please tell me exactly what this script is meant to do ? bit confused on that.
@codedprodotcom give you links to Apple OTA update firmware files.
Hello, can it be used in combination with idevicerestore to downgrade firmware tried pallas-proxy returned me bad gateway 406 :(
@bbaranoff nope.
Does anyone know how to list the beta versions of iOS and macOS at this address (gdmf.apple.com/v2/pmv)? Or is there any other way to do this listing?
@LucasMoreira97 Pallas does not let you "list" stuff. You can request specific versions from Pallas if the given version was the latest at some point in the last 90 days. But this only works for release builds, not betas. Once a beta build is no longer advertised, it's gone, and the only way to get a link to it is to ask someone who archived Pallas responses when that build was being advertised.
Forgive me for being so inexperienced in this matter, but we recently exited the macOS beta. So, if we were still on beta 6, for example, would it be listed at this address (gdmf.apple.com/v2/pmv)?
@LucasMoreira97 Pallas does not let you "list" stuff. You can request specific versions from Pallas if the given version was the latest at some point in the last 90 days. But this only works for release builds, not betas. Once a beta build is no longer advertised, it's gone, and the only way to get a link to it is to ask someone who archived Pallas responses when that build was being advertised.
@LucasMoreira97 No. We're currently on 14.0 RC 2, and as you can see, no 14.0 is listed anywhere. 14.0 will only be listed once it enters final release. Betas and Release Candidates are not listed.
@LucasMoreira97 No. We're currently on 14.0 RC 2, and as you can see, no 14.0 is listed anywhere. 14.0 will only be listed once it enters final release. Betas and Release Candidates are not listed.
I see, so the only way to access beta versions is by having previously saved their information. Thank you very much, you've been very helpful
I do see the ones in XCode's
mobileassetd
and I do see the ones in the profile:Thank you!!
Have you checked out:
http --verify=no https://gdmf.apple.com/v2/pmv
kinda cool, but sad no BoardIDs/
SupportedDeviceModels
😞