Compare commits

...

165 Commits
0.6.8 ... 1.0.0

Author SHA1 Message Date
Mykola Grymalyuk
be4ef6a7f2 CI: Add Sonoma validation to PSP bins 2023-10-02 09:17:07 -06:00
Mykola Grymalyuk
a24570de05 Sync PatcherSupportPkg 2023-10-02 09:14:48 -06:00
Mykola Grymalyuk
fb85c42c52 constants.py: Fix path handling with DMG mounting 2023-10-01 15:31:21 -06:00
Mykola Grymalyuk
c6bef2d8aa Sync changelog
0.9.5 was reverted, and as such OpenLegacyBoot.efi is not present currently
2023-10-01 14:53:36 -06:00
Mykola Grymalyuk
7dc80475c3 Increment build to 1.0.0
Switch to semeantic versioning
2023-10-01 14:19:00 -06:00
Mykola Grymalyuk
404e855443 Merge pull request #1077 from dortania/sonoma-development
Preliminary support for macOS Sonoma
2023-10-01 14:17:12 -06:00
Mykola Grymalyuk
5683fedd25 Merge branch 'main' into sonoma-development 2023-10-01 14:16:35 -06:00
Mykola Grymalyuk
2fc21e6f07 Fix debug logic 2023-09-28 09:43:29 -06:00
Mykola Grymalyuk
8db6085ed1 Revert to OpenCore 0.9.3
Due to regression on Skylake and newer systems, currently investigating
2023-09-28 08:36:01 -06:00
Mykola Grymalyuk
ca4fd2286f Sync RestrictEvents 2023-09-27 09:07:52 -06:00
Mykola Grymalyuk
df6ca71124 Merge pull request #1104 from Jazzzny/readme-update
GUI - Refresh Download UI
2023-09-26 19:50:04 -06:00
Jazzzny
3fb624fc7d Changes 2023-09-26 21:30:02 -04:00
Jazzzny
89e36d762b Changes 2023-09-26 21:24:16 -04:00
Mykola Grymalyuk
f24a7f4229 smbios_data.py: Remove extra space 2023-09-26 18:50:47 -06:00
Mykola Grymalyuk
55b3641965 Sync changelog 2023-09-26 18:49:43 -06:00
Mykola Grymalyuk
8baca06246 Sync OpenCorePkg 2023-09-26 18:34:35 -06:00
Mykola Grymalyuk
f7b160f449 Sync kexts 2023-09-26 14:27:41 -06:00
Mykola Grymalyuk
fc65423ee2 sys_patch: Add missing Xserve3,1 handling 2023-09-26 10:24:41 -06:00
Mykola Grymalyuk
8c25110568 sys_patch: Adjust WebKit command to global file 2023-09-26 07:48:16 -06:00
Mykola Grymalyuk
dad8d1224a Add basic support for 3rd party Broadcom chipsets
Not officially supported as never shipped in any official Mac, however adding to simplify non-standard hardware support (ex. Hackintoshes)
2023-09-26 07:32:08 -06:00
Mykola Grymalyuk
ed78b5632c config: Fix comment 2023-09-26 07:29:05 -06:00
Jazzzny
6bb274638e Improve consistency for menu buttons 2023-09-25 20:31:24 -04:00
Jazzzny
bb78f59b9d Update CHANGELOG 2023-09-24 21:32:45 -04:00
Jazzzny
0c960438f2 Merge branch 'dortania:main' into readme-update 2023-09-24 20:41:42 -04:00
Jazzzny
c1849c0d28 Refresh download menu 2023-09-24 20:41:22 -04:00
Mykola Grymalyuk
e62335cae5 Merge branch 'main' into sonoma-development 2023-09-24 13:22:49 -06:00
Jazzzny
b4644f4b80 Merge pull request #1102 from Jazzzny/readme-update
Readme update
2023-09-24 15:08:17 -04:00
Jazzzny
1d22ea51b4 Clean up 2023-09-24 15:06:33 -04:00
Jazzzny
241fe052aa Update credits 2023-09-24 15:05:37 -04:00
Eduardo Covas
51eb22bc94 Fix WPA Enterprise and non-Metal blank WebKit on TS2/WebDriver
NOTE: Need to revert and re-run post install patches for WPA enterprise networks.
2023-09-23 15:11:50 -03:00
Jazzzny
084ee663b2 Merge pull request #1101 from Jazzzny/gui-2
Add missing Aquantia IDs
2023-09-21 20:32:19 -04:00
Jazzzny
1fb46d0d76 Remove white line 2023-09-21 20:32:00 -04:00
Jazzzny
1faa8055ab Add missing Aquantia IDs 2023-09-21 20:31:31 -04:00
Dhinak G
b50f376990 Remove submodule 2023-09-18 13:33:56 -04:00
Dhinak G
13ffc64ce6 Update changelog 2023-09-18 13:32:31 -04:00
Dhinak G
9676c2c08a Centralize font handling
closes #1098

Co-authored-by: Jazzzny <jazzzny225@gmail.com>
2023-09-18 12:05:27 -04:00
Mykola Grymalyuk
9317e11009 build.py: Add ECM-Override 2023-09-17 18:26:41 -06:00
Jazzzny
211e8fbb71 Merge pull request #1100 from Jazzzny/bestmacever
Adjust spacing for new installer download menu
2023-09-17 20:19:07 -04:00
Jazzzny
f2bfb7c479 Adjust spacing 2023-09-17 20:18:24 -04:00
Mykola Grymalyuk
35722875ee sys_patch: Resolve dGPU support for MacBookPro14,3 2023-09-17 17:15:26 -06:00
Mykola Grymalyuk
86a9789b18 Merge branch 'main' into sonoma-development 2023-09-17 12:46:17 -06:00
Mykola Grymalyuk
18c49d0902 Merge pull request #1099 from dortania/server-update-311
Server Side: Update backend to Python 3.11 and add Universal 2 support
2023-09-17 12:45:17 -06:00
Mykola Grymalyuk
f7ec0ddf21 Add Universal 2 support 2023-09-17 12:25:13 -06:00
Mykola Grymalyuk
c2d26b4903 Upgrade Python backend to 3.11 2023-09-17 12:07:02 -06:00
Eduardo Covas
cf7a553f0b Fix non-Metal PhotoBooth 2023-09-13 00:07:59 -03:00
Eduardo Covas
434dedb815 Update non-Metal Safari workaround and avoid disabling Beta Menu Bar if enabled 2023-09-11 21:08:19 -03:00
Eduardo Covas
214e31e8e3 Implement experimental non-Metal support 2023-09-09 23:06:29 -03:00
Jazzzny
ed63f12f2b Merge pull request #1097 from Jazzzny/bestmacever
Fix Rosetta detection
2023-09-08 11:29:16 -04:00
Jazzzny
91417bf75d better fix 2023-08-26 19:06:50 -04:00
Jazzzny
be62a3f7db Merge branch 'dortania:main' into bestmacever 2023-08-26 19:00:44 -04:00
Jazzzny
f5b467c4fb Fix Rosetta detection 2023-08-26 19:00:16 -04:00
Eduardo Covas
fd17caf03d Update IOSurface patches for Intel iGPUs 2023-08-22 23:36:27 -03:00
Mykola Grymalyuk
37862961df Merge branch 'main' into sonoma-development 2023-08-20 19:46:25 -06:00
Eduardo Covas
c05238875f Workaround 13.3+ Kernel Panic on AMD GCN GPUs playing DRM content 2023-08-20 19:17:59 -03:00
Jazzzny
60f4182184 Merge pull request #1096 from Jazzzny/bestmacever
Remove double space and random character
2023-08-20 16:15:54 -04:00
Jazzzny
526c009866 Merge branch 'dortania:main' into bestmacever 2023-08-20 16:13:34 -04:00
Jazzzny
55b76aff9a Remove double space and character 2023-08-20 16:13:08 -04:00
Jazzzny
e6f44a902a Merge pull request #1095 from Jazzzny/bestmacever
Update MacBook5,2
2023-08-20 16:10:52 -04:00
Jazzzny
26e69d0084 Update 2023-08-20 16:08:59 -04:00
Mykola Grymalyuk
9cfe1a493c Merge pull request #1093 from crystall1nedev/modelsmd
Rework MODELS.md
2023-08-20 14:01:37 -06:00
Mykola Grymalyuk
b4e0c79d13 Merge pull request #1092 from crystall1nedev/main
Add NVIDIA GPU IDs
2023-08-20 14:01:24 -06:00
Eva Luna
e2440a075e 10.10 Yosemite 2023-08-20 15:58:47 -04:00
Eva Luna
59c5393bc4 Fix MacPro6,1 notes 2023-08-20 15:57:35 -04:00
Mykola Grymalyuk
685491d0ba Merge pull request #1085 from TechEnthusiasm/main
Small change to Uninstall.MD
2023-08-20 13:52:53 -06:00
Mykola Grymalyuk
0f64b8b2d9 Merge pull request #1094 from Jazzzny/menu-rewrites
Add new macOS Installer download menu
2023-08-20 13:48:36 -06:00
Eduardo Covas
e800612bcf Ensure patched GeForce kext is used for Sonoma
**WARNING: users with Nvidia Kepler GPUs to revert root patches before patching.
2023-08-20 16:21:38 -03:00
Jazzzny
ae1d73eac1 Update CHANGELOG 2023-08-18 14:34:03 -04:00
Jazzzny
fab6daae5e Move locale setting to only run once 2023-08-18 14:17:43 -04:00
Jazzzny
cc68e098eb Clean up 2023-08-18 14:15:17 -04:00
Jazzzny
b95bd4e357 Rewrite for HiDPI and enable Locale-based time 2023-08-18 14:14:06 -04:00
Eduardo Covas
36f69c4f21 Restore KDKLess support and drop IOSurface downgrade
**WARNING: this change will break existing installs, you'll need to revert root patches before patching.
2023-08-18 14:28:08 -03:00
Eduardo Covas
829f1f6bc1 Fix legacy wifi without vmm patches
Resolves missing ControlCenter
2023-08-18 14:14:15 -03:00
Mykola Grymalyuk
d73d62f68c Ensure custom RE is used
Build from force-vmm-install branch
2023-08-18 10:42:25 -06:00
Mykola Grymalyuk
5b6b8d6e1a Merge branch 'main' into sonoma-development
# Conflicts:
#	payloads/Kexts/Acidanthera/RestrictEvents-v1.1.2-DEBUG.zip
#	payloads/Kexts/Acidanthera/RestrictEvents-v1.1.2-RELEASE.zip
#	payloads/Kexts/Acidanthera/WhateverGreen-v1.6.5-Navi-DEBUG.zip
#	payloads/Kexts/Acidanthera/WhateverGreen-v1.6.5-Navi-RELEASE.zip
#	payloads/OpenCore/OpenCore-DEBUG.zip
#	payloads/OpenCore/OpenCore-RELEASE.zip
#	resources/constants.py
#	resources/wx_gui/gui_settings.py
2023-08-18 10:36:42 -06:00
Jazzzny
01b0bc4c67 Add new installer menu 2023-08-17 12:55:01 -04:00
Eva Luna
5537340c87 Fix MacBook5,2’s unique note 2023-08-14 13:58:32 -04:00
Eva Luna
eda96d0f93 Move MXM note to iMac9,1
Some iMac9,1s can be upgraded with Metal GPUs, as told by Ausdauersportler. The same thread should detail how to upgrade compatible iMac9,1 models.
2023-08-14 04:21:15 -04:00
Eva Luna
65a11b30d7 Rework MODELS.md 2023-08-14 01:09:35 -04:00
Eva Luna
5f5d5daebf Kepler [GK208]
Three unnamed GPUs
2023-08-14 00:47:32 -04:00
Eva Luna
226a59e9c1 Kepler [GK110]
- GTX 780 Ti 6GB
- Tesla K20X
- Tesla K40st
- Tesla K40s
- Tesla K40t
- Tesla K40d
- Tesla Stella Solo
- Quadro K6000
- Tesla Stella SXM
2023-08-14 00:45:26 -04:00
Eva Luna
840f47d861 Kepler [GK107]
- GT 1030 (faked 730?)
- GT 730
- GT 640M LE
- Two unknown cards
- GT 745M
- K340 USM
- GRID K1 NVS USM
- GRID K100 vGPU
- N14P-GS
- 710A
- 820M
- GRID K340
- NVS 1000
- GRID K1 Tesla USM
- GRID K140Q vGPU
- Quadro K500M
2023-08-14 00:36:28 -04:00
Eva Luna
c5adf1eeea Kepler [GK106]
- 650 Ti OEM
- 645 OEM
- 740
- 750 Ti
- 650 OEM
- 770M
- 760M
- Unnamed
2023-08-14 00:21:15 -04:00
Eva Luna
70b4381003 Kepler [GK104]
- 760 Ti
- GRID K520
- K2 GeForce USM
- K2 NVS USM
- K200 vGPU
- 760 Rev. 2
- 760 Ti OEM
- Tesla K8
- 660 Rev. 2
- Quadro K5100M
- GRID IceCube
- GRID K240Q / K240Q vGPU
- GRID K2 Tesla USM

Also remove "GeForce" if GTX follows, for consistency
2023-08-14 00:15:25 -04:00
Eva Luna
2a315b7a57 Maxwell [GP100]
The three unknown ones
2023-08-13 23:52:13 -04:00
Eva Luna
e8b4e3dfdf Maxwell [GM200(GL)]
- 980 Ti
- Quadro M6000
- Quadro M6000 24GB
- Tesla M40
2023-08-13 23:50:27 -04:00
Eva Luna
c5dd7ec6c9 Maxwell [GM107, 940MX] 2023-08-13 23:48:02 -04:00
Eva Luna
3aed0438fc Maxwell [GM107GL, GRID M3-3020] 2023-08-13 23:46:04 -04:00
Eva Luna
58314caed4 Maxwell [GM108M, MX110]
Also make sure this is grouped properly
2023-08-13 23:44:09 -04:00
Eva Luna
bd8c6b4d9f Maxwell [GM108M, MX130] 2023-08-13 23:42:51 -04:00
Eva Luna
7134e30640 Add Maxwell core TITAN X 2023-08-13 23:21:23 -04:00
Mykola Grymalyuk
e8ee2a2657 Merge pull request #1088 from Jazzzny/devtools
Developer - Add buttons to mount and save the root volume
2023-08-08 20:37:05 -06:00
Mykola Grymalyuk
c9a14e242d misc.py: Disable T1 patches temporarily 2023-08-01 13:24:41 -06:00
Mykola Grymalyuk
69f4bbc7a6 Build: Add handling for ARM64 Python 2023-08-01 13:24:02 -06:00
Mykola Grymalyuk
5ecd453c75 storage.py: Streamline S1X/S3X logic 2023-08-01 12:29:57 -06:00
Mykola Grymalyuk
d7eebbe171 Swap injection order 2023-07-31 19:49:03 -06:00
Mykola Grymalyuk
1038be303b build: Add basic T1 patches
Restore basic communication from stripped KernelRelayHost logic
2023-07-31 18:31:30 -06:00
Mykola Grymalyuk
d12b39bd98 Update BlueToolFixup to rolling 2023-07-29 18:06:53 -06:00
Jazzzny
d6161481ef Add returns to comply with comment 2023-07-28 21:26:28 -04:00
Jazzzny
2455cb1233 Update imports 2023-07-28 21:23:20 -04:00
Jazzzny
d2312e3cce Add workaround for unmount 2023-07-28 21:18:12 -04:00
Jazzzny
3ff6f68236 Update 2023-07-28 21:14:25 -04:00
Jazzzny
8b0625eb41 change wording 2023-07-28 20:58:35 -04:00
Jazzzny
97a86fcd92 Add developer patcher 2023-07-28 20:52:18 -04:00
Mykola Grymalyuk
9631cc48bd Sync binaries 2023-07-27 15:29:08 -06:00
Mykola Grymalyuk
84a3341788 Merge branch 'main' into sonoma-development 2023-07-26 13:54:41 -06:00
Mykola Grymalyuk
d547ecdcf0 Increment build 2023-07-26 13:53:50 -06:00
Mykola Grymalyuk
e0fd78c7af sys_patch_detect.py: Adjust OS check from mainline merge 2023-07-26 13:53:21 -06:00
Mykola Grymalyuk
87f412b469 Merge branch 'main' into sonoma-development 2023-07-26 10:58:30 -06:00
Mykola Grymalyuk
6003d6c457 Merge branch 'main' into sonoma-development 2023-07-24 12:19:56 -06:00
Mykola Grymalyuk
20d04d307d sys_patch: Add CoreImage patch for 3802
Resolves Preview and QuickLook support on Sonoma
2023-07-24 08:53:01 -06:00
Mykola Grymalyuk
24a1e35f54 sys_patch.py: Increase AMFI check for WiFi patches in Sonoma 2023-07-24 08:22:54 -06:00
Mykola Grymalyuk
ef4983d907 sys_patch_detect.py: Fix any() invocation 2023-07-23 20:37:29 -06:00
Mykola Grymalyuk
423bf8f20c sys_patch_detect.py: Fix KDKless logic for Sonoma 2023-07-23 15:29:36 -06:00
Mykola Grymalyuk
55e6aeaf0a Add macOS Sonoma public preview 2023-07-23 12:57:35 -06:00
Mykola Grymalyuk
509137f519 sys_patch_detect.py: Adjust FaceTime patch naming 2023-07-23 11:06:51 -06:00
Mykola Grymalyuk
169ea95dc4 defaults.py: Adjust logic for modern wifi 2023-07-23 11:05:04 -06:00
Mykola Grymalyuk
e21efa975c sys_patch: Clean up patch set logic 2023-07-22 12:40:38 -06:00
Mykola Grymalyuk
b9bd01750c sys_patch_dict.py: Fix pathing 2023-07-17 18:34:19 -06:00
Mykola Grymalyuk
7691184ca2 sys_patch: Add PCIe Webcam support 2023-07-17 18:05:33 -06:00
Dhinak G
2bba8f474a device_probe.py: Add multiple class code support 2023-07-17 18:53:03 -04:00
Dhinak G
a5bb29142f device_probe.py: Add in Apple's NVMe class code (part 3) 2023-07-17 18:23:44 -04:00
Dhinak G
74857b1d16 device_probe.py: Fix NVMe handling (part 2) 2023-07-17 17:51:02 -04:00
Mykola Grymalyuk
c19cbd9f41 device_probe.py: Match NVMe off class code 2023-07-17 15:32:39 -06:00
TechEnthusiasm
b6630b685a Another reword 2023-07-17 19:29:26 +01:00
Mykola Grymalyuk
b01adb9c10 Merge branch 'sonoma-development' of https://github.com/dortania/OpenCore-Legacy-Patcher into sonoma-development 2023-07-17 12:26:05 -06:00
Mykola Grymalyuk
44c2f9cbd4 Resolve CI validation errors 2023-07-17 12:25:36 -06:00
Mykola Grymalyuk
e0d16b2d28 Merge branch 'main' into sonoma-development 2023-07-17 12:10:44 -06:00
TechEnthusiasm
4f9ce33912 Reword slightly 2023-07-17 19:07:01 +01:00
Mykola Grymalyuk
9b3bf07494 wireless.py: Ensure IO80211 patches apply on BCM94331/3224 chipsets 2023-07-17 11:10:51 -06:00
Mykola Grymalyuk
4982edef33 Sync PatcherSupportPkg 2023-07-17 09:30:42 -06:00
Mykola Grymalyuk
549bf1686b sys_patch: Implement backend for 3802 support 2023-07-16 22:44:58 -06:00
Mykola Grymalyuk
f3c3c83140 Merge branch 'main' into sonoma-development 2023-07-16 21:43:06 -06:00
Mykola Grymalyuk
e3fa2e857f misc.py: Ensure spoofed models with SBM get access to VMM 2023-07-16 13:26:04 -06:00
Mykola Grymalyuk
f973817819 device_probe.py: Expand NVMe detection to 0x106b Device IDs 2023-06-22 20:02:45 -06:00
Mykola Grymalyuk
c3e0765aae build: Restore S1X/S3X Drive Support for 14.0 Beta 2
Applicable for MacBook8,1-10,1, MacBookPro13,1/14,1:
- APPLE SSD AP0128H, AP0256H, etc
- APPLE SSD AP0128J, AP0256J, etc
2023-06-22 19:25:52 -06:00
Mykola Grymalyuk
3a50a602e0 Sync resources 2023-06-18 14:04:14 -06:00
Mykola Grymalyuk
8487eab010 Merge branch 'main' into sonoma-development 2023-06-18 14:02:24 -06:00
Mykola Grymalyuk
8ac64ff9c0 Sync binaries 2023-06-13 09:06:59 -06:00
Mykola Grymalyuk
e754a7d06f sys_patch_start.py: Remove unused import 2023-06-13 08:38:27 -06:00
Mykola Grymalyuk
b3f6607768 Strip Content Cache references
Setting no longer required with new RestrictEvents setup
2023-06-13 08:38:00 -06:00
Mykola Grymalyuk
b92daff30e GUI: Adjust default selection to latest non-Beta 2023-06-11 12:55:59 -06:00
Mykola Grymalyuk
abdac48f83 payloads: Add Sonoma icons to boot picker 2023-06-11 09:43:08 -06:00
Mykola Grymalyuk
c9fae32eb6 Sync sys_patch 2023-06-10 19:15:45 -06:00
Mykola Grymalyuk
a762d7efe8 sys_patch: Sync dev tools 2023-06-10 10:23:14 -06:00
Mykola Grymalyuk
c044e8acc9 Sync RestrictEvents
Reference: e5c52564f5
2023-06-10 09:59:26 -06:00
Mykola Grymalyuk
f2cc423c31 reroute_payloads.py: Adjust message 2023-06-10 09:59:02 -06:00
Mykola Grymalyuk
218507b8a7 build: Test RE kern.hv_vmm_present routing 2023-06-09 23:00:31 -06:00
Mykola Grymalyuk
e29895830c sys_patch_detect.py: Drop root KC check 2023-06-09 16:45:31 -06:00
Mykola Grymalyuk
e5a260b74b sys_patch: Disable QC for testing 2023-06-08 18:31:14 -06:00
Mykola Grymalyuk
5e45ea92bc Sync dev disk image 2023-06-08 15:52:23 -06:00
Mykola Grymalyuk
6020eae937 Add patching utility for internal developers 2023-06-08 15:44:41 -06:00
Mykola Grymalyuk
0dbffc5a3e Merge branch 'main' into sonoma-development 2023-06-08 10:48:47 -06:00
Mykola Grymalyuk
233ded0924 Merge branch 'main' into sonoma-development 2023-06-08 10:19:03 -06:00
Mykola Grymalyuk
985e053e90 sys_patch: Avoid listing Modern Wifi patch
Binaries are currently not public, however patcher may confuse some users that it added support
2023-06-08 09:27:14 -06:00
Mykola Grymalyuk
9a483181a1 sys_patch_generate.py: Add support reference for 31001 2023-06-07 12:12:22 -06:00
Mykola Grymalyuk
d762b37851 sys_patch_dict.py: Add extra comment 2023-06-06 14:44:01 -06:00
Mykola Grymalyuk
e531d30c3c sys_patch_dict.py: Add legacy wifi patch comment 2023-06-06 14:24:55 -06:00
Mykola Grymalyuk
ca8e1a7bf0 sys_patch.py: Add reference patch set for Broadcom 2023-06-06 13:03:28 -06:00
Mykola Grymalyuk
31a29e0b3e config: Limit NVMeFix to Ventura 2023-06-06 10:13:52 -06:00
Mykola Grymalyuk
1126a49dc5 Merge branch 'main' into sonoma-development 2023-06-06 09:11:18 -06:00
Mykola Grymalyuk
0fce7adad1 payloads: sync AGPM njector with new units 2023-06-06 08:10:57 -06:00
Mykola Grymalyuk
8976496e52 Add dropped models 2023-06-06 08:01:03 -06:00
Mykola Grymalyuk
077b9f67b2 sys_patch: Add reference notes for 31001 2023-06-06 07:48:33 -06:00
Mykola Grymalyuk
8f8778f0f6 build.py: Set beta flag for development 2023-06-05 19:37:11 -06:00
Mykola Grymalyuk
adcceb0c10 firmware.py: Fix MacPro6,1 boot support in Sonoma 2023-06-05 19:36:32 -06:00
110 changed files with 2731 additions and 690 deletions

View File

@@ -28,7 +28,7 @@ jobs:
- uses: actions/checkout@v3
- name: Build Binary
run: /Library/Frameworks/Python.framework/Versions/3.10/bin/python3 Build-Binary.command --reset_binaries --branch "${{ env.branch }}" --commit "${{ env.commiturl }}" --commit_date "${{ env.commitdate }}" --key "${{ env.ANALYTICS_KEY }}" --site "${{ env.ANALYTICS_SITE }}"
run: /Library/Frameworks/Python.framework/Versions/3.11/bin/python3 Build-Binary.command --reset_binaries --branch "${{ env.branch }}" --commit "${{ env.commiturl }}" --commit_date "${{ env.commitdate }}" --key "${{ env.ANALYTICS_KEY }}" --site "${{ env.ANALYTICS_SITE }}"
# - name: Import Certificate
# if: (!security find-certificate -c "${{ env.MAC_CODESIGN_IDENTITY }}")

View File

@@ -14,4 +14,4 @@ jobs:
steps:
- uses: actions/checkout@v3
- name: Validate
run: /Library/Frameworks/Python.framework/Versions/3.10/bin/python3 OpenCore-Patcher-GUI.command --validate
run: /Library/Frameworks/Python.framework/Versions/3.11/bin/python3 OpenCore-Patcher-GUI.command --validate

View File

@@ -3,14 +3,15 @@
# Generate stand alone application for OpenCore-Patcher
# Copyright (C) 2022-2023 - Mykola Grymalyuk
from pathlib import Path
import os
import sys
import time
import argparse
import os
import subprocess
import plistlib
import time
import sys
import platform
import subprocess
from pathlib import Path
from resources import constants
@@ -30,11 +31,12 @@ class CreateBinary:
def __init__(self):
start = time.time()
print("Starting build script")
self._set_cwd()
print("Starting build script")
self.args = self._parse_arguments()
self._set_cwd()
print(f"Current Working Directory:\n- {os.getcwd()}")
self._preflight_processes()
self._build_binary()
@@ -48,7 +50,6 @@ class CreateBinary:
"""
os.chdir(Path(__file__).resolve().parent)
print(f"Current Working Directory:\n- {os.getcwd()}")
def _parse_arguments(self):

View File

@@ -1,5 +1,54 @@
# OpenCore Legacy Patcher changelog
## 1.0.0
- 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)
- Refresh download UI (Jazzzny)
- Add support for Universal 2 distribution (x86_64 and ARM64)
- Drops Rosetta requirement on Apple Silicon Macs
- Note building from source will require Python 3.11 or newer and up-to-date Python modules
- Update font handling code, fixing font issues on Yosemite and El Capitan
- Resolve incorrect RELEASE usage of OpenCore binaries when DEBUG enabled
- Add RenderBox.framework patch for 3802-based Intel GPUs on macOS 13.3 and newer
- Works around Weather and Widget freezing
- Applicable for Intel Ivy Bridge and Haswell iGPUs
- Add macOS Sonoma support to PatcherSupportPkg validation in CI
- Implement basic support for macOS Sonoma:
- Supports same range of hardware as Ventura, in addition to:
- iMac18,x
- MacBook10,1
- MacBookPro14,x
- [T1 chip currently unsupported in Sonoma](https://github.com/dortania/OpenCore-Legacy-Patcher/issues/1103)
- Resolved issues:
- Graphics Acceleration support for 3802 and non-Metal GPUs
- UI corruption on 31001 GPUs
- Wireless Networking for BCM94360, 4360, 4350, 4331 and 43224
- USB ethernet support for adapters based on ECM protocol (ex. Realtek)
- dGPU support for MacBookPro14,3
- S1X/S3X NVMe Drive Support
- PCIe-based FaceTime Camera support
- Bluetooth support by switching to dynamic VMM spoofing
- Increment Binaries:
- OpenCorePkg 0.9.3 - release
- Lilu 1.6.7 - release
- WhateverGreen 1.6.6 - release
- RestrictEvents 1.1.3 - (rolling - 4f233dd)
- FeatureUnlock 1.1.5 - release
- DebugEnhancer 1.0.8 - release
- CPUFriend 1.2.7 - release
- BlueToolFixup 2.6.8 - rolling (2305aaa)
- CryptexFixup 1.0.2 - release
- PatcherSupportPkg 1.3.2 - release
- Build Server Changes:
- Upgrade Python backend to 3.11.5
- Upgrade Python modules:
- requests - 2.31.0
- pyobjc - 9.2
- wxpython - 4.2.1
- pyinstaller - 5.13.2
- packaging - 23.1
## 0.6.8
- Update non-Metal Binaries:
- Improve experimental Menubar implementation stability
@@ -33,7 +82,7 @@
- utilities.py:
- Fix indexing error on Device Paths (thx [@Ausdauersportler](https://github.com/Ausdauersportler))
- Increment Binaries:
- PatcherSupportPkg 1.2.2 - release
- PatcherSupportPkg 1.2.2 - release
## 0.6.7
- Resolve partition buttons overlapping in Install OpenCore UI

View File

@@ -1,15 +1,23 @@
# -*- mode: python ; coding: utf-8 -*-
import sys, os, time, subprocess
import sys, os, time, subprocess, pathlib
sys.path.append(os.path.abspath(os.getcwd()))
from resources import constants
block_cipher = None
datas = [
('payloads.dmg', '.'),
('Universal-Binaries.dmg', '.'),
]
if pathlib.Path("DortaniaInternalResources.dmg").exists():
datas.append(('DortaniaInternalResources.dmg', '.'))
a = Analysis(['OpenCore-Patcher-GUI.command'],
pathex=[],
binaries=[],
datas=[('payloads.dmg', '.'), ('Universal-Binaries.dmg', '.')],
datas=datas,
hiddenimports=[],
hookspath=[],
hooksconfig={},
@@ -33,7 +41,7 @@ exe = EXE(pyz,
upx=True,
console=False,
disable_windowed_traceback=False,
target_arch=None,
target_arch="universal2",
codesign_identity=None,
entitlements_file=None )
coll = COLLECT(exe,

View File

@@ -93,7 +93,13 @@ To run the project from source, see here: [Build and run from source](./SOURCE.m
* [FixPCIeLinkrate](https://github.com/joevt/joevtApps)
* [Jazzzny](https://github.com/Jazzzny)
* Research and various contributions to the project
* Aquantia Ethernet Patch
* UEFI Legacy XHCI research and development
* NVIDIA OpenCL research and development
* `MacBook5,2` research and development
* LegacyKeyboardInjector
* Pre-Ivy Bridge Aquantia Ethernet Patch
* Non-Metal Photo Booth Patch for Monterey+
* GUI and Backend Development
* Amazing users who've graciously donate hardware:
* [JohnD](https://forums.macrumors.com/members/johnd.53633/) - 2013 Mac Pro
* [SpiGAndromeda](https://github.com/SpiGAndromeda) - AMD Vega 64

View File

@@ -8,6 +8,7 @@ SupportedSMBIOS = [
"MacBook7,1",
"MacBook8,1",
"MacBook9,1",
"MacBook10,1",
# MacBook Air
"MacBookAir2,1",
"MacBookAir3,1",
@@ -46,6 +47,9 @@ SupportedSMBIOS = [
"MacBookPro13,1",
"MacBookPro13,2",
"MacBookPro13,3",
"MacBookPro14,1",
"MacBookPro14,2",
"MacBookPro14,3",
# Mac Mini
"Macmini3,1",
"Macmini4,1",
@@ -76,6 +80,9 @@ SupportedSMBIOS = [
"iMac16,1",
"iMac16,2",
"iMac17,1",
"iMac18,1",
"iMac18,2",
"iMac18,3",
# Mac Pro
"MacPro3,1",
"MacPro4,1",

View File

@@ -411,6 +411,7 @@ 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]
@@ -418,88 +419,136 @@ class nvidia_ids:
0x1187, # GK104 [GTX 760]
0x1188, # GK104 [GTX 690]
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]
@@ -1104,6 +1171,13 @@ class broadcom_ids:
0x43A0, # BCM4360
]
# Not natively supported, but supported by AirportBrcmFixup
AirPortBrcmNICThirdParty = [
0x4357, # BCM43225
0x43B1, # BCM4352
0x43B2, # BCM4352 (2.4 GHz)
]
AirPortBrcm4360 = [
# AirPortBrcm4360 IDs (removed duplicates for 4360 class cards)
0x4331, # BCM94331
@@ -1155,6 +1229,8 @@ class aquantia_ids:
0x92B1, # AQC107
0x00C0, # AQC113
0x04C0, # AQC113
0x94C0, # AQC113
0x93C0, # AQC113
]

View File

@@ -259,7 +259,7 @@ smbios_dictionary = {
"FirmwareFeatures": "0x8FC0FE13F",
"SecureBootModel": None,
"CPU Generation": cpu_data.CPUGen.kaby_lake.value,
"Max OS Supported": os_data.os_data.max_os,
"Max OS Supported": os_data.os_data.ventura,
"Wireless Model": device_probe.Broadcom.Chipsets.AirportBrcmNIC,
"Bluetooth Model": bluetooth_data.bluetooth_data.BRCM20703_UART,
"Screen Size": 12,
@@ -708,7 +708,7 @@ smbios_dictionary = {
],
},
"MacBookPro3,1": {
"Marketing Name": "MacBook Pro (15-inch, 2.4 2.2GHz) ",
"Marketing Name": "MacBook Pro (15-inch, 2.4 2.2GHz)",
"Board ID": "Mac-F4238BC8",
"FirmwareFeatures": "0xC0001407",
"SecureBootModel": None,
@@ -1251,7 +1251,7 @@ smbios_dictionary = {
],
},
"MacBookPro13,2": {
"Marketing Name": "MacBook Pro (13-inch, 2016, Four Thunderbolt 3 Ports) ",
"Marketing Name": "MacBook Pro (13-inch, 2016, Four Thunderbolt 3 Ports)",
"Board ID": "Mac-66E35819EE2D0D05",
"FirmwareFeatures": "0x8FC0FE137",
"SecureBootModel": None,
@@ -1294,7 +1294,7 @@ smbios_dictionary = {
"FirmwareFeatures": "0x8FF0FF57E",
"SecureBootModel": None,
"CPU Generation": cpu_data.CPUGen.kaby_lake.value,
"Max OS Supported": os_data.os_data.max_os,
"Max OS Supported": os_data.os_data.ventura,
"Wireless Model": device_probe.Broadcom.Chipsets.AirportBrcmNIC,
"Bluetooth Model": bluetooth_data.bluetooth_data.BRCM20703_UART,
"Screen Size": 13,
@@ -1307,12 +1307,12 @@ smbios_dictionary = {
],
},
"MacBookPro14,2": {
"Marketing Name": "MacBook Pro (13-inch, 2017, Four Thunderbolt 3 Ports) ",
"Marketing Name": "MacBook Pro (13-inch, 2017, Four Thunderbolt 3 Ports)",
"Board ID": "Mac-CAD6701F7CEA0921",
"FirmwareFeatures": "0x8FF0FF57E",
"SecureBootModel": None,
"CPU Generation": cpu_data.CPUGen.kaby_lake.value,
"Max OS Supported": os_data.os_data.max_os,
"Max OS Supported": os_data.os_data.ventura,
"Wireless Model": device_probe.Broadcom.Chipsets.AirportBrcmNIC,
"Bluetooth Model": bluetooth_data.bluetooth_data.BRCM20703_UART,
"Screen Size": 13,
@@ -1330,7 +1330,7 @@ smbios_dictionary = {
"FirmwareFeatures": "0x8FF0FF57E",
"SecureBootModel": None,
"CPU Generation": cpu_data.CPUGen.kaby_lake.value,
"Max OS Supported": os_data.os_data.max_os,
"Max OS Supported": os_data.os_data.ventura,
"Wireless Model": device_probe.Broadcom.Chipsets.AirportBrcmNIC,
"Bluetooth Model": bluetooth_data.bluetooth_data.BRCM20703_UART,
"Screen Size": 15,
@@ -2495,7 +2495,7 @@ smbios_dictionary = {
"FirmwareFeatures": "0x8FD0FF576",
"SecureBootModel": None,
"CPU Generation": cpu_data.CPUGen.kaby_lake.value,
"Max OS Supported": os_data.os_data.max_os,
"Max OS Supported": os_data.os_data.ventura,
"Wireless Model": device_probe.Broadcom.Chipsets.AirportBrcmNIC,
"Bluetooth Model": bluetooth_data.bluetooth_data.BRCM20703,
"Ethernet Chipset": "Broadcom",
@@ -2513,7 +2513,7 @@ smbios_dictionary = {
"FirmwareFeatures": "0x8FD0FF576",
"SecureBootModel": None,
"CPU Generation": cpu_data.CPUGen.kaby_lake.value,
"Max OS Supported": os_data.os_data.max_os,
"Max OS Supported": os_data.os_data.ventura,
"Wireless Model": device_probe.Broadcom.Chipsets.AirportBrcmNIC,
"Bluetooth Model": bluetooth_data.bluetooth_data.BRCM20703,
"Ethernet Chipset": "Broadcom",
@@ -2532,7 +2532,7 @@ smbios_dictionary = {
"FirmwareFeatures": "0x8FD0FF576",
"SecureBootModel": None,
"CPU Generation": cpu_data.CPUGen.kaby_lake.value,
"Max OS Supported": os_data.os_data.max_os,
"Max OS Supported": os_data.os_data.ventura,
"Wireless Model": device_probe.Broadcom.Chipsets.AirportBrcmNIC,
"Bluetooth Model": bluetooth_data.bluetooth_data.BRCM20703,
"Ethernet Chipset": "Broadcom",

View File

@@ -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()
@@ -102,6 +103,7 @@ class SystemPatchDictionary():
"/System/Library/PrivateFrameworks": {
"GPUSupport.framework": "10.14.3",
"SkyLight.framework": f"10.14.6-{self.os_major}",
**({"FaceCore.framework": f"13.5"} if self.os_major >= os_data.os_data.sonoma else {}),
},
"/System/Applications": {
**({ "Photo Booth.app": "11.7.9"} if self.os_major >= os_data.os_data.monterey else {}),
@@ -147,6 +149,8 @@ class SystemPatchDictionary():
**({"defaults write /Library/Preferences/.GlobalPreferences.plist ShowDate -int 1": True } if self.os_float >= self.macOS_12_4 else {}),
"defaults write /Library/Preferences/.GlobalPreferences.plist InternalDebugUseGPUProcessForCanvasRenderingEnabled -bool false": True,
"defaults write /Library/Preferences/.GlobalPreferences.plist WebKitExperimentalUseGPUProcessForCanvasRenderingEnabled -bool false": True,
**({"defaults write /Library/Preferences/.GlobalPreferences.plist WebKitPreferences.acceleratedDrawingEnabled -bool false": True} if self.os_major >= os_data.os_data.sonoma else {}),
**({"defaults write /Library/Preferences/.GlobalPreferences.plist NSEnableAppKitMenus -bool false": True} if self.os_major >= os_data.os_data.sonoma else {}),
},
},
"Non-Metal IOAccelerator Common": {
@@ -344,7 +348,7 @@ class SystemPatchDictionary():
},
"Install": {
"/System/Library/Frameworks": {
"Metal.framework": "12.5-3802",
"Metal.framework": f"12.5-3802-{self.os_major}",
},
"/System/Library/PrivateFrameworks": {
"MTLCompiler.framework": "12.5-3802",
@@ -372,11 +376,13 @@ class SystemPatchDictionary():
},
"Install": {
"/System/Library/Frameworks": {
"Metal.framework": "13.2.1",
"Metal.framework": f"13.2.1-{self.os_major}",
**({ "CoreImage.framework": "14.0 Beta 3" } if self.os_major >= os_data.os_data.ventura else {}),
},
"/System/Library/PrivateFrameworks": {
"MTLCompiler.framework": "13.2.1",
"GPUCompiler.framework": "13.2.1",
**({ "MTLCompiler.framework": "13.2.1" } if self.os_major == os_data.os_data.ventura else {}),
**({ "GPUCompiler.framework": "13.2.1" } if self.os_major == os_data.os_data.ventura else {}),
"RenderBox.framework": "13.2.1-3802" if self.os_major == os_data.os_data.ventura else "14.0-3802",
},
},
},
@@ -567,14 +573,14 @@ class SystemPatchDictionary():
},
"Install": {
"/System/Library/Extensions": {
"GeForce.kext": "12.0 Beta 6",
"GeForce.kext": "12.0 Beta 6" if self.os_major < os_data.os_data.sonoma else "12.0 Beta 6-23",
"NVDAGF100Hal.kext": "12.0 Beta 6",
"NVDAGK100Hal.kext": "12.0 Beta 6",
"NVDAResman.kext": "12.0 Beta 6",
"NVDAStartup.kext": "12.0 Beta 6",
"GeForceAIRPlugin.bundle": "11.0 Beta 3",
"GeForceGLDriver.bundle": "11.0 Beta 3",
"GeForceMTLDriver.bundle": "11.0 Beta 3" if self.os_major <= os_data.os_data.monterey else f"11.0 Beta 3-{self.os_major}",
"GeForceMTLDriver.bundle": "11.0 Beta 3" if self.os_major <= os_data.os_data.monterey else f"11.0 Beta 3-22",
"GeForceVADriver.bundle": "12.0 Beta 6",
},
"/System/Library/Frameworks": {
@@ -764,9 +770,9 @@ class SystemPatchDictionary():
"AMD9000Controller.kext": "12.5",
"AMD9500Controller.kext": "12.5",
"AMD10000Controller.kext": "12.5",
"AMDRadeonX4000.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",
@@ -777,6 +783,40 @@ class SystemPatchDictionary():
},
},
},
# For MacBookPro14,3 (and other AMD dGPUs that no longer function in Sonoma)
# iMac18,2/3 still function with the generic framebuffer, however if issues arise
# we'll downgrade them as well.
"AMD Legacy GCN v2": {
"Display Name": "Graphics: AMD Legacy GCN (2017)",
"OS Support": {
"Minimum OS Support": {
"OS Major": os_data.os_data.sonoma,
"OS Minor": 0
},
"Maximum OS Support": {
"OS Major": os_data.os_data.max_os,
"OS Minor": 99
},
},
"Install": {
"/System/Library/Extensions": {
"AMD9500Controller.kext": "13.5.2",
"AMD10000Controller.kext": "13.5.2",
"AMDRadeonX4000.kext": "13.5.2",
"AMDRadeonX4000HWServices.kext": "13.5.2",
"AMDFramebuffer.kext": "13.5.2",
"AMDSupport.kext": "13.5.2",
"AMDRadeonVADriver.bundle": "13.5.2",
"AMDRadeonVADriver2.bundle": "13.5.2",
"AMDRadeonX4000GLDriver.bundle": "13.5.2",
"AMDMTLBronzeDriver.bundle": "13.5.2",
"AMDShared.bundle": "13.5.2",
},
},
},
# Used only for AMD Polaris with host lacking AVX2.0
# Note missing framebuffers are not restored (ex. 'ATY,Berbice')
"AMD Legacy Polaris": {
@@ -793,7 +833,7 @@ class SystemPatchDictionary():
},
"Install": {
"/System/Library/Extensions": {
"AMDRadeonX4000.kext": "12.5",
"AMDRadeonX4000.kext": "12.5" if self.os_major < os_data.os_data.sonoma else "12.5-23",
"AMDRadeonX4000HWServices.kext": "12.5",
"AMDRadeonVADriver2.bundle": "12.5",
@@ -817,7 +857,7 @@ class SystemPatchDictionary():
},
"Install": {
"/System/Library/Extensions": {
"AMDRadeonX5000.kext": "12.5",
"AMDRadeonX5000.kext": "12.5" if self.os_major < os_data.os_data.sonoma else "12.5-23",
"AMDRadeonVADriver2.bundle": "12.5",
"AMDRadeonX5000GLDriver.bundle": "12.5",
@@ -911,8 +951,8 @@ class SystemPatchDictionary():
"AppleIntelHD4000GraphicsGLDriver.bundle": "11.0 Beta 6",
"AppleIntelHD4000GraphicsMTLDriver.bundle": "11.0 Beta 6",
"AppleIntelHD4000GraphicsVADriver.bundle": "11.3 Beta 1",
"AppleIntelFramebufferCapri.kext": "11.4",
"AppleIntelHD4000Graphics.kext": "11.4",
"AppleIntelFramebufferCapri.kext": "11.4" if self.os_major < os_data.os_data.sonoma else "11.4-23",
"AppleIntelHD4000Graphics.kext": "11.4" if self.os_major < os_data.os_data.sonoma else "11.4-23",
"AppleIntelIVBVA.bundle": "11.4",
"AppleIntelGraphicsShared.bundle": "11.4", # libIGIL-Metal.dylib pulled from 11.0 Beta 6
},
@@ -932,8 +972,8 @@ class SystemPatchDictionary():
},
"Install": {
"/System/Library/Extensions": {
"AppleIntelFramebufferAzul.kext": "12.5",
"AppleIntelHD5000Graphics.kext": "12.5",
"AppleIntelFramebufferAzul.kext": "12.5" if self.os_major < os_data.os_data.sonoma else "12.5-23",
"AppleIntelHD5000Graphics.kext": "12.5" if self.os_major < os_data.os_data.sonoma else "12.5-23",
"AppleIntelHD5000GraphicsGLDriver.bundle": "12.5",
"AppleIntelHD5000GraphicsMTLDriver.bundle": "12.5",
"AppleIntelHD5000GraphicsVADriver.bundle": "12.5",
@@ -956,8 +996,8 @@ class SystemPatchDictionary():
},
"Install": {
"/System/Library/Extensions": {
"AppleIntelBDWGraphics.kext": "12.5",
"AppleIntelBDWGraphicsFramebuffer.kext": "12.5",
"AppleIntelBDWGraphics.kext": "12.5" if self.os_major < os_data.os_data.sonoma else "12.5-23",
"AppleIntelBDWGraphicsFramebuffer.kext": "12.5" if self.os_major < os_data.os_data.sonoma else "12.5-23",
"AppleIntelBDWGraphicsGLDriver.bundle": "12.5",
"AppleIntelBDWGraphicsMTLDriver.bundle": "12.5",
"AppleIntelBDWGraphicsVADriver.bundle": "12.5",
@@ -980,8 +1020,8 @@ class SystemPatchDictionary():
},
"Install": {
"/System/Library/Extensions": {
"AppleIntelSKLGraphics.kext": "12.5",
"AppleIntelSKLGraphicsFramebuffer.kext": "12.5",
"AppleIntelSKLGraphics.kext": "12.5" if self.os_major < os_data.os_data.sonoma else "12.5-23",
"AppleIntelSKLGraphicsFramebuffer.kext": "12.5" if self.os_major < os_data.os_data.sonoma else "12.5-23",
"AppleIntelSKLGraphicsGLDriver.bundle": "12.5",
"AppleIntelSKLGraphicsMTLDriver.bundle": "12.5",
"AppleIntelSKLGraphicsVADriver.bundle": "12.5",
@@ -1084,6 +1124,8 @@ class SystemPatchDictionary():
"Install": {
"/usr/libexec": {
"wps": "12.6.2",
"wifip2pd": "12.6.2",
"wifianalyticsd": "13.5",
},
"/System/Library/Frameworks": {
"CoreWLAN.framework": "12.6.2",
@@ -1091,9 +1133,45 @@ class SystemPatchDictionary():
"/System/Library/PrivateFrameworks": {
"CoreWiFi.framework": "12.6.2",
"IO80211.framework": "12.6.2",
"WiFiPeerToPeer.framework": "12.6.2",
**({ "CoreAnalytics.framework": "13.5"} if self.os_major >= os_data.os_data.sonoma else {}),
**({ "WiFiAnalytics.framework": "13.5"} if self.os_major >= os_data.os_data.sonoma else {}),
},
},
}
},
# May lord have mercy on our souls
# Applicable for BCM943324, BCM94331, BCM94360, BCM943602
"Modern Wireless": {
"Display Name": "Networking: Modern Wireless",
"OS Support": {
"Minimum OS Support": {
"OS Major": os_data.os_data.sonoma,
"OS Minor": 0
},
"Maximum OS Support": {
"OS Major": os_data.os_data.max_os,
"OS Minor": 99
},
},
"Install": {
"/usr/libexec": {
"airportd": "13.5",
"wifianalyticsd": "13.5",
"wifip2pd": "13.5",
},
"/System/Library/Frameworks": {
"CoreWLAN.framework": "13.5",
},
"/System/Library/PrivateFrameworks": {
"CoreAnalytics.framework": "13.5",
"CoreWiFi.framework": "13.5",
"IO80211.framework": "13.5",
"WiFiAnalytics.framework": "13.5",
"WiFiPolicy.framework": "13.5",
"WiFiPeerToPeer.framework": "13.5",
},
},
},
},
"Brightness": {
"Legacy Backlight Control": {
@@ -1185,6 +1263,27 @@ class SystemPatchDictionary():
"IOUSBHostFamily.kext": "12.6.2",
},
},
}
},
"PCIe FaceTime Camera": {
"Display Name": "Miscellaneous: PCIe FaceTime Camera",
"OS Support": {
"Minimum OS Support": {
"OS Major": os_data.os_data.sonoma,
"OS Minor": 0
},
"Maximum OS Support": {
"OS Major": os_data.os_data.max_os,
"OS Minor": 99
},
},
"Install Non-Root": {
"/Library/CoreMediaIO/Plug-Ins/DAL": {
"AppleCamera.plugin": "14.0 Beta 1"
},
"/Library/LaunchDaemons": {
"com.apple.cmio.AppleCameraAssistant.plist": "14.0 Beta 1"
},
},
},
},
}
}

View File

@@ -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 | <span style="color:red"> NO </span> | 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<br/>- No Keyboard and Trackpad<br/>- No USB |
| MacBook5,1 | Late 2008 | <span style="color:#30BCD5"> YES </span> | - GPU Acceleration in Public Beta, see current issues ([#108](https://github.com/dortania/OpenCore-Legacy-Patcher/issues/108))<br/> - 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))<br/> - UHCI/OHCI support in Public Beta, see current issues ([#1021](https://github.com/dortania/OpenCore-Legacy-Patcher/issues/1021))<br/> - 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))<br/> - 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 | ^^ | <span style="color:green"> Everything is supported</span> |
| 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)<br>- [USB 1.1 (macOS 13+)](https://github.com/dortania/OpenCore-Legacy-Patcher/issues/1021)|
| MacBook (13-inch, Early 2009)<br>MacBook (13-inch, Mid 2009) | `MacBook5,2` | - [non-Metal GPU (macOS 11+)](https://github.com/dortania/OpenCore-Legacy-Patcher/issues/108)<br>- [USB 1.1 (macOS 13+)](https://github.com/dortania/OpenCore-Legacy-Patcher/issues/1021)<br>- 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)<br>- [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 | <span style="color:red"> NO </span> | Requires SSE4.1 CPU |
| MacBookAir2,1 | Late 2008 | <span style="color:#30BCD5"> YES </span> | - GPU Acceleration in Public Beta, see current issues ([#108](https://github.com/dortania/OpenCore-Legacy-Patcher/issues/108))<br/> - 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 | ^^ | <span style="color:green"> Everything is supported</span> |
| 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)<br>MacBook Air (13-inch, Mid 2009) | `MacBookAir2,1` | - [non-Metal GPU (macOS 11+)](https://github.com/dortania/OpenCore-Legacy-Patcher/issues/108)<br>- [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)<br>MacBook Air (11-inch, Early 2014) | `MacBookAir6,1` | ^^ |
| MacBook Air (13-inch, Mid 2013)<br>MacBook Air (13-inch, Early 2014) | `MacBookAir6,2` | ^^ |
| MacBook Air (11-inch, Early 2015) | `MacBookAir7,1` | ^^ |
| MacBook Air (13-inch, Early 2015)<br>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 | <span style="color:red"> NO </span> | 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 | <span style="color:#30BCD5"> YES </span> | - GPU Acceleration in Public Beta, see current issues ([#108](https://github.com/dortania/OpenCore-Legacy-Patcher/issues/108))<br/> - 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))<br/> - 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 | ^^ | <span style="color:green"> Everything is supported</span> |
| 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)<br>MacBook Pro (17-inch, Early 2008) | `MacBookPro4,1` | - [non-Metal GPU (macOS 11+)](https://github.com/dortania/OpenCore-Legacy-Patcher/issues/108)<br>- [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)<br>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)<br>- [USB 1.1 (macOS 13+)](https://github.com/dortania/OpenCore-Legacy-Patcher/issues/1021) |
| MacBook Pro (13-inch, Early 2011)<br>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)<br>MacBook Pro (15-inch, Late 2011) | `MacBookPro8,2` | ^^ |
| MacBook Pro (17-inch, Early 2011)<br> | `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)<br>MacBook Pro (Retina, 15-inch, Early 2013) | `MacBookPro10,1` | ^^ |
| MacBook Pro (Retina, 13-inch, Late 2012)<br>MacBook Pro (Retina, 13-inch, Early 2013) | `MacBookPro10,2` | ^^ |
| MacBook Pro (Retina, 13-inch, Late 2013)<br>MacBook Pro (Retina, 13-inch, Mid 2014) | `MacBookPro11,1` | ^^ |
| MacBook Pro (Retina, 15-inch, Late 2013)<br>MacBook Pro (Retina, 15-inch, Mid 2014) | `MacBookPro11,2`<br>`MacBookPro11,3` | ^^ |
| MacBook Pro (Retina, 15-inch, Mid 2015) | `MacBookPro11,4`<br>`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)<br>MacBook Pro (13-inch, 2019, 4 Thunderbolt 3 ports) | `MacBookPro15,2` | ^^ |
| MacBook Pro (15-inch, 2018)<br>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`<br>`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 | <span style="color:red"> NO </span> | 32-Bit CPU limitation |
| Macmini2,1 | Mid 2007 | ^^ | 32-Bit Firmware limitation |
| Macmini3,1 | Early 2009 | <span style="color:#30BCD5"> YES </span> | - GPU Acceleration in Public Beta, see current issues ([#108](https://github.com/dortania/OpenCore-Legacy-Patcher/issues/108))<br/> - 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 | ^^ | <span style="color:green"> Everything is supported</span> |
| 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)<br>- [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`<br>`Macmini5,2`<br>`Macmini5,3` | ^^ |
| Mac mini (Late 2012) | `Macmini6,1`<br>`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 | <span style="color:red"> NO </span> | 32-Bit CPU limitation |
| iMac4,2 | Mid 2006 | ^^ | ^^ |
| iMac5,1 | Late 2006 | ^^ | 32-Bit Firmware limitation |
| iMac5,2 | ^^ | ^^ | ^^ |
| iMac6,1 | ^^ | ^^ | ^^ |
| iMac7,1 | Mid 2007 | <span style="color:#30BCD5"> YES </span> | - Requires an [SSE4.1 CPU Upgrade](https://lowendmac.com/2018/penryn-t9300-9500-cpu-upgrades-for-the-2007-imac/)<br/>- GPU Acceleration in Public Beta, see current issues ([#108](https://github.com/dortania/OpenCore-Legacy-Patcher/issues/108))<br/>- Stock Bluetooth 2.0 card non-functional<br/> - 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))<br/> - 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) <br/>- GPU Acceleration in Public Beta, see current issues ([#108](https://github.com/dortania/OpenCore-Legacy-Patcher/issues/108)) <br/> - 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 | ^^ | <span style="color:green"> Everything is supported</span> |
| 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)<br>iMac (24-inch, Mid 2007) | `iMac7,1` | - [Requires SSE4.1 CPU](https://lowendmac.com/2018/penryn-t9300-9500-cpu-upgrades-for-the-2007-imac/)<br>- [non-Metal GPU (macOS 11+)](https://github.com/dortania/OpenCore-Legacy-Patcher/issues/108)<br>- [USB 1.1 (macOS 13+)](https://github.com/dortania/OpenCore-Legacy-Patcher/issues/1021)<br>- Remove stock Bluetooth to prevent panics |
| iMac (20-inch, Early 2008)<br>iMac (24-inch, Early 2008) | `iMac8,1` | - [non-Metal GPU (macOS 11+)](https://github.com/dortania/OpenCore-Legacy-Patcher/issues/108)<br>- [USB 1.1 (macOS 13+)](https://github.com/dortania/OpenCore-Legacy-Patcher/issues/1021) |
| iMac (20-inch, Early 2009)<br>iMac (24-inch, Early 2009)<br>iMac (20-inch, Mid 2009) | `iMac9,1` | - [non-Metal GPU (macOS 11+)](https://github.com/dortania/OpenCore-Legacy-Patcher/issues/108)<br>- [USB 1.1 (macOS 13+)](https://github.com/dortania/OpenCore-Legacy-Patcher/issues/1021)<br>- [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)<br>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)<br>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`<br>`iMac14,3` | ^^ |
| iMac (21.5-inch, Mid 2014) | `iMac14,4` | ^^ |
| iMac (Retina 5K, 27-inch, Late 2014)<br>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`<br>`iMac20,2` | ^^ |
| iMac Pro (2017) | `iMacPro1,1` | ^^ |
### Mac Pro
| SMBIOS | Year | Supported | Comment |
| :--- | :--- | :--- | :--- |
| MacPro1,1 | Mid 2006 | <span style="color:red"> NO </span> | 32-Bit Firmware limitation |
| MacPro2,1 | Mid 2007 | ^^ | ^^ |
| MacPro3,1 | Early 2008 | <span style="color:#30BCD5"> YES </span> | - UHCI/OHCI support in Public Beta, see current issues ([#1021](https://github.com/dortania/OpenCore-Legacy-Patcher/issues/1021)) <br/>- 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 <br/> - 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<br>- [non-Metal GPU (macOS 11+)](https://github.com/dortania/OpenCore-Legacy-Patcher/issues/108)<br>- [USB 1.1 (macOS 13+)](https://github.com/dortania/OpenCore-Legacy-Patcher/issues/1021)<br>- Remove stock Bluetooth to prevent panics |
| Mac Pro (Early 2009) | `MacPro4,1` | - Recommend upgrade to Metal GPU<br>- [non-Metal GPU (macOS 11+)](https://github.com/dortania/OpenCore-Legacy-Patcher/issues/108)<br>- [USB 1.1 (macOS 13+)](https://github.com/dortania/OpenCore-Legacy-Patcher/issues/1021) |
| Mac Pro (Mid 2010)<br>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 | <span style="color:red"> NO </span> | 32-Bit Firmware limitation |
| Xserve2,1 | Early 2008 | <span style="color:#30BCD5"> YES </span> | - Everything is supported as long as GPU is Metal capable <br/> - 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<br>- [non-Metal GPU (macOS 11+)](https://github.com/dortania/OpenCore-Legacy-Patcher/issues/108)<br>- [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)

View File

@@ -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.

View File

@@ -429,42 +429,6 @@
<key>PlistPath</key>
<string>Contents/Info.plist</string>
</dict>
<dict>
<key>Arch</key>
<string>x86_64</string>
<key>Comment</key>
<string>Broadcom Wifi Patch</string>
<key>Enabled</key>
<false/>
<key>MaxKernel</key>
<string></string>
<key>MinKernel</key>
<string>12.0.0</string>
<key>BundlePath</key>
<string>AirportBrcmFixup.kext</string>
<key>ExecutablePath</key>
<string>Contents/MacOS/AirportBrcmFixup</string>
<key>PlistPath</key>
<string>Contents/Info.plist</string>
</dict>
<dict>
<key>Arch</key>
<string>x86_64</string>
<key>Comment</key>
<string>4331 Wifi Patch</string>
<key>Enabled</key>
<false/>
<key>MaxKernel</key>
<string></string>
<key>MinKernel</key>
<string>20.0.0</string>
<key>BundlePath</key>
<string>AirportBrcmFixup.kext/Contents/PlugIns/AirPortBrcmNIC_Injector.kext</string>
<key>ExecutablePath</key>
<string></string>
<key>PlistPath</key>
<string>Contents/Info.plist</string>
</dict>
<dict>
<key>Arch</key>
<string>x86_64</string>
@@ -923,7 +887,7 @@
<key>Enabled</key>
<false/>
<key>MaxKernel</key>
<string></string>
<string>22.99.99</string>
<key>MinKernel</key>
<string>18.0.0</string>
<key>BundlePath</key>
@@ -1585,21 +1549,113 @@
<key>Arch</key>
<string>x86_64</string>
<key>BundlePath</key>
<string>AMFIPass.kext</string>
<string>IOSkywalkFamily.kext</string>
<key>Comment</key>
<string>AMFIPass</string>
<string>IOSkywalkFamily</string>
<key>Enabled</key>
<false/>
<key>ExecutablePath</key>
<string>Contents/MacOS/AMFIPass</string>
<string>Contents/MacOS/IOSkywalkFamily</string>
<key>MaxKernel</key>
<string></string>
<key>MinKernel</key>
<string>20.0.0</string>
<string>23.0.0</string>
<key>PlistPath</key>
<string>Contents/Info.plist</string>
</dict>
<dict>
<key>Arch</key>
<string>x86_64</string>
<key>BundlePath</key>
<string>IO80211FamilyLegacy.kext</string>
<key>Comment</key>
<string>IO80211FamilyLegacy</string>
<key>Enabled</key>
<false/>
<key>ExecutablePath</key>
<string>Contents/MacOS/IO80211FamilyLegacy</string>
<key>MaxKernel</key>
<string></string>
<key>MinKernel</key>
<string>23.0.0</string>
<key>PlistPath</key>
<string>Contents/Info.plist</string>
</dict>
<dict>
<key>Arch</key>
<string>x86_64</string>
<key>BundlePath</key>
<string>IO80211FamilyLegacy.kext/Contents/PlugIns/AirPortBrcmNIC.kext</string>
<key>Comment</key>
<string>AirPortBrcmNIC</string>
<key>Enabled</key>
<false/>
<key>ExecutablePath</key>
<string>Contents/MacOS/AirPortBrcmNIC</string>
<key>MaxKernel</key>
<string></string>
<key>MinKernel</key>
<string>23.0.0</string>
<key>PlistPath</key>
<string>Contents/Info.plist</string>
</dict>
<dict>
<key>Arch</key>
<string>x86_64</string>
<key>Comment</key>
<string>Broadcom Wifi Patch</string>
<key>Enabled</key>
<false/>
<key>MaxKernel</key>
<string></string>
<key>MinKernel</key>
<string>12.0.0</string>
<key>BundlePath</key>
<string>AirportBrcmFixup.kext</string>
<key>ExecutablePath</key>
<string>Contents/MacOS/AirportBrcmFixup</string>
<key>PlistPath</key>
<string>Contents/Info.plist</string>
</dict>
<dict>
<key>Arch</key>
<string>x86_64</string>
<key>Comment</key>
<string>4331 Wifi Patch</string>
<key>Enabled</key>
<false/>
<key>MaxKernel</key>
<string></string>
<key>MinKernel</key>
<string>20.0.0</string>
<key>BundlePath</key>
<string>AirportBrcmFixup.kext/Contents/PlugIns/AirPortBrcmNIC_Injector.kext</string>
<key>ExecutablePath</key>
<string></string>
<key>PlistPath</key>
<string>Contents/Info.plist</string>
</dict>
<dict>
<key>Arch</key>
<string>x86_64</string>
<key>BundlePath</key>
<string>IOS3XeFamily.kext</string>
<key>Comment</key>
<string>Restore S1X/S3X drive support for 14.0 Beta 2 and newer</string>
<key>Enabled</key>
<false/>
<key>ExecutablePath</key>
<string>Contents/MacOS/IOS3XeFamily</string>
<key>MaxKernel</key>
<string></string>
<key>MinKernel</key>
<string>23.0.0</string>
<key>PlistPath</key>
<string>Contents/Info.plist</string>
</dict>
<dict>
<key>Arch</key>
<string>x86_64</string>
<key>Comment</key>
<string>Aquantia Ethernet Patch</string>
<key>Enabled</key>
@@ -1615,9 +1671,182 @@
<key>PlistPath</key>
<string>Contents/Info.plist</string>
</dict>
<dict>
<key>Arch</key>
<string>x86_64</string>
<key>Comment</key>
<string>PCIe Camera</string>
<key>Enabled</key>
<false/>
<key>MaxKernel</key>
<string></string>
<key>MinKernel</key>
<string>23.0.0</string>
<key>BundlePath</key>
<string>AppleCameraInterface.kext</string>
<key>ExecutablePath</key>
<string>Contents/MacOS/AppleCameraInterface</string>
<key>PlistPath</key>
<string>Contents/Info.plist</string>
</dict>
<dict>
<key>Arch</key>
<string>x86_64</string>
<key>Comment</key>
<string>AMFIPass</string>
<key>Enabled</key>
<false/>
<key>MaxKernel</key>
<string></string>
<key>MinKernel</key>
<string>20.0.0</string>
<key>BundlePath</key>
<string>AMFIPass.kext</string>
<key>ExecutablePath</key>
<string>Contents/MacOS/AMFIPass</string>
<key>PlistPath</key>
<string>Contents/Info.plist</string>
</dict>
<dict>
<key>Arch</key>
<string>x86_64</string>
<key>Comment</key>
<string>AppleSSE - T1</string>
<key>Enabled</key>
<false/>
<key>MaxKernel</key>
<string></string>
<key>MinKernel</key>
<string>23.0.0</string>
<key>BundlePath</key>
<string>AppleSSE.kext</string>
<key>ExecutablePath</key>
<string>Contents/MacOS/AppleSSE</string>
<key>PlistPath</key>
<string>Contents/Info.plist</string>
</dict>
<dict>
<key>Arch</key>
<string>x86_64</string>
<key>Comment</key>
<string>AppleKeyStore - T1</string>
<key>Enabled</key>
<false/>
<key>MaxKernel</key>
<string></string>
<key>MinKernel</key>
<string>23.0.0</string>
<key>BundlePath</key>
<string>AppleKeyStore.kext</string>
<key>ExecutablePath</key>
<string>Contents/MacOS/AppleKeyStore</string>
<key>PlistPath</key>
<string>Contents/Info.plist</string>
</dict>
<dict>
<key>Arch</key>
<string>x86_64</string>
<key>Comment</key>
<string>AppleCredentialManager - T1</string>
<key>Enabled</key>
<false/>
<key>MaxKernel</key>
<string></string>
<key>MinKernel</key>
<string>23.0.0</string>
<key>BundlePath</key>
<string>AppleCredentialManager.kext</string>
<key>ExecutablePath</key>
<string>Contents/MacOS/AppleCredentialManager</string>
<key>PlistPath</key>
<string>Contents/Info.plist</string>
</dict>
<dict>
<key>Arch</key>
<string>x86_64</string>
<key>Comment</key>
<string>USB Ethernet - ECM</string>
<key>Enabled</key>
<false/>
<key>MaxKernel</key>
<string></string>
<key>MinKernel</key>
<string>23.0.0</string>
<key>BundlePath</key>
<string>ECM-Override.kext</string>
<key>ExecutablePath</key>
<string></string>
<key>PlistPath</key>
<string>Contents/Info.plist</string>
</dict>
</array>
<key>Block</key>
<array/>
<array>
<dict>
<key>Arch</key>
<string>Any</string>
<key>Comment</key>
<string>Allow IOSkywalk Downgrade</string>
<key>Enabled</key>
<false/>
<key>Identifier</key>
<string>com.apple.iokit.IOSkywalkFamily</string>
<key>MaxKernel</key>
<string></string>
<key>MinKernel</key>
<string>23.0.0</string>
<key>Strategy</key>
<string>Exclude</string>
</dict>
<dict>
<key>Arch</key>
<string>Any</string>
<key>Comment</key>
<string>Allow AppleSSE Downgrade</string>
<key>Enabled</key>
<false/>
<key>Identifier</key>
<string>com.apple.driver.AppleSSE</string>
<key>MaxKernel</key>
<string></string>
<key>MinKernel</key>
<string>23.0.0</string>
<key>Strategy</key>
<string>Exclude</string>
</dict>
<dict>
<key>Arch</key>
<string>Any</string>
<key>Comment</key>
<string>Allow AppleCredentialManager Downgrade</string>
<key>Enabled</key>
<false/>
<key>Identifier</key>
<string>com.apple.driver.AppleCredentialManager</string>
<key>MaxKernel</key>
<string></string>
<key>MinKernel</key>
<string>23.0.0</string>
<key>Strategy</key>
<string>Exclude</string>
</dict>
<dict>
<key>Arch</key>
<string>Any</string>
<key>Comment</key>
<string>Allow AppleKeyStore Downgrade</string>
<key>Enabled</key>
<false/>
<key>Identifier</key>
<string>com.apple.driver.AppleKeyStore</string>
<key>MaxKernel</key>
<string></string>
<key>MinKernel</key>
<string>23.0.0</string>
<key>Strategy</key>
<string>Exclude</string>
</dict>
</array>
<key>Emulate</key>
<dict>
<key>DummyPowerManagement</key>
@@ -2001,7 +2230,7 @@
<key>Base</key>
<string>__ZN17IOPCIConfigurator18IOPCIIsHotplugPortEP16IOPCIConfigEntry</string>
<key>Comment</key>
<string>CaseySJ - Fix PCI bus enumeration</string>
<string>CaseySJ - Fix PCI bus enumeration (Ventura)</string>
<key>Count</key>
<integer>1</integer>
<key>Enabled</key>
@@ -2015,7 +2244,7 @@
<key>Mask</key>
<data></data>
<key>MaxKernel</key>
<string></string>
<string>22.99.99</string>
<key>MinKernel</key>
<string>22.0.0</string>
<key>Replace</key>
@@ -2025,6 +2254,36 @@
<key>Skip</key>
<integer>0</integer>
</dict>
<dict>
<key>Arch</key>
<string>x86_64</string>
<key>Base</key>
<string>__ZN17IOPCIConfigurator18IOPCIIsHotplugPortEP16IOPCIConfigEntry</string>
<key>Comment</key>
<string>Fix PCI bus enumeration (Sonoma)</string>
<key>Count</key>
<integer>1</integer>
<key>Enabled</key>
<false/>
<key>Find</key>
<data>RYTkdUs=</data>
<key>Identifier</key>
<string>com.apple.iokit.IOPCIFamily</string>
<key>Limit</key>
<integer>0</integer>
<key>Mask</key>
<data></data>
<key>MaxKernel</key>
<string></string>
<key>MinKernel</key>
<string>23.0.0</string>
<key>Replace</key>
<data>RYTk60s=</data>
<key>ReplaceMask</key>
<data></data>
<key>Skip</key>
<integer>0</integer>
</dict>
</array>
<key>Quirks</key>
<dict>
@@ -2101,6 +2360,8 @@
<true/>
<key>HideAuxiliary</key>
<true/>
<!-- <key>InstanceIdentifier</key>
<string></string> -->
<key>LauncherPath</key>
<string>Default</string>
<key>LauncherOption</key>
@@ -2617,6 +2878,18 @@
<key>LoadEarly</key>
<false/>
</dict>
<dict>
<key>Comment</key>
<string></string>
<key>Path</key>
<string>OpenLegacyBoot.efi</string>
<key>Enabled</key>
<false/>
<key>Arguments</key>
<string></string>
<key>LoadEarly</key>
<false/>
</dict>
<dict>
<key>Comment</key>
<string></string>
@@ -2689,6 +2962,8 @@
<dict>
<key>ClearScreenOnModeSwitch</key>
<false/>
<key>ConsoleFont</key>
<string></string>
<key>ConsoleMode</key>
<string></string>
<key>DirectGopRendering</key>
@@ -2758,6 +3033,8 @@
<false/>
<key>OSInfo</key>
<false/>
<key>PciIo</key>
<false/>
<key>UnicodeCollation</key>
<false/>
</dict>
@@ -2789,6 +3066,8 @@
<integer>-1</integer>
<key>ResizeUsePciRbIo</key>
<false/>
<!-- <key>ShimRetainProtocol</key>
<false/> -->
<key>TscSyncTimeout</key>
<integer>0</integer>
<key>UnblockFsConnect</key>

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

File diff suppressed because it is too large Load Diff

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@@ -63,6 +63,7 @@ UNUSED_TOOLS = [
"CsrUtil.efi",
"TpmInfo.efi",
"ListPartitions.efi",
"FontTester.efi",
]
IMPORTANT_UTILITIES = [

Binary file not shown.

View File

@@ -119,7 +119,6 @@ If you plan to create the USB for another machine, please select the "Change Mod
if self.args.debug_oc:
logging.info("- Set OpenCore DEBUG configuration")
self.constants.opencore_debug = True
self.constants.opencore_build = "DEBUG"
if self.args.debug_kext:
logging.info("- Set kext DEBUG configuration")

View File

@@ -65,6 +65,8 @@ class BuildOpenCore:
]:
function(self.model, self.constants, self.config)
self.config["NVRAM"]["Add"]["7C436110-AB2A-4BBB-A880-FE41995C9F82"]["boot-args"] += " -lilubetaall"
# Work-around ocvalidate
if self.constants.validate is False:
logging.info("- Adding bootmgfw.efi BlessOverride")
@@ -90,7 +92,7 @@ class BuildOpenCore:
shutil.rmtree(self.constants.opencore_release_folder, onerror=rmtree_handler, ignore_errors=True)
logging.info("")
logging.info(f"- Adding OpenCore v{self.constants.opencore_version} {self.constants.opencore_build}")
logging.info(f"- Adding OpenCore v{self.constants.opencore_version} {'DEBUG' if self.constants.opencore_debug is True else 'RELEASE'}")
shutil.copy(self.constants.opencore_zip_source, self.constants.build_path)
zipfile.ZipFile(self.constants.opencore_zip_copied).extractall(self.constants.build_path)
@@ -113,7 +115,7 @@ class BuildOpenCore:
self.config["#Revision"]["Hardware-Probe"] = pickle.dumps(computer_copy)
else:
self.config["#Revision"]["Build-Type"] = "OpenCore Built for External Machine"
self.config["#Revision"]["OpenCore-Version"] = f"{self.constants.opencore_version} - {self.constants.opencore_build}"
self.config["#Revision"]["OpenCore-Version"] = f"{self.constants.opencore_version} - {'DEBUG' if self.constants.opencore_debug is True else 'RELEASE'}"
self.config["#Revision"]["Original-Model"] = self.model
self.config["NVRAM"]["Add"]["4D1FDA02-38C7-4A6A-9CC6-4BCCA8B30102"]["OCLP-Version"] = f"{self.constants.patcher_version}"
self.config["NVRAM"]["Add"]["4D1FDA02-38C7-4A6A-9CC6-4BCCA8B30102"]["OCLP-Model"] = self.model

View File

@@ -212,6 +212,15 @@ class BuildFirmware:
shutil.copy(self.constants.link_rate_driver_path, self.constants.drivers_path)
support.BuildSupport(self.model, self.constants, self.config).get_efi_binary_by_path("FixPCIeLinkRate.efi", "UEFI", "Drivers")["Enabled"] = True
# CSM check
# For model support, check for GUID in firmware and as well as Bootcamp Assistant's Info.plist ('PreUEFIModels' key)
# Ref: https://github.com/acidanthera/OpenCorePkg/blob/0.9.5/Platform/OpenLegacyBoot/OpenLegacyBoot.c#L19
# if smbios_data.smbios_dictionary[self.model]["CPU Generation"] <= cpu_data.CPUGen.ivy_bridge.value and self.model != "MacPro6,1":
# logging.info("- Enabling CSM support")
# support.BuildSupport(self.model, self.constants, self.config).get_efi_binary_by_path("OpenLegacyBoot.efi", "UEFI", "Drivers")["Enabled"] = True
# else:
# # Shipped alongside OpenCorePkg, so remove if unused
# (self.constants.drivers_path / Path("OpenLegacyBoot.efi")).unlink()
def _firmware_compatibility_handling(self) -> None:
"""
@@ -236,7 +245,10 @@ class BuildFirmware:
)
):
logging.info("- Adding PCI Bus Enumeration Patch")
support.BuildSupport(self.model, self.constants, self.config).get_item_by_kv(self.config["Kernel"]["Patch"], "Comment", "CaseySJ - Fix PCI bus enumeration")["Enabled"] = True
support.BuildSupport(self.model, self.constants, self.config).get_item_by_kv(self.config["Kernel"]["Patch"], "Comment", "CaseySJ - Fix PCI bus enumeration (Ventura)")["Enabled"] = True
# Sonoma slightly adjusted this line specifically
# - https://github.com/apple-oss-distributions/IOPCIFamily/blob/main/IOPCIConfigurator.cpp#L1009
support.BuildSupport(self.model, self.constants, self.config).get_item_by_kv(self.config["Kernel"]["Patch"], "Comment", "Fix PCI bus enumeration (Sonoma)")["Enabled"] = True
if self.constants.set_vmm_cpuid is True:
logging.info("- Enabling VMM patch")

View File

@@ -125,10 +125,11 @@ class BuildMiscellaneous:
re_patch_args = []
# Resolve content caching when kern.hv_vmm_present is set
if support.BuildSupport(self.model, self.constants, self.config).get_item_by_kv(self.config["Kernel"]["Patch"], "Comment", "Reroute kern.hv_vmm_present patch (1)")["Enabled"] is True and self.constants.set_content_caching is True:
logging.info("- Fixing Content Caching support")
re_patch_args.append("asset")
# Alternative approach to the kern.hv_vmm_present patch
# Dynamically sets the property to 1 if software update/installer is detected
# Always enabled in installers/recovery environments
if self.constants.allow_oc_everywhere is False and (self.constants.serial_settings == "None" or self.constants.secure_status is False):
re_patch_args.append("sbvmm")
# Resolve CoreGraphics.framework crashing on Ivy Bridge in macOS 13.3+
# Ref: https://github.com/acidanthera/RestrictEvents/pull/12
@@ -236,10 +237,18 @@ class BuildMiscellaneous:
"""
iSight Handler
"""
if self.model in smbios_data.smbios_dictionary:
if "Legacy iSight" in smbios_data.smbios_dictionary[self.model]:
if smbios_data.smbios_dictionary[self.model]["Legacy iSight"] is True:
support.BuildSupport(self.model, self.constants, self.config).enable_kext("LegacyUSBVideoSupport.kext", self.constants.apple_isight_version, self.constants.apple_isight_path)
if "Legacy iSight" in smbios_data.smbios_dictionary[self.model]:
if smbios_data.smbios_dictionary[self.model]["Legacy iSight"] is True:
support.BuildSupport(self.model, self.constants, self.config).enable_kext("LegacyUSBVideoSupport.kext", self.constants.apple_isight_version, self.constants.apple_isight_path)
if not self.constants.custom_model:
if self.constants.computer.pcie_webcam is True:
support.BuildSupport(self.model, self.constants, self.config).enable_kext("AppleCameraInterface.kext", self.constants.apple_camera_version, self.constants.apple_camera_path)
else:
if self.model.startswith("MacBook") and self.model in smbios_data.smbios_dictionary:
if cpu_data.CPUGen.haswell <= smbios_data.smbios_dictionary[self.model]["CPU Generation"] <= cpu_data.CPUGen.kaby_lake:
support.BuildSupport(self.model, self.constants, self.config).enable_kext("AppleCameraInterface.kext", self.constants.apple_camera_version, self.constants.apple_camera_path)
def _usb_handling(self) -> None:
@@ -267,13 +276,13 @@ class BuildMiscellaneous:
# Add UHCI/OHCI drivers
# All Penryn Macs lack an internal USB hub to route USB 1.1 devices to the EHCI controller
# And MacPro4,1 and MacPro5,1 are the only post-Penryn Macs that lack an internal USB hub
# And MacPro4,1, MacPro5,1 and Xserve3,1 are the only post-Penryn Macs that lack an internal USB hub
# - Ref: https://techcommunity.microsoft.com/t5/microsoft-usb-blog/reasons-to-avoid-companion-controllers/ba-p/270710
#
# To be paired for sys_patch_dict.py's 'Legacy USB 1.1' patchset
if (
smbios_data.smbios_dictionary[self.model]["CPU Generation"] <= cpu_data.CPUGen.penryn.value or \
self.model in ["MacPro4,1", "MacPro5,1"]
self.model in ["MacPro4,1", "MacPro5,1", "Xserve3,1"]
):
logging.info("- Adding UHCI/OHCI USB support")
shutil.copy(self.constants.apple_usb_11_injector_path, self.constants.kexts_path)
@@ -329,4 +338,22 @@ class BuildMiscellaneous:
if self.constants.vault is True and utilities.check_command_line_tools() is True:
logging.info("- Setting Vault configuration")
self.config["Misc"]["Security"]["Vault"] = "Secure"
support.BuildSupport(self.model, self.constants, self.config).get_efi_binary_by_path("OpenShell.efi", "Misc", "Tools")["Enabled"] = False
support.BuildSupport(self.model, self.constants, self.config).get_efi_binary_by_path("OpenShell.efi", "Misc", "Tools")["Enabled"] = False
def _t1_handling(self) -> None:
"""
T1 Security Chip Handler
"""
if self.model not in ["MacBookPro13,2", "MacBookPro13,3", "MacBookPro14,2", "MacBookPro14,3"]:
return
logging.info("- Enabling T1 Security Chip support")
support.BuildSupport(self.model, self.constants, self.config).get_item_by_kv(self.config["Kernel"]["Block"], "Identifier", "com.apple.driver.AppleSSE")["Enabled"] = True
support.BuildSupport(self.model, self.constants, self.config).get_item_by_kv(self.config["Kernel"]["Block"], "Identifier", "com.apple.driver.AppleCredentialManager")["Enabled"] = True
support.BuildSupport(self.model, self.constants, self.config).get_item_by_kv(self.config["Kernel"]["Block"], "Identifier", "com.apple.driver.AppleKeyStore")["Enabled"] = True
support.BuildSupport(self.model, self.constants, self.config).enable_kext("AppleSSE.kext", self.constants.t1_sse_version, self.constants.t1_sse_path)
support.BuildSupport(self.model, self.constants, self.config).enable_kext("AppleCredentialManager.kext", self.constants.t1_credential_version, self.constants.t1_credential_path)
support.BuildSupport(self.model, self.constants, self.config).enable_kext("AppleKeyStore.kext", self.constants.t1_key_store_version, self.constants.t1_key_store_path)

View File

@@ -33,6 +33,20 @@ class BuildWiredNetworking:
else:
self._prebuilt_assumption()
# Always enable due to chance of hot-plugging
self._usb_ecm_dongles()
def _usb_ecm_dongles(self) -> None:
"""
USB ECM Dongle Handling
"""
# With Sonoma, our WiFi patches require downgrading IOSkywalk
# Unfortunately Apple's DriverKit stack uses IOSkywalk for ECM dongles, so we'll need force load
# the kernel driver to prevent a kernel panic
# - DriverKit: com.apple.DriverKit.AppleUserECM.dext
# - Kext: AppleUSBECM.kext
support.BuildSupport(self.model, self.constants, self.config).enable_kext("ECM-Override.kext", self.constants.ecm_override_version, self.constants.ecm_override_path)
def _on_model(self) -> None:
"""
@@ -63,7 +77,7 @@ class BuildWiredNetworking:
support.BuildSupport(self.model, self.constants, self.config).enable_kext("nForceEthernet.kext", self.constants.nforce_version, self.constants.nforce_path)
elif isinstance(controller, device_probe.Marvell) or isinstance(controller, device_probe.SysKonnect):
support.BuildSupport(self.model, self.constants, self.config).enable_kext("MarvelYukonEthernet.kext", self.constants.marvel_version, self.constants.marvel_path)
# Pre-Ivy Bridge Aquantia Ethernet Patch
if isinstance(controller, device_probe.Aquantia) and controller.chipset == device_probe.Aquantia.Chipsets.AppleEthernetAquantiaAqtion:
if not self.model in smbios_data.smbios_dictionary:

View File

@@ -45,6 +45,11 @@ class BuildWirelessNetworking:
self.config["#Revision"]["Hardware-Wifi"] = f"{utilities.friendly_hex(self.computer.wifi.vendor_id)}:{utilities.friendly_hex(self.computer.wifi.device_id)}"
if isinstance(self.computer.wifi, device_probe.Broadcom):
if self.computer.wifi.chipset in [device_probe.Broadcom.Chipsets.AirportBrcmNIC, device_probe.Broadcom.Chipsets.AirPortBrcm4360]:
support.BuildSupport(self.model, self.constants, self.config).enable_kext("IOSkywalkFamily.kext", self.constants.ioskywalk_version, self.constants.ioskywalk_path)
support.BuildSupport(self.model, self.constants, self.config).enable_kext("IO80211FamilyLegacy.kext", self.constants.io80211legacy_version, self.constants.io80211legacy_path)
support.BuildSupport(self.model, self.constants, self.config).get_kext_by_bundle_path("IO80211FamilyLegacy.kext/Contents/PlugIns/AirPortBrcmNIC.kext")["Enabled"] = True
support.BuildSupport(self.model, self.constants, self.config).get_item_by_kv(self.config["Kernel"]["Block"], "Identifier", "com.apple.iokit.IOSkywalkFamily")["Enabled"] = True
# This works around OCLP spoofing the Wifi card and therefore unable to actually detect the correct device
if self.computer.wifi.chipset == device_probe.Broadcom.Chipsets.AirportBrcmNIC and self.constants.validate is False and self.computer.wifi.country_code:
support.BuildSupport(self.model, self.constants, self.config).enable_kext("AirportBrcmFixup.kext", self.constants.airportbcrmfixup_version, self.constants.airportbcrmfixup_path)
@@ -104,6 +109,12 @@ class BuildWirelessNetworking:
elif smbios_data.smbios_dictionary[self.model]["Wireless Model"] == device_probe.Broadcom.Chipsets.AirportBrcmNIC:
support.BuildSupport(self.model, self.constants, self.config).enable_kext("AirportBrcmFixup.kext", self.constants.airportbcrmfixup_version, self.constants.airportbcrmfixup_path)
if smbios_data.smbios_dictionary[self.model]["Wireless Model"] in [device_probe.Broadcom.Chipsets.AirportBrcmNIC, device_probe.Broadcom.Chipsets.AirPortBrcm4360]:
support.BuildSupport(self.model, self.constants, self.config).enable_kext("IOSkywalkFamily.kext", self.constants.ioskywalk_version, self.constants.ioskywalk_path)
support.BuildSupport(self.model, self.constants, self.config).enable_kext("IO80211FamilyLegacy.kext", self.constants.io80211legacy_version, self.constants.io80211legacy_path)
support.BuildSupport(self.model, self.constants, self.config).get_kext_by_bundle_path("IO80211FamilyLegacy.kext/Contents/PlugIns/AirPortBrcmNIC.kext")["Enabled"] = True
support.BuildSupport(self.model, self.constants, self.config).get_item_by_kv(self.config["Kernel"]["Block"], "Identifier", "com.apple.iokit.IOSkywalkFamily")["Enabled"] = True
def _wowl_handling(self) -> None:
"""

View File

@@ -77,11 +77,6 @@ class BuildSecurity:
if self.constants.secure_status is False:
logging.info("- Disabling SecureBootModel")
self.config["Misc"]["Security"]["SecureBootModel"] = "Disabled"
if self.constants.force_vmm is True:
logging.info("- Forcing VMM patchset to support OTA updates")
support.BuildSupport(self.model, self.constants, self.config).get_item_by_kv(self.config["Kernel"]["Patch"], "Comment", "Reroute kern.hv_vmm_present patch (1)")["Enabled"] = True
support.BuildSupport(self.model, self.constants, self.config).get_item_by_kv(self.config["Kernel"]["Patch"], "Comment", "Reroute kern.hv_vmm_present patch (2) Legacy")["Enabled"] = True
support.BuildSupport(self.model, self.constants, self.config).get_item_by_kv(self.config["Kernel"]["Patch"], "Comment", "Reroute kern.hv_vmm_present patch (2) Ventura")["Enabled"] = True
logging.info("- Enabling AMFIPass")
support.BuildSupport(self.model, self.constants, self.config).enable_kext("AMFIPass.kext", self.constants.amfipass_version, self.constants.amfipass_path)

View File

@@ -41,10 +41,6 @@ class BuildSMBIOS:
logging.info("- Enabling Board ID exemption patch")
support.BuildSupport(self.model, self.constants, self.config).get_item_by_kv(self.config["Booter"]["Patch"], "Comment", "Skip Board ID check")["Enabled"] = True
logging.info("- Enabling VMM exemption patch")
support.BuildSupport(self.model, self.constants, self.config).get_item_by_kv(self.config["Kernel"]["Patch"], "Comment", "Reroute kern.hv_vmm_present patch (1)")["Enabled"] = True
support.BuildSupport(self.model, self.constants, self.config).get_item_by_kv(self.config["Kernel"]["Patch"], "Comment", "Reroute kern.hv_vmm_present patch (2) Legacy")["Enabled"] = True
support.BuildSupport(self.model, self.constants, self.config).get_item_by_kv(self.config["Kernel"]["Patch"], "Comment", "Reroute kern.hv_vmm_present patch (2) Ventura")["Enabled"] = True
else:
logging.info("- Enabling SMC exemption patch")
support.BuildSupport(self.model, self.constants, self.config).get_item_by_kv(self.config["Kernel"]["Patch"], "Identifier", "com.apple.driver.AppleSMC")["Enabled"] = True

View File

@@ -106,28 +106,44 @@ class BuildStorage:
logging.info(f"- Failed to find Device path for PCIe Storage Controller {i}, falling back to Innie")
support.BuildSupport(self.model, self.constants, self.config).enable_kext("Innie.kext", self.constants.innie_version, self.constants.innie_path)
if not self.constants.custom_model and self.constants.allow_nvme_fixing is True:
if not self.constants.custom_model:
nvme_devices = [i for i in self.computer.storage if isinstance(i, device_probe.NVMeController)]
for i, controller in enumerate(nvme_devices):
logging.info(f"- Found 3rd Party NVMe SSD ({i + 1}): {utilities.friendly_hex(controller.vendor_id)}:{utilities.friendly_hex(controller.device_id)}")
self.config["#Revision"][f"Hardware-NVMe-{i}"] = f"{utilities.friendly_hex(controller.vendor_id)}:{utilities.friendly_hex(controller.device_id)}"
if self.constants.allow_nvme_fixing is True:
for i, controller in enumerate(nvme_devices):
if controller.vendor_id == 0x106b:
continue
logging.info(f"- Found 3rd Party NVMe SSD ({i + 1}): {utilities.friendly_hex(controller.vendor_id)}:{utilities.friendly_hex(controller.device_id)}")
self.config["#Revision"][f"Hardware-NVMe-{i}"] = f"{utilities.friendly_hex(controller.vendor_id)}:{utilities.friendly_hex(controller.device_id)}"
# Disable Bit 0 (L0s), enable Bit 1 (L1)
nvme_aspm = (controller.aspm & (~0b11)) | 0b10
# Disable Bit 0 (L0s), enable Bit 1 (L1)
nvme_aspm = (controller.aspm & (~0b11)) | 0b10
if controller.pci_path:
logging.info(f"- Found NVMe ({i}) at {controller.pci_path}")
self.config["DeviceProperties"]["Add"].setdefault(controller.pci_path, {})["pci-aspm-default"] = nvme_aspm
self.config["DeviceProperties"]["Add"][controller.pci_path.rpartition("/")[0]] = {"pci-aspm-default": nvme_aspm}
else:
if "-nvmefaspm" not in self.config["NVRAM"]["Add"]["7C436110-AB2A-4BBB-A880-FE41995C9F82"]["boot-args"]:
logging.info("- Falling back to -nvmefaspm")
self.config["NVRAM"]["Add"]["7C436110-AB2A-4BBB-A880-FE41995C9F82"]["boot-args"] += " -nvmefaspm"
if controller.pci_path:
logging.info(f"- Found NVMe ({i}) at {controller.pci_path}")
self.config["DeviceProperties"]["Add"].setdefault(controller.pci_path, {})["pci-aspm-default"] = nvme_aspm
self.config["DeviceProperties"]["Add"][controller.pci_path.rpartition("/")[0]] = {"pci-aspm-default": nvme_aspm}
else:
if "-nvmefaspm" not in self.config["NVRAM"]["Add"]["7C436110-AB2A-4BBB-A880-FE41995C9F82"]["boot-args"]:
logging.info("- Falling back to -nvmefaspm")
self.config["NVRAM"]["Add"]["7C436110-AB2A-4BBB-A880-FE41995C9F82"]["boot-args"] += " -nvmefaspm"
if (controller.vendor_id != 0x144D and controller.device_id != 0xA804):
# Avoid injecting NVMeFix when a native Apple NVMe drive is present
# https://github.com/acidanthera/NVMeFix/blob/1.0.9/NVMeFix/NVMeFix.cpp#L220-L225
support.BuildSupport(self.model, self.constants, self.config).enable_kext("NVMeFix.kext", self.constants.nvmefix_version, self.constants.nvmefix_path)
if (controller.vendor_id != 0x144D and controller.device_id != 0xA804):
# Avoid injecting NVMeFix when a native Apple NVMe drive is present
# https://github.com/acidanthera/NVMeFix/blob/1.0.9/NVMeFix/NVMeFix.cpp#L220-L225
support.BuildSupport(self.model, self.constants, self.config).enable_kext("NVMeFix.kext", self.constants.nvmefix_version, self.constants.nvmefix_path)
if any((controller.vendor_id == 0x106b and controller.device_id in [0x2001, 0x2003]) for controller in nvme_devices):
# Restore S1X/S3X NVMe support removed in 14.0 Beta 2
# - APPLE SSD AP0128H, AP0256H, etc
# - APPLE SSD AP0128J, AP0256J, etc
support.BuildSupport(self.model, self.constants, self.config).enable_kext("IOS3XeFamily.kext", self.constants.s3x_nvme_version, self.constants.s3x_nvme_path)
# Restore S1X/S3X NVMe support removed in 14.0 Beta 2
# Apple's usage of the S1X and S3X is quite sporadic and inconsistent, so we'll try a catch all for units with NVMe drives
if self.constants.custom_model and self.model in smbios_data.smbios_dictionary:
if "CPU Generation" in smbios_data.smbios_dictionary[self.model]:
if cpu_data.CPUGen.broadwell <= smbios_data.smbios_dictionary[self.model]["CPU Generation"] <= cpu_data.CPUGen.kaby_lake:
support.BuildSupport(self.model, self.constants, self.config).enable_kext("IOS3XeFamily.kext", self.constants.s3x_nvme_version, self.constants.s3x_nvme_path)
# Apple RAID Card check
if not self.constants.custom_model:

View File

@@ -13,8 +13,8 @@ from data import os_data
class Constants:
def __init__(self) -> None:
# Patcher Versioning
self.patcher_version: str = "0.6.8" # OpenCore-Legacy-Patcher
self.patcher_support_pkg_version: str = "1.2.2" # PatcherSupportPkg
self.patcher_version: str = "1.0.0" # OpenCore-Legacy-Patcher
self.patcher_support_pkg_version: str = "1.3.2" # PatcherSupportPkg
self.copyright_date: str = "Copyright © 2020-2023 Dortania"
self.patcher_name: str = "OpenCore Legacy Patcher"
@@ -28,25 +28,25 @@ class Constants:
# OpenCore Versioning
# https://github.com/acidanthera/OpenCorePkg
self.opencore_version: str = "0.9.2"
self.opencore_version: str = "0.9.3"
# Kext Versioning
## Acidanthera
## https://github.com/acidanthera
self.lilu_version: str = "1.6.6" # Lilu
self.whatevergreen_version: str = "1.6.4" # WhateverGreen
self.whatevergreen_navi_version: str = "1.6.4-Navi" # WhateverGreen (Navi Patch)
self.lilu_version: str = "1.6.7" # Lilu
self.whatevergreen_version: str = "1.6.6" # WhateverGreen
self.whatevergreen_navi_version: str = "1.6.6-Navi" # WhateverGreen (Navi Patch)
self.airportbcrmfixup_version: str = "2.1.7" # AirPortBrcmFixup
self.nvmefix_version: str = "1.1.0" # NVMeFix
self.nvmefix_version: str = "1.1.1" # NVMeFix
self.applealc_version: str = "1.6.3" # AppleALC
self.restrictevents_version: str = "1.1.1" # RestrictEvents
self.featureunlock_version: str = "1.1.4" # FeatureUnlock
self.debugenhancer_version: str = "1.0.7" # DebugEnhancer
self.cpufriend_version: str = "1.2.6" # CPUFriend
self.bluetool_version: str = "2.6.6" # BlueToolFixup (BrcmPatchRAM)
self.restrictevents_version: str = "1.1.3" # RestrictEvents
self.featureunlock_version: str = "1.1.5" # FeatureUnlock
self.debugenhancer_version: str = "1.0.8" # DebugEnhancer
self.cpufriend_version: str = "1.2.7" # CPUFriend
self.bluetool_version: str = "2.6.8" # BlueToolFixup (BrcmPatchRAM)
self.cslvfixup_version: str = "2.6.1" # CSLVFixup
self.autopkg_version: str = "1.0.2" # AutoPkgInstaller
self.cryptexfixup_version: str = "1.0.1" # CryptexFixup
self.autopkg_version: str = "1.0.3" # AutoPkgInstaller
self.cryptexfixup_version: str = "1.0.2" # CryptexFixup
## Apple
## https://www.apple.com
@@ -65,12 +65,19 @@ class Constants:
self.intel_8254x_version: str = "1.0.0" # AppleIntel8254XEthernet
self.apple_usb_11_injector: str = "1.0.0" # AppleUSBUHCI/OHCI
self.aicpupm_version: str = "1.0.0" # AppleIntelCPUPowerManagement/Client
self.s3x_nvme_version: str = "1.0.0" # IONVMeFamily (14.0 Beta 1, S1X and S3X classes)
self.apple_camera_version: str = "1.0.0" # AppleCameraInterface (14.0 Beta 1)
self.t1_credential_version: str = "1.0.0" # AppleCredentialManager (13.5 - T1 support)
self.t1_sse_version: str = "1.0.0" # AppleSSE (13.5 - T1 support)
self.t1_key_store_version: str = "1.0.0" # AppleKeyStore (13.5 - T1 support)
## Apple - Dortania Modified
self.bcm570_version: str = "1.0.2" # CatalinaBCM5701Ethernet
self.i210_version: str = "1.0.0" # CatalinaIntelI210Ethernet
self.corecaptureelcap_version: str = "1.0.1" # corecaptureElCap
self.io80211elcap_version: str = "2.0.0" # IO80211ElCap
self.io80211legacy_version: str = "1.0.0" # IO80211FamilyLegacy (Ventura)
self.ioskywalk_version: str = "1.0.0" # IOSkywalkFamily (Ventura)
self.bigsursdxc_version: str = "1.0.0" # BigSurSDXC
self.monterey_ahci_version: str = "1.0.0" # CatalinaAHCI
@@ -85,6 +92,7 @@ class Constants:
self.mce_version: str = "1.0.0" # AppleMCEReporterDisabler
self.btspoof_version: str = "1.0.0" # Bluetooth-Spoof
self.aspp_override_version: str = "1.0.1" # ACPI_SMC_PlatformPlugin Override
self.ecm_override_version: str = "1.0.0" # AppleUSBECM Override
self.rsrhelper_version: str = "1.0.0" # RSRHelper
self.amfipass_version: str = "1.3.1" # AMFIPass
self.amfipass_compatibility_version: str = "1.2.1" # Minimum AMFIPass version required
@@ -119,6 +127,7 @@ class Constants:
self.original_path: Path = Path(__file__).parent.parent.resolve()
self.payload_path: Path = self.current_path / Path("payloads")
# Patcher Settings
## Internal settings
self.allow_oc_everywhere: bool = False # Set whether Patcher can be run on unsupported Macs
@@ -154,7 +163,6 @@ class Constants:
self.showpicker: bool = True # Show or Hide OpenCore's Boot Picker
self.nvram_write: bool = True # Write to hardware NVRAM
self.oc_timeout: int = 5 # Set OpenCore timeout
self.opencore_build: str = "RELEASE"
## Kext Settings
self.kext_debug: bool = False # Enables Lilu debug and DebugEnhancer
@@ -219,7 +227,6 @@ class Constants:
self.software_demux: bool = False # Enable Software Demux patch set
self.force_vmm: bool = False # Force VMM patch
self.disable_connectdrivers: bool = False # Disable ConnectDrivers (hibernation)
self.set_content_caching: bool = False # Set Content Caching
self.set_vmm_cpuid: bool = False # Set VMM bit inside CPUID
self.disable_mediaanalysisd: bool = False # Set mediaanalysisd to spawn
self.set_alc_usage: bool = True # Set AppleALC usage
@@ -233,6 +240,7 @@ class Constants:
os_data.os_data.big_sur,
os_data.os_data.monterey,
os_data.os_data.ventura,
os_data.os_data.sonoma,
]
@property
@@ -258,11 +266,14 @@ class Constants:
def payload_local_binaries_root_path_dmg(self):
return self.original_path / Path("Universal-Binaries.dmg")
@property
def overlay_psp_path_dmg(self):
return self.original_path / Path("DortaniaInternalResources.dmg")
# OpenCore
@property
def opencore_zip_source(self):
return self.payload_path / Path(f"OpenCore/OpenCore-{self.opencore_build}.zip")
return self.payload_path / Path(f"OpenCore/OpenCore-{'DEBUG' if self.opencore_debug is True else 'RELEASE'}.zip")
@property
def plist_template(self):
@@ -424,6 +435,18 @@ class Constants:
def top_case_path(self):
return self.payload_kexts_path / Path(f"Misc/AppleUSBTopCase-v{self.topcase_version}.zip")
@property
def t1_key_store_path(self):
return self.payload_kexts_path / Path(f"Misc/AppleKeyStore-v{self.t1_key_store_version}.zip")
@property
def t1_credential_path(self):
return self.payload_kexts_path / Path(f"Misc/AppleCredentialManager-v{self.t1_credential_version}.zip")
@property
def t1_sse_path(self):
return self.payload_kexts_path / Path(f"Misc/AppleSSE-v{self.t1_sse_version}.zip")
@property
def mousse_path(self):
return self.payload_kexts_path / Path(f"SSE/AAAMouSSE-v{self.mousse_version}.zip")
@@ -440,6 +463,14 @@ class Constants:
def io80211elcap_path(self):
return self.payload_kexts_path / Path(f"Wifi/IO80211ElCap-v{self.io80211elcap_version}.zip")
@property
def io80211legacy_path(self):
return self.payload_kexts_path / Path(f"Wifi/IO80211FamilyLegacy-v{self.io80211legacy_version}.zip")
@property
def ioskywalk_path(self):
return self.payload_kexts_path / Path(f"Wifi/IOSkywalkFamily-v{self.ioskywalk_version}.zip")
@property
def applealc_path(self):
return self.payload_kexts_path / Path(f"Acidanthera/AppleALC-v{self.applealc_version}-{self.kext_variant}.zip")
@@ -472,6 +503,10 @@ class Constants:
def aspp_override_path(self):
return self.payload_kexts_path / Path(f"Misc/ASPP-Override-v{self.aspp_override_version}.zip")
@property
def ecm_override_path(self):
return self.payload_kexts_path / Path(f"Misc/ECM-Override-v{self.ecm_override_version}.zip")
@property
def nvmefix_path(self):
return self.payload_kexts_path / Path(f"Acidanthera/NVMeFix-v{self.nvmefix_version}-{self.kext_variant}.zip")
@@ -541,6 +576,14 @@ class Constants:
def kdkless_path(self):
return self.payload_kexts_path / Path(f"Misc/KDKlessWorkaround-v{self.kdkless_version}-{self.kext_variant}.zip")
@property
def s3x_nvme_path(self):
return self.payload_kexts_path / Path(f"Misc/IOS3XeFamily-v{self.s3x_nvme_version}.zip")
@property
def apple_camera_path(self):
return self.payload_kexts_path / Path(f"Misc/AppleCameraInterface-v{self.apple_camera_version}.zip")
@property
def plist_folder_path(self):
return self.payload_kexts_path / Path("Plists")
@@ -572,7 +615,7 @@ class Constants:
@property
def opencore_zip_copied(self):
return self.build_path / Path(f"OpenCore-{self.opencore_build}.zip")
return self.build_path / Path(f"OpenCore-{'DEBUG' if self.opencore_debug is True else 'RELEASE'}.zip")
@property
def oc_folder(self):
@@ -680,6 +723,26 @@ class Constants:
def icon_path_ssd(self):
return self.payload_path / Path("Icon/SSD/.VolumeIcon.icns")
@property
def icon_path_macos_generic(self):
return self.payload_path / Path("Icon/AppIcons/Generic.icns")
@property
def icon_path_macos_big_sur(self):
return self.payload_path / Path("Icon/AppIcons/BigSur.icns")
@property
def icon_path_macos_monterey(self):
return self.payload_path / Path("Icon/AppIcons/Monterey.icns")
@property
def icon_path_macos_ventura(self):
return self.payload_path / Path("Icon/AppIcons/Ventura.icns")
@property
def icon_path_macos_sonoma(self):
return self.payload_path / Path("Icon/AppIcons/Sonoma.icns")
@property
def gui_path(self):
return self.payload_path / Path("Icon/Resources.zip")
@@ -708,6 +771,16 @@ class Constants:
return Path(self.launcher_binary).parent.parent / Path("Resources")
@property
def icons_path(self):
return [
str(self.icon_path_macos_generic),
str(self.icon_path_macos_big_sur),
str(self.icon_path_macos_monterey),
str(self.icon_path_macos_ventura),
str(self.icon_path_macos_sonoma)
]
sbm_values = [
"j137ap", # iMacPro1,1
"j680ap", # MacBookPro15,1
@@ -741,4 +814,4 @@ class Constants:
"Mac-942B59F58194171B", # iMac12,2
"Mac-94245AF5819B141B", # AppleInternal MacBookPro8,3
"Mac-942B5B3A40C91381", # AppleInternal iMac12,2
]
]

View File

@@ -56,11 +56,6 @@ class GenerateDefaults:
General probe for data
"""
if "Book" in self.model:
self.constants.set_content_caching = False
else:
self.constants.set_content_caching = True
if self.model in ["MacBookPro8,2", "MacBookPro8,3"]:
# Users disabling TS2 most likely have a faulty dGPU
# users can override this in settings
@@ -152,8 +147,11 @@ class GenerateDefaults:
Networking specific probe
"""
is_legacy_wifi = False
is_modern_wifi = False
if self.host_is_target:
if not (
if (
(
isinstance(self.constants.computer.wifi, device_probe.Broadcom) and
self.constants.computer.wifi.chipset in [
@@ -165,28 +163,54 @@ class GenerateDefaults:
self.constants.computer.wifi.chipset == device_probe.Atheros.Chipsets.AirPortAtheros40
)
):
return
is_legacy_wifi = True
elif (
(
isinstance(self.constants.computer.wifi, device_probe.Broadcom) and
self.constants.computer.wifi.chipset in [
device_probe.Broadcom.Chipsets.AirPortBrcm4360,
device_probe.Broadcom.Chipsets.AirportBrcmNIC,
]
)
):
is_modern_wifi = True
else:
if not self.model in smbios_data.smbios_dictionary:
print("Checking WiFi")
if self.model not in smbios_data.smbios_dictionary:
return
if (
smbios_data.smbios_dictionary[self.model]["Wireless Model"] not in [
smbios_data.smbios_dictionary[self.model]["Wireless Model"] in [
device_probe.Broadcom.Chipsets.AirPortBrcm4331,
device_probe.Broadcom.Chipsets.AirPortBrcm43224,
device_probe.Atheros.Chipsets.AirPortAtheros40
device_probe.Atheros.Chipsets.AirPortAtheros40,
]
):
return
is_legacy_wifi = True
elif (
smbios_data.smbios_dictionary[self.model]["Wireless Model"] in [
device_probe.Broadcom.Chipsets.AirPortBrcm4360,
device_probe.Broadcom.Chipsets.AirportBrcmNIC,
]
):
print("Modern WiFi")
is_modern_wifi = True
if is_legacy_wifi is False and is_modern_wifi is False:
return
# 12.0: Legacy Wireless chipsets require root patching
# 14.0: Modern Wireless chipsets require root patching
self.constants.sip_status = False
self.constants.secure_status = False
self.constants.disable_cs_lv = True
self.constants.disable_amfi = True
# 13.0: Enabling AirPlay to Mac patches breaks Control Center on legacy chipsets
# AirPlay to Mac was unsupported regardless, so we can safely disable it
self.constants.fu_status = True
self.constants.fu_arguments = " -disable_sidecar_mac"
if is_legacy_wifi is True:
# 13.0: Enabling AirPlay to Mac patches breaks Control Center on legacy chipsets
# AirPlay to Mac was unsupported regardless, so we can safely disable it
self.constants.fu_status = True
self.constants.fu_arguments = " -disable_sidecar_mac"
def _misc_hardwares_probe(self) -> None:
@@ -309,8 +333,6 @@ class GenerateDefaults:
if is_key_enabled not in ["false", "0"]:
subprocess.run(["defaults", "write", "-g", key, "-bool", "true"])
subprocess.run(["defaults", "write", "-g", "Amy.MenuBar2Beta", "-bool", "false"])
def _check_amfipass_supported(self) -> None:
"""
Check if root volume supports AMFIPass

View File

@@ -15,6 +15,10 @@ from resources import utilities, ioreg
from data import pci_data, usb_data
def class_code_to_bytes(class_code: int) -> bytes:
return class_code.to_bytes(4, byteorder="little")
@dataclass
class CPU:
name: str
@@ -113,6 +117,7 @@ class USBDevice:
@dataclass
class PCIDevice:
VENDOR_ID: ClassVar[int] # Default vendor id, for subclasses.
CLASS_CODES: ClassVar[list[int]] # Default class codes, for subclasses.
vendor_id: int # The vendor ID of this PCI device
device_id: int # The device ID of this PCI device
@@ -127,6 +132,13 @@ class PCIDevice:
vendor_id_unspoofed: Optional[int] = -1 # Unspoofed vendor ID of this PCI device
device_id_unspoofed: Optional[int] = -1 # Unspoofed device ID of this PCI device
@classmethod
def class_code_matching_dict(cls) -> dict:
return {
"IOProviderClass": "IOPCIDevice",
"IOPropertyMatch": [{"class-code": class_code_to_bytes(class_code)} for class_code in cls.CLASS_CODES]
}
@classmethod
def from_ioregistry(cls, entry: ioreg.io_registry_entry_t, anti_spoof=False):
properties: dict = ioreg.corefoundation_to_native(ioreg.IORegistryEntryCreateCFProperties(entry, None, ioreg.kCFAllocatorDefault, ioreg.kNilOptions)[1]) # type: ignore
@@ -157,7 +169,7 @@ class PCIDevice:
device = cls(vendor_id, device_id, int.from_bytes(properties["class-code"][:6], byteorder="little"), name=ioreg.io_name_t_to_str(ioreg.IORegistryEntryGetName(entry, None)[1]))
if "model" in properties:
model = properties["model"]
if type(model) is bytes:
if isinstance(model, bytes):
model = model.strip(b"\0").decode()
device.model = model
if "acpi-path" in properties:
@@ -172,7 +184,7 @@ class PCIDevice:
device.populate_pci_path(entry)
return device
def vendor_detect(self, *, inherits: ClassVar[Any] = None, classes: list = None):
def vendor_detect(self, *, inherits: Optional[Type["PCIDevice"]] = None, classes: Optional[list] = None):
for i in classes or itertools.chain.from_iterable([subclass.__subclasses__() for subclass in PCIDevice.__subclasses__()]):
if issubclass(i, inherits or object) and i.detect(self):
return i
@@ -180,7 +192,7 @@ class PCIDevice:
@classmethod
def detect(cls, device):
return device.vendor_id == cls.VENDOR_ID and ((device.class_code == cls.CLASS_CODE) if getattr(cls, "CLASS_CODE", None) else True) # type: ignore # pylint: disable=no-member
return device.vendor_id == cls.VENDOR_ID and ((device.class_code in cls.CLASS_CODES) if getattr(cls, "CLASS_CODES", None) else True) and ((device.class_code == cls.CLASS_CODE) if getattr(cls, "CLASS_CODE", None) else True) # type: ignore # pylint: disable=no-member
def populate_pci_path(self, original_entry: ioreg.io_registry_entry_t):
# Based off gfxutil logic, seems to work.
@@ -213,6 +225,7 @@ class PCIDevice:
@dataclass
class GPU(PCIDevice):
CLASS_CODES: ClassVar[list[int]] = [0x030000, 0x038000]
arch: enum.Enum = field(init=False) # The architecture, see subclasses.
def __post_init__(self):
@@ -224,7 +237,7 @@ class GPU(PCIDevice):
@dataclass
class WirelessCard(PCIDevice):
CLASS_CODE: ClassVar[int] = 0x028000 # 00800200 hexswapped
CLASS_CODES: ClassVar[list[int]] = [0x028000]
country_code: str = field(init=False)
chipset: enum.Enum = field(init=False)
@@ -254,47 +267,65 @@ class WirelessCard(PCIDevice):
@dataclass
class NVMeController(PCIDevice):
CLASS_CODE: ClassVar[int] = 0x010802
CLASS_CODES: ClassVar[list[int]] = [
0x010802,
# I don't know if this is a typo or what, but Apple controllers are 01:80:02, not 01:08:02
0x018002
]
aspm: Optional[int] = None
# parent_aspm: Optional[int] = None
@classmethod
def from_ioregistry(cls, entry: ioreg.io_registry_entry_t, anti_spoof=True):
device = super().from_ioregistry(entry, anti_spoof=anti_spoof)
device.aspm: Union[int, bytes] = ioreg.corefoundation_to_native(ioreg.IORegistryEntryCreateCFProperty(entry, "pci-aspm-default", ioreg.kCFAllocatorDefault, ioreg.kNilOptions)) or 0 # type: ignore
if isinstance(device.aspm, bytes):
device.aspm = int.from_bytes(device.aspm, byteorder="little")
return device
@dataclass
class EthernetController(PCIDevice):
CLASS_CODE: ClassVar[int] = 0x020000
CLASS_CODES: ClassVar[list[int]] = [0x020000]
chipset: enum.Enum = field(init=False)
def __post_init__(self):
self.detect_chipset()
def detect_chipset(self):
raise NotImplementedError
@dataclass
class SATAController(PCIDevice):
CLASS_CODE: ClassVar[int] = 0x010601
CLASS_CODES: ClassVar[list[int]] = [0x010601]
@dataclass
class SASController(PCIDevice):
CLASS_CODE: ClassVar[int] = 0x010400
CLASS_CODES: ClassVar[list[int]] = [0x010400]
@dataclass
class XHCIController(PCIDevice):
CLASS_CODE: ClassVar[int] = 0x0c0330
CLASS_CODES: ClassVar[list[int]] = [0x0c0330]
@dataclass
class EHCIController(PCIDevice):
CLASS_CODE: ClassVar[int] = 0x0c0320
CLASS_CODES: ClassVar[list[int]] = [0x0c0320]
@dataclass
class OHCIController(PCIDevice):
CLASS_CODE: ClassVar[int] = 0x0c0310
CLASS_CODES: ClassVar[list[int]] = [0x0c0310]
@dataclass
class UHCIController(PCIDevice):
CLASS_CODE: ClassVar[int] = 0x0c0300
CLASS_CODES: ClassVar[list[int]] = [0x0c0300]
@dataclass
class SDXCController(PCIDevice):
CLASS_CODE: ClassVar[int] = 0x080501
CLASS_CODES: ClassVar[list[int]] = [0x080501]
@dataclass
class NVIDIA(GPU):
@@ -467,6 +498,7 @@ class Broadcom(WirelessCard):
# pylint: disable=invalid-name
AppleBCMWLANBusInterfacePCIe = "AppleBCMWLANBusInterfacePCIe supported"
AirportBrcmNIC = "AirportBrcmNIC supported"
AirPortBrcmNICThirdParty = "AirPortBrcmNICThirdParty supported"
AirPortBrcm4360 = "AirPortBrcm4360 supported"
AirPortBrcm4331 = "AirPortBrcm4331 supported"
AirPortBrcm43224 = "AppleAirPortBrcm43224 supported"
@@ -479,6 +511,8 @@ class Broadcom(WirelessCard):
self.chipset = Broadcom.Chipsets.AppleBCMWLANBusInterfacePCIe
elif self.device_id in pci_data.broadcom_ids.AirPortBrcmNIC:
self.chipset = Broadcom.Chipsets.AirportBrcmNIC
elif self.device_id in pci_data.broadcom_ids.AirPortBrcmNICThirdParty:
self.chipset = Broadcom.Chipsets.AirPortBrcmNICThirdParty
elif self.device_id in pci_data.broadcom_ids.AirPortBrcm4360:
self.chipset = Broadcom.Chipsets.AirPortBrcm4360
elif self.device_id in pci_data.broadcom_ids.AirPortBrcm4331:
@@ -587,7 +621,7 @@ class Computer:
storage: list[PCIDevice] = field(default_factory=list)
usb_controllers: list[PCIDevice] = field(default_factory=list)
sdxc_controller: list[PCIDevice] = field(default_factory=list)
ethernet: Optional[EthernetController] = field(default_factory=list)
ethernet: list[EthernetController] = field(default_factory=list)
wifi: Optional[WirelessCard] = None
cpu: Optional[CPU] = None
usb_devices: list[USBDevice] = field(default_factory=list)
@@ -599,6 +633,7 @@ class Computer:
trackpad_type: Optional[str] = None
ambient_light_sensor: Optional[bool] = False
third_party_sata_ssd: Optional[bool] = False
pcie_webcam: Optional[bool] = False
secure_boot_model: Optional[str] = None
secure_boot_policy: Optional[int] = None
oclp_sys_version: Optional[str] = None
@@ -625,6 +660,7 @@ class Computer:
computer.bluetooth_probe()
computer.topcase_probe()
computer.ambient_light_sensor_probe()
computer.pcie_webcam_probe()
computer.sata_disk_probe()
computer.oclp_sys_patch_probe()
computer.check_rosetta()
@@ -646,10 +682,10 @@ class Computer:
def gpu_probe(self):
# Chain together two iterators: one for class code 00000300, the other for class code 00800300
# Chain together two iterators: one for class code 03:00:00, the other for class code 03:80:00
devices = ioreg.ioiterator_to_list(
ioreg.IOServiceGetMatchingServices(
ioreg.kIOMasterPortDefault, {"IOProviderClass": "IOPCIDevice", "IOPropertyMatch": [{"class-code": binascii.a2b_hex("00000300")}, {"class-code": binascii.a2b_hex("00800300")}]}, None
ioreg.kIOMasterPortDefault, GPU.class_code_matching_dict(), None
)[1]
)
@@ -685,7 +721,7 @@ class Computer:
devices = ioreg.ioiterator_to_list(
ioreg.IOServiceGetMatchingServices(
ioreg.kIOMasterPortDefault,
{"IOProviderClass": "IOPCIDevice", "IOPropertyMatch": {"class-code": binascii.a2b_hex(utilities.hexswap(hex(WirelessCard.CLASS_CODE)[2:].zfill(8)))}},
WirelessCard.class_code_matching_dict(),
None,
)[1]
)
@@ -703,11 +739,18 @@ class Computer:
self.ambient_light_sensor = True
ioreg.IOObjectRelease(device)
def pcie_webcam_probe(self):
# CMRA/14E4:1570
device = next(ioreg.ioiterator_to_list(ioreg.IOServiceGetMatchingServices(ioreg.kIOMasterPortDefault, ioreg.IOServiceNameMatching("CMRA".encode()), None)[1]), None)
if device:
self.pcie_webcam = True
ioreg.IOObjectRelease(device)
def sdxc_controller_probe(self):
sdxc_controllers = ioreg.ioiterator_to_list(
ioreg.IOServiceGetMatchingServices(
ioreg.kIOMasterPortDefault,
{"IOProviderClass": "IOPCIDevice", "IOPropertyMatch": [{"class-code": binascii.a2b_hex(utilities.hexswap(hex(SDXCController.CLASS_CODE)[2:].zfill(8)))}]},
SDXCController.class_code_matching_dict(),
None,
)[1]
)
@@ -720,21 +763,21 @@ class Computer:
xhci_controllers = ioreg.ioiterator_to_list(
ioreg.IOServiceGetMatchingServices(
ioreg.kIOMasterPortDefault,
{"IOProviderClass": "IOPCIDevice", "IOPropertyMatch": [{"class-code": binascii.a2b_hex(utilities.hexswap(hex(XHCIController.CLASS_CODE)[2:].zfill(8)))}]},
XHCIController.class_code_matching_dict(),
None,
)[1]
)
ehci_controllers = ioreg.ioiterator_to_list(
ioreg.IOServiceGetMatchingServices(
ioreg.kIOMasterPortDefault,
{"IOProviderClass": "IOPCIDevice", "IOPropertyMatch": [{"class-code": binascii.a2b_hex(utilities.hexswap(hex(EHCIController.CLASS_CODE)[2:].zfill(8)))}]},
EHCIController.class_code_matching_dict(),
None,
)[1]
)
ohci_controllers = ioreg.ioiterator_to_list(
ioreg.IOServiceGetMatchingServices(
ioreg.kIOMasterPortDefault,
{"IOProviderClass": "IOPCIDevice", "IOPropertyMatch": [{"class-code": binascii.a2b_hex(utilities.hexswap(hex(OHCIController.CLASS_CODE)[2:].zfill(8)))}]},
OHCIController.class_code_matching_dict(),
None,
)[1]
)
@@ -742,7 +785,7 @@ class Computer:
uhci_controllers = ioreg.ioiterator_to_list(
ioreg.IOServiceGetMatchingServices(
ioreg.kIOMasterPortDefault,
{"IOProviderClass": "IOPCIDevice", "IOPropertyMatch": [{"class-code": binascii.a2b_hex(utilities.hexswap(hex(UHCIController.CLASS_CODE)[2:].zfill(8)))}]},
UHCIController.class_code_matching_dict(),
None,
)[1]
)
@@ -763,7 +806,7 @@ class Computer:
ethernet_controllers = ioreg.ioiterator_to_list(
ioreg.IOServiceGetMatchingServices(
ioreg.kIOMasterPortDefault,
{"IOProviderClass": "IOPCIDevice", "IOPropertyMatch": [{"class-code": binascii.a2b_hex(utilities.hexswap(hex(EthernetController.CLASS_CODE)[2:].zfill(8)))}]},
EthernetController.class_code_matching_dict(),
None,
)[1]
)
@@ -778,21 +821,23 @@ class Computer:
sata_controllers = ioreg.ioiterator_to_list(
ioreg.IOServiceGetMatchingServices(
ioreg.kIOMasterPortDefault,
{"IOProviderClass": "IOPCIDevice", "IOPropertyMatch": [{"class-code": binascii.a2b_hex(utilities.hexswap(hex(SATAController.CLASS_CODE)[2:].zfill(8)))}]},
SATAController.class_code_matching_dict(),
None,
)[1]
)
sas_controllers = ioreg.ioiterator_to_list(
ioreg.IOServiceGetMatchingServices(
ioreg.kIOMasterPortDefault,
{"IOProviderClass": "IOPCIDevice", "IOPropertyMatch": [{"class-code": binascii.a2b_hex(utilities.hexswap(hex(SASController.CLASS_CODE)[2:].zfill(8)))}]},
SASController.class_code_matching_dict(),
None,
)[1]
)
nvme_controllers = ioreg.ioiterator_to_list(
ioreg.IOServiceGetMatchingServices(
ioreg.kIOMasterPortDefault, {"IOProviderClass": "IONVMeController", "IOParentMatch": {"IOProviderClass": "IOPCIDevice"}, "IOPropertyMatch": {"IOClass": "IONVMeController"}}, None
ioreg.kIOMasterPortDefault,
NVMeController.class_code_matching_dict(),
None,
)[1]
)
for device in sata_controllers:
@@ -804,22 +849,9 @@ class Computer:
ioreg.IOObjectRelease(device)
for device in nvme_controllers:
parent = ioreg.IORegistryEntryGetParentEntry(device, "IOService".encode(), None)[1]
self.storage.append(NVMeController.from_ioregistry(device))
ioreg.IOObjectRelease(device)
aspm: Union[int, bytes] = ioreg.corefoundation_to_native(ioreg.IORegistryEntryCreateCFProperty(parent, "pci-aspm-default", ioreg.kCFAllocatorDefault, ioreg.kNilOptions)) or 0 # type: ignore
if isinstance(aspm, bytes):
aspm = int.from_bytes(aspm, byteorder="little")
controller = NVMeController.from_ioregistry(parent)
controller.aspm = aspm
if controller.vendor_id != 0x106B:
# Handle Apple Vendor ID
self.storage.append(controller)
ioreg.IOObjectRelease(parent)
def smbios_probe(self):
# Reported model
entry = next(ioreg.ioiterator_to_list(ioreg.IOServiceGetMatchingServices(ioreg.kIOMasterPortDefault, ioreg.IOServiceMatching("IOPlatformExpertDevice".encode()), None)[1]))
@@ -903,7 +935,7 @@ class Computer:
self.trackpad_type = "Legacy"
elif usb_device.device_id in usb_data.AppleIDs.AppleUSBMultiTouch:
self.trackpad_type = "Modern"
def sata_disk_probe(self):
# Get all SATA Controllers/Disks from 'system_profiler SPSerialATADataType'
# Determine whether SATA SSD is present and Apple-made
@@ -944,7 +976,7 @@ class Computer:
def check_rosetta(self):
result = subprocess.run("sysctl -in sysctl.proc_translated".split(), stdout=subprocess.PIPE).stdout.decode()
if result:
if "1" in result:
self.rosetta_active = True
else:
self.rosetta_active = False

View File

@@ -234,7 +234,7 @@ class RemoteInstallerCatalog:
Parses Apple's Software Update catalog and finds all macOS installers.
"""
def __init__(self, seed_override: SeedType = SeedType.PublicRelease, os_override: int = os_data.os_data.ventura) -> None:
def __init__(self, seed_override: SeedType = SeedType.PublicRelease, os_override: int = os_data.os_data.sonoma) -> None:
self.catalog_url: str = self._construct_catalog_url(seed_override, os_override)
@@ -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
@@ -421,8 +425,7 @@ class RemoteInstallerCatalog:
return {}
newest_apps: dict = self.available_apps.copy()
supported_versions = ["10.13", "10.14", "10.15", "11", "12", "13"]
supported_versions = ["10.13", "10.14", "10.15", "11", "12", "13", "14"]
for version in supported_versions:
remote_version_minor = 0
@@ -489,11 +492,6 @@ class RemoteInstallerCatalog:
newest_apps.pop(ia)
break
# Remove unsupported versions (namely 14)
for ia in list(newest_apps):
if newest_apps[ia]["Version"].split(".")[0] not in supported_versions:
newest_apps.pop(ia)
return newest_apps

View File

@@ -28,7 +28,7 @@ class RoutePayloadDiskImage:
"""
if self.constants.wxpython_variant is True and not self.constants.launcher_script:
logging.info("Running in Binary GUI mode, switching to tmp directory")
logging.info("Running in compiled binary, switching to tmp directory")
self.temp_dir = tempfile.TemporaryDirectory()
logging.info(f"New payloads location: {self.temp_dir.name}")
logging.info("Creating payloads directory")
@@ -71,7 +71,7 @@ class RoutePayloadDiskImage:
dmg_info = plistlib.loads(dmg_info.stdout)
for variant in ["Universal-Binaries.dmg", "payloads.dmg"]:
for variant in ["DortaniaInternalResources.dmg", "Universal-Binaries.dmg", "payloads.dmg"]:
for image in dmg_info["images"]:
if image["image-path"].endswith(variant):
if unmount_all_active is False:

View File

@@ -32,12 +32,13 @@
# This is because Apple removed on-disk binaries (ref: https://github.com/dortania/OpenCore-Legacy-Patcher/issues/998)
# 'sudo ditto /Library/Developer/KDKs/<KDK Version>/System /System/Volumes/Update/mnt1/System'
import logging
import plistlib
import shutil
import subprocess
import applescript
from pathlib import Path
from datetime import datetime
import logging
from resources import constants, utilities, kdk_handler
from resources.sys_patch import sys_patch_detect, sys_patch_auto, sys_patch_helpers, sys_patch_generate
@@ -279,6 +280,8 @@ class PatchSysVolume:
if self.needs_kmutil_exemptions is True:
logging.info("Note: Apple will require you to open System Preferences -> Security to allow the new kernel extensions to be loaded")
self.constants.root_patcher_succeeded = True
return True
return False
def _rebuild_kernel_collection(self) -> bool:
@@ -417,9 +420,11 @@ class PatchSysVolume:
"""
Unmount root volume
"""
logging.info("- Unmounting Root Volume (Don't worry if this fails)")
utilities.elevated(["diskutil", "unmount", self.root_mount_path], stdout=subprocess.PIPE).stdout.decode().strip().encode()
if self.root_mount_path:
logging.info("- Unmounting Root Volume (Don't worry if this fails)")
utilities.elevated(["diskutil", "unmount", self.root_mount_path], stdout=subprocess.PIPE).stdout.decode().strip().encode()
else:
logging.info("- Skipping Root Volume unmount")
def _rebuild_dyld_shared_cache(self) -> None:
@@ -863,6 +868,75 @@ class PatchSysVolume:
return False
logging.info("- Mounted Universal-Binaries.dmg")
if self.constants.cli_mode is False and Path(self.constants.overlay_psp_path_dmg).exists() and Path("~/.dortania_developer").expanduser().exists():
icon_path = str(self.constants.app_icon_path).replace("/", ":")[1:]
msg = "Welcome to the DortaniaInternal Program, please provided the decryption key to access internal resources. Press cancel to skip."
password = Path("~/.dortania_developer_key").expanduser().read_text().strip() if Path("~/.dortania_developer_key").expanduser().exists() else ""
for i in range(3):
try:
if password == "":
password = applescript.AppleScript(
f"""
set theResult to display dialog "{msg}" default answer "" with hidden answer with title "OpenCore Legacy Patcher" with icon file "{icon_path}"
return the text returned of theResult
"""
).run()
result = subprocess.run(
[
"hdiutil", "attach", "-noverify", f"{self.constants.overlay_psp_path_dmg}",
"-mountpoint", Path(self.constants.payload_path / Path("DortaniaInternal")),
"-nobrowse",
"-passphrase", password
],
stdout=subprocess.PIPE, stderr=subprocess.STDOUT
)
if result.returncode == 0:
logging.info("- Mounted DortaniaInternal resources")
result = subprocess.run(
[
"ditto", f"{self.constants.payload_path / Path('DortaniaInternal')}", f"{self.constants.payload_path / Path('Universal-Binaries')}"
],
stdout=subprocess.PIPE, stderr=subprocess.STDOUT
)
if result.returncode == 0:
return True
logging.info("- Failed to merge DortaniaInternal resources")
logging.info(f"Output: {result.stdout.decode()}")
logging.info(f"Return Code: {result.returncode}")
return False
logging.info("- Failed to mount DortaniaInternal resources")
logging.info(f"Output: {result.stdout.decode()}")
logging.info(f"Return Code: {result.returncode}")
if "Authentication error" not in result.stdout.decode():
try:
# Display that the disk image might be corrupted
applescript.AppleScript(
f"""
display dialog "Failed to mount DortaniaInternal resources, please file an internal radar:\n\n{result.stdout.decode()}" with title "OpenCore Legacy Patcher" with icon file "{icon_path}"
"""
).run()
return False
except Exception as e:
pass
break
msg = f"Decryption failed, please try again. {2 - i} attempts remaining. "
password = ""
if i == 2:
applescript.AppleScript(
f"""
display dialog "Failed to mount DortaniaInternal resources, too many incorrect passwords. If this continues with the correct decryption key, please file an internal radar." with title "OpenCore Legacy Patcher" with icon file "{icon_path}"
"""
).run()
return False
except Exception as e:
break
return True
logging.info("- PatcherSupportPkg resources missing, Patcher likely corrupted!!!")

View File

@@ -83,7 +83,6 @@ class AutomaticSysPatch:
if patches[patch] is True and not patch.startswith("Settings") and not patch.startswith("Validation"):
patch_string += f"- {patch}\n"
logging.info("- No new binaries found on Github, proceeding with patching")
logging.info("- No new binaries found on Github, proceeding with patching")
if self.constants.launcher_script is None:
args_string = f"'{self.constants.launcher_binary}' --gui_patch"

View File

@@ -40,6 +40,7 @@ class DetectRootPatch:
self.broadwell_gpu = False
self.skylake_gpu = False
self.legacy_gcn = False
self.legacy_gcn_v2 = False
self.legacy_polaris = False
self.legacy_vega = False
@@ -47,9 +48,11 @@ class DetectRootPatch:
self.brightness_legacy = False
self.legacy_audio = False
self.legacy_wifi = False
self.modern_wifi = False
self.legacy_gmux = False
self.legacy_keyboard_backlight = False
self.legacy_uhci_ohci = False
self.legacy_pcie_webcam = False
# Patch Requirements
self.amfi_must_disable = False
@@ -156,12 +159,20 @@ class DetectRootPatch:
# full compatibility (namely power states, etc)
# Reference: https://github.com/dortania/bugtracker/issues/292
# TODO: Probe framebuffer families further
if self.model != "MacBookPro13,3":
# Sonoma note: MacBookPro14,3 has the same issue...
# iMac18,2/3 is partially affected, however currently it seems the generic framebuffer
# is sufficient. Only MacBookPro14,3 needs this for dGPU handling
if self.model not in ["MacBookPro13,3", "MacBookPro14,3"]:
if "AVX2" in self.constants.computer.cpu.leafs:
continue
self.legacy_polaris = True
else:
self.legacy_gcn = True
if self.model == "MacBookPro13,3":
self.legacy_gcn = True
elif self.model == "MacBookPro14,3":
if self.constants.detected_os < os_data.os_data.sonoma:
continue
self.legacy_gcn_v2 = True
else:
self.legacy_gcn = True
self.supports_metal = True
@@ -217,6 +228,9 @@ class DetectRootPatch:
self.skylake_gpu = True
self.amfi_must_disable = True
self.supports_metal = True
if self.supports_metal is True:
# Avoid patching Metal and non-Metal GPUs if both present, prioritize Metal GPU
# Main concerns are for iMac12,x with Sandy iGPU and Kepler dGPU
@@ -228,7 +242,7 @@ class DetectRootPatch:
self.sandy_gpu = False
self.legacy_keyboard_backlight = False
if self.legacy_gcn is True:
if self.legacy_gcn is True or self.legacy_gcn_v2 is True:
# We can only support one or the other due to the nature of relying
# on portions of the native AMD stack for Polaris and Vega
# Thus we'll prioritize legacy GCN due to being the internal card
@@ -243,7 +257,6 @@ class DetectRootPatch:
if self.requires_root_kc is True:
self.missing_kdk = not self._check_kdk()
self._check_networking_support()
def _check_networking_support(self):
@@ -257,9 +270,10 @@ class DetectRootPatch:
On subsequent runs, we'll require networking to be enabled.
"""
if self.constants.detected_os < os_data.os_data.ventura:
# Increase OS check if modern wifi is detected
if self.constants.detected_os < (os_data.os_data.ventura if self.legacy_wifi is True else os_data.os_data.sonoma):
return
if self.legacy_wifi is False:
if self.legacy_wifi is False and self.modern_wifi is False:
return
if self.requires_root_kc is False:
return
@@ -273,7 +287,7 @@ class DetectRootPatch:
oclp_patch_path = "/System/Library/CoreServices/OpenCore-Legacy-Patcher.plist"
if Path(oclp_patch_path).exists():
oclp_plist = plistlib.load(open(oclp_patch_path, "rb"))
if "Legacy Wireless" in oclp_plist:
if "Legacy Wireless" in oclp_plist or "Modern Wireless" in oclp_plist:
return
# Due to the reliance of KDKs for most older patches, we'll allow KDK-less
@@ -289,6 +303,7 @@ class DetectRootPatch:
self.iron_gpu = False
self.sandy_gpu = False
self.legacy_gcn = False
self.legacy_gcn_v2 = False
self.legacy_polaris = False
self.legacy_vega = False
self.brightness_legacy = False
@@ -296,6 +311,14 @@ class DetectRootPatch:
self.legacy_gmux = False
self.legacy_keyboard_backlight = False
# Currently all graphics patches require a KDK
if self.constants.detected_os >= os_data.os_data.sonoma:
self.kepler_gpu = False
self.ivy_gpu = False
self.haswell_gpu = False
self.broadwell_gpu = False
self.skylake_gpu = False
def _check_dgpu_status(self):
"""
@@ -417,7 +440,7 @@ class DetectRootPatch:
Base check to ensure patcher is compatible with host OS
"""
min_os = os_data.os_data.big_sur
max_os = os_data.os_data.ventura
max_os = os_data.os_data.sonoma
if self.constants.detected_os < min_os or self.constants.detected_os > max_os:
return False
return True
@@ -493,11 +516,11 @@ class DetectRootPatch:
return False
# If we're on a Mac, check for Penryn or older
# This is due to Apple implementing an internal USB hub on post-Penryn (excluding MacPro4,1 and MacPro5,1)
# This is due to Apple implementing an internal USB hub on post-Penryn (excluding MacPro4,1, MacPro5,1 and Xserve3,1)
# Ref: https://techcommunity.microsoft.com/t5/microsoft-usb-blog/reasons-to-avoid-companion-controllers/ba-p/270710
if (
smbios_data.smbios_dictionary[self.model]["CPU Generation"] <= cpu_data.CPUGen.penryn.value or \
self.model in ["MacPro4,1", "MacPro5,1"]
self.model in ["MacPro4,1", "MacPro5,1", "Xserve3,1"]
):
return True
@@ -515,6 +538,8 @@ class DetectRootPatch:
self.has_network = network_handler.NetworkUtilities().verify_network_connection()
self.legacy_pcie_webcam = self.constants.computer.pcie_webcam
if self._check_uhci_ohci() is True:
self.legacy_uhci_ohci = True
self.requires_root_kc = True
@@ -538,6 +563,20 @@ class DetectRootPatch:
if self.constants.detected_os >= os_data.os_data.ventura:
# Due to extracted frameworks for IO80211.framework and co, check library validation
self.amfi_must_disable = True
if self.constants.detected_os > os_data.os_data.ventura:
self.amfi_shim_bins = True
if (
isinstance(self.constants.computer.wifi, device_probe.Broadcom)
and self.constants.computer.wifi.chipset in [
device_probe.Broadcom.Chipsets.AirPortBrcm4360,
device_probe.Broadcom.Chipsets.AirportBrcmNIC,
# We don't officially support this chipset, however we'll throw a bone to hackintosh users
device_probe.Broadcom.Chipsets.AirPortBrcmNICThirdParty,
]):
if self.constants.detected_os > os_data.os_data.ventura:
self.modern_wifi = True
self.amfi_shim_bins = True
# if self.model in ["MacBookPro5,1", "MacBookPro5,2", "MacBookPro5,3", "MacBookPro8,2", "MacBookPro8,3"]:
if self.model in ["MacBookPro8,2", "MacBookPro8,3"]:
@@ -554,6 +593,9 @@ class DetectRootPatch:
self.legacy_gmux = True
self._detect_gpus()
# This must be performed last, as it may override previous decisions
# Namely, whether we allow patches requiring KDKs
self._check_networking_support()
self.root_patch_dict = {
"Graphics: Nvidia Tesla": self.nvidia_tesla,
@@ -562,6 +604,7 @@ class DetectRootPatch:
"Graphics: AMD TeraScale 1": self.amd_ts1,
"Graphics: AMD TeraScale 2": self.amd_ts2,
"Graphics: AMD Legacy GCN": self.legacy_gcn,
"Graphics: AMD Legacy GCN (2017)": self.legacy_gcn_v2,
"Graphics: AMD Legacy Polaris": self.legacy_polaris,
"Graphics: AMD Legacy Vega": self.legacy_vega,
"Graphics: Intel Ironlake": self.iron_gpu,
@@ -573,9 +616,11 @@ class DetectRootPatch:
"Brightness: Legacy Backlight Control": self.brightness_legacy,
"Audio: Legacy Realtek": self.legacy_audio,
"Networking: Legacy Wireless": self.legacy_wifi,
"Networking: Modern Wireless": self.modern_wifi,
"Miscellaneous: Legacy GMUX": self.legacy_gmux,
"Miscellaneous: Legacy Keyboard Backlight": self.legacy_keyboard_backlight,
"Miscellaneous: Legacy USB 1.1": self.legacy_uhci_ohci,
"Miscellaneous: PCIe FaceTime Camera": self.legacy_pcie_webcam,
"Settings: Requires AMFI exemption": self.amfi_must_disable,
"Settings: Supports Auxiliary Cache": not self.requires_root_kc,
"Settings: Kernel Debug Kit missing": self.missing_kdk if self.constants.detected_os >= os_data.os_data.ventura.value else False,

View File

@@ -139,6 +139,8 @@ class GenerateRootPatchSets:
required_patches.update({"Revert GVA Downgrade": all_hardware_patchset["Graphics"]["Revert GVA Downgrade"]})
if "AVX2" not in self.constants.computer.cpu.leafs:
required_patches.update({"AMD OpenCL": all_hardware_patchset["Graphics"]["AMD OpenCL"]})
if self.hardware_details["Graphics: AMD Legacy GCN (2017)"] is True:
required_patches.update({"AMD Legacy GCN v2": all_hardware_patchset["Graphics"]["AMD Legacy GCN v2"]})
if self.hardware_details["Graphics: AMD Legacy Vega"] is True:
required_patches.update({"Monterey GVA": all_hardware_patchset["Graphics"]["Monterey GVA"]})
@@ -163,6 +165,9 @@ class GenerateRootPatchSets:
required_patches.update({"Legacy Wireless": all_hardware_patchset["Networking"]["Legacy Wireless"]})
required_patches.update({"Legacy Wireless Extended": all_hardware_patchset["Networking"]["Legacy Wireless Extended"]})
if self.hardware_details["Networking: Modern Wireless"] is True:
required_patches.update({"Legacy Wireless": all_hardware_patchset["Networking"]["Modern Wireless"]})
if self.hardware_details["Miscellaneous: Legacy GMUX"] is True:
required_patches.update({"Legacy GMUX": all_hardware_patchset["Miscellaneous"]["Legacy GMUX"]})
@@ -172,6 +177,9 @@ class GenerateRootPatchSets:
if self.hardware_details["Miscellaneous: Legacy USB 1.1"] is True:
required_patches.update({"Legacy USB 1.1": all_hardware_patchset["Miscellaneous"]["Legacy USB 1.1"]})
if self.hardware_details["Miscellaneous: PCIe FaceTime Camera"] is True:
required_patches.update({"PCIe FaceTime Camera": all_hardware_patchset["Miscellaneous"]["PCIe FaceTime Camera"]})
if required_patches:
host_os_float = float(f"{self.constants.detected_os}.{self.constants.detected_os_minor}")

View File

@@ -234,15 +234,16 @@ class SysPatchHelpers:
- opencl-c.h
- lib (entire directory)
Note: With macOS Sonoma, 32023 compiler is used instead and so this patch is not needed
Parameters:
mount_point: The mount point of the target volume
"""
if self.constants.detected_os < os_data.os_data.ventura:
if self.constants.detected_os != os_data.os_data.ventura:
return
if self.constants.detected_os_minor < 4:
return
if self.constants.detected_os == os_data.os_data.ventura:
if self.constants.detected_os_minor < 4:
return
LIBRARY_DIR = f"{mount_point}/System/Library/PrivateFrameworks/GPUCompiler.framework/Versions/31001/Libraries/lib/clang"
GPU_VERSION = "31001.669"

View File

@@ -61,9 +61,9 @@ def seconds_to_readable_time(seconds) -> str:
time = ""
if seconds == 0:
return "Almost done"
return "0m "
if seconds < 0:
return "Indeterminate"
return "Indeterminate time "
years, seconds = divmod(seconds, 31536000)
days, seconds = divmod(seconds, 86400)
@@ -80,8 +80,8 @@ def seconds_to_readable_time(seconds) -> str:
time += f"{hours}h "
if minutes > 0:
time += f"{minutes}m "
if seconds > 0:
time += f"{seconds}s"
#if seconds > 0:
# time += f"{seconds}s"
return time

View File

@@ -162,7 +162,7 @@ class PatcherValidation:
logging.info("Mounted Universal-Binaries.dmg")
for supported_os in [os_data.os_data.big_sur, os_data.os_data.monterey, os_data.os_data.ventura]:
for supported_os in [os_data.os_data.big_sur, os_data.os_data.monterey, os_data.os_data.ventura, os_data.os_data.sonoma]:
for i in range(0, 10):
self._validate_root_patch_files(supported_os, i)
logging.info("Validating SNB Board ID patcher")
@@ -205,7 +205,6 @@ class PatcherValidation:
# Second run, flip all settings
self.constants.verbose_debug = True
self.constants.opencore_debug = True
self.constants.opencore_build = "DEBUG"
self.constants.kext_debug = True
self.constants.kext_variant = "DEBUG"
self.constants.kext_debug = True

View File

@@ -30,12 +30,12 @@ class AboutFrame(wx.Frame):
# Set title
title = wx.StaticText(frame, label="OpenCore Legacy Patcher", pos=(-1, 5))
title.SetFont(wx.Font(19, wx.FONTFAMILY_DEFAULT, wx.FONTSTYLE_NORMAL, wx.FONTWEIGHT_BOLD, False, ".AppleSystemUIFont"))
title.SetFont(gui_support.font_factory(19, wx.FONTWEIGHT_BOLD))
title.Centre(wx.HORIZONTAL)
# Set version
version = wx.StaticText(frame, label=f"Version: {self.constants.patcher_version}", pos=(-1, title.GetPosition()[1] + title.GetSize()[1] + 5))
version.SetFont(wx.Font(11, wx.FONTFAMILY_DEFAULT, wx.FONTSTYLE_NORMAL, wx.FONTWEIGHT_NORMAL, False, ".AppleSystemUIFont"))
version.SetFont(gui_support.font_factory(11, wx.FONTWEIGHT_NORMAL))
version.Centre(wx.HORIZONTAL)
# Description
@@ -47,7 +47,7 @@ class AboutFrame(wx.Frame):
spacer = 5
for line in description:
desc = wx.StaticText(frame, label=line, pos=(-1, version.GetPosition()[1] + version.GetSize()[1] + 5 + spacer))
desc.SetFont(wx.Font(13, wx.FONTFAMILY_DEFAULT, wx.FONTSTYLE_NORMAL, wx.FONTWEIGHT_NORMAL, False, ".AppleSystemUIFont"))
desc.SetFont(gui_support.font_factory(13, wx.FONTWEIGHT_NORMAL))
desc.Centre(wx.HORIZONTAL)
spacer += 20

View File

@@ -58,11 +58,11 @@ class BuildFrame(wx.Frame):
frame = self if not frame else frame
title_label = wx.StaticText(frame, label="Build and Install OpenCore", pos=(-1,5))
title_label.SetFont(wx.Font(19, wx.FONTFAMILY_DEFAULT, wx.FONTSTYLE_NORMAL, wx.FONTWEIGHT_BOLD, False, ".AppleSystemUIFont"))
title_label.SetFont(gui_support.font_factory(19, wx.FONTWEIGHT_BOLD))
title_label.Centre(wx.HORIZONTAL)
model_label = wx.StaticText(frame, label=f"Model: {self.constants.custom_model or self.constants.computer.real_model}", pos=(-1,30))
model_label.SetFont(wx.Font(13, wx.FONTFAMILY_DEFAULT, wx.FONTSTYLE_NORMAL, wx.FONTWEIGHT_NORMAL, False, ".AppleSystemUIFont"))
model_label.SetFont(gui_support.font_factory(13, wx.FONTWEIGHT_NORMAL))
model_label.Centre(wx.HORIZONTAL)
# Button: Install OpenCore
@@ -78,7 +78,7 @@ class BuildFrame(wx.Frame):
self.text_box = text_box
# Button: Return to Main Menu
return_button = wx.Button(frame, label="Return to Main Menu", pos=(-1, text_box.GetPosition()[1] + text_box.GetSize()[1] + 5), size=(200, 30))
return_button = wx.Button(frame, label="Return to Main Menu", pos=(-1, text_box.GetPosition()[1] + text_box.GetSize()[1] + 5), size=(150, 30))
return_button.Bind(wx.EVT_BUTTON, self.on_return_to_main_menu)
return_button.Centre(wx.HORIZONTAL)
return_button.Disable()

View File

@@ -8,18 +8,25 @@ from resources import (
utilities
)
from resources.wx_gui import gui_support
class DownloadFrame(wx.Frame):
"""
Update provided frame with download stats
"""
def __init__(self, parent: wx.Frame, title: str, global_constants: constants.Constants, download_obj: network_handler.DownloadObject, item_name: str) -> None:
def __init__(self, parent: wx.Frame, title: str, global_constants: constants.Constants, download_obj: network_handler.DownloadObject, item_name: str, download_icon = None) -> None:
logging.info("Initializing Download Frame")
self.constants: constants.Constants = global_constants
self.title: str = title
self.parent: wx.Frame = parent
self.download_obj: network_handler.DownloadObject = download_obj
self.item_name: str = item_name
if download_icon:
self.download_icon: str = download_icon
else:
self.download_icon: str = "/System/Library/CoreServices/Installer.app/Contents/Resources/package.icns"
self.user_cancelled: bool = False
@@ -34,27 +41,23 @@ class DownloadFrame(wx.Frame):
"""
frame = self if not frame else frame
icon = self.download_icon
icon = wx.StaticBitmap(frame, bitmap=wx.Bitmap(icon, wx.BITMAP_TYPE_ICON), pos=(-1, 20))
icon.SetSize((100, 100))
icon.Centre(wx.HORIZONTAL)
title_label = wx.StaticText(frame, label=f"Downloading: {self.item_name}", pos=(-1,5))
title_label.SetFont(wx.Font(19, wx.FONTFAMILY_DEFAULT, wx.FONTSTYLE_NORMAL, wx.FONTWEIGHT_BOLD, False, ".AppleSystemUIFont"))
title_label = wx.StaticText(frame, label=f"Downloading: {self.item_name}", pos=(-1,icon.GetPosition()[1] + icon.GetSize()[1] + 20))
title_label.SetFont(gui_support.font_factory(19, wx.FONTWEIGHT_BOLD))
title_label.Centre(wx.HORIZONTAL)
label_amount = wx.StaticText(frame, label="0.00 B downloaded of 0.00B (0.00%)", pos=(-1, title_label.GetPosition()[1] + title_label.GetSize()[1] + 5))
label_amount.SetFont(wx.Font(13, wx.FONTFAMILY_DEFAULT, wx.FONTSTYLE_NORMAL, wx.FONTWEIGHT_NORMAL, False, ".AppleSystemUIFont"))
label_amount.Centre(wx.HORIZONTAL)
label_speed = wx.StaticText(frame, label="Average download speed: Unknown", pos=(-1, label_amount.GetPosition()[1] + label_amount.GetSize()[1] + 5))
label_speed.SetFont(wx.Font(13, wx.FONTFAMILY_DEFAULT, wx.FONTSTYLE_NORMAL, wx.FONTWEIGHT_NORMAL, False, ".AppleSystemUIFont"))
label_speed.Centre(wx.HORIZONTAL)
label_est_time = wx.StaticText(frame, label="Estimated time remaining: Unknown", pos=(-1, label_speed.GetPosition()[1] + label_speed.GetSize()[1] + 5))
label_est_time.SetFont(wx.Font(13, wx.FONTFAMILY_DEFAULT, wx.FONTSTYLE_NORMAL, wx.FONTWEIGHT_NORMAL, False, ".AppleSystemUIFont"))
label_est_time.Centre(wx.HORIZONTAL)
progress_bar = wx.Gauge(frame, range=100, pos=(-1, label_est_time.GetPosition()[1] + label_est_time.GetSize()[1] + 5), size=(300, 20))
progress_bar = wx.Gauge(frame, range=100, pos=(-1, title_label.GetPosition()[1] + title_label.GetSize()[1] + 5), size=(300, 20))
progress_bar.Centre(wx.HORIZONTAL)
return_button = wx.Button(frame, label="Return", pos=(-1, progress_bar.GetPosition()[1] + progress_bar.GetSize()[1] + 5))
label_amount = wx.StaticText(frame, label="Preparing download", pos=(-1, progress_bar.GetPosition()[1] + progress_bar.GetSize()[1]))
label_amount.SetFont(gui_support.font_factory(13, wx.FONTWEIGHT_NORMAL))
label_amount.Centre(wx.HORIZONTAL)
return_button = wx.Button(frame, label="Cancel", pos=(-1, label_amount.GetPosition()[1] + label_amount.GetSize()[1] + 10))
return_button.Bind(wx.EVT_BUTTON, lambda event: self.terminate_download())
return_button.Centre(wx.HORIZONTAL)
@@ -64,31 +67,25 @@ class DownloadFrame(wx.Frame):
self.download_obj.download()
while self.download_obj.is_active():
percentage: int = self.download_obj.get_percent()
if percentage == -1:
amount_str = f"{utilities.human_fmt(self.download_obj.downloaded_file_size)} downloaded"
amount_str = f"{utilities.human_fmt(self.download_obj.downloaded_file_size)} downloaded ({utilities.human_fmt(self.download_obj.get_speed())}/s)"
progress_bar.Pulse()
else:
amount_str = f"{utilities.human_fmt(self.download_obj.downloaded_file_size)} downloaded of {utilities.human_fmt(self.download_obj.total_file_size)} ({percentage:.2f}%)"
amount_str = f"{utilities.seconds_to_readable_time(self.download_obj.get_time_remaining())}left - {utilities.human_fmt(self.download_obj.downloaded_file_size)} of {utilities.human_fmt(self.download_obj.total_file_size)} ({utilities.human_fmt(self.download_obj.get_speed())}/s)"
progress_bar.SetValue(int(percentage))
label_amount.SetLabel(amount_str)
label_amount.Centre(wx.HORIZONTAL)
label_speed.SetLabel(
f"Average download speed: {utilities.human_fmt(self.download_obj.get_speed())}/s"
)
label_est_time.SetLabel(
f"Estimated time remaining: {utilities.seconds_to_readable_time(self.download_obj.get_time_remaining())}"
)
wx.Yield()
if self.download_obj.download_complete is False and self.user_cancelled is False:
wx.MessageBox(f"Download failed: \n{self.download_obj.error_msg}", "Error", wx.OK | wx.ICON_ERROR)
progress_bar.Destroy()
frame.Destroy()

Some files were not shown because too many files have changed in this diff Show More