mirror of
https://github.com/dortania/OpenCore-Legacy-Patcher.git
synced 2026-04-21 03:04:31 +10:00
Compare commits
54 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
60f403d4b4 | ||
|
|
a8a6e609f4 | ||
|
|
331d5c7b49 | ||
|
|
edbfa951c8 | ||
|
|
3f828d0d69 | ||
|
|
e6a33ed26b | ||
|
|
59e9ddfe3e | ||
|
|
c27998a881 | ||
|
|
faa6b1e770 | ||
|
|
c8b02a8e28 | ||
|
|
03713c3f7b | ||
|
|
64cab85704 | ||
|
|
957dd4b9ff | ||
|
|
d83f8ee381 | ||
|
|
14e5772b44 | ||
|
|
23ee732078 | ||
|
|
457615a161 | ||
|
|
2ec63ce006 | ||
|
|
7c23220416 | ||
|
|
1aee2e5dfa | ||
|
|
760db35d15 | ||
|
|
af57596559 | ||
|
|
51954d3b6a | ||
|
|
9e485a5997 | ||
|
|
379eb56eb5 | ||
|
|
a483e713ae | ||
|
|
0877d4b4be | ||
|
|
b5a876ffd7 | ||
|
|
5924ab507c | ||
|
|
f4a8cbbea9 | ||
|
|
86ce62a7d6 | ||
|
|
8aace2d2c9 | ||
|
|
815eb8f270 | ||
|
|
c7471fc64b | ||
|
|
f968a493b9 | ||
|
|
5e61f0c61f | ||
|
|
38188a5ccb | ||
|
|
ba88b5be82 | ||
|
|
a41bbb8267 | ||
|
|
2c428aa3dd | ||
|
|
4429b5cb4b | ||
|
|
526594a90d | ||
|
|
04a2e55d24 | ||
|
|
7aff1794c6 | ||
|
|
e8f8f1bd93 | ||
|
|
cba33c1e82 | ||
|
|
a26120a376 | ||
|
|
9982d43d5a | ||
|
|
8a287e7cc2 | ||
|
|
3bf92c3587 | ||
|
|
ce0928ba38 | ||
|
|
25f5ea2457 | ||
|
|
0ba93a8a2b | ||
|
|
3e0c329e53 |
23
CHANGELOG.md
23
CHANGELOG.md
@@ -1,5 +1,25 @@
|
||||
# OpenCore Legacy Patcher changelog
|
||||
|
||||
## 1.1.0
|
||||
- Resolve rendering issues on Intel Broadwell iGPUs
|
||||
- Update non-Metal Binaries for macOS Sonoma:
|
||||
- Resolve unresponsive Weather app
|
||||
- Resolve full screen menubar covering the app toolbar
|
||||
- Resolve unfocused password windows
|
||||
- Resolve USB 1.1 kernel panics on macOS 14.1
|
||||
- Resolve PCIe FaceTime camera support on macOS 14.1
|
||||
- Resolve T1 Security Chip support on macOS 14
|
||||
- Applicable for MacBookPro13,2, MacBookPro13,3, MacBookPro14,2, MacBookPro14,3
|
||||
- Add support for stand alone OpenCore Vaulting without Xcode Command Line Tools (Jazzzny)
|
||||
- Re-allow NVMeFix for macOS 14
|
||||
- Remove `-lilubetaall` argument for machines without AppleALC
|
||||
- Increment Binaries:
|
||||
- PatcherSupportPkg 1.4.2 - release
|
||||
- AirportBrcmFixup 2.1.8 - release
|
||||
- BlueToolFixup 2.6.8 - release
|
||||
- RestrictEvents 1.1.3 - release
|
||||
- AMFIPass 1.4.0 - release
|
||||
|
||||
## 1.0.1
|
||||
- Resolve rendering issues on Intel Ivy Bridge iGPUs
|
||||
- Update non-Metal Binaries for macOS Sonoma:
|
||||
@@ -11,7 +31,7 @@
|
||||
- Add error handling for corrupted patcher settings
|
||||
- Remove CoreImage patch for 3802 GPUs on Ventura
|
||||
- Avoid listing PCIe FaceTime camera patch on pre-Sonoma OSes
|
||||
- Only cometic in Root Patching UI, however removed to avoid confusion
|
||||
- Only cosmetic in Root Patching UI, however it has been removed to avoid confusion
|
||||
|
||||
## 1.0.0
|
||||
- Resolve BCM2046 and BCM2070 support on macOS 13.3 and newer
|
||||
@@ -52,6 +72,7 @@
|
||||
- CPUFriend 1.2.7 - release
|
||||
- BlueToolFixup 2.6.8 - rolling (2305aaa)
|
||||
- CryptexFixup 1.0.2 - release
|
||||
- NVMeFix 1.1.1 - release
|
||||
- PatcherSupportPkg 1.3.2 - release
|
||||
- Build Server Changes:
|
||||
- Upgrade Python backend to 3.11.5
|
||||
|
||||
@@ -100,6 +100,7 @@ To run the project from source, see here: [Build and run from source](./SOURCE.m
|
||||
* Pre-Ivy Bridge Aquantia Ethernet Patch
|
||||
* Non-Metal Photo Booth Patch for Monterey+
|
||||
* GUI and Backend Development
|
||||
* Vaulting implementation
|
||||
* 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
|
||||
|
||||
@@ -13,7 +13,7 @@ class SystemPatchDictionary():
|
||||
|
||||
|
||||
Patchset Schema:
|
||||
Supports 6 types of higher level keys:
|
||||
Supports following types of higher level keys:
|
||||
- OS Support: Supported OSes by patches
|
||||
- Minimum OS Support: Minimum supported OS version
|
||||
- OS Major: Major XNU Kernel version
|
||||
@@ -30,6 +30,9 @@ class SystemPatchDictionary():
|
||||
- Remove: Files to remove
|
||||
- Location:
|
||||
- File (array: [ "File" ])
|
||||
- Remove Non-Root: Files to remove from data partition
|
||||
- Location:
|
||||
- File (array: [ "File" ])
|
||||
- Processes: Additional processes to run
|
||||
- Process (dict: { "Process": "Requires Root" })
|
||||
- Display Name: User-friendly name (string, "" if user-friendly name is not required)
|
||||
@@ -67,6 +70,7 @@ class SystemPatchDictionary():
|
||||
self.macOS_12_4: float = 21.5
|
||||
self.macOS_12_5: float = 21.6
|
||||
self.macOS_13_3: float = 22.4
|
||||
self.macOS_14_1: float = 23.1
|
||||
|
||||
self._generate_sys_patch_dict()
|
||||
|
||||
@@ -999,7 +1003,7 @@ class SystemPatchDictionary():
|
||||
"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",
|
||||
"AppleIntelBDWGraphicsMTLDriver.bundle": "12.5" if self.os_major < os_data.os_data.ventura else "12.5-22",
|
||||
"AppleIntelBDWGraphicsVADriver.bundle": "12.5",
|
||||
"AppleIntelBDWGraphicsVAME.bundle": "12.5",
|
||||
"AppleIntelGraphicsShared.bundle": "12.5",
|
||||
@@ -1264,6 +1268,29 @@ class SystemPatchDictionary():
|
||||
},
|
||||
},
|
||||
},
|
||||
# Injection of UHCI/OHCI causes a panic on 14.1+
|
||||
"Legacy USB 1.1 Extended": {
|
||||
"Display Name": "",
|
||||
"OS Support": {
|
||||
"Minimum OS Support": {
|
||||
"OS Major": os_data.os_data.sonoma,
|
||||
"OS Minor": 1 # macOS 14.1 (XNU 23.1)
|
||||
},
|
||||
"Maximum OS Support": {
|
||||
"OS Major": os_data.os_data.max_os,
|
||||
"OS Minor": 99
|
||||
},
|
||||
},
|
||||
"Install": {
|
||||
"/System/Library/Extensions/IOUSBHostFamily.kext/Contents/PlugIns": {
|
||||
"AppleUSBOHCI.kext": "12.6.2-USB",
|
||||
"AppleUSBOHCIPCI.kext": "12.6.2-USB",
|
||||
"AppleUSBUHCI.kext": "12.6.2-USB",
|
||||
"AppleUSBUHCIPCI.kext": "12.6.2-USB",
|
||||
},
|
||||
},
|
||||
},
|
||||
# With macOS 14.1, daemon won't load if not on root volume
|
||||
"PCIe FaceTime Camera": {
|
||||
"Display Name": "Miscellaneous: PCIe FaceTime Camera",
|
||||
"OS Support": {
|
||||
@@ -1276,14 +1303,58 @@ class SystemPatchDictionary():
|
||||
"OS Minor": 99
|
||||
},
|
||||
},
|
||||
"Install Non-Root": {
|
||||
"/Library/CoreMediaIO/Plug-Ins/DAL": {
|
||||
"Install": {
|
||||
"/System/Library/Frameworks/CoreMediaIO.framework/Versions/A/Resources": {
|
||||
"AppleCamera.plugin": "14.0 Beta 1"
|
||||
},
|
||||
"/Library/LaunchDaemons": {
|
||||
"/System/Library/LaunchDaemons": {
|
||||
"com.apple.cmio.AppleCameraAssistant.plist": "14.0 Beta 1"
|
||||
},
|
||||
},
|
||||
"Remove Non-Root": {
|
||||
"/Library/CoreMediaIO/Plug-Ins/DAL": [
|
||||
"AppleCamera.plugin"
|
||||
],
|
||||
"/Library/LaunchDaemons": [
|
||||
"com.apple.cmio.AppleCameraAssistant.plist"
|
||||
],
|
||||
}
|
||||
},
|
||||
"T1 Security Chip": {
|
||||
"Display Name": "Miscellaneous: T1 Security Chip",
|
||||
"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/Frameworks": {
|
||||
"LocalAuthentication.framework": "13.6" # Required for Password Authentication (SharedUtils.framework)
|
||||
},
|
||||
"/System/Library/PrivateFrameworks": {
|
||||
"EmbeddedOSInstall.framework": "13.6" # Required for biometrickitd
|
||||
},
|
||||
# Required for Apple Pay
|
||||
"/usr/lib": {
|
||||
"libNFC_Comet.dylib": "13.6",
|
||||
"libNFC_HAL.dylib": "13.6",
|
||||
|
||||
"libnfshared.dylib": "13.6",
|
||||
"libnfshared.dylibOld.dylib": "13.6",
|
||||
"libnfstorage.dylib": "13.6",
|
||||
|
||||
"libPN548_API.dylib": "13.6"
|
||||
},
|
||||
"/usr/libexec": {
|
||||
"biometrickitd": "13.6", # Required for Touch ID
|
||||
"nfcd": "13.6", # Required for Apple Pay
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
}
|
||||
|
||||
@@ -149,7 +149,6 @@ module.exports = {
|
||||
sidebarDepth: 1,
|
||||
children: [
|
||||
'ISSUES-HOLD',
|
||||
'TESTED',
|
||||
'TERMS',
|
||||
'HOW',
|
||||
'PATCHEXPLAIN',
|
||||
|
||||
@@ -15,9 +15,9 @@ The below tables can be used to reference issues with a particular model, and se
|
||||
|
||||
::: 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.
|
||||
* **OS X El Capitan 10.11** or later is required to make installers for macOS Ventura and later.
|
||||
|
||||
The patcher is designed to target **macOS Big Sur 11.x to macOS Ventura 13.x**.
|
||||
The patcher is designed to target **macOS Big Sur 11.x to macOS Sonoma 14.x**.
|
||||
* Other versions may work, albeit in a broken state. No support is provided for any version outside of the above.
|
||||
:::
|
||||
|
||||
@@ -32,7 +32,7 @@ The patcher is designed to target **macOS Big Sur 11.x to macOS Ventura 13.x**.
|
||||
| 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 (Retina, 12-inch, 2017) | `MacBook10,1` | - Supported by OpenCore Legacy Patcher |
|
||||
|
||||
### MacBook Air
|
||||
|
||||
@@ -77,12 +77,12 @@ The patcher is designed to target **macOS Big Sur 11.x to macOS Ventura 13.x**.
|
||||
| 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 (13-inch, 2016, 4 Thunderbolt 3 ports) | `MacBookPro13,2` | - [Legacy Metal (macOS 13+)](https://github.com/dortania/OpenCore-Legacy-Patcher/issues/1008)<br>- [T1 Support (macOS 14+)](https://github.com/dortania/OpenCore-Legacy-Patcher/issues/1103) |
|
||||
| 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 (13-inch, 2017, 2 Thunderbolt 3 ports) | `MacBookPro14,1` | - Supported by OpenCore Legacy Patcher |
|
||||
| MacBook Pro (13-inch, 2017, 4 Thunderbolt 3 ports) | `MacBookPro14,2` | - [T1 Support (macOS 14+)](https://github.com/dortania/OpenCore-Legacy-Patcher/issues/1103) |
|
||||
| MacBook Pro (15-inch, 2017) | `MacBookPro14,3` | - [Legacy Metal (macOS 14+)](https://github.com/dortania/OpenCore-Legacy-Patcher/issues/1008)<br>- [T1 Support (macOS 14+)](https://github.com/dortania/OpenCore-Legacy-Patcher/issues/1103) |
|
||||
| MacBook Pro (13-inch, 2018, 4 Thunderbolt 3 ports)<br>MacBook Pro (13-inch, 2019, 4 Thunderbolt 3 ports) | `MacBookPro15,2` | - Supported by Apple |
|
||||
| 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` | ^^ |
|
||||
@@ -122,10 +122,10 @@ The patcher is designed to target **macOS Big Sur 11.x to macOS Ventura 13.x**.
|
||||
| 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 (21.5-inch, 2017) | `iMac18,1` | - Supported by OpenCore Legacy Patcher |
|
||||
| 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 5K, 27-inch, 2019) | `iMac19,1` | - Supported by Apple |
|
||||
| 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` | ^^ |
|
||||
@@ -134,8 +134,8 @@ The patcher is designed to target **macOS Big Sur 11.x to macOS Ventura 13.x**.
|
||||
|
||||
| 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 (Early 2008) | `MacPro3,1` | - [Recommend upgrade to Metal GPU](https://github.com/dortania/OpenCore-Legacy-Patcher/issues/1008)<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](https://github.com/dortania/OpenCore-Legacy-Patcher/issues/1008)<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 |
|
||||
|
||||
@@ -44,6 +44,14 @@ If you're unsure whether you should enable SIP, leave it as-is. Systems where yo
|
||||
|
||||
## Applying Post Install Volume Patches
|
||||
|
||||
:::warning
|
||||
|
||||
If you need to use Migration Assistant to bring over data to your new macOS install, it is **highly recommended** to avoid restoring from inside Setup Assistant and waiting to install root patches until after the transfer is complete. If root patches were automatically installed, you can use the options available in the OCLP app to remove them.
|
||||
|
||||
Using Migration Assistant while patches are installed can lead to an unbootable system, requiring a reinstall of macOS.
|
||||
|
||||
:::
|
||||
|
||||
Post Install Volume Patches, sometimes also called root patches, are patches that have to be installed to disk for some older Macs to gain back functionality.
|
||||
|
||||
OCLP will automatically root patch your system during a first time install **if the USB install media was created within OCLP.** Users will also be prompted to install these patches after macOS updates or whenever patches are not detected on the system. We recommend rebuilding OpenCore with the latest version of OCLP to take advantage of these new features.
|
||||
@@ -60,11 +68,12 @@ Users can also see whether applicable patches have been installed, date and vers
|
||||
|
||||
If you're using OCLP v0.4.3 or earlier, or need to run the patcher manually, you can do so with the app. There is no harm in trying to run the Patcher, as without compatible hardware, nothing will be done. You can see below on whether your hardware needs root volume patching or not.
|
||||
|
||||
There is also an option to remove root patches, which may be required in some situations, such as switching GPUs in Mac Pros or using Migration Assistant.
|
||||
|
||||
| Listing Patches | Patching Finished |
|
||||
| :--- | :--- |
|
||||
|  |  |
|
||||
|
||||
|
||||
:::warning
|
||||
|
||||
With macOS Ventura and Macs with AMD Legacy GCN GPUs (ie. Metal), Root Patching requires a network connection to grab Apple's Kernel Debug Kit to start root patching. If your system is unable to connect to the internet, you can manually download a KDK from Apple's site:
|
||||
|
||||
@@ -29,11 +29,18 @@ OpenCore Legacy Patcher v1.0.0 will support Sonoma for all models normally suppo
|
||||
|
||||
## Issues
|
||||
|
||||
* [T1 Security chip](t1-security-chip)
|
||||
* [Bluetooth](#bluetooth)
|
||||
* [T1 Security chip](#t1-security-chip)
|
||||
* [USB 1.1 (OHCI/UHCI) Support](#usb-11-ohciuhci-support)
|
||||
* [Graphics support and issues](#graphics-support-and-issues)
|
||||
|
||||
|
||||
### Bluetooth
|
||||
|
||||
Sometimes Bluetooth may not work after boot on pre-2012 models. Running NVRAM reset can alleviate it.
|
||||
|
||||
Dual boots may also bring the issue back even after the reset.
|
||||
|
||||
### T1 Security chip
|
||||
|
||||
Sonoma has removed support for T1 chips found in most 2016 and 2017 Macs. Therefore on these systems, the following will not function:
|
||||
|
||||
144
docs/TESTED.md
144
docs/TESTED.md
@@ -1,144 +0,0 @@
|
||||
# Tested Models on OpenCore Legacy Patcher
|
||||
|
||||
To aid users in troubleshooting, we've compiled a list of users who've reported success with OpenCore Legacy Patcher as well as the version used. This should aid users in verifying whether issues with the patcher are regression-related with newer versions.
|
||||
|
||||
::: details MacBook
|
||||
|
||||
| SMBIOS | Tested | Tester | Model | Version | Comment |
|
||||
| :--- | :--- | :--- | :--- | :--- | :--- |
|
||||
| MacBook4,1 | <span style="color:#30BCD5"> YES </span> | Mami | Stock | Unknown | Couldn't install due to broken USB support |
|
||||
| MacBook5,1 | ^^ | air.man | ^^ | 0.0.19 | N/A |
|
||||
| MacBook5,2 | ^^ | Finder352 | ^^ | ^^ | ^^ |
|
||||
| MacBook6,1 | ^^ | Finder352 | ^^ | ^^ | ^^ |
|
||||
| MacBook7,1 | ^^ | MykolaG | ^^ | ^^ | ^^ |
|
||||
| ^^ | ^^ | Jazzzny | ^^ | ^^ | ^^ |
|
||||
| ^^ | ^^ | AlexSakha67 | ^^ | 0.0.20 | ^^ |
|
||||
| MacBook8,1 | <span style="color:red"> NO </span> | N/A | N/A | N/A | ^^ |
|
||||
|
||||
:::
|
||||
|
||||
::: details MacBook Air
|
||||
|
||||
| SMBIOS | Tested | Tester | Model | Version | Comment |
|
||||
| :--- | :--- | :--- | :--- | :--- | :--- |
|
||||
| MacBookAir2,1 | <span style="color:#30BCD5"> YES </span> | Bruno | Stock | 0.4.5 | Slow to the point of being unusable. |
|
||||
| MacBookAir3,1 | ^^ | uvesten | Stock | 0.3.3 | N/A |
|
||||
| MacBookAir3,2 | ^^ | houser42 | ^^ | Unknown | ^^ |
|
||||
| MacBookAir4,1 | <span style="color:red"> NO </span> | N/A | N/A | N/A | ^^ |
|
||||
| MacBookAir4,2 | <span style="color:#30BCD5"> YES </span> | bdwilson1907 | Stock | 0.3.1 | Intermittent keyboard backlight |
|
||||
| MacBookAir5,1 | ^^ | Ausdauersportler | ^^ | 0.0.9 | N/A |
|
||||
| ^^ | ^^ | webg3 | ^^ | Unknown | ^^ |
|
||||
| MacBookAir5,2 | ^^ | Bab-droid | ^^ | 0.0.19 | ^^ |
|
||||
| ^^ | ^^ | K-Hobert | ^^ | Unknown | ^^ |
|
||||
| ^^ | ^^ | cboukouv | ^^ | 0.0.21 | ^^ |
|
||||
| MacBookAir6,1 | <span style="color:red"> NO </span> | N/A | N/A | N/A | N/A |
|
||||
| MacBookAir6,2 | ^^ | ^^ | ^^ | ^^ | ^^ |
|
||||
|
||||
:::
|
||||
|
||||
::: details MacBook Pro
|
||||
|
||||
| SMBIOS | Tested | Tester | Model | Version | Comment |
|
||||
| :--- | :--- | :--- | :--- | :--- | :--- |
|
||||
| MacBookPro4,1 | <span style="color:#30BCD5"> YES </span> | cboukouv | Stock | 0.0.19 | N/A |
|
||||
| MacBookPro5,1 | ^^ | GURU_Jasho#5736 | ^^ | 0.0.21 | ^^ |
|
||||
| MacBookPro5,2 | ^^ | hvds | ^^ | ^^ | ^^ |
|
||||
| MacBookPro5,3 | ^^ | kommtzeitkonrad | ^^ | 0.0.22 | ^^ |
|
||||
| MacBookPro5,4 | <span style="color:red"> NO </span> | N/A | N/A | N/A | ^^ |
|
||||
| MacBookPro5,5 | <span style="color:#30BCD5"> YES </span> | ASentientHedgehog | Stock | - | ^^ |
|
||||
| ^^ | ^^ | ParaDoX1994 | Stock | 0.4.5 | Camera/Bluetooth not working (connector broken) |
|
||||
| MacBookPro6,1 | <span style="color:red"> NO </span> | N/A | N/A | N/A | N/A |
|
||||
| MacBookPro6,2 | <span style="color:#30BCD5"> YES </span> | Jakeluke | Stock | Unknown | dGPU broken |
|
||||
| MacBookPro7,1 | ^^ | fussel132 | ^^ | 0.1.2 | N/A
|
||||
| ^^ | ^^ | casey1234 | Upgraded | 0.3.3 | Upgraded SSD |
|
||||
| MacBookPro8,1 | <span style="color:#30BCD5"> YES </span> | AvaQueen | Stock | 0.0.19 | N/A |
|
||||
| MacBookPro8,1 | ^^ | charly-black | Upgraded | 0.3.1 | Upgraded BCM94331PCIEBT4CAX |
|
||||
| MacBookPro8,2 | ^^ | air.man | Stock | 0.0.22 | dGPU disabled |
|
||||
| ^^ | ^^ | cboukouv | ^^ | 0.0.19 | N/A |
|
||||
| MacBookPro8,3 | ^^ | lulujyc | ^^ | 0.1.4 | dGPU disabled |
|
||||
| MacBookPro9,1 | <span style="color:#30BCD5"> YES </span>| jbdamiano | Stock | 0.0.19 | N/A |
|
||||
| ^^ | ^^ | dennes544 | ^^ | ^^ | ^^ |
|
||||
| ^^ | ^^ | cgrazy | ^^ | ^^ | ^^ |
|
||||
| ^^ | ^^ | LIPA85 | ^^ | ^^ | ^^ |
|
||||
| MacBookPro9,2 | <span style="color:#30BCD5"> YES </span> | alexx17xx | ^^ | ^^ | ^^ |
|
||||
| ^^ | ^^ | Arvxistanx | ^^ | ^^ | ^^ |
|
||||
| ^^ | ^^ | CyberDroid1 | ^^ | 0.0.16 | ^^ |
|
||||
| ^^ | ^^ | woefi | Upgraded | 0.0.13 | Upgraded BCM94331CAX |
|
||||
| ^^ | ^^ | whgmkeller | Stock | 0.0.11 | N/A |
|
||||
| ^^ | ^^ | vinaypundith | Unknown | 0.0.7 | ^^ |
|
||||
| ^^ | ^^ | casey1234 | Upgraded | 0.3.3 | Upgraded RAM and SSD |
|
||||
| ^^ | ^^ | crystall1nedev | Upgraded | 0.4.4 | ^^ |
|
||||
| MacBookPro10,1 | <span style="color:#30BCD5"> YES </span> | traviswparker | Stock | 0.0.14 | N/A |
|
||||
| ^^ | ^^ | il-rollino | Upgraded | 0.0.21 | Upgraded BCM94360CSAX |
|
||||
| MacBookPro10,2 | ^^ | akidone | ^^ | 0.3.0 | ^^ |
|
||||
| MacBookPro11,1 | <span style="color:#30BCD5"> YES </span> | ParaDoX1994 | Stock | 0.4.4 | N/A |
|
||||
| MacBookPro11,2 | ^^ | casey1234 | ^^ | 0.3.3 | ^^ |
|
||||
| MacBookPro11,3 | <span style="color:red"> NO </span> | N/A | N/A | N/A | N/A |
|
||||
:::
|
||||
|
||||
::: details Mac mini
|
||||
|
||||
| SMBIOS | Tested | Tester | Model | Version | Comment |
|
||||
| :--- | :--- | :--- | :--- | :--- | :--- |
|
||||
| Macmini3,1 | <span style="color:#30BCD5"> YES </span> | ASentientHedgehog | Stock | N/A | N/A |
|
||||
| Macmini4,1 | <span style="color:#30BCD5"> YES </span> | Towster15#6369 | ^^ | 0.4.4 | Does not have internal SATA cable, booted and installed to SSD over USB 2.0 instead |
|
||||
| ^^ | ^^ | MykolaG | ^^ | 0.4.5 | SD card reader possibly broken. |
|
||||
| Macmini5,1 | <span style="color:#30BCD5"> YES </span> | MykolaG | ^^ | 0.4.5 | N/A |
|
||||
| Macmini5,2 | ^^ | charly-black | ^^ | 0.3.1 | ^^ |
|
||||
| ^^ | ^^ | MykolaG | ^^ | 0.4.5 | SD card reader possibly broken. |
|
||||
| Macmini5,3 | <span style="color:red"> NO </span> | N/A | N/A | N/A | N/A |
|
||||
| Macmini6,1 | <span style="color:#30BCD5"> YES </span> | cicofz | Stock | 0.0.21 | ^^ |
|
||||
| ^^ | ^^ | Stig124 | ^^ | 0.0.19 | ^^ |
|
||||
| ^^ | ^^ | mwidjaya | ^^ |0.0.18 | ^^ |
|
||||
| ^^| ^^ | MykolaG | ^^ | 0.4.5 | ^^ |
|
||||
| Macmini6,2 | ^^ | Shelbs | ^^ | 0.0.16 | ^^ |
|
||||
| Macmini7,1 | <span style="color:#30BCD5"> YES </span> | MykolaG | ^^ | 0.4.5 | ^^ |
|
||||
| Macmini8,1 | ^^ | ^^ | ^^ | 0.4.5 | ^^ |
|
||||
:::
|
||||
|
||||
::: details iMac
|
||||
|
||||
| SMBIOS | Tested | Tester | Model | Version | Comment |
|
||||
| :--- | :--- | :--- | :--- | :--- | :--- |
|
||||
| iMac7,1 | <span style="color:#30BCD5"> YES </span> | lulujyc | Upgraded | 0.3.1 | Upgraded with BCM94352HMB <br><br> The USB 1.1 controller is unstable on Big Sur+, using USB hubs (forcing USB 2.0) can fix unrecognized keyboard/ mouse. |
|
||||
| iMac8,1 | <span style="color:#30BCD5"> YES </span> | EduCovas | Stock | 0.0.21 | N/A |
|
||||
| iMac9,1 | <span style="color:#30BCD5"> YES </span> | Allanrfox | ^^ | ^^ | ^^ |
|
||||
| ^^ | ^^ | Jakeluke | ^^ | ^^ | ^^ |
|
||||
| iMac10,1 | <span style="color:#30BCD5"> YES </span> | Ausdauersportler | Upgraded | Unknown | Upgraded with WX4150 |
|
||||
| iMac11,1 | ^^ | internetzel | ^^ | ^^ | Upgraded RX580 mobile |
|
||||
| iMac11,2 | ^^ | MykolaG | Stock | 0.0.21 | N/A |
|
||||
| ^^ | ^^ | iMac-iPad | ^^ | ^^ | ^^ |
|
||||
| ^^ | ^^ | vinaypundith | Unknown | 0.0.19 | ^^ |
|
||||
| iMac11,3 | ^^ | Ausdauersportler | Upgraded | 0.0.21 | Upgraded with Polaris GPU and BCM943602CDP |
|
||||
| iMac12,1 | <span style="color:#30BCD5"> YES </span> | shnockdu | ^^ | ^^ | Upgraded with Kepler GPU |
|
||||
| ^^ | ^^ | StephN999 | ^^ | ^^ | Upgraded with WX4150 GPU and BCM94360CD |
|
||||
| iMac12,2 | ^^ | Ausdauersportler | ^^ | ^^ | Upgraded with Polaris GPU and BCM943602CDP |
|
||||
| iMac13,1 | <span style="color:#30BCD5"> YES </span> | alexx17xx | Stock | 0.0.19 | N/A |
|
||||
| iMac13,2 | ^^ | Alain13 | ^^ | ^^ | ^^ |
|
||||
| ^^ | ^^ | algernonpule | ^^ | ^^ | ^^ |
|
||||
| iMac13,3 | <span style="color:red"> NO </span> | N/A | N/A | N/A | ^^ |
|
||||
| iMac14,1 | <span style="color:#30BCD5"> YES </span> | woefi | Upgraded | 0.0.21 | Upgraded NVMe |
|
||||
| ^^ | ^^ | mikeboss | Stock | 0.0.19 | N/A |
|
||||
| iMac14,2 | ^^ | OKonnel | ^^ | 0.0.22 | ^^ |
|
||||
| ^^ | ^^ | mibaxx | ^^ | 0.0.21 | ^^ |
|
||||
| iMac14,3 | ^^ | StupeFied | ^^ | 0.4.5 | ^^ |
|
||||
| iMac15,1 | <span style="color:#30BCD5"> YES </span> | JakubMazur | Upgraded | 0.4.1 | Upgraded RAM, Radeon R9 M295X and Quad-Core Intel Core i7 |
|
||||
:::
|
||||
|
||||
::: details Mac Pro
|
||||
|
||||
| SMBIOS | Tested | Tester | Model | Version | Comment |
|
||||
| :--- | :--- | :--- | :--- | :--- | :--- |
|
||||
| MacPro3,1 | <span style="color:#30BCD5"> YES </span> | MykolaG | Upgraded | 0.1.6 | Upgraded RX 470 and BCM94360CD.<br/>Stock Bluetooth card removed. |
|
||||
| ^^ | ^^ | christiann | ^^ | 0.0.21 | Upgraded RX 560 and BCM94322.<br/>Stock Bluetooth card removed. |
|
||||
| ^^ | ^^ | gw463 | ^^ | 0.0.22 | Upgraded GTX 680 and BCM94360 |
|
||||
| ^^ | ^^ | AlexSakha67 | ^^ | 0.0.20 | Upgraded R9 280 |
|
||||
| ^^ | ^^ | nekton1 | ^^ | ^^ | Upgraded GTX 680 |
|
||||
| ^^ | ^^ | Pri-est | Unknown | 0.0.9 | N/A |
|
||||
| ^^ | ^^ | vinaypundith | Upgraded | 0.0.6 | Upgraded with GTX 680 and BCM94360CD. |
|
||||
| ^^ | ^^ | ParaDoX1994 | ^^ | 0.4.4 | Upgraded with HD 7950.<br/>Stock Bluetooth card removed. |
|
||||
| MacPro4,1 | <span style="color:#30BCD5"> YES </span> | vinaypundith | Unknown | 0.0.9 | N/A |
|
||||
| MacPro5,1 | ^^ | woefi | Upgraded | 0.0.21 | Upgraded with RX 580. |
|
||||
| ^^ | ^^ | Mabrouk Oscar | Unknown | ^^ | N/A |
|
||||
| ^^ | ^^ | astuffedtiger | Flashed | 0.0.18 | MacPro4,1 flashed to 5,1 |
|
||||
:::
|
||||
@@ -56,7 +56,7 @@ With OpenCore Legacy Patcher, we rely on Apple Secure Boot to ensure OS updates
|
||||
|
||||
Boot into recovery by pressing space when your disk is selected on the OCLP bootpicker (if you have it hidden, hold ESC while starting up)
|
||||
|
||||
* **Note:** If your disk name is something else than "Macintosh HD", make sure to change the path accordingly.
|
||||
* **Note:** If your disk name is something else than "Macintosh HD", make sure to change the path accordingly. You can figure out your disk name by typing `ls /Volumes`.
|
||||
|
||||
Go into terminal and first mount the disk by typing
|
||||
```sh
|
||||
|
||||
@@ -15,4 +15,4 @@ To remove OpenCore:
|
||||
|
||||
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.
|
||||
* This does not apply 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.
|
||||
|
||||
@@ -204,9 +204,41 @@ Before we continue, please keep in mind that SMBIOS Spoofing is an advanced feat
|
||||
|
||||
Ventura has dropped more models which includes all of the blacklisted Macs in question, making the procedure slightly different. It is important to follow the guide for the version you're on, failing to do so is likely to cause boot issues.
|
||||
|
||||
::: details macOS Sonoma
|
||||
|
||||
Firstly run OpenCore Legacy Patcher.
|
||||
|
||||
Then go to **Settings** and **SMBIOS** tab, set SMBIOS Spoof Level to **Moderate**. Set SMBIOS Spoof Model **one listed next to your native model in the table for spoofed models below.**
|
||||
|
||||
Notice that "Allow native models" and "Allow Native Spoofs" **are NOT** enabled unlike on Monterey, this is on purpose. They are no longer relevant on Sonoma and enabling them will cause boot issues.
|
||||
|
||||
| Main Settings view | SMBIOS settings |
|
||||
| :--- | :--- |
|
||||
|  |  |
|
||||
|
||||
|
||||
|
||||
::: details Table for spoofed models (click to expand)
|
||||
|
||||
Spoofing to any model with native Sonoma support should work, but these are the earliest Macs natively supported by Sonoma and thus chosen for the sake of simplicity.
|
||||
|
||||
**Reminder:** Macs that are not listed on this table work without spoofing, including systems that do not natively support Ventura as long as the other requirements are met, since they aren't blacklisted.
|
||||
|
||||
|
||||
| Mac by name | Native SMBIOS | Spoof SMBIOS |
|
||||
|-------------|---------------|--------------|
|
||||
| MacBook Air Early 2015 11" / 13" | MacBookAir7,x | MacBookAir8,1 |
|
||||
| MacBook Pro Early 2015 13" | MacBookPro12,x | MacBookPro15,2 |
|
||||
| MacBook Pro Mid 2015 15" | MacBookPro11,4 / 11,5 | MacBookPro15,2 |
|
||||
| iMac Late 2015 21" | iMac16,x | iMac19,2 |
|
||||
| Mac mini Late 2014 | Macmini7,x | MacMini8,1 |
|
||||
| Mac Pro Late 2013 | MacPro6,x | MacPro7,1 |
|
||||
|
||||
:::
|
||||
|
||||
::: details macOS Ventura
|
||||
|
||||
Firstly run the GUI version of OpenCore Legacy Patcher.
|
||||
Firstly run OpenCore Legacy Patcher.
|
||||
|
||||
Then go to **Settings** and **SMBIOS** tab, set SMBIOS Spoof Level to **Moderate**. Set SMBIOS Spoof Model **one listed next to your native model in the table for spoofed models below.**
|
||||
|
||||
@@ -225,20 +257,20 @@ Spoofing to any model with native Ventura support should work, but these are the
|
||||
**Reminder:** Macs that are not listed on this table work without spoofing, including systems that do not natively support Ventura as long as the other requirements are met, since they aren't blacklisted.
|
||||
|
||||
|
||||
| Mac by name | Native SMBIOS | Spoof SMBIOS | Tested | Tested by |
|
||||
|-------------|---------------|--------------|--------|-----------|
|
||||
| MacBook Air Early 2015 11" / 13" | MacBookAir7,x | MacBookAir8,1 | <span style="color:red"> NO </span> | N/A |
|
||||
| MacBook Pro Early 2015 13" | MacBookPro12,x | MacBookPro14,1 | ^^ | ^^ |
|
||||
| MacBook Pro Mid 2015 15" | MacBookPro11,4 / 11,5 | MacBookPro14,3 | ^^ | ^^
|
||||
| iMac Late 2015 21" | iMac16,x | iMac18,2 | ^^ | ^^
|
||||
| Mac mini Late 2014 | Macmini7,x | MacMini8,1 | <span style="color:red"> NO </span> | N/A |
|
||||
| Mac Pro Late 2013 | MacPro6,x | MacPro7,1 | <span style="color:red"> NO </span> | N/A |
|
||||
| Mac by name | Native SMBIOS | Spoof SMBIOS |
|
||||
|-------------|---------------|--------------|
|
||||
| MacBook Air Early 2015 11" / 13" | MacBookAir7,x | MacBookAir8,1 |
|
||||
| MacBook Pro Early 2015 13" | MacBookPro12,x | MacBookPro14,1 |
|
||||
| MacBook Pro Mid 2015 15" | MacBookPro11,4 / 11,5 | MacBookPro14,3 |
|
||||
| iMac Late 2015 21" | iMac16,x | iMac18,2 |
|
||||
| Mac mini Late 2014 | Macmini7,x | MacMini8,1 |
|
||||
| Mac Pro Late 2013 | MacPro6,x | MacPro7,1 |
|
||||
|
||||
:::
|
||||
|
||||
::: details macOS Monterey
|
||||
|
||||
Firstly, run the GUI version of OpenCore Legacy Patcher. Secondly, go to **Settings** then the **App** tab and tick **Allow native models**.
|
||||
Firstly, run OpenCore Legacy Patcher. Secondly, go to **Settings** then the **App** tab and tick **Allow native models**.
|
||||
|
||||
[](../images/OCLP-App-Allow-Native-Models.png)
|
||||
|
||||
@@ -257,14 +289,14 @@ Any model after the list of officially blacklisted Macs should be supported, but
|
||||
**Reminder:** Macs that are not listed on this table work without spoofing, including systems that do not natively support Monterey, as long as the other requirements are met, since they aren't blacklisted.
|
||||
|
||||
|
||||
| Mac by name | Native SMBIOS | Spoof SMBIOS | Tested | Tested by |
|
||||
|-------------|---------------|--------------|--------|-----------|
|
||||
| MacBook Air Early 2015 11" / 13" | MacBookAir7,x | MacBookAir8,1 | <span style="color:#30BCD5"> YES </span> | Hzlph |
|
||||
| MacBook Pro Early 2015 13" | MacBookPro12,x | MacBookPro13,1 | ^^ | ^^ |
|
||||
| MacBook Pro Mid 2015 15" | MacBookPro11,4 / 11,5 | MacBookPro13,3 | ^^ | ^^
|
||||
| iMac Late 2015 21" | iMac16,x | iMac18,2 | ^^ | ^^
|
||||
| Mac mini Late 2014 | Macmini7,x | MacMini8,1 | <span style="color:red"> NO </span> | N/A |
|
||||
| Mac Pro Late 2013 | MacPro6,x | MacPro7,1 | <span style="color:#30BCD5"> YES </span> | Crystall1nedev |
|
||||
| Mac by name | Native SMBIOS | Spoof SMBIOS |
|
||||
|-------------|---------------|--------------|
|
||||
| MacBook Air Early 2015 11" / 13" | MacBookAir7,x | MacBookAir8,1 |
|
||||
| MacBook Pro Early 2015 13" | MacBookPro12,x | MacBookPro13,1 |
|
||||
| MacBook Pro Mid 2015 15" | MacBookPro11,4 / 11,5 | MacBookPro13,3 |
|
||||
| iMac Late 2015 21" | iMac16,x | iMac18,2 |
|
||||
| Mac mini Late 2014 | Macmini7,x | MacMini8,1 |
|
||||
| Mac Pro Late 2013 | MacPro6,x | MacPro7,1 |
|
||||
|
||||
:::
|
||||
|
||||
|
||||
@@ -5,21 +5,20 @@ Many older Macs do not "officially" support UEFI Windows installations, leading
|
||||
|
||||
## Minimum Requirements
|
||||
|
||||
This guide will focus on the installation of Windows 10 without using Boot Camp Assistant. Windows 11 should also work, but its quirks will not be covered.
|
||||
This guide will focus on the installation of modern Windows (10/11) without using Boot Camp Assistant.
|
||||
|
||||
* Due to hardware and firmware limitations, UEFI Windows installations are only recommended on the following machines:
|
||||
|
||||
* 2015 MacBook or newer (MacBook8,x+)
|
||||
* 2011 MacBook Air or newer (MacBookAir4,x+)
|
||||
* 2011 MacBook Pro or newer (MacBookPro8,x+)
|
||||
* 2011 Mac mini or newer (Macmini5,x+)
|
||||
* 2009[^1] Mac Pro or newer (MacPro4,1+), upgraded GPU is preferred
|
||||
* 2010 iMac or newer (iMac11,x+), upgraded GPU is preferred
|
||||
* 2009[^2] Xserve (Xserve3,1), upgraded GPU is preferred
|
||||
* 2015 MacBook or newer (`MacBook8,x`+)
|
||||
* 2011 MacBook Air or newer (`MacBookAir4,x`+)
|
||||
* 2011 MacBook Pro or newer (`MacBookPro8,x`+)
|
||||
* 2011 Mac mini or newer (`Macmini5,x`+)
|
||||
* 2009* Mac Pro or newer (`MacPro4,1`+), upgraded GPU is preferred
|
||||
* 2010 iMac or newer (`iMac11,x`+), upgraded GPU is preferred
|
||||
* 2009* Xserve (`Xserve3,1`), upgraded GPU is preferred
|
||||
|
||||
|
||||
[^1]: MacPro4,1 and MacPro5,1 systems experience issues with the Windows installer, follow the DISM installation section for instructions.
|
||||
[^2]: Theoretically supported, not tested. Follow DISM installation section
|
||||
*`MacPro4,1`, `MacPro5,1`, and `Xserve3,1` systems experience issues with the Windows installer, follow the DISM installation section for instructions.
|
||||
|
||||
If your machine is not listed, UEFI Windows will likely still install, but you may face stability/driver issues.
|
||||
|
||||
@@ -87,18 +86,26 @@ The `rsync` command will take some time, so get some coffee and sit back. Once f
|
||||
|
||||
## Installation Process
|
||||
|
||||
Once you reboot your machine, you should see a new boot option in the OCLP Bootpicker labelled as "EFI Boot". It may or may not have the Boot Camp icon.
|
||||
Once you reboot your machine, you should see a new boot option in the OCLP Bootpicker labelled as "EFI Boot" or "Windows". It may or may not have the Boot Camp icon.
|
||||
|
||||
:::warning
|
||||
|
||||
If you aren't booted into OCLP, you may see two boot options labelled "Windows" and "EFI Boot". Do not choose either of the options and boot into OCLP to continue.
|
||||
If you aren't booted into OCLP, you may see **two** boot options labelled "Windows" and "EFI Boot". Do not choose either of the options and boot into OCLP to continue.
|
||||
|
||||
:::
|
||||
|
||||
|
||||
|
||||
### Installation: Microsoft Method
|
||||
|
||||
Once booted into the Windows installer, proceed as you normally would on any Windows computer. If you see an error message containing “Windows could not prepare the computer to boot into the next phase of installation”, please follow the next portion of this guide (DISM Installation).
|
||||
|
||||
::: details Installing Windows 11
|
||||
|
||||
If you are installing Windows 11, you will need to [modify the Windows Setup](https://www.bleepingcomputer.com/news/microsoft/how-to-bypass-the-windows-11-tpm-20-requirement/) to allow installation on unsupported machines.
|
||||
|
||||
:::
|
||||
|
||||
### Installation: DISM Deployment Method
|
||||
|
||||
Once booted into the Windows installer, proceed as you normally would until you reach the "Where do you want to install Windows" disk formatting section.
|
||||
@@ -132,7 +139,7 @@ Once `dism` finishes its thing, run `bcdboot E:\Windows`, substituting "E" for t
|
||||
|
||||

|
||||
|
||||
Windows is now installed. It should be recognized as "EFI Boot" with a Boot Camp icon in the OCLP Bootpicker.
|
||||
Windows is now installed. It should be recognized as "EFI Boot" or "Windows" with a Boot Camp icon in the OCLP Bootpicker.
|
||||
|
||||
:::warning
|
||||
|
||||
@@ -221,4 +228,8 @@ You can also open `Properties` on the file to change the compatibility to `Previ
|
||||
|
||||
### iMac12,x Bluescreen after driver installation
|
||||
|
||||
Currently Intel's iGPU drivers for the HD 3000 series do not support UEFI booting in Windows. The recommended solution is to simply disable the iGPU: [iMac 12,1 Windows 10 Boot Loop – Fix Intel Graphics issue](https://zzq.org/?p=39)
|
||||
Intel's iGPU drivers for the HD 3000 series do not support UEFI booting in Windows. The recommended solution is to simply disable the iGPU: [iMac 12,1 Windows 10 Boot Loop – Fix Intel Graphics issue](https://zzq.org/?p=39)
|
||||
|
||||
### NVIDIA Tesla Black Screen after driver installation
|
||||
|
||||
The NVIDIA Tesla GPUs found in 2008-2010 Macs do not support UEFI booting in Windows. You cannot use UEFI Windows without low-level patching on these machines.
|
||||
@@ -887,7 +887,7 @@
|
||||
<key>Enabled</key>
|
||||
<false/>
|
||||
<key>MaxKernel</key>
|
||||
<string>22.99.99</string>
|
||||
<string></string>
|
||||
<key>MinKernel</key>
|
||||
<string>18.0.0</string>
|
||||
<key>BundlePath</key>
|
||||
@@ -1377,7 +1377,7 @@
|
||||
<key>ExecutablePath</key>
|
||||
<string>Contents/MacOS/AppleUSBOHCI</string>
|
||||
<key>MaxKernel</key>
|
||||
<string></string>
|
||||
<string>23.0.0</string>
|
||||
<key>MinKernel</key>
|
||||
<string>22.0.0</string>
|
||||
<key>PlistPath</key>
|
||||
@@ -1395,7 +1395,7 @@
|
||||
<key>ExecutablePath</key>
|
||||
<string>Contents/MacOS/AppleUSBOHCIPCI</string>
|
||||
<key>MaxKernel</key>
|
||||
<string></string>
|
||||
<string>23.0.0</string>
|
||||
<key>MinKernel</key>
|
||||
<string>22.0.0</string>
|
||||
<key>PlistPath</key>
|
||||
@@ -1413,7 +1413,7 @@
|
||||
<key>ExecutablePath</key>
|
||||
<string>Contents/MacOS/AppleUSBUHCI</string>
|
||||
<key>MaxKernel</key>
|
||||
<string></string>
|
||||
<string>23.0.0</string>
|
||||
<key>MinKernel</key>
|
||||
<string>22.0.0</string>
|
||||
<key>PlistPath</key>
|
||||
@@ -1431,7 +1431,7 @@
|
||||
<key>ExecutablePath</key>
|
||||
<string>Contents/MacOS/AppleUSBUHCIPCI</string>
|
||||
<key>MaxKernel</key>
|
||||
<string></string>
|
||||
<string>23.0.0</string>
|
||||
<key>MinKernel</key>
|
||||
<string>22.0.0</string>
|
||||
<key>PlistPath</key>
|
||||
@@ -1707,6 +1707,24 @@
|
||||
<key>PlistPath</key>
|
||||
<string>Contents/Info.plist</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>Arch</key>
|
||||
<string>x86_64</string>
|
||||
<key>Comment</key>
|
||||
<string>corecrypto - T1</string>
|
||||
<key>Enabled</key>
|
||||
<false/>
|
||||
<key>MaxKernel</key>
|
||||
<string></string>
|
||||
<key>MinKernel</key>
|
||||
<string>23.0.0</string>
|
||||
<key>BundlePath</key>
|
||||
<string>corecrypto_T1.kext</string>
|
||||
<key>ExecutablePath</key>
|
||||
<string>Contents/MacOS/corecrypto_T1</string>
|
||||
<key>PlistPath</key>
|
||||
<string>Contents/Info.plist</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>Arch</key>
|
||||
<string>x86_64</string>
|
||||
|
||||
BIN
payloads/Kexts/Acidanthera/AMFIPass-v1.4.0-RELEASE.zip
Normal file
BIN
payloads/Kexts/Acidanthera/AMFIPass-v1.4.0-RELEASE.zip
Normal file
Binary file not shown.
Binary file not shown.
Binary file not shown.
BIN
payloads/Kexts/Acidanthera/AirportBrcmFixup-v2.1.8-DEBUG.zip
Normal file
BIN
payloads/Kexts/Acidanthera/AirportBrcmFixup-v2.1.8-DEBUG.zip
Normal file
Binary file not shown.
BIN
payloads/Kexts/Acidanthera/AirportBrcmFixup-v2.1.8-RELEASE.zip
Normal file
BIN
payloads/Kexts/Acidanthera/AirportBrcmFixup-v2.1.8-RELEASE.zip
Normal file
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
BIN
payloads/Kexts/Misc/AppleKeyStore-v1.1.0.zip
Normal file
BIN
payloads/Kexts/Misc/AppleKeyStore-v1.1.0.zip
Normal file
Binary file not shown.
Binary file not shown.
BIN
payloads/Kexts/Misc/AppleSSE-v1.1.0.zip
Normal file
BIN
payloads/Kexts/Misc/AppleSSE-v1.1.0.zip
Normal file
Binary file not shown.
BIN
payloads/Kexts/Misc/corecrypto_T1-v1.0.0.zip
Normal file
BIN
payloads/Kexts/Misc/corecrypto_T1-v1.0.0.zip
Normal file
Binary file not shown.
Binary file not shown.
@@ -4,8 +4,10 @@
|
||||
#
|
||||
#
|
||||
# Created by Rodion Shingarev on 13.04.19.
|
||||
# Modified by Jazzzny for OpenCore Legacy Patcher on 06.10.23.
|
||||
#
|
||||
OCPath="$1"
|
||||
UtilsPath="$PWD"
|
||||
|
||||
if [ "${OCPath}" = "" ]; then
|
||||
echo "Usage ./create_vault.sh path/to/EFI/OC"
|
||||
@@ -17,54 +19,75 @@ if [ ! -d "${OCPath}" ]; then
|
||||
exit 1
|
||||
fi
|
||||
|
||||
if [ ! -x /usr/bin/find ] || [ ! -x /bin/rm ] || [ ! -x /usr/bin/sed ] || [ ! -x /usr/bin/xxd ]; then
|
||||
if [ ! -x /usr/bin/env ] || [ ! -x /usr/bin/find ] || [ ! -x /bin/rm ] || [ ! -x /usr/bin/sed ] || [ ! -x /usr/bin/awk ] || [ ! -x /usr/bin/sort ] || [ ! -x /usr/bin/xxd ]; then
|
||||
echo "Unix environment is broken!"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
if [ ! -x /usr/libexec/PlistBuddy ]; then
|
||||
echo "PlistBuddy is missing!"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
if [ ! -x /usr/bin/shasum ]; then
|
||||
echo "shasum is missing!"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
abort() {
|
||||
/bin/rm -rf vault.plist vault.sig /tmp/vault_hash
|
||||
echo "Fatal error: ${1}!"
|
||||
exit 1
|
||||
}
|
||||
|
||||
echo "Chose ${OCPath} for hashing..."
|
||||
# plist output functions so we don't need PlistBuddy
|
||||
write_header() {
|
||||
cat <<EOF > "$1"
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
|
||||
<plist version="1.0">
|
||||
<dict>
|
||||
<key>Files</key>
|
||||
<dict>
|
||||
EOF
|
||||
}
|
||||
|
||||
write_file_name_and_hash() {
|
||||
{
|
||||
echo -e "\t\t<key>${2}</key>"
|
||||
echo -e "\t\t<data>"
|
||||
echo -e -n "\t\t"
|
||||
cat "$3"
|
||||
echo -e "\t\t</data>"
|
||||
} >> "$1"
|
||||
}
|
||||
|
||||
write_footer() {
|
||||
cat <<EOF >> "$1"
|
||||
</dict>
|
||||
<key>Version</key>
|
||||
<integer>1</integer>
|
||||
</dict>
|
||||
</plist>
|
||||
EOF
|
||||
}
|
||||
|
||||
cd "${OCPath}" || abort "Failed to reach ${OCPath}"
|
||||
/bin/rm -rf vault.plist vault.sig || abort "Failed to cleanup"
|
||||
/usr/libexec/PlistBuddy -c "Add Version integer 1" vault.plist || abort "Failed to set vault.plist version"
|
||||
|
||||
echo "Hashing files in ${OCPath}..."
|
||||
echo "Hashing OpenCore configuration..."
|
||||
|
||||
write_header vault.plist
|
||||
|
||||
/usr/bin/find . -not -path '*/\.*' -type f \
|
||||
\( ! -iname ".*" \) \
|
||||
\( ! -iname "vault.*" \) \
|
||||
\( ! -iname "OpenCore.efi" \) | while read -r fname; do
|
||||
\( ! -iname "MemTest86.log" \) \
|
||||
\( ! -iname "MemTest86-Report-*.html" \) \
|
||||
\( ! -iname "OpenCore.efi" \) | env LC_COLLATE=POSIX /usr/bin/sort | while read -r fname; do
|
||||
fname="${fname#"./"}"
|
||||
wname="${fname//\//\\\\}"
|
||||
shasum=$(/usr/bin/shasum -a 256 "${fname}") || abort "Failed to hash ${fname}"
|
||||
sha=$(echo "$shasum" | /usr/bin/sed 's/^\([a-f0-9]\{64\}\).*/\1/') || abort "Illegit hashsum"
|
||||
sha=$("${UtilsPath}"/openssl sha256 "${fname}" | /usr/bin/awk '{print $2}') || abort "Failed to hash ${fname}"
|
||||
if [ "${#sha}" != 64 ] || [ "$(echo "$sha"| /usr/bin/sed 's/^[a-f0-9]*$//')" ]; then
|
||||
abort "Got invalid hash: ${sha}!"
|
||||
fi
|
||||
|
||||
echo "${wname}: ${sha}"
|
||||
|
||||
echo "${sha}" | /usr/bin/xxd -r -p > /tmp/vault_hash || abort "Hashing failure"
|
||||
/usr/libexec/PlistBuddy -c "Import Files:'${wname}' /tmp/vault_hash" vault.plist || abort "Failed to append vault.plist!"
|
||||
echo "${sha}" | /usr/bin/xxd -r -p | "${UtilsPath}"/openssl base64 > /tmp/vault_hash || abort "Hashing failure"
|
||||
write_file_name_and_hash vault.plist "${wname}" /tmp/vault_hash
|
||||
done
|
||||
|
||||
/bin/rm -rf /tmp/vault_hash
|
||||
|
||||
echo "All done!"
|
||||
write_footer vault.plist
|
||||
|
||||
exit 0
|
||||
|
||||
BIN
payloads/Tools/CreateVault/openssl
Executable file
BIN
payloads/Tools/CreateVault/openssl
Executable file
Binary file not shown.
@@ -1,16 +1,18 @@
|
||||
#!/bin/sh
|
||||
|
||||
# Modified by Jazzzny for OpenCore Legacy Patcher on 06.10.23.
|
||||
|
||||
abort() {
|
||||
echo "Fatal error: ${1}!"
|
||||
exit 1
|
||||
}
|
||||
|
||||
# shellcheck disable=SC2317
|
||||
cleanup() {
|
||||
echo "Cleaning up keys"
|
||||
rm -rf "${KeyPath}"
|
||||
}
|
||||
|
||||
if [ ! -x /usr/bin/dirname ] || [ ! -x /bin/chmod ] || [ ! -x /bin/mkdir ] || [ ! -x /usr/bin/openssl ] || [ ! -x /bin/rm ] || [ ! -x /usr/bin/strings ] || [ ! -x /usr/bin/grep ] || [ ! -x /usr/bin/cut ] || [ ! -x /bin/dd ] || [ ! -x /usr/bin/uuidgen ] ; then
|
||||
if [ ! -x /usr/bin/dirname ] || [ ! -x /bin/chmod ] || [ ! -x /bin/mkdir ] || [ ! -x /bin/rm ] || [ ! -x /usr/bin/grep ] || [ ! -x /usr/bin/awk ] || [ ! -x /bin/dd ] || [ ! -x /usr/bin/uuidgen ] ; then
|
||||
abort "Unix environment is broken!"
|
||||
fi
|
||||
|
||||
@@ -22,10 +24,8 @@ if [ "$OCPath" = "" ]; then
|
||||
OCPath=../../EFI/OC
|
||||
fi
|
||||
|
||||
KeyPath="/tmp/Keys-$(/usr/bin/uuidgen)"
|
||||
KeyPath="/tmp/$(/usr/bin/uuidgen)"
|
||||
OCBin="${OCPath}/OpenCore.efi"
|
||||
RootCA="${KeyPath}/ca.pem"
|
||||
PrivKey="${KeyPath}/privatekey.cer"
|
||||
PubKey="${KeyPath}/vault.pub"
|
||||
|
||||
if [ ! -d "${OCPath}" ]; then
|
||||
@@ -58,31 +58,14 @@ fi
|
||||
|
||||
./create_vault.sh "${OCPath}" || abort "create_vault.sh returns errors!"
|
||||
|
||||
if [ ! -f "${RootCA}" ]; then
|
||||
/usr/bin/openssl genrsa -out "${RootCA}" 2048 || abort "Failed to generate CA"
|
||||
if [ -f "${PrivKey}" ]; then
|
||||
echo "WARNING: Private key exists without CA"
|
||||
fi
|
||||
fi
|
||||
|
||||
/bin/rm -fP "${PrivKey}" || abort "Failed to remove ${PrivKey}"
|
||||
echo "Issuing a new private key..."
|
||||
/usr/bin/openssl req -new -x509 -key "${RootCA}" -out "${PrivKey}" -days 1825 -subj "/C=WO/L=127.0.0.1/O=Acidanthera/OU=Acidanthera OpenCore/CN=Greetings from Acidanthera and WWHC" || abort "Failed to issue private key!"
|
||||
|
||||
/bin/rm -fP "${PubKey}" || abort "Failed to remove ${PubKey}"
|
||||
echo "Getting public key based off private key..."
|
||||
./RsaTool -cert "${PrivKey}" > "${PubKey}" || abort "Failed to get public key"
|
||||
|
||||
echo "Signing ${OCBin}..."
|
||||
echo "Signing OpenCore..."
|
||||
./RsaTool -sign "${OCPath}/vault.plist" "${OCPath}/vault.sig" "${PubKey}" || abort "Failed to patch ${PubKey}"
|
||||
|
||||
echo "Bin-patching ${OCBin}..."
|
||||
off=$(($(/usr/bin/strings -a -t d "${OCBin}" | /usr/bin/grep "=BEGIN OC VAULT=" | /usr/bin/cut -f1 -d' ') + 16))
|
||||
off=$(($(./strings -a -t d "${OCBin}" | /usr/bin/grep "=BEGIN OC VAULT=" | /usr/bin/awk '{print $1}') + 16))
|
||||
if [ "${off}" -le 16 ]; then
|
||||
abort "${OCBin} is borked"
|
||||
fi
|
||||
|
||||
/bin/dd of="${OCBin}" if="${PubKey}" bs=1 seek="${off}" count=528 conv=notrunc || abort "Failed to bin-patch ${OCBin}"
|
||||
|
||||
echo "All done!"
|
||||
echo "Signing complete"
|
||||
exit 0
|
||||
|
||||
BIN
payloads/Tools/CreateVault/strings
Executable file
BIN
payloads/Tools/CreateVault/strings
Executable file
Binary file not shown.
@@ -4,4 +4,5 @@ wxpython
|
||||
pyinstaller
|
||||
packaging
|
||||
py_sip_xnu
|
||||
py-applescript
|
||||
py-applescript
|
||||
markdown2
|
||||
@@ -65,8 +65,6 @@ 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")
|
||||
|
||||
@@ -215,12 +215,13 @@ class BuildFirmware:
|
||||
# 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()
|
||||
if Path(self.constants.drivers_path / Path("OpenLegacyBoot.efi")).exists():
|
||||
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:
|
||||
"""
|
||||
@@ -232,7 +233,7 @@ class BuildFirmware:
|
||||
# Patches IOPCIConfigurator.cpp's IOPCIIsHotplugPort to skip configRead16/32 calls
|
||||
# Credit to CaseySJ for original discovery:
|
||||
# - Patch: https://github.com/AMD-OSX/AMD_Vanilla/pull/196
|
||||
# - Source: https://github.com/apple-oss-distributions/IOPCIFamily/blob/main/IOPCIConfigurator.cpp#L968-L1022
|
||||
# - Source: https://github.com/apple-oss-distributions/IOPCIFamily/blob/IOPCIFamily-583.40.1/IOPCIConfigurator.cpp#L968-L1022
|
||||
#
|
||||
# Currently all pre-Sandy Bridge Macs lacking an iGPU benefit from this patch as well as MacPro6,1
|
||||
# Otherwise some graphics hardware will fail to wake, macOS will misreport hardware as ExpressCard-based,
|
||||
@@ -247,7 +248,7 @@ 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 (Ventura)")["Enabled"] = True
|
||||
# Sonoma slightly adjusted this line specifically
|
||||
# - https://github.com/apple-oss-distributions/IOPCIFamily/blob/main/IOPCIConfigurator.cpp#L1009
|
||||
# - https://github.com/apple-oss-distributions/IOPCIFamily/blob/IOPCIFamily-583.40.1/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:
|
||||
|
||||
@@ -43,6 +43,7 @@ class BuildMiscellaneous:
|
||||
self._debug_handling()
|
||||
self._cpu_friend_handling()
|
||||
self._general_oc_handling()
|
||||
self._t1_handling()
|
||||
|
||||
|
||||
def _feature_unlock_handling(self) -> None:
|
||||
@@ -280,6 +281,12 @@ class BuildMiscellaneous:
|
||||
# - 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
|
||||
#
|
||||
# Note: With macOS 14.1, injection of these kexts causes a panic.
|
||||
# To avoid this, a MaxKernel is configured with XNU 23.0.0 (macOS 14.0).
|
||||
# Additionally sys_patch.py stack will now patches the bins onto disk for 14.1+.
|
||||
# Reason for keeping the dual logic is due to potential conflicts of in-cache vs injection if we start
|
||||
# patching pre-14.1 hosts.
|
||||
if (
|
||||
smbios_data.smbios_dictionary[self.model]["CPU Generation"] <= cpu_data.CPUGen.penryn.value or \
|
||||
self.model in ["MacPro4,1", "MacPro5,1", "Xserve3,1"]
|
||||
@@ -335,11 +342,9 @@ class BuildMiscellaneous:
|
||||
logging.info(f"- Setting custom OpenCore picker timeout to {self.constants.oc_timeout} seconds")
|
||||
self.config["Misc"]["Boot"]["Timeout"] = self.constants.oc_timeout
|
||||
|
||||
if self.constants.vault is True and utilities.check_command_line_tools() is True:
|
||||
if self.constants.vault 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
|
||||
|
||||
|
||||
def _t1_handling(self) -> None:
|
||||
"""
|
||||
@@ -351,9 +356,8 @@ class BuildMiscellaneous:
|
||||
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("corecrypto_T1.kext", self.constants.t1_corecrypto_version, self.constants.t1_corecrypto_path)
|
||||
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)
|
||||
@@ -77,6 +77,6 @@ class BuildSecurity:
|
||||
if self.constants.secure_status is False:
|
||||
logging.info("- Disabling SecureBootModel")
|
||||
self.config["Misc"]["Security"]["SecureBootModel"] = "Disabled"
|
||||
|
||||
|
||||
logging.info("- Enabling AMFIPass")
|
||||
support.BuildSupport(self.model, self.constants, self.config).enable_kext("AMFIPass.kext", self.constants.amfipass_version, self.constants.amfipass_path)
|
||||
|
||||
@@ -108,17 +108,11 @@ class BuildSupport:
|
||||
if self.constants.vault is False:
|
||||
return
|
||||
|
||||
if utilities.check_command_line_tools() is False:
|
||||
# sign.command checks for the existence of '/usr/bin/strings' however does not verify whether it's executable
|
||||
# sign.command will continue to run and create an unbootable OpenCore.efi due to the missing strings binary
|
||||
# macOS has dummy binaries that just reroute to the actual binaries after you install Xcode's Command Line Tools
|
||||
logging.info("- Missing Command Line tools, skipping Vault for saftey reasons")
|
||||
logging.info("- Install via 'xcode-select --install' and rerun OCLP if you wish to vault this config")
|
||||
return
|
||||
|
||||
logging.info("- Vaulting EFI")
|
||||
subprocess.run([str(self.constants.vault_path), f"{self.constants.oc_folder}/"], stdout=subprocess.PIPE, stderr=subprocess.STDOUT)
|
||||
|
||||
logging.info("- Vaulting EFI\n=========================================")
|
||||
popen = subprocess.Popen([str(self.constants.vault_path), f"{self.constants.oc_folder}/"], stdout=subprocess.PIPE, stderr=subprocess.STDOUT, universal_newlines=True)
|
||||
for stdout_line in iter(popen.stdout.readline, ""):
|
||||
logging.info(stdout_line.strip())
|
||||
logging.info("=========================================")
|
||||
|
||||
def validate_pathing(self) -> None:
|
||||
"""
|
||||
|
||||
@@ -13,8 +13,8 @@ from data import os_data
|
||||
class Constants:
|
||||
def __init__(self) -> None:
|
||||
# Patcher Versioning
|
||||
self.patcher_version: str = "1.0.1" # OpenCore-Legacy-Patcher
|
||||
self.patcher_support_pkg_version: str = "1.3.3" # PatcherSupportPkg
|
||||
self.patcher_version: str = "1.1.0" # OpenCore-Legacy-Patcher
|
||||
self.patcher_support_pkg_version: str = "1.4.2" # PatcherSupportPkg
|
||||
self.copyright_date: str = "Copyright © 2020-2023 Dortania"
|
||||
self.patcher_name: str = "OpenCore Legacy Patcher"
|
||||
|
||||
@@ -36,7 +36,7 @@ class Constants:
|
||||
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.airportbcrmfixup_version: str = "2.1.8" # AirPortBrcmFixup
|
||||
self.nvmefix_version: str = "1.1.1" # NVMeFix
|
||||
self.applealc_version: str = "1.6.3" # AppleALC
|
||||
self.restrictevents_version: str = "1.1.3" # RestrictEvents
|
||||
@@ -67,9 +67,9 @@ class Constants:
|
||||
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)
|
||||
self.t1_sse_version: str = "1.1.0" # AppleSSE (13.6 - T1 support)
|
||||
self.t1_key_store_version: str = "1.1.0" # AppleKeyStore (13.6 - T1 support)
|
||||
self.t1_corecrypto_version: str = "1.0.0" # corecrypto (13.6 - T1 support)
|
||||
|
||||
## Apple - Dortania Modified
|
||||
self.bcm570_version: str = "1.0.2" # CatalinaBCM5701Ethernet
|
||||
@@ -94,7 +94,7 @@ class Constants:
|
||||
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_version: str = "1.4.0" # AMFIPass
|
||||
self.amfipass_compatibility_version: str = "1.2.1" # Minimum AMFIPass version required
|
||||
|
||||
## Syncretic
|
||||
@@ -439,14 +439,14 @@ class Constants:
|
||||
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 t1_corecrypto_path(self):
|
||||
return self.payload_kexts_path / Path(f"Misc/corecrypto_T1-v{self.t1_corecrypto_version}.zip")
|
||||
|
||||
@property
|
||||
def mousse_path(self):
|
||||
return self.payload_kexts_path / Path(f"SSE/AAAMouSSE-v{self.mousse_version}.zip")
|
||||
|
||||
@@ -634,6 +634,7 @@ class Computer:
|
||||
ambient_light_sensor: Optional[bool] = False
|
||||
third_party_sata_ssd: Optional[bool] = False
|
||||
pcie_webcam: Optional[bool] = False
|
||||
t1_chip: Optional[bool] = False
|
||||
secure_boot_model: Optional[str] = None
|
||||
secure_boot_policy: Optional[int] = None
|
||||
oclp_sys_version: Optional[str] = None
|
||||
@@ -659,6 +660,7 @@ class Computer:
|
||||
computer.cpu_probe()
|
||||
computer.bluetooth_probe()
|
||||
computer.topcase_probe()
|
||||
computer.t1_probe()
|
||||
computer.ambient_light_sensor_probe()
|
||||
computer.pcie_webcam_probe()
|
||||
computer.sata_disk_probe()
|
||||
@@ -936,6 +938,18 @@ class Computer:
|
||||
elif usb_device.device_id in usb_data.AppleIDs.AppleUSBMultiTouch:
|
||||
self.trackpad_type = "Modern"
|
||||
|
||||
def t1_probe(self):
|
||||
if not self.usb_devices:
|
||||
return
|
||||
|
||||
for usb_device in self.usb_devices:
|
||||
if usb_device.vendor_id != 0x5ac:
|
||||
continue
|
||||
if usb_device.device_id != 0x8600:
|
||||
continue
|
||||
self.t1_chip = True
|
||||
break
|
||||
|
||||
def sata_disk_probe(self):
|
||||
# Get all SATA Controllers/Disks from 'system_profiler SPSerialATADataType'
|
||||
# Determine whether SATA SSD is present and Apple-made
|
||||
|
||||
@@ -665,12 +665,16 @@ class PatchSysVolume:
|
||||
self._preflight_checks(required_patches, source_files_path)
|
||||
for patch in required_patches:
|
||||
logging.info("- Installing Patchset: " + patch)
|
||||
if "Remove" in required_patches[patch]:
|
||||
for remove_patch_directory in required_patches[patch]["Remove"]:
|
||||
logging.info("- Remove Files at: " + remove_patch_directory)
|
||||
for remove_patch_file in required_patches[patch]["Remove"][remove_patch_directory]:
|
||||
destination_folder_path = str(self.mount_location) + remove_patch_directory
|
||||
self._remove_file(destination_folder_path, remove_patch_file)
|
||||
for method_remove in ["Remove", "Remove Non-Root"]:
|
||||
if method_remove in required_patches[patch]:
|
||||
for remove_patch_directory in required_patches[patch][method_remove]:
|
||||
logging.info("- Remove Files at: " + remove_patch_directory)
|
||||
for remove_patch_file in required_patches[patch][method_remove][remove_patch_directory]:
|
||||
if method_remove == "Remove":
|
||||
destination_folder_path = str(self.mount_location) + remove_patch_directory
|
||||
else:
|
||||
destination_folder_path = str(self.mount_location_data) + remove_patch_directory
|
||||
self._remove_file(destination_folder_path, remove_patch_file)
|
||||
|
||||
|
||||
for method_install in ["Install", "Install Non-Root"]:
|
||||
|
||||
@@ -1,6 +1,10 @@
|
||||
# Copyright (C) 2022, Mykola Grymalyuk
|
||||
# Copyright (c) 2023 Jazzzny
|
||||
|
||||
import wx
|
||||
import wx.html2
|
||||
import requests
|
||||
import markdown2
|
||||
import logging
|
||||
import plistlib
|
||||
import subprocess
|
||||
@@ -51,19 +55,85 @@ class AutomaticSysPatch:
|
||||
logging.info(f"- Found new version: {version}")
|
||||
|
||||
app = wx.App()
|
||||
frame = wx.Frame(None, -1, "OpenCore Legacy Patcher")
|
||||
dialog = wx.MessageDialog(
|
||||
parent=frame,
|
||||
message=f"Current Version: {self.constants.patcher_version}{' (Nightly)' if not self.constants.commit_info[0].startswith('refs/tags') else ''}\nNew version: {version}\nWould you like to update?",
|
||||
caption="Update Available for OpenCore Legacy Patcher!",
|
||||
style=wx.YES_NO | wx.CANCEL | wx.ICON_QUESTION
|
||||
)
|
||||
dialog.SetYesNoCancelLabels("Download and install", "View on Github", "Ignore")
|
||||
response = dialog.ShowModal()
|
||||
if response == wx.ID_YES:
|
||||
gui_entry.EntryPoint(self.constants).start(entry=gui_entry.SupportedEntryPoints.UPDATE_APP)
|
||||
elif response == wx.ID_NO:
|
||||
mainframe = wx.Frame(None, -1, "OpenCore Legacy Patcher")
|
||||
|
||||
ID_GITHUB = wx.NewId()
|
||||
ID_UPDATE = wx.NewId()
|
||||
|
||||
url = "https://api.github.com/repos/dortania/OpenCore-Legacy-Patcher/releases/latest"
|
||||
response = requests.get(url).json()
|
||||
changelog = response["body"].split("## Asset Information")[0]
|
||||
|
||||
html_markdown = markdown2.markdown(changelog)
|
||||
html_css = """
|
||||
<style>
|
||||
body {
|
||||
font-family: system-ui, -apple-system, BlinkMacSystemFont, sans-serif;
|
||||
line-height: 1.5;
|
||||
font-size: 13px;
|
||||
margin-top: 20px;
|
||||
background-color: rgb(238,238,238);
|
||||
}
|
||||
h2 {
|
||||
line-height: 0.5;
|
||||
padding-left: 10px;
|
||||
}
|
||||
a {
|
||||
color: -apple-system-control-accent;
|
||||
}
|
||||
@media (prefers-color-scheme: dark) {
|
||||
body {
|
||||
color: #fff;
|
||||
background-color: rgb(47,47,47);
|
||||
}
|
||||
|
||||
}
|
||||
</style>
|
||||
"""
|
||||
frame = wx.Dialog(None, -1, title="", size=(600, 500))
|
||||
frame.SetMinSize((600, 500))
|
||||
frame.SetWindowStyle(wx.STAY_ON_TOP)
|
||||
panel = wx.Panel(frame)
|
||||
sizer = wx.BoxSizer(wx.VERTICAL)
|
||||
sizer.AddSpacer(10)
|
||||
self.title_text = wx.StaticText(panel, label="A new version of OpenCore Legacy Patcher is available!")
|
||||
self.description = wx.StaticText(panel, label=f"OpenCore Legacy Patcher {version} is now available - You have {self.constants.patcher_version}. Would you like to update?")
|
||||
self.title_text.SetFont(wx.Font(19, wx.FONTFAMILY_DEFAULT, wx.FONTSTYLE_NORMAL, wx.FONTWEIGHT_BOLD, False, ".AppleSystemUIFont"))
|
||||
self.description.SetFont(wx.Font(13, wx.FONTFAMILY_DEFAULT, wx.FONTSTYLE_NORMAL, wx.FONTWEIGHT_NORMAL, False, ".AppleSystemUIFont"))
|
||||
self.web_view = wx.html2.WebView.New(panel, style=wx.BORDER_SUNKEN)
|
||||
html_code = html_css+html_markdown.replace("<a href=", "<a target='_blank' href=")
|
||||
self.web_view.SetPage(html_code, "")
|
||||
self.web_view.Bind(wx.html2.EVT_WEBVIEW_NEWWINDOW, self._onWebviewNav)
|
||||
self.web_view.EnableContextMenu(False)
|
||||
self.close_button = wx.Button(panel, label="Ignore")
|
||||
self.close_button.Bind(wx.EVT_BUTTON, lambda event: frame.EndModal(wx.ID_CANCEL))
|
||||
self.view_button = wx.Button(panel, ID_GITHUB, label="View on GitHub")
|
||||
self.view_button.Bind(wx.EVT_BUTTON, lambda event: frame.EndModal(ID_GITHUB))
|
||||
self.install_button = wx.Button(panel, label="Download and Install")
|
||||
self.install_button.Bind(wx.EVT_BUTTON, lambda event: frame.EndModal(ID_UPDATE))
|
||||
self.install_button.SetDefault()
|
||||
|
||||
buttonsizer = wx.BoxSizer(wx.HORIZONTAL)
|
||||
buttonsizer.Add(self.close_button, 0, wx.ALIGN_CENTRE | wx.RIGHT, 5)
|
||||
buttonsizer.Add(self.view_button, 0, wx.ALIGN_CENTRE | wx.LEFT|wx.RIGHT, 5)
|
||||
buttonsizer.Add(self.install_button, 0, wx.ALIGN_CENTRE | wx.LEFT, 5)
|
||||
sizer = wx.BoxSizer(wx.VERTICAL)
|
||||
sizer.Add(self.title_text, 0, wx.ALIGN_CENTRE | wx.TOP, 20)
|
||||
sizer.Add(self.description, 0, wx.ALIGN_CENTRE | wx.BOTTOM, 20)
|
||||
sizer.Add(self.web_view, 1, wx.EXPAND | wx.LEFT|wx.RIGHT, 10)
|
||||
sizer.Add(buttonsizer, 0, wx.ALIGN_RIGHT | wx.ALL, 20)
|
||||
panel.SetSizer(sizer)
|
||||
frame.Centre()
|
||||
|
||||
result = frame.ShowModal()
|
||||
|
||||
|
||||
if result == ID_GITHUB:
|
||||
webbrowser.open(dict["Github Link"])
|
||||
elif result == ID_UPDATE:
|
||||
gui_entry.EntryPoint(self.constants).start(entry=gui_entry.SupportedEntryPoints.UPDATE_APP)
|
||||
|
||||
|
||||
return
|
||||
|
||||
if utilities.check_seal() is True:
|
||||
@@ -127,6 +197,9 @@ class AutomaticSysPatch:
|
||||
if self._determine_if_versions_match():
|
||||
self._determine_if_boot_matches()
|
||||
|
||||
def _onWebviewNav(self, event):
|
||||
url = event.GetURL()
|
||||
webbrowser.open(url)
|
||||
|
||||
def _determine_if_versions_match(self):
|
||||
"""
|
||||
|
||||
@@ -53,6 +53,7 @@ class DetectRootPatch:
|
||||
self.legacy_keyboard_backlight = False
|
||||
self.legacy_uhci_ohci = False
|
||||
self.legacy_pcie_webcam = False
|
||||
self.legacy_t1_chip = False
|
||||
|
||||
# Patch Requirements
|
||||
self.amfi_must_disable = False
|
||||
@@ -540,6 +541,10 @@ class DetectRootPatch:
|
||||
|
||||
if self.constants.detected_os >= os_data.os_data.sonoma:
|
||||
self.legacy_pcie_webcam = self.constants.computer.pcie_webcam
|
||||
self.legacy_t1_chip = self.constants.computer.t1_chip
|
||||
|
||||
if self.legacy_t1_chip is True:
|
||||
self.amfi_must_disable = True
|
||||
|
||||
if self._check_uhci_ohci() is True:
|
||||
self.legacy_uhci_ohci = True
|
||||
@@ -622,6 +627,7 @@ class DetectRootPatch:
|
||||
"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,
|
||||
"Miscellaneous: T1 Security Chip": self.legacy_t1_chip,
|
||||
"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,
|
||||
|
||||
@@ -176,10 +176,14 @@ 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"]})
|
||||
required_patches.update({"Legacy USB 1.1 Extended": all_hardware_patchset["Miscellaneous"]["Legacy USB 1.1 Extended"]})
|
||||
|
||||
if self.hardware_details["Miscellaneous: PCIe FaceTime Camera"] is True:
|
||||
required_patches.update({"PCIe FaceTime Camera": all_hardware_patchset["Miscellaneous"]["PCIe FaceTime Camera"]})
|
||||
|
||||
if self.hardware_details["Miscellaneous: T1 Security Chip"] is True:
|
||||
required_patches.update({"T1 Security Chip": all_hardware_patchset["Miscellaneous"]["T1 Security Chip"]})
|
||||
|
||||
if required_patches:
|
||||
host_os_float = float(f"{self.constants.detected_os}.{self.constants.detected_os_minor}")
|
||||
|
||||
|
||||
@@ -60,8 +60,8 @@ def seconds_to_readable_time(seconds) -> str:
|
||||
seconds = int(seconds)
|
||||
time = ""
|
||||
|
||||
if seconds == 0:
|
||||
return "0m "
|
||||
if 0 <= seconds < 60:
|
||||
return "Less than a minute "
|
||||
if seconds < 0:
|
||||
return "Indeterminate time "
|
||||
|
||||
|
||||
@@ -50,7 +50,7 @@ class DownloadFrame(wx.Frame):
|
||||
title_label.SetFont(gui_support.font_factory(19, wx.FONTWEIGHT_BOLD))
|
||||
title_label.Centre(wx.HORIZONTAL)
|
||||
|
||||
progress_bar = wx.Gauge(frame, range=100, pos=(-1, title_label.GetPosition()[1] + title_label.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), style=wx.GA_SMOOTH|wx.GA_PROGRESS)
|
||||
progress_bar.Centre(wx.HORIZONTAL)
|
||||
|
||||
label_amount = wx.StaticText(frame, label="Preparing download", pos=(-1, progress_bar.GetPosition()[1] + progress_bar.GetSize()[1]))
|
||||
@@ -68,7 +68,9 @@ class DownloadFrame(wx.Frame):
|
||||
self.download_obj.download()
|
||||
while self.download_obj.is_active():
|
||||
|
||||
percentage: int = self.download_obj.get_percent()
|
||||
percentage: int = round(self.download_obj.get_percent())
|
||||
if percentage == 0:
|
||||
percentage = 1
|
||||
|
||||
if percentage == -1:
|
||||
amount_str = f"{utilities.human_fmt(self.download_obj.downloaded_file_size)} downloaded ({utilities.human_fmt(self.download_obj.get_speed())}/s)"
|
||||
|
||||
@@ -1,5 +1,10 @@
|
||||
# Generate GUI for main menu
|
||||
# Portions of this file Copyright (c) 2023 Jazzzny
|
||||
|
||||
import wx
|
||||
import wx.html2
|
||||
import markdown2
|
||||
import requests
|
||||
import sys
|
||||
import logging
|
||||
import threading
|
||||
@@ -271,7 +276,7 @@ class MainFrame(wx.Frame):
|
||||
def _check_for_updates(self):
|
||||
if self.constants.has_checked_updates is True:
|
||||
return
|
||||
|
||||
|
||||
ignore_updates = global_settings.GlobalEnviromentSettings().read_property("IgnoreAppUpdates")
|
||||
if ignore_updates is True:
|
||||
self.constants.ignore_updates = True
|
||||
@@ -285,20 +290,8 @@ class MainFrame(wx.Frame):
|
||||
|
||||
version = dict["Version"]
|
||||
logging.info(f"New version: {version}")
|
||||
dialog = wx.MessageDialog(
|
||||
parent=self,
|
||||
message=f"Current Version: {self.constants.patcher_version}{' (Nightly)' if not self.constants.commit_info[0].startswith('refs/tags') else ''}\nNew version: {version}\nWould you like to update?",
|
||||
caption="Update Available for OpenCore Legacy Patcher!",
|
||||
style=wx.YES_NO | wx.CANCEL | wx.ICON_QUESTION
|
||||
)
|
||||
dialog.SetYesNoCancelLabels("Download and install", "Ignore", "View on Github")
|
||||
response = dialog.ShowModal()
|
||||
|
||||
if response == wx.ID_YES:
|
||||
wx.CallAfter(self.on_update, dict["Link"], version)
|
||||
elif response == wx.ID_CANCEL:
|
||||
webbrowser.open(dict["Github Link"])
|
||||
|
||||
|
||||
wx.CallAfter(self.on_update, dict["Link"], version, dict["Github Link"])
|
||||
|
||||
def on_build_and_install(self, event: wx.Event = None):
|
||||
self.Hide()
|
||||
@@ -345,12 +338,90 @@ class MainFrame(wx.Frame):
|
||||
screen_location=self.GetPosition()
|
||||
)
|
||||
|
||||
def on_update(self, oclp_url: str, oclp_version: str):
|
||||
gui_update.UpdateFrame(
|
||||
def on_update(self, oclp_url: str, oclp_version: str, oclp_github_url: str):
|
||||
|
||||
ID_GITHUB = wx.NewId()
|
||||
ID_UPDATE = wx.NewId()
|
||||
|
||||
url = "https://api.github.com/repos/dortania/OpenCore-Legacy-Patcher/releases/latest"
|
||||
response = requests.get(url).json()
|
||||
changelog = response["body"].split("## Asset Information")[0]
|
||||
|
||||
html_markdown = markdown2.markdown(changelog)
|
||||
html_css = """
|
||||
<style>
|
||||
body {
|
||||
font-family: system-ui, -apple-system, BlinkMacSystemFont, sans-serif;
|
||||
line-height: 1.5;
|
||||
font-size: 13px;
|
||||
margin-top: 20px;
|
||||
background-color: rgb(238,238,238);
|
||||
}
|
||||
h2 {
|
||||
line-height: 0.5;
|
||||
}
|
||||
a {
|
||||
color: -apple-system-control-accent;
|
||||
}
|
||||
@media (prefers-color-scheme: dark) {
|
||||
body {
|
||||
color: #fff;
|
||||
background-color: rgb(47,47,47);
|
||||
}
|
||||
|
||||
}
|
||||
</style>
|
||||
"""
|
||||
frame = wx.Dialog(None, -1, title="", size=(600, 500))
|
||||
frame.SetMinSize((600, 500))
|
||||
frame.SetWindowStyle(wx.STAY_ON_TOP)
|
||||
panel = wx.Panel(frame)
|
||||
sizer = wx.BoxSizer(wx.VERTICAL)
|
||||
sizer.AddSpacer(10)
|
||||
self.title_text = wx.StaticText(panel, label="A new version of OpenCore Legacy Patcher is available!")
|
||||
self.description = wx.StaticText(panel, label=f"OpenCore Legacy Patcher {oclp_version} is now available - You have {self.constants.patcher_version}. Would you like to update?")
|
||||
self.title_text.SetFont(wx.Font(19, wx.FONTFAMILY_DEFAULT, wx.FONTSTYLE_NORMAL, wx.FONTWEIGHT_BOLD, False, ".AppleSystemUIFont"))
|
||||
self.description.SetFont(wx.Font(13, wx.FONTFAMILY_DEFAULT, wx.FONTSTYLE_NORMAL, wx.FONTWEIGHT_NORMAL, False, ".AppleSystemUIFont"))
|
||||
self.web_view = wx.html2.WebView.New(panel, style=wx.BORDER_SUNKEN)
|
||||
html_code = html_css+html_markdown.replace("<a href=", "<a target='_blank' href=")
|
||||
self.web_view.SetPage(html_code, "")
|
||||
self.web_view.Bind(wx.html2.EVT_WEBVIEW_NEWWINDOW, self._onWebviewNav)
|
||||
self.web_view.EnableContextMenu(False)
|
||||
self.close_button = wx.Button(panel, label="Dismiss")
|
||||
self.close_button.Bind(wx.EVT_BUTTON, lambda event: frame.EndModal(wx.ID_CANCEL))
|
||||
self.view_button = wx.Button(panel, ID_GITHUB, label="View on GitHub")
|
||||
self.view_button.Bind(wx.EVT_BUTTON, lambda event: frame.EndModal(ID_GITHUB))
|
||||
self.install_button = wx.Button(panel, label="Download and Install")
|
||||
self.install_button.Bind(wx.EVT_BUTTON, lambda event: frame.EndModal(ID_UPDATE))
|
||||
self.install_button.SetDefault()
|
||||
|
||||
buttonsizer = wx.BoxSizer(wx.HORIZONTAL)
|
||||
buttonsizer.Add(self.close_button, 0, wx.ALIGN_CENTRE | wx.RIGHT, 5)
|
||||
buttonsizer.Add(self.view_button, 0, wx.ALIGN_CENTRE | wx.LEFT|wx.RIGHT, 5)
|
||||
buttonsizer.Add(self.install_button, 0, wx.ALIGN_CENTRE | wx.LEFT, 5)
|
||||
sizer = wx.BoxSizer(wx.VERTICAL)
|
||||
sizer.Add(self.title_text, 0, wx.ALIGN_CENTRE | wx.TOP, 20)
|
||||
sizer.Add(self.description, 0, wx.ALIGN_CENTRE | wx.BOTTOM, 20)
|
||||
sizer.Add(self.web_view, 1, wx.EXPAND | wx.LEFT|wx.RIGHT, 10)
|
||||
sizer.Add(buttonsizer, 0, wx.ALIGN_RIGHT | wx.ALL, 20)
|
||||
panel.SetSizer(sizer)
|
||||
frame.Centre()
|
||||
|
||||
result = frame.ShowModal()
|
||||
|
||||
|
||||
if result == ID_GITHUB:
|
||||
webbrowser.open(oclp_github_url)
|
||||
elif result == ID_UPDATE:
|
||||
gui_update.UpdateFrame(
|
||||
parent=self,
|
||||
title=self.title,
|
||||
global_constants=self.constants,
|
||||
screen_location=self.GetPosition(),
|
||||
url=oclp_url,
|
||||
version_label=oclp_version
|
||||
)
|
||||
)
|
||||
|
||||
def _onWebviewNav(self, event):
|
||||
url = event.GetURL()
|
||||
webbrowser.open(url)
|
||||
@@ -277,16 +277,16 @@ class SettingsFrame(wx.Frame):
|
||||
"wrap_around 2": {
|
||||
"type": "wrap_around",
|
||||
},
|
||||
"APFS Trim": {
|
||||
"OpenCore Vaulting": {
|
||||
"type": "checkbox",
|
||||
"value": self.constants.apfs_trim_timeout,
|
||||
"variable": "apfs_trim_timeout",
|
||||
"value": self.constants.vault,
|
||||
"variable": "vault",
|
||||
"description": [
|
||||
"Recommended for all users, however faulty",
|
||||
"SSDs may benefit from disabling this.",
|
||||
"Digitally sign OpenCore to prevent",
|
||||
"tampering or corruption."
|
||||
],
|
||||
|
||||
},
|
||||
|
||||
"Show OpenCore Boot Picker": {
|
||||
"type": "checkbox",
|
||||
"value": self.constants.showpicker,
|
||||
@@ -443,6 +443,16 @@ class SettingsFrame(wx.Frame):
|
||||
],
|
||||
"condition": not bool(self.constants.computer.third_party_sata_ssd is False and not self.constants.custom_model)
|
||||
},
|
||||
"APFS Trim": {
|
||||
"type": "checkbox",
|
||||
"value": self.constants.apfs_trim_timeout,
|
||||
"variable": "apfs_trim_timeout",
|
||||
"description": [
|
||||
"Recommended for all users, however faulty",
|
||||
"SSDs may benefit from disabling this.",
|
||||
],
|
||||
|
||||
},
|
||||
},
|
||||
"Advanced": {
|
||||
"Miscellaneous": {
|
||||
@@ -836,6 +846,7 @@ class SettingsFrame(wx.Frame):
|
||||
"Export constants.py values to a txt file.",
|
||||
],
|
||||
},
|
||||
|
||||
"Developer Root Volume Patching": {
|
||||
"type": "title",
|
||||
},
|
||||
|
||||
Reference in New Issue
Block a user