diff --git a/CHANGELOG.md b/CHANGELOG.md index cb5bd4fe6..e55070edc 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,8 @@ ## 0.6.9 - Resolve BCM2046 and BCM2070 support on macOS 13.3 and newer +- Workaround 13.3+ Kernel Panic on AMD GCN GPUs playing DRM content +- Add new macOS Installer download menu (Jazzzny) - Increment Binaries: - OpenCorePkg 0.9.3 - release - Lilu 1.6.6 - release @@ -12,6 +14,7 @@ - CPUFriend 1.2.7 - release - BlueToolFixup 2.6.8 - rolling (2305aaa) - CryptexFixup 1.0.2 - release + - PatcherSupportPkg 1.2.6 - release ## 0.6.8 - Update non-Metal Binaries: diff --git a/data/pci_data.py b/data/pci_data.py index 69aa831a3..0f8803f0d 100644 --- a/data/pci_data.py +++ b/data/pci_data.py @@ -411,95 +411,144 @@ class nvidia_ids: kepler_ids = [ # GK104 0x1180, # GK104 [GTX 680] + 0x1182, # GK104 [GTX 760 Ti] 0x1183, # GK104 [GTX 660 Ti] 0x1184, # GK104 [GTX 770] 0x1185, # GK104 [GTX 660] 0x1186, # GK104 [GTX 660 Ti] 0x1187, # GK104 [GTX 760] 0x1188, # GK104 [GTX 690] - 0x1189, # GK104 [GTX 670] + 0x1189, # GK104 [GTX 670] + 0x118a, # GK104GL [GRID K520] + 0x118b, # GK104GL [GRID K2 GeForce USM] + 0x118c, # GK104 [GRID K2 NVS USM] + 0x118d, # GK104GL [GRID K200 vGPU] 0x118E, # GK104 [GTX 760 OEM] 0x118F, # GK104GL [Tesla K10] - 0x1198, # GTX 880M - 0x1199, # GK104 [GTX 870M] - 0x119A, # GTX 860M + 0x1191, # GK104 [GTX 760 Rev. 2] + 0x1193, # GK104 [GTX 760 Ti OEM] + 0x1194, # GK104GL [Tesla K8] + 0x1195, # GK104 [GTX 660 Rev. 2] + 0x1198, # GK104M [GTX 880M] + 0x1199, # GK104M [GTX 870M] + 0x119A, # GK104M [GTX 860M] 0x119D, # GK104M [GTX 775M Mac Edition] - 0x119E, # GTX 780M + 0x119E, # GK104M [GTX 780M Mac Edition] 0x119F, # GK104 [GTX 780M] 0x11A0, # GK104 [GTX 680M] 0x11A1, # GK104 [GTX 670MX] - 0x11A2, # GK104 [GTX 675MX] + 0x11A2, # GK104 [GTX 675MX Mac Edition] 0x11A3, # GK104 [GTX 680MX] 0x11A7, # GK104 [GTX 675MX] - 0x11A9, # GTX 870M + 0x11A8, # GK104GLM [Quadro K5100M] + 0x11A9, # GK104M [GTX 870M] + 0x11AF, # GK104GLM [GRID IceCube] + 0x11B0, # GK104GL [GRID K240Q / K260Q vGPU] + 0x11B1, # GK104GL [GRID K2 Tesla USM] 0x11B4, # GK104GL [Quadro K4200] - 0x11B6, # Quadro K3100M - 0x11B7, # Quadro K4100M - 0x11B8, # Quadro K5100M - 0x11BA, # GK104 [K5000] - 0x11BC, # GK104 [K5000M] - 0x11BD, # GK104 [K4000M] - 0x11BE, # GK104 [K3000M] + 0x11B6, # GK104GLM [Quadro K3100M] + 0x11B7, # GK104GLM [Quadro K4100M] + 0x11B8, # GK104GLM [Quadro K5100M] + 0x11B9, # GK104GLM + 0x11BA, # GK104GL [Quadro K5000] + 0x11BC, # GK104GLM [Quadro K5000M] + 0x11BD, # GK104GLM [Quadro K4000M] + 0x11BE, # GK104GLM [Quadro K3000M] 0x11BF, # GK104 [GRID K2] # GK106 0x11C0, # GK106 [GTX 660] 0x11C2, # GK106 [GTX 650 Ti BOOST] + 0x11c3, # GK106 [GTX 650 Ti OEM] + 0x11c4, # GK106 [GTX 645 OEM] + 0x11c5, # GK106 [GT 740] 0x11C6, # GK106 [GTX 650 Ti] + 0x11C7, # GK106 [GTX 750 Ti] + 0x11C8, # GK106 [GTX 650 OEM] 0x11E0, # GK106 [GTX 770M] - 0x11E1, # GTX 765M - 0x11E2, # GTX 765M - 0x11FA, # GK106 [K4000] - 0x11FC, # Quadro K2100M + 0x11CB, # GK106 [GT 740] + 0x11E0, # GK106M [GTX 770M] + 0x11E1, # GK106M [GTX 765M] + 0x11E2, # GK106M [GTX 765M] + 0x11E3, # GK106M [GTX 760M] + 0x11E7, # GK106M + 0x11FA, # GK106GL [Quadro K4000] + 0x11FC, # GL106GLM [Quadro K2100M] # GK107 0x0FC0, # GK107 [GT 640] 0x0FC1, # GK107 [GT 640] 0x0FC2, # GK107 [GT 630] + 0x0FC5, # GK107 [GT 1030] 0x0FC6, # GK107 [GTX 650] 0x0FC8, # GK107 [GT 740] + 0x0FC9, # GK107 [GT 730] 0x0FCD, # GK107M [GT 755M] + 0x0FCE, # GK107M [GT 640M LE] 0x0FD1, # GK107 [GT 650M] 0x0FD2, # GK107 [GT 640M] 0x0FD3, # GK107 [GT 640M LE] 0x0FD4, # GK107 [GTX 660M] 0x0FD5, # GK107 [GT 650M] + 0x0FD6, # GK107M 0x0FD8, # GK107 [GT 640M] 0x0FD9, # GK107 [GT 645M] - 0x0FDF, # GK107M [ GT 740M] + 0x0FDB, # GK107M + 0x0FDF, # GK107M [GT 740M] 0x0FE0, # GK107 [GTX 660M] 0x0FE1, # GK107M [GT 730M] + 0x0FE2, # GK107M [GT 745M] 0x0FE3, # GK107M [GT 745M] 0x0FE4, # GK107M [GT 750M] + 0x0FE5, # GK107 [GeForce K340 USM] + 0x0FE6, # GK107 [GRID K1 NVS USM] + 0x0FE7, # GK107GL [GRID K100 vGPU] + 0x0FE8, # GK107M [N14P-GS] 0x0FE9, # GK107 [GT 750M Mac Edition] 0x0FEA, # GK107M [GT 755M Mac Edition] + 0x0FEC, # GK107M [710A] 0x0FEE, # GK107M [810M] + 0x0FED, # GK107M [820M] + 0x0FEF, # GK107GL [GRID K340] + 0x0FF1, # GK107 [NVS 1000] 0x0FF2, # GK107GL [GRID K1] 0x0FF3, # GK107GL [Quadro K420] - 0x0FF6, # Quadro K1100M + 0x0FF5, # GK107GL [GRID K1 Tesla USM] + 0x0FF6, # GK107GLM [Quadro K1100M] + 0x0FF7, # GK107GL [GRID K140Q vGPU] + 0x0FF8, # GK107GLM [Quadro K500M] 0x0FF9, # GK107 [K2000D] 0x0FFA, # GK107 [K600] 0x0FFB, # GK107 [K2000M] 0x0FFC, # GK107 [K1000M] 0x0FFD, # GK107 [NVS 510] - 0x0FFE, # GK107 [K2000] - 0x0FFF, # GK107 [410] + 0x0FFE, # GK107 [Quadro K2000] + 0x0FFF, # GK107 [Quadro 410] # GK110 0x1001, # GK110B [GTX TITAN Z] 0x1003, # GK110 [GTX Titan LE] 0x1004, # GK110 [GTX 780] 0x1005, # GK110 [GTX Titan] 0x1007, # GK110 [GTX 780 Rev. 2] + 0x1008, # GK110 [GTX 780 Ti 6GB] 0x100A, # GK110B [GTX 780 Ti] 0x100C, # GK110B [GTX TITAN Black] - 0x101F, # GK110 [TEslA K20] - 0x1020, # GK110 [TEslA K2] - 0x1021, # GK110 [TEslA K2m] - 0x1022, # GK110 [TEslA K20C] + 0x101E, # GK110GL [Tesla K20X] + 0x101F, # GK110GL [Tesla K20] + 0x1020, # GK110GL [Tesla K20X] + 0x1021, # GK110GL [Tesla K20Xm] + 0x1022, # GK110GL [Tesla K20C] 0x1023, # GK110BGL [Tesla K40m] - 0x1024, # GK180GL [Tesla K40c] - 0x1026, # GK110 [TEslA K20s] - 0x1028, # GK110 [TEslA K20m] - 0x102D, # GK210GL [Tesla K80] + 0x1026, # GK110GL [Tesla K20s] + 0x1027, # GK110BGL [Tesla K40st] + 0x1028, # GK110GL [Tesla K20m] + 0x1029, # GK110BGL [Tesla K40s] + 0x102A, # GK110BGL [Tesla K40t] + 0x102E, # GK110BGL [Tesla K40d] + 0x102F, # GK110BGL [Tesla Stella Solo] + 0x103A, # GK110GL [Quadro K6000] 0x103C, # GK110GL [Quadro K5200] + 0x103F, # GK110BGL [Tesla Stella SXM] + # GK180 + 0x1024, # GK180GL [Tesla K40c] # GK208 0x1280, # GK208 [GT 635] 0x1281, # GK208 [GT 710] @@ -509,7 +558,9 @@ class nvidia_ids: 0x1287, # GK208B [GT 730] 0x1288, # GK208B [GT 720] 0x1289, # GK208 [GT 710] + 0x128A, # GK208B 0x128B, # GK208B [GT 710] + 0x128C, # GK208B 0x1290, # GK208 [GT 730M] 0x1291, # GK208 [GT 735M] 0x1292, # GK208 [GT 740M] @@ -520,8 +571,11 @@ class nvidia_ids: 0x1298, # GK208M [GT 720M] 0x1299, # GK208BM [920M] 0x129A, # GK208BM [910M] + 0x12A0, # GK208 0x12B9, # GK208 [K610M] 0x12BA, # GK208 [K510M] + # GK210 + 0x102D, # GK210GL [Tesla K80] ] @@ -540,21 +594,23 @@ class nvidia_ids: 0x137a, # GM108GLM [Quadro K620M / Quadro M500M] 0x137b, # GM108GLM [Quadro M520 Mobile] 0x137d, # GM108M [GeForce 940A] + 0x174d, # GM108M [GeForce MX130] + 0x174e, # GM108M [GeForce MX110] - 0x1380, # GM107 [GeForce GTX 750 Ti] - 0x1381, # GM107 [GeForce GTX 750] - 0x1382, # GM107 [GeForce GTX 745] + 0x1380, # GM107 [GTX 750 Ti] + 0x1381, # GM107 [GTX 750] + 0x1382, # GM107 [GTX 745] 0x1389, # GM107GL [GRID M30] 0x1390, # GM107M [GeForce 845M] - 0x1391, # GM107M [GeForce GTX 850M] - 0x1392, # GM107M [GeForce GTX 860M] + 0x1391, # GM107M [GTX 850M] + 0x1392, # GM107M [GTX 860M] 0x1393, # GM107M [GeForce 840M] 0x1398, # GM107M [GeForce 845M] 0x1399, # GM107M [GeForce 945M] - 0x139a, # GM107M [GeForce GTX 950M] - 0x139b, # GM107M [GeForce GTX 960M] + 0x139a, # GM107M [GTX 950M] + 0x139b, # GM107M [GTX 960M] 0x139c, # GM107M [GeForce 940M] - 0x139d, # GM107M [GeForce GTX 750 Ti] + 0x139d, # GM107M [GTX 750 Ti] 0x13b0, # GM107GLM [Quadro M2000M] 0x13b1, # GM107GLM [Quadro M1000M] 0x13b2, # GM107GLM [Quadro M600M] @@ -566,16 +622,24 @@ class nvidia_ids: 0x13bb, # GM107GL [Quadro K620] 0x13bc, # GM107GL [Quadro K1200] 0x13bd, # GM107GL [Tesla M10] + 0x1789, # GM107GL [GRID M3-3020] + 0x179c, # GM107 [GeForce 940MX] - 0x13c0, # GM204 [GeForce GTX 980] + 0x17c2, # GM200 [GTX TITAN X] + 0x17c8, # GM200 [GTX 980 Ti] + 0x17f0, # GM200GL [Quadro M6000] + 0x17f1, # GM200GL [Quadro M6000 24GB] + 0x17fd, # GM200GL [Tesla M40] + + 0x13c0, # GM204 [GTX 980] 0x13c1, # GM204 - 0x13c2, # GM204 [GeForce GTX 970] + 0x13c2, # GM204 [GTX 970] 0x13c3, # GM204 - 0x13d7, # GM204M [GeForce GTX 980M] - 0x13d8, # GM204M [GeForce GTX 970M] - 0x13d9, # GM204M [GeForce GTX 965M] - 0x13da, # GM204M [GeForce GTX 980 Mobile] - 0x13e7, # GM204GL [GeForce GTX 980 Engineering Sample] + 0x13d7, # GM204M [GTX 980M] + 0x13d8, # GM204M [GTX 970M] + 0x13d9, # GM204M [GTX 965M] + 0x13da, # GM204M [GTX 980 Mobile] + 0x13e7, # GM204GL [GTX 980 Engineering Sample] 0x13f0, # GM204GL [Quadro M5000] 0x13f1, # GM204GL [Quadro M4000] 0x13f2, # GM204GL [Tesla M60] @@ -585,18 +649,21 @@ class nvidia_ids: 0x13fa, # GM204GLM [Quadro M3000M] 0x13fb, # GM204GLM [Quadro M5500] - 0x1401, # GM206 [GeForce GTX 960] - 0x1402, # GM206 [GeForce GTX 950] - 0x1404, # GM206 [GeForce GTX 960 FAKE] - 0x1406, # GM206 [GeForce GTX 960 OEM] - 0x1407, # GM206 [GeForce GTX 750 v2] - 0x1427, # GM206M [GeForce GTX 965M] + 0x1401, # GM206 [GTX 960] + 0x1402, # GM206 [GTX 950] + 0x1404, # GM206 [GTX 960 FAKE] + 0x1406, # GM206 [GTX 960 OEM] + 0x1407, # GM206 [GTX 750 v2] + 0x1427, # GM206M [GTX 965M] 0x1430, # GM206GL [Quadro M2000] 0x1431, # GM206GL [Tesla M4] 0x1436, # GM206GLM [Quadro M2200 Mobile] ] pascal_ids = [ + 0x1725, + 0x172e, + 0x172f, 0x15f0, # GP100GL [Quadro GP100] 0x15f1, # GP100GL 0x15f7, # GP100GL [Tesla P100 PCIe 12GB] @@ -604,10 +671,10 @@ class nvidia_ids: 0x15f9, # GP100GL [Tesla P100 SXM2 16GB] 0x1b00, # GP102 [TITAN X] - 0x1b01, # GP102 [GeForce GTX 1080 Ti 10GB] + 0x1b01, # GP102 [GTX 1080 Ti 10GB] 0x1b02, # GP102 [TITAN Xp] 0x1b04, # GP102 - 0x1b06, # GP102 [GeForce GTX 1080 Ti] + 0x1b06, # GP102 [GTX 1080 Ti] 0x1b07, # GP102 [P102-100] 0x1b30, # GP102GL [Quadro P6000] 0x1b38, # GP102GL [Tesla P40] @@ -615,18 +682,18 @@ class nvidia_ids: 0x1b70, # GP102GL 0x1b78, # GP102GL - 0x1b80, # GP104 [GeForce GTX 1080] - 0x1b81, # GP104 [GeForce GTX 1070] - 0x1b82, # GP104 [GeForce GTX 1070 Ti] - 0x1b83, # GP104 [GeForce GTX 1060 6GB] - 0x1b84, # GP104 [GeForce GTX 1060 3GB] + 0x1b80, # GP104 [GTX 1080] + 0x1b81, # GP104 [GTX 1070] + 0x1b82, # GP104 [GTX 1070 Ti] + 0x1b83, # GP104 [GTX 1060 6GB] + 0x1b84, # GP104 [GTX 1060 3GB] 0x1b87, # GP104 [P104-100] - 0x1ba0, # GP104M [GeForce GTX 1080 Mobile] - 0x1ba1, # GP104M [GeForce GTX 1070 Mobile] - 0x1ba2, # GP104M [GeForce GTX 1070 Mobile] + 0x1ba0, # GP104M [GTX 1080 Mobile] + 0x1ba1, # GP104M [GTX 1070 Mobile] + 0x1ba2, # GP104M [GTX 1070 Mobile] 0x1ba9, # GP104M 0x1baa, # GP104M - 0x1bad, # GP104 [GeForce GTX 1070 Engineering Sample] + 0x1bad, # GP104 [GTX 1070 Engineering Sample] 0x1bb0, # GP104GL [Quadro P5000] 0x1bb1, # GP104GL [Quadro P4000] 0x1bb3, # GP104GL [Tesla P4] @@ -638,42 +705,42 @@ class nvidia_ids: 0x1bb9, # GP104GLM [Quadro P4200 Mobile] 0x1bbb, # GP104GLM [Quadro P3200 Mobile] 0x1bc7, # GP104 [P104-101] - 0x1be0, # GP104BM [GeForce GTX 1080 Mobile] - 0x1be1, # GP104BM [GeForce GTX 1070 Mobile] + 0x1be0, # GP104BM [GTX 1080 Mobile] + 0x1be1, # GP104BM [GTX 1070 Mobile] 0x1c00, # GP106 0x1c01, # GP106 - 0x1c02, # GP106 [GeForce GTX 1060 3GB] - 0x1c03, # GP106 [GeForce GTX 1060 6GB] - 0x1c04, # GP106 [GeForce GTX 1060 5GB] - 0x1c06, # GP106 [GeForce GTX 1060 6GB Rev. 2] + 0x1c02, # GP106 [GTX 1060 3GB] + 0x1c03, # GP106 [GTX 1060 6GB] + 0x1c04, # GP106 [GTX 1060 5GB] + 0x1c06, # GP106 [GTX 1060 6GB Rev. 2] 0x1c07, # GP106 [P106-100] 0x1c09, # GP106 [P106-090] - 0x1c20, # GP106M [GeForce GTX 1060 Mobile] - 0x1c21, # GP106M [GeForce GTX 1050 Ti Mobile] - 0x1c22, # GP106M [GeForce GTX 1050 Mobile] - 0x1c23, # GP106M [GeForce GTX 1060 Mobile Rev. 2] + 0x1c20, # GP106M [GTX 1060 Mobile] + 0x1c21, # GP106M [GTX 1050 Ti Mobile] + 0x1c22, # GP106M [GTX 1050 Mobile] + 0x1c23, # GP106M [GTX 1060 Mobile Rev. 2] 0x1c2d, # GP106M 0x1c30, # GP106GL [Quadro P2000] 0x1c31, # GP106GL [Quadro P2200] 0x1c35, # GP106M [Quadro P2000 Mobile] 0x1c36, # GP106 [P106M] - 0x1c60, # GP106BM [GeForce GTX 1060 Mobile 6GB] - 0x1c61, # GP106BM [GeForce GTX 1050 Ti Mobile] - 0x1c62, # GP106BM [GeForce GTX 1050 Mobile] + 0x1c60, # GP106BM [GTX 1060 Mobile 6GB] + 0x1c61, # GP106BM [GTX 1050 Ti Mobile] + 0x1c62, # GP106BM [GTX 1050 Mobile] 0x1c70, # GP106GL 0x1c80, - 0x1c81, # GP107 [GeForce GTX 1050] - 0x1c82, # GP107 [GeForce GTX 1050 Ti] - 0x1c83, # GP107 [GeForce GTX 1050 3GB] - 0x1c8c, # GP107M [GeForce GTX 1050 Ti Mobile] - 0x1c8d, # GP107M [GeForce GTX 1050 Mobile] + 0x1c81, # GP107 [GTX 1050] + 0x1c82, # GP107 [GTX 1050 Ti] + 0x1c83, # GP107 [GTX 1050 3GB] + 0x1c8c, # GP107M [GTX 1050 Ti Mobile] + 0x1c8d, # GP107M [GTX 1050 Mobile] 0x1c8e, # GP107M - 0x1c8f, # GP107M [GeForce GTX 1050 Ti Max-Q] + 0x1c8f, # GP107M [GTX 1050 Ti Max-Q] 0x1c90, # GP107M [GeForce MX150] - 0x1c91, # GP107M [GeForce GTX 1050 3 GB Max-Q] - 0x1c92, # GP107M [GeForce GTX 1050 Mobile] + 0x1c91, # GP107M [GTX 1050 3 GB Max-Q] + 0x1c92, # GP107M [GTX 1050 Mobile] 0x1c94, # GP107M [GeForce MX350] 0x1c96, # GP107M [GeForce MX350] 0x1ca7, # GP107GL @@ -687,8 +754,8 @@ class nvidia_ids: 0x1cbb, # GP107GLM [Quadro P1000 Mobile] 0x1cbc, # GP107GLM [Quadro P600 Mobile] 0x1cbd, # GP107GLM [Quadro P620] - 0x1ccc, # GP107BM [GeForce GTX 1050 Ti Mobile] - 0x1ccd, # GP107BM [GeForce GTX 1050 Mobile] + 0x1ccc, # GP107BM [GTX 1050 Ti Mobile] + 0x1ccd, # GP107BM [GTX 1050 Mobile] 0x1cfa, # GP107GL [Quadro P2000] 0x1cfb, # GP107GL [Quadro P1000] diff --git a/data/sys_patch_dict.py b/data/sys_patch_dict.py index 67e70d74d..ab8664b50 100644 --- a/data/sys_patch_dict.py +++ b/data/sys_patch_dict.py @@ -66,6 +66,7 @@ class SystemPatchDictionary(): self.macOS_12_0_B7: float = 21.1 self.macOS_12_4: float = 21.5 self.macOS_12_5: float = 21.6 + self.macOS_13_3: float = 22.4 self._generate_sys_patch_dict() @@ -768,7 +769,7 @@ class SystemPatchDictionary(): "AMD10000Controller.kext": "12.5", "AMDRadeonX4000.kext": "12.5" if self.os_major < os_data.os_data.sonoma else "12.5-23", "AMDRadeonX4000HWServices.kext": "12.5", - "AMDFramebuffer.kext": "12.5", + "AMDFramebuffer.kext": "12.5" if self.os_float < self.macOS_13_3 else "12.5-GCN", "AMDSupport.kext": "12.5", "AMDRadeonVADriver.bundle": "12.5", diff --git a/docs/MODELS.md b/docs/MODELS.md index 5cda20a61..10c8ab2f7 100644 --- a/docs/MODELS.md +++ b/docs/MODELS.md @@ -1,13 +1,10 @@ # Supported Models +Any Intel-based Mac listed below can install and make use of OpenCore Legacy Patcher. To check your hardware model, open System Information and look for the `Model Identifier` key. +* This applies even if Apple supports the model natively. +* OpenCore Legacy Patcher does not support PowerPC- or Apple Silicon-based Macs. +* If your model is not listed below, it is not supported by this patcher. -Any hardware supporting SSE4.1 CPU and 64-Bit firmware work on this patcher. To check your hardware model, run the following command on the applicable machine in the terminal: - -```bash -system_profiler SPHardwareDataType | grep 'Model Identifier' -``` - -The below table will list all supported and unsupported functions of the patcher currently: - +The below tables can be used to reference issues with a particular model, and see which OS would work best on your machine. * [MacBook](#macbook) * [MacBook Air](#macbook-air) * [MacBook Pro](#macbook-pro) @@ -16,146 +13,138 @@ The below table will list all supported and unsupported functions of the patcher * [Mac Pro](#mac-pro) * [Xserve](#xserve) -Regarding OS support, see below: +::: details OpenCore Patcher application +The patcher application requires **OS X Yosemite 10.10** or later to run. +* **OS X El Capitan 10.11** or later is required to make macOS Ventura installers. -| Support Entry | Supported OSes | Description | Comment | -| :--- | :--- | :--- | :--- | -| HostOS | macOS 10.10 - macOS 13 | Refers to OSes where running OpenCore-Patcher.app are supported | Users running 10.9 or older are advised to upgrade to a newer operating system before using OCLP. | -| TargetOS | macOS 11 - macOS 13 | Refers to OSes that can be patched to run with OpenCore | May support 10.4 and newer (in a potentially broken state). No support provided. | +The patcher is designed to target **macOS Big Sur 11.x to macOS Ventura 13.x**. +* Other versions may work, albeit in a broken state. No support is provided for any version outside of the above. +::: -* macOS Ventura installer creation requires 10.11 or later ### MacBook -| SMBIOS | Year | Supported | Comment | -| :--- | :--- | :--- | :--- | -| MacBook1,1 | Mid 2006 | NO | 32-Bit CPU limitation | -| MacBook2,1 | Late 2006 | ^^ | 32-Bit Firmware limitation | -| MacBook3,1 | Late 2007 | ^^ | ^^ | -| MacBook4,1 | Early 2008 | ^^ | - No GPU Acceleration in Mavericks and newer
- No Keyboard and Trackpad
- No USB | -| MacBook5,1 | Late 2008 | YES | - GPU Acceleration in Public Beta, see current issues ([#108](https://github.com/dortania/OpenCore-Legacy-Patcher/issues/108))
- UHCI/OHCI support in Public Beta, see current issues ([#1021](https://github.com/dortania/OpenCore-Legacy-Patcher/issues/1021))| -| MacBook5,2 | Early 2009, Mid 2009 | ^^ | - GPU Acceleration in Public Beta, see current issues ([#108](https://github.com/dortania/OpenCore-Legacy-Patcher/issues/108))
- UHCI/OHCI support in Public Beta, see current issues ([#1021](https://github.com/dortania/OpenCore-Legacy-Patcher/issues/1021))
- Trackpad gestures are partially broken | -| MacBook6,1 | Late 2009 | ^^ | - GPU Acceleration in Public Beta, see current issues ([#108](https://github.com/dortania/OpenCore-Legacy-Patcher/issues/108))
- UHCI/OHCI support in Public Beta, see current issues ([#1021](https://github.com/dortania/OpenCore-Legacy-Patcher/issues/1021)) | -| MacBook7,1 | Mid 2010 | ^^ | ^^ | -| MacBook8,1 | Mid 2015 | ^^ | Everything is supported | -| MacBook9,1 | Early 2016 | ^^ | ^^ | +| Model Name | Identifier | Tagged Issues | +| :--- | :--- | :--- | +| MacBook (13-inch, Late 2008) | `MacBook5,1` | - [non-Metal GPU (macOS 11+)](https://github.com/dortania/OpenCore-Legacy-Patcher/issues/108)
- [USB 1.1 (macOS 13+)](https://github.com/dortania/OpenCore-Legacy-Patcher/issues/1021)| +| MacBook (13-inch, Early 2009)
MacBook (13-inch, Mid 2009) | `MacBook5,2` | - [non-Metal GPU (macOS 11+)](https://github.com/dortania/OpenCore-Legacy-Patcher/issues/108)
- [USB 1.1 (macOS 13+)](https://github.com/dortania/OpenCore-Legacy-Patcher/issues/1021)
- Trackpad gestures are partially broken | +| MacBook (13-inch, Late 2009) | `MacBook6,1` | - [non-Metal GPU (macOS 11+)](https://github.com/dortania/OpenCore-Legacy-Patcher/issues/108)
- [USB 1.1 (macOS 13+)](https://github.com/dortania/OpenCore-Legacy-Patcher/issues/1021) | +| MacBook (13-inch, Mid 2010) | `MacBook7,1` | ^^ | +| MacBook (Retina, 12-inch, Early 2015) | `MacBook8,1` | - [Legacy Metal (macOS 13+)](https://github.com/dortania/OpenCore-Legacy-Patcher/issues/1008) | +| MacBook (Retina, 12-inch, Early 2016) | `MacBook9,1` | ^^ | +| MacBook (Retina, 12-inch, 2017) | `MacBook10,1` | Supported by Apple | ### MacBook Air -| SMBIOS | Year | Supported | Comment | -| :--- | :--- | :--- | :--- | -| MacBookAir1,1 | Early 2008 | NO | Requires SSE4.1 CPU | -| MacBookAir2,1 | Late 2008 | YES | - GPU Acceleration in Public Beta, see current issues ([#108](https://github.com/dortania/OpenCore-Legacy-Patcher/issues/108))
- UHCI/OHCI support in Public Beta, see current issues ([#1021](https://github.com/dortania/OpenCore-Legacy-Patcher/issues/1021))| -| MacBookAir3,1 | Late 2010 | ^^ | ^^ | -| MacBookAir3,2 | ^^ | ^^ | ^^ | -| MacBookAir4,1 | Mid 2011 | ^^ | - GPU Acceleration in Public Beta, see current issues ([#108](https://github.com/dortania/OpenCore-Legacy-Patcher/issues/108))| -| MacBookAir4,2 | ^^ | ^^ | ^^ | -| MacBookAir5,1 | Mid 2012 | ^^ | Everything is supported | -| MacBookAir5,2 | ^^ | ^^ | ^^ | -| MacBookAir6,1 | Mid 2013, Early 2014 | ^^ | ^^ | -| MacBookAir6,2 | ^^ | ^^ | ^^ | -| MacBookAir7,1 | Early 2015, 2017 | ^^ | ^^ | -| MacBookAir7,2 | ^^ | ^^ | ^^ | +| Model Name | Identifier | Tagged Issues | +| :--- | :--- | :--- | +| MacBook Air (13-inch, Late 2008)
MacBook Air (13-inch, Mid 2009) | `MacBookAir2,1` | - [non-Metal GPU (macOS 11+)](https://github.com/dortania/OpenCore-Legacy-Patcher/issues/108)
- [USB 1.1 (macOS 13+)](https://github.com/dortania/OpenCore-Legacy-Patcher/issues/1021)| +| MacBook Air (11-inch, Late 2010) | `MacBookAir3,1` | ^^ | +| MacBook Air (13-inch, Late 2010) | `MacBookAir3,2` | ^^ | +| MacBook Air (11-inch, Mid 2011) | `MacBookAir4,1` | ^^ | +| MacBook Air (13-inch, Mid 2011) | `MacBookAir4,2` | ^^ | +| MacBook Air (11-inch, Mid 2012) | `MacBookAir5,1` | - [Legacy Metal (macOS 13+)](https://github.com/dortania/OpenCore-Legacy-Patcher/issues/1008) | +| MacBook Air (13-inch, Mid 2012) | `MacBookAir5,2` | ^^ | +| MacBook Air (11-inch, Mid 2013)
MacBook Air (11-inch, Early 2014) | `MacBookAir6,1` | ^^ | +| MacBook Air (13-inch, Mid 2013)
MacBook Air (13-inch, Early 2014) | `MacBookAir6,2` | ^^ | +| MacBook Air (11-inch, Early 2015) | `MacBookAir7,1` | ^^ | +| MacBook Air (13-inch, Early 2015)
MacBook Air (13-inch, 2017) | `MacBookAir7,2` | ^^ | +| MacBook Air (Retina, 13-inch, 2018) | `MacBookAir8,1` | - Supported by Apple | +| MacBook Air (Retina, 13-inch, 2019) | `MacBookAir9,1` | ^^ | +| MacBook Air (Retina, 13-inch, 2020) | `MacBookAir10,1` | ^^ | ### MacBook Pro -| SMBIOS | Year | Supported | Comment | -| :--- | :--- | :--- | :--- | -| MacBookPro1,1 | Early 2006 | NO | 32-Bit CPU limitation | -| MacBookPro1,2 | ^^ | ^^ | ^^ | -| MacBookPro2,1 | Late 2006 | ^^ | 32-Bit Firmware limitation | -| MacBookPro2,2 | Late 2006 | ^^ | ^^ | -| MacBookPro3,1 | Mid 2007 | ^^ | Requires SSE4.1 CPU | -| MacBookPro4,1 | Early 2008 | YES | - GPU Acceleration in Public Beta, see current issues ([#108](https://github.com/dortania/OpenCore-Legacy-Patcher/issues/108))
- UHCI/OHCI support in Public Beta, see current issues ([#1021](https://github.com/dortania/OpenCore-Legacy-Patcher/issues/1021))| -| MacBookPro5,1 | Late 2008 | ^^ | ^^ | -| MacBookPro5,2 | Early 2009 | ^^ | ^^ | -| MacBookPro5,3 | Mid 2009 | ^^ | ^^ | -| MacBookPro5,4 | ^^ | ^^ | ^^ | -| MacBookPro5,5 | ^^ | ^^ | ^^ | -| MacBookPro6,1 | Mid 2010 | ^^ | - GPU Acceleration in Public Beta, see current issues ([#108](https://github.com/dortania/OpenCore-Legacy-Patcher/issues/108))| -| MacBookPro6,2 | ^^ | ^^ | ^^ | -| MacBookPro7,1 | ^^ | ^^ | - GPU Acceleration in Public Beta, see current issues ([#108](https://github.com/dortania/OpenCore-Legacy-Patcher/issues/108))
- UHCI/OHCI support in Public Beta, see current issues ([#1021](https://github.com/dortania/OpenCore-Legacy-Patcher/issues/1021))| -| MacBookPro8,1 | Early 2011 | ^^ | - GPU Acceleration in Public Beta, see current issues ([#108](https://github.com/dortania/OpenCore-Legacy-Patcher/issues/108))| -| MacBookPro8,2 | ^^ | ^^ | ^^ | -| MacBookPro8,3 | ^^ | ^^ | ^^ | -| MacBookPro9,1 | Mid 2012 | ^^ | Everything is supported | -| MacBookPro9,2 | ^^ | ^^ | ^^ | -| MacBookPro10,1 | Mid 2012, Early 2013 | ^^ | ^^ | -| MacBookPro10,2 | Late 2012, Early 2013 | ^^ | ^^ | -| MacBookPro11,1 | Late 2013, Mid 2014 | ^^ | ^^ | -| MacBookPro11,2 | ^^ | ^^ | ^^ | -| MacBookPro11,3 | ^^ | ^^ | ^^ | -| MacBookPro11,4 | Mid 2015 | ^^ | ^^ | -| MacBookPro11,5 | ^^ | ^^ | ^^ | -| MacBookPro12,1 | Early 2015 | ^^ | ^^ | -| MacBookPro13,1 | Late 2016 | ^^ | ^^ | -| MacBookPro13,2 | ^^ | ^^ | ^^ | -| MacBookPro13,3 | ^^ | ^^ | ^^ | +| Model Name | Identifier | Tagged Issues | +| :--- | :--- | :--- | +| MacBook Pro (15-inch, Early 2008)
MacBook Pro (17-inch, Early 2008) | `MacBookPro4,1` | - [non-Metal GPU (macOS 11+)](https://github.com/dortania/OpenCore-Legacy-Patcher/issues/108)
- [USB 1.1 (macOS 13+)](https://github.com/dortania/OpenCore-Legacy-Patcher/issues/1021)| +| MacBook Pro (15-inch, Late 2008) | `MacBookPro5,1` | ^^ | +| MacBook Pro (17-inch, Early 2009)
MacBook Pro (17-inch, Mid 2009) | `MacBookPro5,2` | ^^ | +| MacBook Pro (15-inch, Mid 2009) | `MacBookPro5,3` | ^^ | +| MacBook Pro (13-inch, Mid 2009) | `MacBookPro5,5` | ^^ | +| MacBook Pro (17-inch, Mid 2010) | `MacBookPro6,1` | - [non-Metal GPU (macOS 11+)](https://github.com/dortania/OpenCore-Legacy-Patcher/issues/108) | +| MacBook Pro (15-inch, Mid 2010) | `MacBookPro6,2` | ^^ | +| MacBook Pro (13-inch, Mid 2010) | `MacBookPro7,1` | - [non-Metal GPU (macOS 11+)](https://github.com/dortania/OpenCore-Legacy-Patcher/issues/108)
- [USB 1.1 (macOS 13+)](https://github.com/dortania/OpenCore-Legacy-Patcher/issues/1021) | +| MacBook Pro (13-inch, Early 2011)
MacBook Pro (13-inch, Late 2011) | `MacBookPro8,1` | - [non-Metal GPU (macOS 11+)](https://github.com/dortania/OpenCore-Legacy-Patcher/issues/108) | +| MacBook Pro (15-inch, Early 2011)
MacBook Pro (15-inch, Late 2011) | `MacBookPro8,2` | ^^ | +| MacBook Pro (17-inch, Early 2011)
| `MacBookPro8,3` | ^^ | +| MacBook Pro (15-inch, Mid 2012) | `MacBookPro9,1` | - [Legacy Metal (macOS 13+)](https://github.com/dortania/OpenCore-Legacy-Patcher/issues/1008) | +| MacBook Pro (13-inch, Mid 2012) | `MacBookPro9,2` | ^^ | +| MacBook Pro (Retina, 15-inch, Mid 2012)
MacBook Pro (Retina, 15-inch, Early 2013) | `MacBookPro10,1` | ^^ | +| MacBook Pro (Retina, 13-inch, Late 2012)
MacBook Pro (Retina, 13-inch, Early 2013) | `MacBookPro10,2` | ^^ | +| MacBook Pro (Retina, 13-inch, Late 2013)
MacBook Pro (Retina, 13-inch, Mid 2014) | `MacBookPro11,1` | ^^ | +| MacBook Pro (Retina, 15-inch, Late 2013)
MacBook Pro (Retina, 15-inch, Mid 2014) | `MacBookPro11,2`
`MacBookPro11,3` | ^^ | +| MacBook Pro (Retina, 15-inch, Mid 2015) | `MacBookPro11,4`
`MacBookPro11,5` | ^^ | +| MacBook Pro (Retina, 13-inch, Early 2015) | `MacBookPro12,1` | ^^ | +| MacBook Pro (13-inch, 2016, 2 Thunderbolt 3 ports) | `MacBookPro13,1` | ^^ | +| MacBook Pro (13-inch, 2016, 4 Thunderbolt 3 ports) | `MacBookPro13,2` | ^^ | +| MacBook Pro (15-inch, 2016) | `MacBookPro13,3` | ^^ | +| MacBook Pro (13-inch, 2017, 2 Thunderbolt 3 ports) | `MacBookPro14,1` | - Supported by Apple | +| MacBook Pro (13-inch, 2017, 4 Thunderbolt 3 ports) | `MacBookPro14,2` | ^^ | +| MacBook Pro (15-inch, 2017) | `MacBookPro14,3` | ^^ | +| MacBook Pro (13-inch, 2018, 4 Thunderbolt 3 ports)
MacBook Pro (13-inch, 2019, 4 Thunderbolt 3 ports) | `MacBookPro15,2` | ^^ | +| MacBook Pro (15-inch, 2018)
MacBook Pro (15-inch, 2019) | `MacBookPro15,1` | ^^ | +| MacBook Pro (13-inch, 2019, 2 Thunderbolt 3 ports) | `MacBookPro15,4` | ^^ | +| MacBook Pro (16-inch, 2019) | `MacBookPro16,1`
`MacBookPro16,4` | ^^ | +| MacBook Pro (13-inch, 2020, 4 Thunderbolt 3 ports) | `MacBookPro16,2` | ^^ | +| MacBook Pro (13-inch, 2020, 2 Thunderbolt 3 ports) | `MacBookPro16,3` | ^^ | ### Mac mini -| SMBIOS | Year | Supported | Comment | -| :--- | :--- | :--- | :--- | -| Macmini1,1 | Early 2006 | NO | 32-Bit CPU limitation | -| Macmini2,1 | Mid 2007 | ^^ | 32-Bit Firmware limitation | -| Macmini3,1 | Early 2009 | YES | - GPU Acceleration in Public Beta, see current issues ([#108](https://github.com/dortania/OpenCore-Legacy-Patcher/issues/108))
- UHCI/OHCI support in Public Beta, see current issues ([#1021](https://github.com/dortania/OpenCore-Legacy-Patcher/issues/1021))| -| Macmini4,1 | Mid 2010 | ^^ | ^^ | -| Macmini5,1 | Mid 2011 | ^^ | - GPU Acceleration in Public Beta, see current issues ([#108](https://github.com/dortania/OpenCore-Legacy-Patcher/issues/108))| -| Macmini5,2 | ^^ | ^^ | ^^ | -| Macmini5,3 | ^^ | ^^ | ^^ | -| Macmini6,1 | Late 2012 | ^^ | Everything is supported | -| Macmini6,2 | ^^ | ^^ | ^^ | -| Macmini7,1 | Mid 2014 | ^^ | ^^ | +| Model Name | Identifier | Tagged Issues | +| :--- | :--- | :--- | +| Mac mini (Early 2009) | `Macmini3,1` | - [non-Metal GPU (macOS 11+)](https://github.com/dortania/OpenCore-Legacy-Patcher/issues/108)
- [USB 1.1 (macOS 13+)](https://github.com/dortania/OpenCore-Legacy-Patcher/issues/1021) | +| Mac mini (Mid 2010) | `Macmini4,1` | - [non-Metal GPU (macOS 11+)](https://github.com/dortania/OpenCore-Legacy-Patcher/issues/108) | +| Mac mini (Mid 2011) | `Macmini5,1`
`Macmini5,2`
`Macmini5,3` | ^^ | +| Mac mini (Late 2012) | `Macmini6,1`
`Macmini6,2` | - [Legacy Metal (macOS 13+)](https://github.com/dortania/OpenCore-Legacy-Patcher/issues/1008) | +| Mac mini (Late 2014) | `Macmini7,1` | ^^ | +| Mac mini (Late 2018) | `Macmini8,1` | - Supported by Apple | ### iMac - -| SMBIOS | Year | Supported | Comment | -| :--- | :--- | :--- | :--- | -| iMac4,1 | Early 2006 | NO | 32-Bit CPU limitation | -| iMac4,2 | Mid 2006 | ^^ | ^^ | -| iMac5,1 | Late 2006 | ^^ | 32-Bit Firmware limitation | -| iMac5,2 | ^^ | ^^ | ^^ | -| iMac6,1 | ^^ | ^^ | ^^ | -| iMac7,1 | Mid 2007 | YES | - Requires an [SSE4.1 CPU Upgrade](https://lowendmac.com/2018/penryn-t9300-9500-cpu-upgrades-for-the-2007-imac/)
- GPU Acceleration in Public Beta, see current issues ([#108](https://github.com/dortania/OpenCore-Legacy-Patcher/issues/108))
- Stock Bluetooth 2.0 card non-functional
- UHCI/OHCI support in Public Beta, see current issues ([#1021](https://github.com/dortania/OpenCore-Legacy-Patcher/issues/1021))| -| iMac8,1 | Early 2008 | ^^ | - GPU Acceleration in Public Beta, see current issues ([#108](https://github.com/dortania/OpenCore-Legacy-Patcher/issues/108))
- UHCI/OHCI support in Public Beta, see current issues ([#1021](https://github.com/dortania/OpenCore-Legacy-Patcher/issues/1021))| -| iMac9,1 | Early 2009 | ^^ | ^^ | -| iMac10,1 | Late 2009 | ^^ | - GPU is socketed, [recommend upgrading to Metal GPU](https://forums.macrumors.com/threads/2011-imac-graphics-card-upgrade.1596614/?post=17425857#post-17425857)
- GPU Acceleration in Public Beta, see current issues ([#108](https://github.com/dortania/OpenCore-Legacy-Patcher/issues/108))
- UHCI/OHCI support in Public Beta, see current issues ([#1021](https://github.com/dortania/OpenCore-Legacy-Patcher/issues/1021))| -| iMac11,1 | ^^ | ^^ | - GPU Acceleration in Public Beta, see current issues ([#108](https://github.com/dortania/OpenCore-Legacy-Patcher/issues/108))| -| iMac11,2 | Mid 2010 | ^^ | ^^ | -| iMac11,3 | ^^ | ^^ | ^^ | -| iMac12,1 | Mid 2011 | ^^ | ^^ | -| iMac12,2 | ^^ | ^^ | ^^ | -| iMac13,1 | Late 2012 | ^^ | Everything is supported | -| iMac13,2 | ^^ | ^^ | ^^ | -| iMac13,3 | ^^ | ^^ | ^^ | -| iMac14,1 | Late 2013 | ^^ | ^^ | -| iMac14,2 | ^^ | ^^ | ^^ | -| iMac14,3 | ^^ | ^^ | ^^ | -| iMac14,4 | Mid 2014 | ^^ | ^^ | -| iMac15,1 | Late 2014, Mid 2015 | ^^ | ^^ | -| iMac16,1 | Late 2014, Mid 2015 | ^^ | ^^ | -| iMac16,2 | Late 2014, Mid 2015 | ^^ | ^^ | -| iMac17,1 | Late 2015, Early 2016 | ^^ | ^^ | - -* For iMac10,1 through iMac12,x, we highly recommend users upgrade the GPU to a Metal supported model. See here for more information: [iMac late 2009 to mid-2011 Graphics Card Upgrade Guide](https://forums.macrumors.com/threads/2011-imac-graphics-card-upgrade.1596614/?post=17425857#post-17425857) +| Model Name | Identifier | Tagged Issues | +| :--- | :--- | :--- | +| iMac (20-inch, Mid 2007)
iMac (24-inch, Mid 2007) | `iMac7,1` | - [Requires SSE4.1 CPU](https://lowendmac.com/2018/penryn-t9300-9500-cpu-upgrades-for-the-2007-imac/)
- [non-Metal GPU (macOS 11+)](https://github.com/dortania/OpenCore-Legacy-Patcher/issues/108)
- [USB 1.1 (macOS 13+)](https://github.com/dortania/OpenCore-Legacy-Patcher/issues/1021)
- Remove stock Bluetooth to prevent panics | +| iMac (20-inch, Early 2008)
iMac (24-inch, Early 2008) | `iMac8,1` | - [non-Metal GPU (macOS 11+)](https://github.com/dortania/OpenCore-Legacy-Patcher/issues/108)
- [USB 1.1 (macOS 13+)](https://github.com/dortania/OpenCore-Legacy-Patcher/issues/1021) | +| iMac (20-inch, Early 2009)
iMac (24-inch, Early 2009)
iMac (20-inch, Mid 2009) | `iMac9,1` | - [non-Metal GPU (macOS 11+)](https://github.com/dortania/OpenCore-Legacy-Patcher/issues/108)
- [USB 1.1 (macOS 13+)](https://github.com/dortania/OpenCore-Legacy-Patcher/issues/1021)
- [Recommend upgrading to Metal GPU](https://forums.macrumors.com/threads/2011-imac-graphics-card-upgrade.1596614/?post=17425857#post-17425857) | +| iMac (21.5-inch, Late 2009)
iMac (27-inch, Late 2009)| `iMac10,1` | ^^ | +| iMac (27-inch, Late 2009) | `iMac11,1` | ^^ | +| iMac (21.5-inch, Mid 2010) | `iMac11,2` | ^^ | +| iMac (27-inch, Mid 2010) | `iMac11,3` | ^^ | +| iMac (21.5-inch, Mid 2011)
iMac (21.5-inch, Late 2011) | `iMac12,1` | ^^ | +| iMac (27-inch, Mid 2011) | `iMac12,2` | ^^ | +| iMac (21.5-inch, Late 2012) | `iMac13,1` | - [Legacy Metal (macOS 13+)](https://github.com/dortania/OpenCore-Legacy-Patcher/issues/1008) | +| iMac (27-inch, Late 2012) | `iMac13,2` | ^^ | +| iMac (21.5-inch, Early 2013) | `iMac13,3` | ^^ | +| iMac (21.5-inch, Late 2013) | `iMac14,1` | ^^ | +| iMac (27-inch, Late 2013) | `iMac14,2`
`iMac14,3` | ^^ | +| iMac (21.5-inch, Mid 2014) | `iMac14,4` | ^^ | +| iMac (Retina 5K, 27-inch, Late 2014)
iMac (Retina 5K, 27-inch, Mid 2015) | `iMac15,1` | ^^ | +| iMac (21.5-inch, Late 2015) | `iMac16,1` | ^^ | +| iMac (Retina 4K, 21.5-inch, Late 2015) | `iMac16,2` | ^^ | +| iMac (Retina 5K, 27-inch, Late 2015) | `iMac17,1` | ^^ | +| iMac (21.5-inch, 2017) | `iMac18,1` | - Supported by Apple | +| iMac (Retina 4K, 21.5-inch, 2017) | `iMac18,2` | ^^ | +| iMac (Retina 5K, 27-inch, 2017) | `iMac18,3` | ^^ | +| iMac (Retina 5K, 27-inch, 2019) | `iMac19,1` | ^^ | +| iMac (Retina 4K, 21.5-inch, 2019) | `iMac19,2` | ^^ | +| iMac (Retina 5K, 27-inch, 2020) | `iMac20,1`
`iMac20,2` | ^^ | +| iMac Pro (2017) | `iMacPro1,1` | ^^ | ### Mac Pro -| SMBIOS | Year | Supported | Comment | -| :--- | :--- | :--- | :--- | -| MacPro1,1 | Mid 2006 | NO | 32-Bit Firmware limitation | -| MacPro2,1 | Mid 2007 | ^^ | ^^ | -| MacPro3,1 | Early 2008 | YES | - UHCI/OHCI support in Public Beta, see current issues ([#1021](https://github.com/dortania/OpenCore-Legacy-Patcher/issues/1021))
- Potential boot issues with stock Bluetooth card, recommend removing to avoid kernel panics | -| MacPro4,1 | Early 2009 | ^^ | - Everything is supported as long as GPU is Metal capable
- UHCI/OHCI support in Public Beta, see current issues ([#1021](https://github.com/dortania/OpenCore-Legacy-Patcher/issues/1021))| -| MacPro5,1 | Mid 2010, Mid 2012 | ^^ | ^^ | -| MacPro6,1 | Late 2013 | ^^ | - DRM support is flaky | +| Model Name | Identifier | Tagged Issues | +| :--- | :--- | :--- | +| Mac Pro (Early 2008) | `MacPro3,1` | - Recommend upgrade to Metal GPU
- [non-Metal GPU (macOS 11+)](https://github.com/dortania/OpenCore-Legacy-Patcher/issues/108)
- [USB 1.1 (macOS 13+)](https://github.com/dortania/OpenCore-Legacy-Patcher/issues/1021)
- Remove stock Bluetooth to prevent panics | +| Mac Pro (Early 2009) | `MacPro4,1` | - Recommend upgrade to Metal GPU
- [non-Metal GPU (macOS 11+)](https://github.com/dortania/OpenCore-Legacy-Patcher/issues/108)
- [USB 1.1 (macOS 13+)](https://github.com/dortania/OpenCore-Legacy-Patcher/issues/1021) | +| Mac Pro (Mid 2010)
Mac Pro (Mid 2012) | `MacPro5,1` | ^^ | +| Mac Pro (Late 2013) | `MacPro6,1` | - [Legacy Metal (macOS 13+)](https://github.com/dortania/OpenCore-Legacy-Patcher/issues/1008) | +| Mac Pro (2019) | `MacPro7,1` | - Supported by Apple | ### Xserve -| SMBIOS | Year | Supported | Comment | -| :--- | :--- | :--- | :--- | -| Xserve1,1 | Mid 2006 | NO | 32-Bit Firmware limitation | -| Xserve2,1 | Early 2008 | YES | - Everything is supported as long as GPU is Metal capable
- UHCI/OHCI support in Public Beta, see current issues ([#1021](https://github.com/dortania/OpenCore-Legacy-Patcher/issues/1021))| -| Xserve3,1 | Early 2009 | ^^ | ^^ | +| Model Name | Identifier | Tagged Issues | +| :--- | :--- | :--- | +| Xserve (Early 2008) | `Xserve2,1` | - Recommend upgrade to Metal GPU
- [non-Metal GPU (macOS 11+)](https://github.com/dortania/OpenCore-Legacy-Patcher/issues/108)
- [USB 1.1 (macOS 13+)](https://github.com/dortania/OpenCore-Legacy-Patcher/issues/1021) +| Xserve (Early 2009) | `Xserve3,1` | ^^ | # Once you've verified your hardware is supported, head to [Download and build macOS Installers](./INSTALLER.md) diff --git a/docs/UNINSTALL.md b/docs/UNINSTALL.md index cddd843db..119b104d8 100644 --- a/docs/UNINSTALL.md +++ b/docs/UNINSTALL.md @@ -11,4 +11,8 @@ To remove OpenCore: 2. [Reset NVRAM](https://support.apple.com/HT204063) -Note that if you are on Big Sur when you remove the EFI folder, your Mac will no longer boot and show the "prohibited" symbol. Be ready to install an older version of macOS before you uninstall OpenCore. +:::warning + +Note that after you remove OpenCore, your Mac will no longer boot and show the "prohibited" symbol. Be ready to install an natively-supported version of macOS before you uninstall OpenCore. + +* This does not apply to native to native Macs just using OpenCore to achieve features like AirPlay to Mac and Sidecar, but it is still recomended to reinstall macOS, after removing OpenCore, if using SMBIOS spoofing to enable Univeral Control. diff --git a/payloads/Icon/AppIcons/BigSur.icns b/payloads/Icon/AppIcons/BigSur.icns new file mode 100644 index 000000000..32fa0dcd3 Binary files /dev/null and b/payloads/Icon/AppIcons/BigSur.icns differ diff --git a/payloads/Icon/AppIcons/Generic.icns b/payloads/Icon/AppIcons/Generic.icns new file mode 100644 index 000000000..aab1a79ca Binary files /dev/null and b/payloads/Icon/AppIcons/Generic.icns differ diff --git a/payloads/Icon/AppIcons/Monterey.icns b/payloads/Icon/AppIcons/Monterey.icns new file mode 100644 index 000000000..9accebaf3 Binary files /dev/null and b/payloads/Icon/AppIcons/Monterey.icns differ diff --git a/payloads/Icon/AppIcons/Sonoma.icns b/payloads/Icon/AppIcons/Sonoma.icns new file mode 100644 index 000000000..ac6eb4aae Binary files /dev/null and b/payloads/Icon/AppIcons/Sonoma.icns differ diff --git a/payloads/Icon/AppIcons/Ventura.icns b/payloads/Icon/AppIcons/Ventura.icns new file mode 100644 index 000000000..7898726a9 Binary files /dev/null and b/payloads/Icon/AppIcons/Ventura.icns differ diff --git a/resources/constants.py b/resources/constants.py index 18b7b97bc..d2298a551 100644 --- a/resources/constants.py +++ b/resources/constants.py @@ -14,7 +14,7 @@ class Constants: def __init__(self) -> None: # Patcher Versioning self.patcher_version: str = "0.6.9" # OpenCore-Legacy-Patcher - self.patcher_support_pkg_version: str = "1.2.4" # PatcherSupportPkg + self.patcher_support_pkg_version: str = "1.2.6" # PatcherSupportPkg self.copyright_date: str = "Copyright © 2020-2023 Dortania" self.patcher_name: str = "OpenCore Legacy Patcher" diff --git a/resources/macos_installer_handler.py b/resources/macos_installer_handler.py index 039cf8bd2..360256805 100644 --- a/resources/macos_installer_handler.py +++ b/resources/macos_installer_handler.py @@ -373,6 +373,7 @@ class RemoteInstallerCatalog: download_link = None integrity = None size = None + date = catalog["Products"][product]["PostDate"] for ia_package in catalog["Products"][product]["Packages"]: if "InstallAssistant.pkg" not in ia_package["URL"]: @@ -386,6 +387,7 @@ class RemoteInstallerCatalog: integrity = ia_package["IntegrityDataURL"] size = ia_package["Size"] if ia_package["Size"] else 0 + if any([version, build, download_link, size, integrity]) is None: continue @@ -400,10 +402,12 @@ class RemoteInstallerCatalog: "Variant": catalog_url, "OS": os_data.os_conversion.os_to_kernel(version), "Models": build_plist["MobileAssetProperties"]["SupportedDeviceModels"], + "Date": date } }) available_apps = {k: v for k, v in sorted(available_apps.items(), key=lambda x: x[1]['Version'])} + return available_apps diff --git a/resources/wx_gui/gui_macos_installer_download.py b/resources/wx_gui/gui_macos_installer_download.py index 0145997c5..5ac0a315e 100644 --- a/resources/wx_gui/gui_macos_installer_download.py +++ b/resources/wx_gui/gui_macos_installer_download.py @@ -2,6 +2,7 @@ import wx import logging import threading import webbrowser +import locale from pathlib import Path @@ -124,117 +125,192 @@ class macOSInstallerDownloadFrame(wx.Frame): """ Display available installers in frame """ + icons = [ + [wx.Bitmap(wx.Bitmap(str(self.constants.icns_resource_path / "Generic.icns"),wx.BITMAP_TYPE_ICON).ConvertToImage().Rescale(32, 32, wx.IMAGE_QUALITY_HIGH)),wx.Bitmap(wx.Bitmap(str(self.constants.icns_resource_path / "Generic.icns"),wx.BITMAP_TYPE_ICON).ConvertToImage().Rescale(64, 64, wx.IMAGE_QUALITY_HIGH))], + [wx.Bitmap(wx.Bitmap(str(self.constants.icns_resource_path / "BigSur.icns"),wx.BITMAP_TYPE_ICON).ConvertToImage().Rescale(32, 32, wx.IMAGE_QUALITY_HIGH)),wx.Bitmap(wx.Bitmap(str(self.constants.icns_resource_path / "BigSur.icns"),wx.BITMAP_TYPE_ICON).ConvertToImage().Rescale(64, 64, wx.IMAGE_QUALITY_HIGH))], + [wx.Bitmap(wx.Bitmap(str(self.constants.icns_resource_path / "Monterey.icns"),wx.BITMAP_TYPE_ICON).ConvertToImage().Rescale(32, 32, wx.IMAGE_QUALITY_HIGH)),wx.Bitmap(wx.Bitmap(str(self.constants.icns_resource_path / "Monterey.icns"),wx.BITMAP_TYPE_ICON).ConvertToImage().Rescale(64, 64, wx.IMAGE_QUALITY_HIGH))], + [wx.Bitmap(wx.Bitmap(str(self.constants.icns_resource_path / "Ventura.icns"),wx.BITMAP_TYPE_ICON).ConvertToImage().Rescale(32, 32, wx.IMAGE_QUALITY_HIGH)),wx.Bitmap(wx.Bitmap(str(self.constants.icns_resource_path / "Ventura.icns"),wx.BITMAP_TYPE_ICON).ConvertToImage().Rescale(64, 64, wx.IMAGE_QUALITY_HIGH))], + [wx.Bitmap(wx.Bitmap(str(self.constants.icns_resource_path / "Sonoma.icns"),wx.BITMAP_TYPE_ICON).ConvertToImage().Rescale(32, 32, wx.IMAGE_QUALITY_HIGH)),wx.Bitmap(wx.Bitmap(str(self.constants.icns_resource_path / "Sonoma.icns"),wx.BITMAP_TYPE_ICON).ConvertToImage().Rescale(64, 64, wx.IMAGE_QUALITY_HIGH))] + ] + + bundles = [wx.BitmapBundle.FromBitmaps(icon) for icon in icons] + self.frame_modal.Destroy() - dialog = wx.Dialog(self, title="Select macOS Installer", size=(300, 200)) + self.frame_modal = wx.Dialog(self, title="Select macOS Installer", size=(460, 500)) # Title: Select macOS Installer - title_label = wx.StaticText(dialog, label="Select macOS Installer", pos=(-1,5)) + title_label = wx.StaticText(self.frame_modal, label="Select macOS Installer", pos=(-1,-1)) title_label.SetFont(wx.Font(19, wx.FONTFAMILY_DEFAULT, wx.FONTSTYLE_NORMAL, wx.FONTWEIGHT_BOLD, False, ".AppleSystemUIFont")) - title_label.Centre(wx.HORIZONTAL) + + # macOS Installers list + id = wx.NewIdRef() + + self.list = wx.ListCtrl(self.frame_modal, id, style=wx.LC_REPORT | wx.LC_SINGLE_SEL | wx.LC_NO_HEADER | wx.BORDER_SUNKEN) + self.list.SetSmallImages(bundles) - # Subtitle: Installers currently available from Apple: - subtitle_label = wx.StaticText(dialog, label="Installers currently available from Apple:", pos=(-1, title_label.GetPosition()[1] + title_label.GetSize()[1] + 5)) - subtitle_label.SetFont(wx.Font(13, wx.FONTFAMILY_DEFAULT, wx.FONTSTYLE_NORMAL, wx.FONTWEIGHT_NORMAL, False, ".AppleSystemUIFont")) - subtitle_label.Centre(wx.HORIZONTAL) + self.list.InsertColumn(0, "Version") + self.list.InsertColumn(1, "Size") + self.list.InsertColumn(2, "Release Date") - # List of installers installers = self.available_installers_latest if show_full is False else self.available_installers + if show_full is False: + self.frame_modal.SetSize((460, 370)) + if installers: - spacer = 0 + locale.setlocale(locale.LC_TIME, '') logging.info(f"Available installers on SUCatalog ({'All entries' if show_full else 'Latest only'}):") - for app in installers: - logging.info(f"- macOS {installers[app]['Version']} ({installers[app]['Build']}):\n - Size: {utilities.human_fmt(installers[app]['Size'])}\n - Source: {installers[app]['Source']}\n - Variant: {installers[app]['Variant']}\n - Link: {installers[app]['Link']}\n") - extra = " Beta" if installers[app]['Variant'] in ["DeveloperSeed" , "PublicSeed"] else "" - - installer_button = wx.Button(dialog, label=f"macOS {installers[app]['Version']}{extra} ({installers[app]['Build']} - {utilities.human_fmt(installers[app]['Size'])})", pos=(-1, subtitle_label.GetPosition()[1] + subtitle_label.GetSize()[1] + 5 + spacer), size=(270, 30)) - installer_button.Bind(wx.EVT_BUTTON, lambda event, temp=app: self.on_download_installer(installers[temp])) - installer_button.Centre(wx.HORIZONTAL) - spacer += 25 - - # Since installers are sorted by version, set the latest installer as the default button - # Note that on full display, the last installer is generally a beta - for button in reversed(dialog.GetChildren()): - if not isinstance(button, wx.Button): - continue - if "Beta" not in button.GetLabel(): - button.SetDefault() - break + for item in installers: + extra = " Beta" if installers[item]['Variant'] in ["DeveloperSeed" , "PublicSeed"] else "" + logging.info(f"- macOS {installers[item]['Version']} ({installers[item]['Build']}):\n - Size: {utilities.human_fmt(installers[item]['Size'])}\n - Source: {installers[item]['Source']}\n - Variant: {installers[item]['Variant']}\n - Link: {installers[item]['Link']}\n") + index = self.list.InsertItem(self.list.GetItemCount(), f"macOS {installers[item]['Version']} {os_data.os_conversion.convert_kernel_to_marketing_name(int(installers[item]['Build'][:2]))}{extra} ({installers[item]['Build']})") + if int(installers[item]['Build'][:2]) > os_data.os_data.sonoma: + self.list.SetItemImage(index, 0) + else: + self.list.SetItemImage(index, int(installers[item]['Build'][:2])-19) # Darwin version to index conversion. i.e. Darwin 20 -> 1 -> BigSur.icns + self.list.SetItem(index, 1, utilities.human_fmt(installers[item]['Size'])) + self.list.SetItem(index, 2, installers[item]['Date'].strftime("%x")) else: logging.error("No installers found on SUCatalog") - installer_button = wx.StaticText(dialog, label="Failed to fetch catalog from Apple", pos=(-1, subtitle_label.GetPosition()[1] + subtitle_label.GetSize()[1] + 5)) - installer_button.SetFont(wx.Font(13, wx.FONTFAMILY_DEFAULT, wx.FONTSTYLE_NORMAL, wx.FONTWEIGHT_BOLD, False, ".AppleSystemUIFont")) - installer_button.Centre(wx.HORIZONTAL) + wx.MessageDialog(self.frame_modal, "Failed to download Installer Catalog from Apple", "Error", wx.OK | wx.ICON_ERROR).ShowModal() - # Show all available installers - show_all_button = wx.Button(dialog, label="Show all available installers" if show_full is False else "Show only latest installers", pos=(-1, installer_button.GetPosition()[1] + installer_button.GetSize()[1]), size=(200, 30)) - show_all_button.Bind(wx.EVT_BUTTON, lambda event: self._display_available_installers(event, not show_full)) - show_all_button.Centre(wx.HORIZONTAL) + self.list.SetColumnWidth(0, 280) + self.list.SetColumnWidth(1, 55) + if show_full is True: + self.list.SetColumnWidth(2, 90) + else: + self.list.SetColumnWidth(2, 104) # Hack to get the highlight to fill the ListCtrl - # Return to Main Menu - return_button = wx.Button(dialog, label="Return to Main Menu", pos=(-1, show_all_button.GetPosition()[1] + show_all_button.GetSize()[1] - 7), size=(150, 30)) + if show_full is False: + self.list.Select(-1) + + self.list.Bind(wx.EVT_LIST_ITEM_DESELECTED, self.on_select_list) + self.list.Bind(wx.EVT_LIST_ITEM_SELECTED, self.on_select_list) + + self.select_button = wx.Button(self.frame_modal, label="Download", pos=(-1, -1), size=(150, -1)) + self.select_button.SetFont(wx.Font(13, wx.FONTFAMILY_DEFAULT, wx.FONTSTYLE_NORMAL, wx.FONTWEIGHT_NORMAL, False, ".AppleSystemUIFont")) + self.select_button.Bind(wx.EVT_BUTTON, lambda event, installers=installers: self.on_download_installer(installers)) + self.select_button.SetToolTip("Download the selected macOS Installer.") + self.select_button.SetDefault() + if show_full is True: + self.select_button.Disable() + + self.copy_button = wx.Button(self.frame_modal, label="Copy Link", pos=(-1, -1), size=(80, -1)) + self.copy_button.SetFont(wx.Font(13, wx.FONTFAMILY_DEFAULT, wx.FONTSTYLE_NORMAL, wx.FONTWEIGHT_NORMAL, False, ".AppleSystemUIFont")) + if show_full is True: + self.copy_button.Disable() + self.copy_button.SetToolTip("Copy the download link of the selected macOS Installer.") + self.copy_button.Bind(wx.EVT_BUTTON, lambda event, installers=installers: self.on_copy_link(installers)) + + return_button = wx.Button(self.frame_modal, label="Return to Main Menu", pos=(-1, -1), size=(150, -1)) return_button.Bind(wx.EVT_BUTTON, self.on_return_to_main_menu) - return_button.Centre(wx.HORIZONTAL) + return_button.SetFont(wx.Font(13, wx.FONTFAMILY_DEFAULT, wx.FONTSTYLE_NORMAL, wx.FONTWEIGHT_NORMAL, False, ".AppleSystemUIFont")) - # Set size of frame - dialog.SetSize((-1, return_button.GetPosition()[1] + return_button.GetSize()[1] + 40)) - dialog.ShowWindowModal() - self.frame_modal = dialog + self.showolderversions_checkbox = wx.CheckBox(self.frame_modal, label="Show Older/Beta Versions", pos=(-1, -1)) + if show_full is True: + self.showolderversions_checkbox.SetValue(True) + self.showolderversions_checkbox.Bind(wx.EVT_CHECKBOX, lambda event: self._display_available_installers(event, self.showolderversions_checkbox.GetValue())) + rectbox = wx.StaticBox(self.frame_modal, -1) + rectsizer = wx.StaticBoxSizer(rectbox, wx.HORIZONTAL) + rectsizer.Add(self.copy_button, 0, wx.EXPAND | wx.RIGHT, 5) + rectsizer.Add(self.select_button, 0, wx.EXPAND | wx.LEFT, 5) - def on_download_installer(self, app: dict) -> None: + checkboxsizer = wx.BoxSizer(wx.HORIZONTAL) + checkboxsizer.Add(self.showolderversions_checkbox, 0, wx.ALIGN_CENTRE | wx.RIGHT, 5) + + sizer = wx.BoxSizer(wx.VERTICAL) + sizer.AddSpacer(10) + sizer.Add(title_label, 0, wx.ALIGN_CENTRE | wx.ALL, 0) + sizer.Add(self.list, 1, wx.EXPAND | wx.ALL, 10) + sizer.Add(rectsizer, 0, wx.ALIGN_CENTRE | wx.ALL, 0) + sizer.Add(checkboxsizer, 0, wx.ALIGN_CENTRE | wx.ALL, 15) + sizer.Add(return_button, 0, wx.ALIGN_CENTRE | wx.BOTTOM, 15) + + self.frame_modal.SetSizer(sizer) + self.frame_modal.ShowWindowModal() + + def on_copy_link(self, installers: dict) -> None: + + selected_item = self.list.GetFirstSelected() + if selected_item != -1: + clipboard = wx.Clipboard.Get() + + if not clipboard.IsOpened(): + clipboard.Open() + + clipboard.SetData(wx.TextDataObject(list(installers.values())[selected_item]['Link'])) + + clipboard.Close() + + wx.MessageDialog(self.frame_modal, "Download link copied to clipboard", "", wx.OK | wx.ICON_INFORMATION).ShowModal() + + + def on_select_list(self, event): + if self.list.GetSelectedItemCount() > 0: + self.select_button.Enable() + self.copy_button.Enable() + else: + self.select_button.Disable() + self.copy_button.Disable() + + def on_download_installer(self, installers: dict) -> None: """ Download macOS installer """ - logging.info(f"Selected macOS {app['Version']} ({app['Build']})") - # Notify user whether their model is compatible with the selected installer - problems = [] - model = self.constants.custom_model or self.constants.computer.real_model - if model in smbios_data.smbios_dictionary: - if app["OS"] >= os_data.os_data.ventura: - if smbios_data.smbios_dictionary[model]["CPU Generation"] <= cpu_data.CPUGen.penryn or model in ["MacPro4,1", "MacPro5,1", "Xserve3,1"]: - if model.startswith("MacBook"): - problems.append("Lack of internal Keyboard/Trackpad in macOS installer.") - else: - problems.append("Lack of internal Keyboard/Mouse in macOS installer.") + selected_item = self.list.GetFirstSelected() + if selected_item != -1: - if problems: - logging.warning(f"Potential issues with {model} and {app['Version']} ({app['Build']}): {problems}") - problems = "\n".join(problems) - dlg = wx.MessageDialog(self.frame_modal, f"Your model ({model}) may not be fully supported by this installer. You may encounter the following issues:\n\n{problems}\n\nFor more information, see associated page. Otherwise, we recommend using macOS Monterey", "Potential Issues", wx.YES_NO | wx.CANCEL | wx.ICON_WARNING) - dlg.SetYesNoCancelLabels("View Github Issue", "Download Anyways", "Cancel") - result = dlg.ShowModal() - if result == wx.ID_CANCEL: - return - elif result == wx.ID_YES: - webbrowser.open("https://github.com/dortania/OpenCore-Legacy-Patcher/issues/1021") + logging.info(f"Selected macOS {list(installers.values())[selected_item]['Version']} ({list(installers.values())[selected_item]['Build']})") + + # Notify user whether their model is compatible with the selected installer + problems = [] + model = self.constants.custom_model or self.constants.computer.real_model + if model in smbios_data.smbios_dictionary: + if list(installers.values())[selected_item]["OS"] >= os_data.os_data.ventura: + if smbios_data.smbios_dictionary[model]["CPU Generation"] <= cpu_data.CPUGen.penryn or model in ["MacPro4,1", "MacPro5,1", "Xserve3,1"]: + if model.startswith("MacBook"): + problems.append("Lack of internal Keyboard/Trackpad in macOS installer.") + else: + problems.append("Lack of internal Keyboard/Mouse in macOS installer.") + + if problems: + logging.warning(f"Potential issues with {model} and {list(installers.values())[selected_item]['Version']} ({list(installers.values())[selected_item]['Build']}): {problems}") + problems = "\n".join(problems) + dlg = wx.MessageDialog(self.frame_modal, f"Your model ({model}) may not be fully supported by this installer. You may encounter the following issues:\n\n{problems}\n\nFor more information, see associated page. Otherwise, we recommend using macOS Monterey", "Potential Issues", wx.YES_NO | wx.CANCEL | wx.ICON_WARNING) + dlg.SetYesNoCancelLabels("View Github Issue", "Download Anyways", "Cancel") + result = dlg.ShowModal() + if result == wx.ID_CANCEL: + return + elif result == wx.ID_YES: + webbrowser.open("https://github.com/dortania/OpenCore-Legacy-Patcher/issues/1021") + return + + host_space = utilities.get_free_space() + needed_space = list(installers.values())[selected_item]['Size'] * 2 + if host_space < needed_space: + logging.error(f"Insufficient space to download and extract: {utilities.human_fmt(host_space)} available vs {utilities.human_fmt(needed_space)} required") + dlg = wx.MessageDialog(self.frame_modal, f"You do not have enough free space to download and extract this installer. Please free up some space and try again\n\n{utilities.human_fmt(host_space)} available vs {utilities.human_fmt(needed_space)} required", "Insufficient Space", wx.OK | wx.ICON_WARNING) + dlg.ShowModal() return - host_space = utilities.get_free_space() - needed_space = app['Size'] * 2 - if host_space < needed_space: - logging.error(f"Insufficient space to download and extract: {utilities.human_fmt(host_space)} available vs {utilities.human_fmt(needed_space)} required") - dlg = wx.MessageDialog(self.frame_modal, f"You do not have enough free space to download and extract this installer. Please free up some space and try again\n\n{utilities.human_fmt(host_space)} available vs {utilities.human_fmt(needed_space)} required", "Insufficient Space", wx.OK | wx.ICON_WARNING) - dlg.ShowModal() - return + self.frame_modal.Close() - self.frame_modal.Close() + download_obj = network_handler.DownloadObject(list(installers.values())[selected_item]['Link'], self.constants.payload_path / "InstallAssistant.pkg") - download_obj = network_handler.DownloadObject(app['Link'], self.constants.payload_path / "InstallAssistant.pkg") + gui_download.DownloadFrame( + self, + title=self.title, + global_constants=self.constants, + download_obj=download_obj, + item_name=f"macOS {list(installers.values())[selected_item]['Version']} ({list(installers.values())[selected_item]['Build']})", + ) - gui_download.DownloadFrame( - self, - title=self.title, - global_constants=self.constants, - download_obj=download_obj, - item_name=f"macOS {app['Version']} ({app['Build']})", - ) + if download_obj.download_complete is False: + self.on_return_to_main_menu() + return - if download_obj.download_complete is False: - self.on_return_to_main_menu() - return - - self._validate_installer(app['integrity']) + self._validate_installer(list(installers.values())[selected_item]['integrity']) def _validate_installer(self, chunklist_link: str) -> None: