Skip to content

Instantly share code, notes, and snippets.

@Siguza
Last active August 13, 2024 08:20
Show Gist options
  • Save Siguza/0331c183c8c59e4850cd0b62fd501424 to your computer and use it in GitHub Desktop.
Save Siguza/0331c183c8c59e4850cd0b62fd501424 to your computer and use it in GitHub Desktop.
newstyle OTA
#!/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
idevice 'iPad14,8' 'J507AP' # iPad Air 6 (11.0")
idevice 'iPad14,9' 'J508AP' # iPad Air 6 (11.0")
idevice 'iPad14,10' 'J537AP' # iPad Air 6 (13.0")
idevice 'iPad14,11' 'J538AP' # iPad Air 6 (13.0")
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")
idevice 'iPad16,3' 'J717AP' # iPad Pro 7 (11.0")
idevice 'iPad16,4' 'J718AP' # iPad Pro 7 (11.0")
idevice 'iPad16,5' 'J720AP' # iPad Pro 7 (13.0")
idevice 'iPad16,6' 'J721AP' # iPad Pro 7 (13.0")
# 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' # beta 1 update
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 update
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 update
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'
ios '15.8.1' '19H380'
ios '15.8.2' '19H384'
ios '15.8.3' '19H386' # RC 1
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' '20D50' # preinstalled
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 '16.7.5' '20H307'
ios '16.7.6' '20H320'
ios '16.7.7' '20H330'
ios '16.7.8' '20H343'
ios '16.7.9' '20H348'
ios '16.7.10' '20H350'
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
ios '17.3' '21D50'
ios '17.3.1' '21D61'
ios '17.4' '21E5184i' # beta 1
ios '17.4' '21E5184k' # beta 1 update
ios '17.4' '21E5195e' # beta 2
ios '17.4' '21E5200d' # beta 3
ios '17.4' '21E5209b' # beta 4
ios '17.4' '21E217' # RC 1
ios '17.4' '21E219'
ios '17.4' '21E8237' # preinstalled
ios '17.4.1' '21E236'
ios '17.4.1' '21E237'
ios '17.5' '21F5048f' # beta 1
ios '17.5' '21F5058e' # beta 2
ios '17.5' '21F5063f' # beta 3
ios '17.5' '21F5073b' # beta 4
ios '17.5' '21F79'
ios '17.5.1' '21F90'
ios '17.5.1' '21F91'
ios '17.6' '21G5052e' # beta 1
ios '17.6' '21G5061c' # beta 2
ios '17.6' '21G5066d' # beta 3
ios '17.6' '21G5075a' # beta 4
ios '17.6' '21G79' # RC 1
ios '17.6' '21G80'
ios '17.6.1' '21G93'
ios '18.0' '22A5282m' # beta 1
ios '18.0' '22A5297f' # beta 2
ios '18.0' '22A5307f' # beta 3
ios '18.0' '22A5307i' # beta 3 update
ios '18.0' '22A5316j' # beta 4
ios '18.0' '22A5326f' # beta 5
ios '18.0' '22A5338b' # beta 6
ios '18.1' '22B5007p' # beta 1
ios '18.1' '22B5023e' # beta 2
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
tvos '17.3' '21K646'
tvos '17.4' '21L5195h' # beta 1
tvos '17.4' '21L5206f' # beta 2
tvos '17.4' '21L5212d' # beta 3
tvos '17.4' '21L5222a' # beta 4
tvos '17.4' '21L5225a' # beta 5
tvos '17.4' '21L227'
tvos '17.5' '21L5543d' # beta 1
tvos '17.5' '21L5553e' # beta 2
tvos '17.5' '21L5558d' # beta 3
tvos '17.5' '21L5567a' # beta 4
tvos '17.5' '21L569'
tvos '17.5.1' '21L580'
tvos '17.6' '21M5045c' # beta 1
tvos '17.6' '21M5054a' # beta 2
tvos '17.6' '21M5059b' # beta 3
tvos '17.6' '21M5068a' # beta 4
tvos '17.6' '21M71'
tvos '18.0' '22J5290l' # beta 1
tvos '18.0' '22J5305e' # beta 2
tvos '18.0' '22J5315e' # beta 3
tvos '18.0' '22J5324f' # beta 4
tvos '18.0' '22J5335d' # beta 5
tvos '18.0' '22J5346a' # beta 6
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'
watchos '10.3' '21S5625c' # beta 1
watchos '10.3' '21S5635d' # beta 2
watchos '10.3' '21S5642a' # beta 3
watchos '10.3' '21S644'
watchos '10.3.1' '21S651'
watchos '10.4' '21T5185g' # beta 1
watchos '10.4' '21T5196d' # beta 2
watchos '10.4' '21T5202e' # beta 3
watchos '10.4' '21T5213a' # beta 4
watchos '10.4' '21T216'
watchos '10.5' '21T5545f' # beta 1
watchos '10.5' '21T5555d' # beta 2
watchos '10.5' '21T5560d' # beta 3
watchos '10.5' '21T5571a' # beta 4
watchos '10.5' '21T575' # RC 1
watchos '10.5' '21T576'
watchos '10.6' '21U5551b' # beta 1
watchos '10.6' '21U5560b' # beta 2
watchos '10.6' '21U5565c' # beta 3
watchos '10.6' '21U5574a' # beta 4
watchos '10.6' '21U577'
watchos '11.0' '22R5284o' # beta 1
watchos '11.0' '22R5299d' # beta 2
watchos '11.0' '22R5309f' # beta 3
watchos '11.0' '22R5318h' # beta 4
watchos '11.0' '22R5328e' # beta 5
watchos '11.0' '22R5340a' # beta 6
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
audioos '17.3' '21K646'
audioos '17.4' '21L5195h' # beta 1
audioos '17.4' '21L5206f' # beta 2
audioos '17.4' '21L5212d' # beta 3
audioos '17.4' '21L5222a' # beta 4
audioos '17.4' '21L5225a' # beta 5
audioos '17.4' '21L227'
audioos '17.5' '21L5543d' # beta 1
audioos '17.5' '21L5553e' # beta 2
audioos '17.5' '21L5558d' # beta 3
audioos '17.5' '21L5567a' # beta 4
audioos '17.5' '21L569'
audioos '17.6' '21M5045c' # beta 1
audioos '17.6' '21M5054a' # beta 2
audioos '17.6' '21M5059b' # beta 3
audioos '17.6' '21M5068a' # beta 4
audioos '17.6' '21M71'
audioos '18.0' '22J5290l' # beta 1
audioos '18.0' '22J5305e' # beta 2
audioos '18.0' '22J5315e' # beta 3
audioos '18.0' '22J5324f' # beta 4
audioos '18.0' '22J5335d' # beta 5
audioos '18.0' '22J5346a' # beta 6
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' '21N307'
xros '1.0.1' '21N311'
xros '1.0.2' '21N323'
xros '1.0.3' '21N333'
xros '1.1' '21O5181e' # beta 1
xros '1.1' '21O5188c' # beta 2
xros '1.1' '21O5197a' # beta 3
xros '1.1' '21O5203a' # beta 4
xros '1.1' '21O209' # RC 1
xros '1.1' '21O211'
xros '1.1.1' '21O224'
xros '1.1.2' '21O231'
xros '1.2' '21O5555e' # beta 1
xros '1.2' '21O5555f' # beta 1 update
xros '1.2' '21O5565d' # beta 2
xros '1.2' '21O5570d' # beta 3
xros '1.2' '21O5580a' # beta 4
xros '1.2' '21O5587a' # beta 5
xros '1.2' '21O589'
xros '1.3' '21O5747c' # beta 1
xros '1.3' '21O5756a' # beta 2
xros '1.3' '21O5761a' # beta 3
xros '1.3' '21O5768a' # beta 4
xros '1.3' '21O771'
xros '2.0' '22N5252n' # beta 1
xros '2.0' '22N5267g' # beta 2
xros '2.0' '22N5277g' # beta 3
xros '2.0' '22N5286g' # beta 4
xros '2.0' '22N5297g' # beta 5
xros '2.0' '22N5308b' # beta 6
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,12' 'J613AP' # M3 MacBook Air (13")
mac 'Mac15,13' 'J615AP' # M3 MacBook Air (15")
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
macos '12.7.3' '21H1015'
macos '12.7.4' '21H1105' # RC 1
macos '12.7.4' '21H1111' # RC 2
macos '12.7.4' '21H1121' # RC 3
macos '12.7.4' '21H1122' # RC 4
macos '12.7.4' '21H1123'
macos '12.7.5' '21H1205' # RC 1
macos '12.7.5' '21H1211' # RC 2
macos '12.7.5' '21H1216' # RC 3
macos '12.7.5' '21H1220' # RC 4
macos '12.7.5' '21H1222'
macos '12.7.6' '21H1307' # RC 1
macos '12.7.6' '21H1310' # RC 2
macos '12.7.6' '21H1313' # RC 3
macos '12.7.6' '21H1317' # RC 4
macos '12.7.6' '21H1320'
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 '13.6.4' '22G513'
macos '13.6.5' '22G605' # RC 1
macos '13.6.5' '22G610' # RC 2
macos '13.6.5' '22G619' # RC 3
macos '13.6.5' '22G620' # RC 4
macos '13.6.5' '22G621'
macos '13.6.6' '22G630'
macos '13.6.7' '22G705' # RC 1
macos '13.6.7' '22G711' # RC 2
macos '13.6.7' '22G716' # RC 3
macos '13.6.7' '22G718' # RC 4
macos '13.6.7' '22G720'
macos '13.6.7' '22G807' # dumb
macos '13.6.7' '22G810' # dumber
macos '13.6.8' '22G813' # RC 3
macos '13.6.8' '22G817' # RC 4
macos '13.6.8' '22G820'
macos '13.6.9' '22G830'
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
macos '14.3' '23D56'
macos '14.3' '23D2057' # preinstalled
macos '14.3.1' '23D60'
macos '14.4' '23E5180j' # beta 1
macos '14.4' '23E5191e' # beta 2
macos '14.4' '23E5196e' # beta 3
macos '14.4' '23E5205c' # beta 4
macos '14.4' '23E5211a' # beta 5
macos '14.4' '23E214'
macos '14.4.1' '23E224'
macos '14.5' '23F5049f' # beta 1
macos '14.5' '23F5059e' # beta 2
macos '14.5' '23F5064f' # beta 3
macos '14.5' '23F5074a' # beta 4
macos '14.5' '23F79'
macos '14.6' '23G5052d' # beta 1
macos '14.6' '23G5061b' # beta 2
macos '14.6' '23G5066c' # beta 3
macos '14.6' '23G5075b' # beta 4
macos '14.6' '23G80'
macos '14.6.1' '23G93'
macos '15.0' '24A5264n' # beta 1
macos '15.0' '24A5279h' # beta 2
macos '15.0' '24A5289g' # beta 3
macos '15.0' '24A5289h' # beta 3 update
macos '15.0' '24A5298h' # beta 4
macos '15.0' '24A5309e' # beta 5
macos '15.0' '24A5320a' # beta 6
macos '15.1' '24B5009l' # beta 1
macos '15.1' '24B5024e' # beta 2
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
# 7f27b76e-8bd5-4420-8c7e-cb0ac76d1d80 iOS 18 customer beta
# 41651cee-d0e2-442f-b786-85682ff6db86 iOS 18 developer beta
# c46ed8dd-1382-40bd-a153-2b6ad61292fd iOS 18 public beta
# 3a4d907d-83bd-4b2d-9f7b-98763071da91 iOS 18.x customer beta
# 9953ae7e-ec38-48d6-9d3c-5c1a15a536dc iOS 18.x developer 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
# 1195a98c-04c7-43cb-90d6-d60267feff10 tvOS 18 customer beta
# 98847ed4-1c37-445c-9e7b-5b95d29281f2 tvOS 18 developer beta
# 879ce2f8-b7d1-420f-9935-58d647d6606a tvOS 18 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
# 021091ad-06b8-410a-90ea-cd54d140d4d9 watchOS 11 customer beta
# 23d7265b-1000-47cf-8d0a-07144942db9e watchOS 11 developer beta
# 79b47e0c-cbce-4757-b84b-12a95db52f22 watchOS 11 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
# bedbd9c7-738a-4060-958b-79da54a1f7ad audioOS 18 customer beta
# 1af931ed-e171-4dd0-b944-172cdebcd89d audioOS 18 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
# b2a6ec63-941e-4f6f-98ec-c6382510cada visionOS 2 customer beta
# 0bef3239-79ad-4d2a-99c3-2c05df2becf8 visionOS 2 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
# 374faeda-4d23-457d-9f73-ec84a286f4b3 macOS 15 customer beta
# 98df7800-8378-4469-93bf-5912da21a1e1 macOS 15 developer beta
# c8ba02c8-cc63-4388-99ee-a81d5a593283 macOS 15 public beta
# d422663f-c2c3-4ea0-89ca-b88696cd383a macOS 15.1 customer beta
# 1831c3e6-1dc4-4f6b-a9dc-7ae6a41d9af4 macOS 15.1 developer 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=10;
if $legacy; then
x=$((x+16));
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=13;
x=5;
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+10));
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+10));
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+4));
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=4;
#if $legacy; then
# x=$((x+1));
#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=18;
if $legacy; then
x=$((x+18));
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";
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";
fi;
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";
dl 'com.apple.MobileAsset.SoftwareUpdate' '7f27b76e-8bd5-4420-8c7e-cb0ac76d1d80' "$d" "$m" "$v" "$b" "$z";
dl 'com.apple.MobileAsset.SoftwareUpdate' '41651cee-d0e2-442f-b786-85682ff6db86' "$d" "$m" "$v" "$b" "$z";
dl 'com.apple.MobileAsset.SoftwareUpdate' 'c46ed8dd-1382-40bd-a153-2b6ad61292fd' "$d" "$m" "$v" "$b" "$z";
dl 'com.apple.MobileAsset.SoftwareUpdate' '3a4d907d-83bd-4b2d-9f7b-98763071da91' "$d" "$m" "$v" "$b" "$z";
dl 'com.apple.MobileAsset.SoftwareUpdate' '9953ae7e-ec38-48d6-9d3c-5c1a15a536dc' "$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";
#dl 'com.apple.MobileAsset.DarwinAccessoryUpdate.A2525' '374faeda-4d23-457d-9f73-ec84a286f4b3' "$d" "$m" "$v" "$b";
#dl 'com.apple.MobileAsset.DarwinAccessoryUpdate.A2525' '98df7800-8378-4469-93bf-5912da21a1e1' "$d" "$m" "$v" "$b";
#dl 'com.apple.MobileAsset.DarwinAccessoryUpdate.A2525' 'c8ba02c8-cc63-4388-99ee-a81d5a593283' "$d" "$m" "$v" "$b";
#dl 'com.apple.MobileAsset.DarwinAccessoryUpdate.A2525' 'd422663f-c2c3-4ea0-89ca-b88696cd383a' "$d" "$m" "$v" "$b";
#dl 'com.apple.MobileAsset.DarwinAccessoryUpdate.A2525' '1831c3e6-1dc4-4f6b-a9dc-7ae6a41d9af4' "$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";
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";
fi;
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";
dl 'com.apple.MobileAsset.SoftwareUpdate' '1195a98c-04c7-43cb-90d6-d60267feff10' "$d" "$m" "$v" "$b" "$z";
dl 'com.apple.MobileAsset.SoftwareUpdate' '98847ed4-1c37-445c-9e7b-5b95d29281f2' "$d" "$m" "$v" "$b" "$z";
dl 'com.apple.MobileAsset.SoftwareUpdate' '879ce2f8-b7d1-420f-9935-58d647d6606a' "$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";
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";
fi;
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";
dl 'com.apple.MobileAsset.SoftwareUpdate' '021091ad-06b8-410a-90ea-cd54d140d4d9' "$d" "$m" "$v" "$b";
dl 'com.apple.MobileAsset.SoftwareUpdate' '23d7265b-1000-47cf-8d0a-07144942db9e' "$d" "$m" "$v" "$b";
dl 'com.apple.MobileAsset.SoftwareUpdate' '79b47e0c-cbce-4757-b84b-12a95db52f22' "$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";
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";
fi;
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";
dl 'com.apple.MobileAsset.SoftwareUpdate' 'bedbd9c7-738a-4060-958b-79da54a1f7ad' "$d" "$m" "$v" "$b" "$z";
dl 'com.apple.MobileAsset.SoftwareUpdate' '1af931ed-e171-4dd0-b944-172cdebcd89d' "$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";
dl 'com.apple.MobileAsset.SoftwareUpdate' 'b2a6ec63-941e-4f6f-98ec-c6382510cada' "$d" "$m" "$v" "$b" "$z";
dl 'com.apple.MobileAsset.SoftwareUpdate' '0bef3239-79ad-4d2a-99c3-2c05df2becf8' "$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";
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";
fi;
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";
dl 'com.apple.MobileAsset.MacSoftwareUpdate' '374faeda-4d23-457d-9f73-ec84a286f4b3' "$d" "$m" "$v" "$b";
dl 'com.apple.MobileAsset.SFRSoftwareUpdate' '374faeda-4d23-457d-9f73-ec84a286f4b3' "$d" "$m" "$v" "$b";
dl 'com.apple.MobileAsset.MacSoftwareUpdate' '98df7800-8378-4469-93bf-5912da21a1e1' "$d" "$m" "$v" "$b";
dl 'com.apple.MobileAsset.SFRSoftwareUpdate' '98df7800-8378-4469-93bf-5912da21a1e1' "$d" "$m" "$v" "$b";
dl 'com.apple.MobileAsset.SFRSoftwareUpdate' 'c8ba02c8-cc63-4388-99ee-a81d5a593283' "$d" "$m" "$v" "$b";
dl 'com.apple.MobileAsset.SFRSoftwareUpdate' 'c8ba02c8-cc63-4388-99ee-a81d5a593283' "$d" "$m" "$v" "$b";
dl 'com.apple.MobileAsset.MacSoftwareUpdate' 'd422663f-c2c3-4ea0-89ca-b88696cd383a' "$d" "$m" "$v" "$b";
dl 'com.apple.MobileAsset.SFRSoftwareUpdate' 'd422663f-c2c3-4ea0-89ca-b88696cd383a' "$d" "$m" "$v" "$b";
dl 'com.apple.MobileAsset.SFRSoftwareUpdate' '1831c3e6-1dc4-4f6b-a9dc-7ae6a41d9af4' "$d" "$m" "$v" "$b";
dl 'com.apple.MobileAsset.SFRSoftwareUpdate' '1831c3e6-1dc4-4f6b-a9dc-7ae6a41d9af4' "$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) + (if has("ArchiveDecryptionKey") then " " + .ArchiveDecryptionKey else "" end)' | sort -uV;
fi;
@Siguza
Copy link
Author

Siguza commented Mar 20, 2022

@sydia1103 dude you saved the source code in an RTF document.

@sydia1103
Copy link

@Siguza Well, it seems I did! I fixed that now, and now it gives an error server returned 422 unprocessable identity.

@notzheng
Copy link

notzheng commented Sep 15, 2022

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",
}

@Siguza
Copy link
Author

Siguza commented Sep 15, 2022

@notzheng AssetAudience c724cb61-e974-42d3-a911-ffd4dce11eda

@notzheng
Copy link

notzheng commented Sep 16, 2022

@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 (though OriginalAssetAudience 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!

@codedprodotcom
Copy link

Can somebody please tell me exactly what this script is meant to do ? bit confused on that.

@Siguza
Copy link
Author

Siguza commented Oct 30, 2022

@codedprodotcom give you links to Apple OTA update firmware files.

@bbaranoff
Copy link

Hello, can it be used in combination with idevicerestore to downgrade firmware tried pallas-proxy returned me bad gateway 406 :(

@Siguza
Copy link
Author

Siguza commented Jul 5, 2023

@bbaranoff nope.

@kejiweixun
Copy link

kejiweixun commented Jul 12, 2023

@Siguza Hi, what does generic AssetAudiences do? I don't know the difference between generic and release or security updates AssetAudiences.

And how to get release note for a release? I know how to get release note for stable release, but don't know how to get for beta release.

Thank you!

@LucasMoreira97
Copy link

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?

@Siguza
Copy link
Author

Siguza commented Sep 25, 2023

@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
Copy link

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.

@Siguza
Copy link
Author

Siguza commented Sep 25, 2023

@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
Copy link

@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

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment