mirror of
https://github.com/dortania/OpenCore-Legacy-Patcher.git
synced 2026-04-21 18:40:16 +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
|
# 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
|
## 1.0.1
|
||||||
- Resolve rendering issues on Intel Ivy Bridge iGPUs
|
- Resolve rendering issues on Intel Ivy Bridge iGPUs
|
||||||
- Update non-Metal Binaries for macOS Sonoma:
|
- Update non-Metal Binaries for macOS Sonoma:
|
||||||
@@ -11,7 +31,7 @@
|
|||||||
- Add error handling for corrupted patcher settings
|
- Add error handling for corrupted patcher settings
|
||||||
- Remove CoreImage patch for 3802 GPUs on Ventura
|
- Remove CoreImage patch for 3802 GPUs on Ventura
|
||||||
- Avoid listing PCIe FaceTime camera patch on pre-Sonoma OSes
|
- 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
|
## 1.0.0
|
||||||
- Resolve BCM2046 and BCM2070 support on macOS 13.3 and newer
|
- Resolve BCM2046 and BCM2070 support on macOS 13.3 and newer
|
||||||
@@ -52,6 +72,7 @@
|
|||||||
- CPUFriend 1.2.7 - release
|
- CPUFriend 1.2.7 - release
|
||||||
- BlueToolFixup 2.6.8 - rolling (2305aaa)
|
- BlueToolFixup 2.6.8 - rolling (2305aaa)
|
||||||
- CryptexFixup 1.0.2 - release
|
- CryptexFixup 1.0.2 - release
|
||||||
|
- NVMeFix 1.1.1 - release
|
||||||
- PatcherSupportPkg 1.3.2 - release
|
- PatcherSupportPkg 1.3.2 - release
|
||||||
- Build Server Changes:
|
- Build Server Changes:
|
||||||
- Upgrade Python backend to 3.11.5
|
- 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
|
* Pre-Ivy Bridge Aquantia Ethernet Patch
|
||||||
* Non-Metal Photo Booth Patch for Monterey+
|
* Non-Metal Photo Booth Patch for Monterey+
|
||||||
* GUI and Backend Development
|
* GUI and Backend Development
|
||||||
|
* Vaulting implementation
|
||||||
* Amazing users who've graciously donate hardware:
|
* Amazing users who've graciously donate hardware:
|
||||||
* [JohnD](https://forums.macrumors.com/members/johnd.53633/) - 2013 Mac Pro
|
* [JohnD](https://forums.macrumors.com/members/johnd.53633/) - 2013 Mac Pro
|
||||||
* [SpiGAndromeda](https://github.com/SpiGAndromeda) - AMD Vega 64
|
* [SpiGAndromeda](https://github.com/SpiGAndromeda) - AMD Vega 64
|
||||||
|
|||||||
@@ -13,7 +13,7 @@ class SystemPatchDictionary():
|
|||||||
|
|
||||||
|
|
||||||
Patchset Schema:
|
Patchset Schema:
|
||||||
Supports 6 types of higher level keys:
|
Supports following types of higher level keys:
|
||||||
- OS Support: Supported OSes by patches
|
- OS Support: Supported OSes by patches
|
||||||
- Minimum OS Support: Minimum supported OS version
|
- Minimum OS Support: Minimum supported OS version
|
||||||
- OS Major: Major XNU Kernel version
|
- OS Major: Major XNU Kernel version
|
||||||
@@ -30,6 +30,9 @@ class SystemPatchDictionary():
|
|||||||
- Remove: Files to remove
|
- Remove: Files to remove
|
||||||
- Location:
|
- Location:
|
||||||
- File (array: [ "File" ])
|
- File (array: [ "File" ])
|
||||||
|
- Remove Non-Root: Files to remove from data partition
|
||||||
|
- Location:
|
||||||
|
- File (array: [ "File" ])
|
||||||
- Processes: Additional processes to run
|
- Processes: Additional processes to run
|
||||||
- Process (dict: { "Process": "Requires Root" })
|
- Process (dict: { "Process": "Requires Root" })
|
||||||
- Display Name: User-friendly name (string, "" if user-friendly name is not required)
|
- 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_4: float = 21.5
|
||||||
self.macOS_12_5: float = 21.6
|
self.macOS_12_5: float = 21.6
|
||||||
self.macOS_13_3: float = 22.4
|
self.macOS_13_3: float = 22.4
|
||||||
|
self.macOS_14_1: float = 23.1
|
||||||
|
|
||||||
self._generate_sys_patch_dict()
|
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",
|
"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",
|
"AppleIntelBDWGraphicsFramebuffer.kext": "12.5" if self.os_major < os_data.os_data.sonoma else "12.5-23",
|
||||||
"AppleIntelBDWGraphicsGLDriver.bundle": "12.5",
|
"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",
|
"AppleIntelBDWGraphicsVADriver.bundle": "12.5",
|
||||||
"AppleIntelBDWGraphicsVAME.bundle": "12.5",
|
"AppleIntelBDWGraphicsVAME.bundle": "12.5",
|
||||||
"AppleIntelGraphicsShared.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": {
|
"PCIe FaceTime Camera": {
|
||||||
"Display Name": "Miscellaneous: PCIe FaceTime Camera",
|
"Display Name": "Miscellaneous: PCIe FaceTime Camera",
|
||||||
"OS Support": {
|
"OS Support": {
|
||||||
@@ -1276,14 +1303,58 @@ class SystemPatchDictionary():
|
|||||||
"OS Minor": 99
|
"OS Minor": 99
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
"Install Non-Root": {
|
"Install": {
|
||||||
"/Library/CoreMediaIO/Plug-Ins/DAL": {
|
"/System/Library/Frameworks/CoreMediaIO.framework/Versions/A/Resources": {
|
||||||
"AppleCamera.plugin": "14.0 Beta 1"
|
"AppleCamera.plugin": "14.0 Beta 1"
|
||||||
},
|
},
|
||||||
"/Library/LaunchDaemons": {
|
"/System/Library/LaunchDaemons": {
|
||||||
"com.apple.cmio.AppleCameraAssistant.plist": "14.0 Beta 1"
|
"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,
|
sidebarDepth: 1,
|
||||||
children: [
|
children: [
|
||||||
'ISSUES-HOLD',
|
'ISSUES-HOLD',
|
||||||
'TESTED',
|
|
||||||
'TERMS',
|
'TERMS',
|
||||||
'HOW',
|
'HOW',
|
||||||
'PATCHEXPLAIN',
|
'PATCHEXPLAIN',
|
||||||
|
|||||||
@@ -15,9 +15,9 @@ The below tables can be used to reference issues with a particular model, and se
|
|||||||
|
|
||||||
::: details OpenCore Patcher application
|
::: details OpenCore Patcher application
|
||||||
The patcher application requires **OS X Yosemite 10.10** or later to run.
|
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.
|
* 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 (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 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, 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
|
### 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, 15-inch, Mid 2015) | `MacBookPro11,4`<br>`MacBookPro11,5` | ^^ |
|
||||||
| MacBook Pro (Retina, 13-inch, Early 2015) | `MacBookPro12,1` | ^^ |
|
| 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, 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 (15-inch, 2016) | `MacBookPro13,3` | ^^ |
|
||||||
| MacBook Pro (13-inch, 2017, 2 Thunderbolt 3 ports) | `MacBookPro14,1` | - Supported by Apple |
|
| 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` | ^^ |
|
| 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` | ^^ |
|
| 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` | ^^ |
|
| 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 (15-inch, 2018)<br>MacBook Pro (15-inch, 2019) | `MacBookPro15,1` | ^^ |
|
||||||
| MacBook Pro (13-inch, 2019, 2 Thunderbolt 3 ports) | `MacBookPro15,4` | ^^ |
|
| MacBook Pro (13-inch, 2019, 2 Thunderbolt 3 ports) | `MacBookPro15,4` | ^^ |
|
||||||
| MacBook Pro (16-inch, 2019) | `MacBookPro16,1`<br>`MacBookPro16,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 (21.5-inch, Late 2015) | `iMac16,1` | ^^ |
|
||||||
| iMac (Retina 4K, 21.5-inch, Late 2015) | `iMac16,2` | ^^ |
|
| iMac (Retina 4K, 21.5-inch, Late 2015) | `iMac16,2` | ^^ |
|
||||||
| iMac (Retina 5K, 27-inch, Late 2015) | `iMac17,1` | ^^ |
|
| 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 4K, 21.5-inch, 2017) | `iMac18,2` | ^^ |
|
||||||
| iMac (Retina 5K, 27-inch, 2017) | `iMac18,3` | ^^ |
|
| 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 4K, 21.5-inch, 2019) | `iMac19,2` | ^^ |
|
||||||
| iMac (Retina 5K, 27-inch, 2020) | `iMac20,1`<br>`iMac20,2` | ^^ |
|
| iMac (Retina 5K, 27-inch, 2020) | `iMac20,1`<br>`iMac20,2` | ^^ |
|
||||||
| iMac Pro (2017) | `iMacPro1,1` | ^^ |
|
| 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 |
|
| 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 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<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 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 (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 (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 |
|
| 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
|
## 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.
|
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.
|
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.
|
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 |
|
| Listing Patches | Patching Finished |
|
||||||
| :--- | :--- |
|
| :--- | :--- |
|
||||||
|  |  |
|
|  |  |
|
||||||
|
|
||||||
|
|
||||||
:::warning
|
:::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:
|
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
|
## 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)
|
* [USB 1.1 (OHCI/UHCI) Support](#usb-11-ohciuhci-support)
|
||||||
* [Graphics support and issues](#graphics-support-and-issues)
|
* [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
|
### 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:
|
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)
|
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
|
Go into terminal and first mount the disk by typing
|
||||||
```sh
|
```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.
|
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.
|
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
|
::: 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.**
|
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.
|
**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 |
|
| Mac by name | Native SMBIOS | Spoof SMBIOS |
|
||||||
|-------------|---------------|--------------|--------|-----------|
|
|-------------|---------------|--------------|
|
||||||
| MacBook Air Early 2015 11" / 13" | MacBookAir7,x | MacBookAir8,1 | <span style="color:red"> NO </span> | N/A |
|
| MacBook Air Early 2015 11" / 13" | MacBookAir7,x | MacBookAir8,1 |
|
||||||
| MacBook Pro Early 2015 13" | MacBookPro12,x | MacBookPro14,1 | ^^ | ^^ |
|
| MacBook Pro Early 2015 13" | MacBookPro12,x | MacBookPro14,1 |
|
||||||
| MacBook Pro Mid 2015 15" | MacBookPro11,4 / 11,5 | MacBookPro14,3 | ^^ | ^^
|
| MacBook Pro Mid 2015 15" | MacBookPro11,4 / 11,5 | MacBookPro14,3 |
|
||||||
| iMac Late 2015 21" | iMac16,x | iMac18,2 | ^^ | ^^
|
| 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 mini Late 2014 | Macmini7,x | MacMini8,1 |
|
||||||
| Mac Pro Late 2013 | MacPro6,x | MacPro7,1 | <span style="color:red"> NO </span> | N/A |
|
| Mac Pro Late 2013 | MacPro6,x | MacPro7,1 |
|
||||||
|
|
||||||
:::
|
:::
|
||||||
|
|
||||||
::: details macOS Monterey
|
::: 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)
|
[](../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.
|
**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 |
|
| Mac by name | Native SMBIOS | Spoof SMBIOS |
|
||||||
|-------------|---------------|--------------|--------|-----------|
|
|-------------|---------------|--------------|
|
||||||
| MacBook Air Early 2015 11" / 13" | MacBookAir7,x | MacBookAir8,1 | <span style="color:#30BCD5"> YES </span> | Hzlph |
|
| MacBook Air Early 2015 11" / 13" | MacBookAir7,x | MacBookAir8,1 |
|
||||||
| MacBook Pro Early 2015 13" | MacBookPro12,x | MacBookPro13,1 | ^^ | ^^ |
|
| MacBook Pro Early 2015 13" | MacBookPro12,x | MacBookPro13,1 |
|
||||||
| MacBook Pro Mid 2015 15" | MacBookPro11,4 / 11,5 | MacBookPro13,3 | ^^ | ^^
|
| MacBook Pro Mid 2015 15" | MacBookPro11,4 / 11,5 | MacBookPro13,3 |
|
||||||
| iMac Late 2015 21" | iMac16,x | iMac18,2 | ^^ | ^^
|
| 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 mini Late 2014 | Macmini7,x | MacMini8,1 |
|
||||||
| Mac Pro Late 2013 | MacPro6,x | MacPro7,1 | <span style="color:#30BCD5"> YES </span> | Crystall1nedev |
|
| 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
|
## 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:
|
* Due to hardware and firmware limitations, UEFI Windows installations are only recommended on the following machines:
|
||||||
|
|
||||||
* 2015 MacBook or newer (MacBook8,x+)
|
* 2015 MacBook or newer (`MacBook8,x`+)
|
||||||
* 2011 MacBook Air or newer (MacBookAir4,x+)
|
* 2011 MacBook Air or newer (`MacBookAir4,x`+)
|
||||||
* 2011 MacBook Pro or newer (MacBookPro8,x+)
|
* 2011 MacBook Pro or newer (`MacBookPro8,x`+)
|
||||||
* 2011 Mac mini or newer (Macmini5,x+)
|
* 2011 Mac mini or newer (`Macmini5,x`+)
|
||||||
* 2009[^1] Mac Pro or newer (MacPro4,1+), upgraded GPU is preferred
|
* 2009* Mac Pro or newer (`MacPro4,1`+), upgraded GPU is preferred
|
||||||
* 2010 iMac or newer (iMac11,x+), upgraded GPU is preferred
|
* 2010 iMac or newer (`iMac11,x`+), upgraded GPU is preferred
|
||||||
* 2009[^2] Xserve (Xserve3,1), 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.
|
*`MacPro4,1`, `MacPro5,1`, and `Xserve3,1` systems experience issues with the Windows installer, follow the DISM installation section for instructions.
|
||||||
[^2]: Theoretically supported, not tested. Follow DISM installation section
|
|
||||||
|
|
||||||
If your machine is not listed, UEFI Windows will likely still install, but you may face stability/driver issues.
|
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
|
## 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
|
:::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
|
### 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).
|
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
|
### 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.
|
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
|
:::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
|
### 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>
|
<key>Enabled</key>
|
||||||
<false/>
|
<false/>
|
||||||
<key>MaxKernel</key>
|
<key>MaxKernel</key>
|
||||||
<string>22.99.99</string>
|
<string></string>
|
||||||
<key>MinKernel</key>
|
<key>MinKernel</key>
|
||||||
<string>18.0.0</string>
|
<string>18.0.0</string>
|
||||||
<key>BundlePath</key>
|
<key>BundlePath</key>
|
||||||
@@ -1377,7 +1377,7 @@
|
|||||||
<key>ExecutablePath</key>
|
<key>ExecutablePath</key>
|
||||||
<string>Contents/MacOS/AppleUSBOHCI</string>
|
<string>Contents/MacOS/AppleUSBOHCI</string>
|
||||||
<key>MaxKernel</key>
|
<key>MaxKernel</key>
|
||||||
<string></string>
|
<string>23.0.0</string>
|
||||||
<key>MinKernel</key>
|
<key>MinKernel</key>
|
||||||
<string>22.0.0</string>
|
<string>22.0.0</string>
|
||||||
<key>PlistPath</key>
|
<key>PlistPath</key>
|
||||||
@@ -1395,7 +1395,7 @@
|
|||||||
<key>ExecutablePath</key>
|
<key>ExecutablePath</key>
|
||||||
<string>Contents/MacOS/AppleUSBOHCIPCI</string>
|
<string>Contents/MacOS/AppleUSBOHCIPCI</string>
|
||||||
<key>MaxKernel</key>
|
<key>MaxKernel</key>
|
||||||
<string></string>
|
<string>23.0.0</string>
|
||||||
<key>MinKernel</key>
|
<key>MinKernel</key>
|
||||||
<string>22.0.0</string>
|
<string>22.0.0</string>
|
||||||
<key>PlistPath</key>
|
<key>PlistPath</key>
|
||||||
@@ -1413,7 +1413,7 @@
|
|||||||
<key>ExecutablePath</key>
|
<key>ExecutablePath</key>
|
||||||
<string>Contents/MacOS/AppleUSBUHCI</string>
|
<string>Contents/MacOS/AppleUSBUHCI</string>
|
||||||
<key>MaxKernel</key>
|
<key>MaxKernel</key>
|
||||||
<string></string>
|
<string>23.0.0</string>
|
||||||
<key>MinKernel</key>
|
<key>MinKernel</key>
|
||||||
<string>22.0.0</string>
|
<string>22.0.0</string>
|
||||||
<key>PlistPath</key>
|
<key>PlistPath</key>
|
||||||
@@ -1431,7 +1431,7 @@
|
|||||||
<key>ExecutablePath</key>
|
<key>ExecutablePath</key>
|
||||||
<string>Contents/MacOS/AppleUSBUHCIPCI</string>
|
<string>Contents/MacOS/AppleUSBUHCIPCI</string>
|
||||||
<key>MaxKernel</key>
|
<key>MaxKernel</key>
|
||||||
<string></string>
|
<string>23.0.0</string>
|
||||||
<key>MinKernel</key>
|
<key>MinKernel</key>
|
||||||
<string>22.0.0</string>
|
<string>22.0.0</string>
|
||||||
<key>PlistPath</key>
|
<key>PlistPath</key>
|
||||||
@@ -1707,6 +1707,24 @@
|
|||||||
<key>PlistPath</key>
|
<key>PlistPath</key>
|
||||||
<string>Contents/Info.plist</string>
|
<string>Contents/Info.plist</string>
|
||||||
</dict>
|
</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>
|
<dict>
|
||||||
<key>Arch</key>
|
<key>Arch</key>
|
||||||
<string>x86_64</string>
|
<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.
|
# Created by Rodion Shingarev on 13.04.19.
|
||||||
|
# Modified by Jazzzny for OpenCore Legacy Patcher on 06.10.23.
|
||||||
#
|
#
|
||||||
OCPath="$1"
|
OCPath="$1"
|
||||||
|
UtilsPath="$PWD"
|
||||||
|
|
||||||
if [ "${OCPath}" = "" ]; then
|
if [ "${OCPath}" = "" ]; then
|
||||||
echo "Usage ./create_vault.sh path/to/EFI/OC"
|
echo "Usage ./create_vault.sh path/to/EFI/OC"
|
||||||
@@ -17,54 +19,75 @@ if [ ! -d "${OCPath}" ]; then
|
|||||||
exit 1
|
exit 1
|
||||||
fi
|
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!"
|
echo "Unix environment is broken!"
|
||||||
exit 1
|
exit 1
|
||||||
fi
|
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() {
|
abort() {
|
||||||
/bin/rm -rf vault.plist vault.sig /tmp/vault_hash
|
/bin/rm -rf vault.plist vault.sig /tmp/vault_hash
|
||||||
echo "Fatal error: ${1}!"
|
echo "Fatal error: ${1}!"
|
||||||
exit 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}"
|
cd "${OCPath}" || abort "Failed to reach ${OCPath}"
|
||||||
/bin/rm -rf vault.plist vault.sig || abort "Failed to cleanup"
|
/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 \
|
/usr/bin/find . -not -path '*/\.*' -type f \
|
||||||
\( ! -iname ".*" \) \
|
\( ! -iname ".*" \) \
|
||||||
\( ! -iname "vault.*" \) \
|
\( ! -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#"./"}"
|
fname="${fname#"./"}"
|
||||||
wname="${fname//\//\\\\}"
|
wname="${fname//\//\\\\}"
|
||||||
shasum=$(/usr/bin/shasum -a 256 "${fname}") || abort "Failed to hash ${fname}"
|
sha=$("${UtilsPath}"/openssl sha256 "${fname}" | /usr/bin/awk '{print $2}') || abort "Failed to hash ${fname}"
|
||||||
sha=$(echo "$shasum" | /usr/bin/sed 's/^\([a-f0-9]\{64\}\).*/\1/') || abort "Illegit hashsum"
|
|
||||||
if [ "${#sha}" != 64 ] || [ "$(echo "$sha"| /usr/bin/sed 's/^[a-f0-9]*$//')" ]; then
|
if [ "${#sha}" != 64 ] || [ "$(echo "$sha"| /usr/bin/sed 's/^[a-f0-9]*$//')" ]; then
|
||||||
abort "Got invalid hash: ${sha}!"
|
abort "Got invalid hash: ${sha}!"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
echo "${wname}: ${sha}"
|
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
|
||||||
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!"
|
|
||||||
done
|
done
|
||||||
|
|
||||||
/bin/rm -rf /tmp/vault_hash
|
/bin/rm -rf /tmp/vault_hash
|
||||||
|
|
||||||
echo "All done!"
|
write_footer vault.plist
|
||||||
|
|
||||||
exit 0
|
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
|
#!/bin/sh
|
||||||
|
|
||||||
|
# Modified by Jazzzny for OpenCore Legacy Patcher on 06.10.23.
|
||||||
|
|
||||||
abort() {
|
abort() {
|
||||||
echo "Fatal error: ${1}!"
|
echo "Fatal error: ${1}!"
|
||||||
exit 1
|
exit 1
|
||||||
}
|
}
|
||||||
|
|
||||||
|
# shellcheck disable=SC2317
|
||||||
cleanup() {
|
cleanup() {
|
||||||
echo "Cleaning up keys"
|
|
||||||
rm -rf "${KeyPath}"
|
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!"
|
abort "Unix environment is broken!"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
@@ -22,10 +24,8 @@ if [ "$OCPath" = "" ]; then
|
|||||||
OCPath=../../EFI/OC
|
OCPath=../../EFI/OC
|
||||||
fi
|
fi
|
||||||
|
|
||||||
KeyPath="/tmp/Keys-$(/usr/bin/uuidgen)"
|
KeyPath="/tmp/$(/usr/bin/uuidgen)"
|
||||||
OCBin="${OCPath}/OpenCore.efi"
|
OCBin="${OCPath}/OpenCore.efi"
|
||||||
RootCA="${KeyPath}/ca.pem"
|
|
||||||
PrivKey="${KeyPath}/privatekey.cer"
|
|
||||||
PubKey="${KeyPath}/vault.pub"
|
PubKey="${KeyPath}/vault.pub"
|
||||||
|
|
||||||
if [ ! -d "${OCPath}" ]; then
|
if [ ! -d "${OCPath}" ]; then
|
||||||
@@ -58,31 +58,14 @@ fi
|
|||||||
|
|
||||||
./create_vault.sh "${OCPath}" || abort "create_vault.sh returns errors!"
|
./create_vault.sh "${OCPath}" || abort "create_vault.sh returns errors!"
|
||||||
|
|
||||||
if [ ! -f "${RootCA}" ]; then
|
echo "Signing OpenCore..."
|
||||||
/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}..."
|
|
||||||
./RsaTool -sign "${OCPath}/vault.plist" "${OCPath}/vault.sig" "${PubKey}" || abort "Failed to patch ${PubKey}"
|
./RsaTool -sign "${OCPath}/vault.plist" "${OCPath}/vault.sig" "${PubKey}" || abort "Failed to patch ${PubKey}"
|
||||||
|
off=$(($(./strings -a -t d "${OCBin}" | /usr/bin/grep "=BEGIN OC VAULT=" | /usr/bin/awk '{print $1}') + 16))
|
||||||
echo "Bin-patching ${OCBin}..."
|
|
||||||
off=$(($(/usr/bin/strings -a -t d "${OCBin}" | /usr/bin/grep "=BEGIN OC VAULT=" | /usr/bin/cut -f1 -d' ') + 16))
|
|
||||||
if [ "${off}" -le 16 ]; then
|
if [ "${off}" -le 16 ]; then
|
||||||
abort "${OCBin} is borked"
|
abort "${OCBin} is borked"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
/bin/dd of="${OCBin}" if="${PubKey}" bs=1 seek="${off}" count=528 conv=notrunc || abort "Failed to bin-patch ${OCBin}"
|
/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
|
exit 0
|
||||||
|
|||||||
BIN
payloads/Tools/CreateVault/strings
Executable file
BIN
payloads/Tools/CreateVault/strings
Executable file
Binary file not shown.
@@ -5,3 +5,4 @@ pyinstaller
|
|||||||
packaging
|
packaging
|
||||||
py_sip_xnu
|
py_sip_xnu
|
||||||
py-applescript
|
py-applescript
|
||||||
|
markdown2
|
||||||
@@ -65,8 +65,6 @@ class BuildOpenCore:
|
|||||||
]:
|
]:
|
||||||
function(self.model, self.constants, self.config)
|
function(self.model, self.constants, self.config)
|
||||||
|
|
||||||
self.config["NVRAM"]["Add"]["7C436110-AB2A-4BBB-A880-FE41995C9F82"]["boot-args"] += " -lilubetaall"
|
|
||||||
|
|
||||||
# Work-around ocvalidate
|
# Work-around ocvalidate
|
||||||
if self.constants.validate is False:
|
if self.constants.validate is False:
|
||||||
logging.info("- Adding bootmgfw.efi BlessOverride")
|
logging.info("- Adding bootmgfw.efi BlessOverride")
|
||||||
|
|||||||
@@ -215,12 +215,13 @@ class BuildFirmware:
|
|||||||
# CSM check
|
# CSM check
|
||||||
# For model support, check for GUID in firmware and as well as Bootcamp Assistant's Info.plist ('PreUEFIModels' key)
|
# 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
|
# 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":
|
if Path(self.constants.drivers_path / Path("OpenLegacyBoot.efi")).exists():
|
||||||
# logging.info("- Enabling CSM support")
|
if smbios_data.smbios_dictionary[self.model]["CPU Generation"] <= cpu_data.CPUGen.ivy_bridge.value and self.model != "MacPro6,1":
|
||||||
# support.BuildSupport(self.model, self.constants, self.config).get_efi_binary_by_path("OpenLegacyBoot.efi", "UEFI", "Drivers")["Enabled"] = True
|
logging.info("- Enabling CSM support")
|
||||||
# else:
|
support.BuildSupport(self.model, self.constants, self.config).get_efi_binary_by_path("OpenLegacyBoot.efi", "UEFI", "Drivers")["Enabled"] = True
|
||||||
# # Shipped alongside OpenCorePkg, so remove if unused
|
else:
|
||||||
# (self.constants.drivers_path / Path("OpenLegacyBoot.efi")).unlink()
|
# Shipped alongside OpenCorePkg, so remove if unused
|
||||||
|
(self.constants.drivers_path / Path("OpenLegacyBoot.efi")).unlink()
|
||||||
|
|
||||||
def _firmware_compatibility_handling(self) -> None:
|
def _firmware_compatibility_handling(self) -> None:
|
||||||
"""
|
"""
|
||||||
@@ -232,7 +233,7 @@ class BuildFirmware:
|
|||||||
# Patches IOPCIConfigurator.cpp's IOPCIIsHotplugPort to skip configRead16/32 calls
|
# Patches IOPCIConfigurator.cpp's IOPCIIsHotplugPort to skip configRead16/32 calls
|
||||||
# Credit to CaseySJ for original discovery:
|
# Credit to CaseySJ for original discovery:
|
||||||
# - Patch: https://github.com/AMD-OSX/AMD_Vanilla/pull/196
|
# - 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
|
# 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,
|
# 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")
|
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
|
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
|
# 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
|
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:
|
if self.constants.set_vmm_cpuid is True:
|
||||||
|
|||||||
@@ -43,6 +43,7 @@ class BuildMiscellaneous:
|
|||||||
self._debug_handling()
|
self._debug_handling()
|
||||||
self._cpu_friend_handling()
|
self._cpu_friend_handling()
|
||||||
self._general_oc_handling()
|
self._general_oc_handling()
|
||||||
|
self._t1_handling()
|
||||||
|
|
||||||
|
|
||||||
def _feature_unlock_handling(self) -> None:
|
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
|
# - 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
|
# 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 (
|
if (
|
||||||
smbios_data.smbios_dictionary[self.model]["CPU Generation"] <= cpu_data.CPUGen.penryn.value or \
|
smbios_data.smbios_dictionary[self.model]["CPU Generation"] <= cpu_data.CPUGen.penryn.value or \
|
||||||
self.model in ["MacPro4,1", "MacPro5,1", "Xserve3,1"]
|
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")
|
logging.info(f"- Setting custom OpenCore picker timeout to {self.constants.oc_timeout} seconds")
|
||||||
self.config["Misc"]["Boot"]["Timeout"] = self.constants.oc_timeout
|
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")
|
logging.info("- Setting Vault configuration")
|
||||||
self.config["Misc"]["Security"]["Vault"] = "Secure"
|
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:
|
def _t1_handling(self) -> None:
|
||||||
"""
|
"""
|
||||||
@@ -351,9 +356,8 @@ class BuildMiscellaneous:
|
|||||||
logging.info("- Enabling T1 Security Chip support")
|
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.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).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("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)
|
support.BuildSupport(self.model, self.constants, self.config).enable_kext("AppleKeyStore.kext", self.constants.t1_key_store_version, self.constants.t1_key_store_path)
|
||||||
@@ -108,17 +108,11 @@ class BuildSupport:
|
|||||||
if self.constants.vault is False:
|
if self.constants.vault is False:
|
||||||
return
|
return
|
||||||
|
|
||||||
if utilities.check_command_line_tools() is False:
|
logging.info("- Vaulting EFI\n=========================================")
|
||||||
# sign.command checks for the existence of '/usr/bin/strings' however does not verify whether it's executable
|
popen = subprocess.Popen([str(self.constants.vault_path), f"{self.constants.oc_folder}/"], stdout=subprocess.PIPE, stderr=subprocess.STDOUT, universal_newlines=True)
|
||||||
# sign.command will continue to run and create an unbootable OpenCore.efi due to the missing strings binary
|
for stdout_line in iter(popen.stdout.readline, ""):
|
||||||
# macOS has dummy binaries that just reroute to the actual binaries after you install Xcode's Command Line Tools
|
logging.info(stdout_line.strip())
|
||||||
logging.info("- Missing Command Line tools, skipping Vault for saftey reasons")
|
logging.info("=========================================")
|
||||||
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)
|
|
||||||
|
|
||||||
|
|
||||||
def validate_pathing(self) -> None:
|
def validate_pathing(self) -> None:
|
||||||
"""
|
"""
|
||||||
|
|||||||
@@ -13,8 +13,8 @@ from data import os_data
|
|||||||
class Constants:
|
class Constants:
|
||||||
def __init__(self) -> None:
|
def __init__(self) -> None:
|
||||||
# Patcher Versioning
|
# Patcher Versioning
|
||||||
self.patcher_version: str = "1.0.1" # OpenCore-Legacy-Patcher
|
self.patcher_version: str = "1.1.0" # OpenCore-Legacy-Patcher
|
||||||
self.patcher_support_pkg_version: str = "1.3.3" # PatcherSupportPkg
|
self.patcher_support_pkg_version: str = "1.4.2" # PatcherSupportPkg
|
||||||
self.copyright_date: str = "Copyright © 2020-2023 Dortania"
|
self.copyright_date: str = "Copyright © 2020-2023 Dortania"
|
||||||
self.patcher_name: str = "OpenCore Legacy Patcher"
|
self.patcher_name: str = "OpenCore Legacy Patcher"
|
||||||
|
|
||||||
@@ -36,7 +36,7 @@ class Constants:
|
|||||||
self.lilu_version: str = "1.6.7" # Lilu
|
self.lilu_version: str = "1.6.7" # Lilu
|
||||||
self.whatevergreen_version: str = "1.6.6" # WhateverGreen
|
self.whatevergreen_version: str = "1.6.6" # WhateverGreen
|
||||||
self.whatevergreen_navi_version: str = "1.6.6-Navi" # WhateverGreen (Navi Patch)
|
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.nvmefix_version: str = "1.1.1" # NVMeFix
|
||||||
self.applealc_version: str = "1.6.3" # AppleALC
|
self.applealc_version: str = "1.6.3" # AppleALC
|
||||||
self.restrictevents_version: str = "1.1.3" # RestrictEvents
|
self.restrictevents_version: str = "1.1.3" # RestrictEvents
|
||||||
@@ -67,9 +67,9 @@ class Constants:
|
|||||||
self.aicpupm_version: str = "1.0.0" # AppleIntelCPUPowerManagement/Client
|
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.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.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.1.0" # AppleSSE (13.6 - T1 support)
|
||||||
self.t1_sse_version: str = "1.0.0" # AppleSSE (13.5 - T1 support)
|
self.t1_key_store_version: str = "1.1.0" # AppleKeyStore (13.6 - T1 support)
|
||||||
self.t1_key_store_version: str = "1.0.0" # AppleKeyStore (13.5 - T1 support)
|
self.t1_corecrypto_version: str = "1.0.0" # corecrypto (13.6 - T1 support)
|
||||||
|
|
||||||
## Apple - Dortania Modified
|
## Apple - Dortania Modified
|
||||||
self.bcm570_version: str = "1.0.2" # CatalinaBCM5701Ethernet
|
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.aspp_override_version: str = "1.0.1" # ACPI_SMC_PlatformPlugin Override
|
||||||
self.ecm_override_version: str = "1.0.0" # AppleUSBECM Override
|
self.ecm_override_version: str = "1.0.0" # AppleUSBECM Override
|
||||||
self.rsrhelper_version: str = "1.0.0" # RSRHelper
|
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
|
self.amfipass_compatibility_version: str = "1.2.1" # Minimum AMFIPass version required
|
||||||
|
|
||||||
## Syncretic
|
## Syncretic
|
||||||
@@ -439,14 +439,14 @@ class Constants:
|
|||||||
def t1_key_store_path(self):
|
def t1_key_store_path(self):
|
||||||
return self.payload_kexts_path / Path(f"Misc/AppleKeyStore-v{self.t1_key_store_version}.zip")
|
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
|
@property
|
||||||
def t1_sse_path(self):
|
def t1_sse_path(self):
|
||||||
return self.payload_kexts_path / Path(f"Misc/AppleSSE-v{self.t1_sse_version}.zip")
|
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
|
@property
|
||||||
def mousse_path(self):
|
def mousse_path(self):
|
||||||
return self.payload_kexts_path / Path(f"SSE/AAAMouSSE-v{self.mousse_version}.zip")
|
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
|
ambient_light_sensor: Optional[bool] = False
|
||||||
third_party_sata_ssd: Optional[bool] = False
|
third_party_sata_ssd: Optional[bool] = False
|
||||||
pcie_webcam: Optional[bool] = False
|
pcie_webcam: Optional[bool] = False
|
||||||
|
t1_chip: Optional[bool] = False
|
||||||
secure_boot_model: Optional[str] = None
|
secure_boot_model: Optional[str] = None
|
||||||
secure_boot_policy: Optional[int] = None
|
secure_boot_policy: Optional[int] = None
|
||||||
oclp_sys_version: Optional[str] = None
|
oclp_sys_version: Optional[str] = None
|
||||||
@@ -659,6 +660,7 @@ class Computer:
|
|||||||
computer.cpu_probe()
|
computer.cpu_probe()
|
||||||
computer.bluetooth_probe()
|
computer.bluetooth_probe()
|
||||||
computer.topcase_probe()
|
computer.topcase_probe()
|
||||||
|
computer.t1_probe()
|
||||||
computer.ambient_light_sensor_probe()
|
computer.ambient_light_sensor_probe()
|
||||||
computer.pcie_webcam_probe()
|
computer.pcie_webcam_probe()
|
||||||
computer.sata_disk_probe()
|
computer.sata_disk_probe()
|
||||||
@@ -936,6 +938,18 @@ class Computer:
|
|||||||
elif usb_device.device_id in usb_data.AppleIDs.AppleUSBMultiTouch:
|
elif usb_device.device_id in usb_data.AppleIDs.AppleUSBMultiTouch:
|
||||||
self.trackpad_type = "Modern"
|
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):
|
def sata_disk_probe(self):
|
||||||
# Get all SATA Controllers/Disks from 'system_profiler SPSerialATADataType'
|
# Get all SATA Controllers/Disks from 'system_profiler SPSerialATADataType'
|
||||||
# Determine whether SATA SSD is present and Apple-made
|
# Determine whether SATA SSD is present and Apple-made
|
||||||
|
|||||||
@@ -665,11 +665,15 @@ class PatchSysVolume:
|
|||||||
self._preflight_checks(required_patches, source_files_path)
|
self._preflight_checks(required_patches, source_files_path)
|
||||||
for patch in required_patches:
|
for patch in required_patches:
|
||||||
logging.info("- Installing Patchset: " + patch)
|
logging.info("- Installing Patchset: " + patch)
|
||||||
if "Remove" in required_patches[patch]:
|
for method_remove in ["Remove", "Remove Non-Root"]:
|
||||||
for remove_patch_directory in required_patches[patch]["Remove"]:
|
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)
|
logging.info("- Remove Files at: " + remove_patch_directory)
|
||||||
for remove_patch_file in required_patches[patch]["Remove"][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
|
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)
|
self._remove_file(destination_folder_path, remove_patch_file)
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -1,6 +1,10 @@
|
|||||||
# Copyright (C) 2022, Mykola Grymalyuk
|
# Copyright (C) 2022, Mykola Grymalyuk
|
||||||
|
# Copyright (c) 2023 Jazzzny
|
||||||
|
|
||||||
import wx
|
import wx
|
||||||
|
import wx.html2
|
||||||
|
import requests
|
||||||
|
import markdown2
|
||||||
import logging
|
import logging
|
||||||
import plistlib
|
import plistlib
|
||||||
import subprocess
|
import subprocess
|
||||||
@@ -51,19 +55,85 @@ class AutomaticSysPatch:
|
|||||||
logging.info(f"- Found new version: {version}")
|
logging.info(f"- Found new version: {version}")
|
||||||
|
|
||||||
app = wx.App()
|
app = wx.App()
|
||||||
frame = wx.Frame(None, -1, "OpenCore Legacy Patcher")
|
mainframe = wx.Frame(None, -1, "OpenCore Legacy Patcher")
|
||||||
dialog = wx.MessageDialog(
|
|
||||||
parent=frame,
|
ID_GITHUB = wx.NewId()
|
||||||
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?",
|
ID_UPDATE = wx.NewId()
|
||||||
caption="Update Available for OpenCore Legacy Patcher!",
|
|
||||||
style=wx.YES_NO | wx.CANCEL | wx.ICON_QUESTION
|
url = "https://api.github.com/repos/dortania/OpenCore-Legacy-Patcher/releases/latest"
|
||||||
)
|
response = requests.get(url).json()
|
||||||
dialog.SetYesNoCancelLabels("Download and install", "View on Github", "Ignore")
|
changelog = response["body"].split("## Asset Information")[0]
|
||||||
response = dialog.ShowModal()
|
|
||||||
if response == wx.ID_YES:
|
html_markdown = markdown2.markdown(changelog)
|
||||||
gui_entry.EntryPoint(self.constants).start(entry=gui_entry.SupportedEntryPoints.UPDATE_APP)
|
html_css = """
|
||||||
elif response == wx.ID_NO:
|
<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"])
|
webbrowser.open(dict["Github Link"])
|
||||||
|
elif result == ID_UPDATE:
|
||||||
|
gui_entry.EntryPoint(self.constants).start(entry=gui_entry.SupportedEntryPoints.UPDATE_APP)
|
||||||
|
|
||||||
|
|
||||||
return
|
return
|
||||||
|
|
||||||
if utilities.check_seal() is True:
|
if utilities.check_seal() is True:
|
||||||
@@ -127,6 +197,9 @@ class AutomaticSysPatch:
|
|||||||
if self._determine_if_versions_match():
|
if self._determine_if_versions_match():
|
||||||
self._determine_if_boot_matches()
|
self._determine_if_boot_matches()
|
||||||
|
|
||||||
|
def _onWebviewNav(self, event):
|
||||||
|
url = event.GetURL()
|
||||||
|
webbrowser.open(url)
|
||||||
|
|
||||||
def _determine_if_versions_match(self):
|
def _determine_if_versions_match(self):
|
||||||
"""
|
"""
|
||||||
|
|||||||
@@ -53,6 +53,7 @@ class DetectRootPatch:
|
|||||||
self.legacy_keyboard_backlight = False
|
self.legacy_keyboard_backlight = False
|
||||||
self.legacy_uhci_ohci = False
|
self.legacy_uhci_ohci = False
|
||||||
self.legacy_pcie_webcam = False
|
self.legacy_pcie_webcam = False
|
||||||
|
self.legacy_t1_chip = False
|
||||||
|
|
||||||
# Patch Requirements
|
# Patch Requirements
|
||||||
self.amfi_must_disable = False
|
self.amfi_must_disable = False
|
||||||
@@ -540,6 +541,10 @@ class DetectRootPatch:
|
|||||||
|
|
||||||
if self.constants.detected_os >= os_data.os_data.sonoma:
|
if self.constants.detected_os >= os_data.os_data.sonoma:
|
||||||
self.legacy_pcie_webcam = self.constants.computer.pcie_webcam
|
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:
|
if self._check_uhci_ohci() is True:
|
||||||
self.legacy_uhci_ohci = True
|
self.legacy_uhci_ohci = True
|
||||||
@@ -622,6 +627,7 @@ class DetectRootPatch:
|
|||||||
"Miscellaneous: Legacy Keyboard Backlight": self.legacy_keyboard_backlight,
|
"Miscellaneous: Legacy Keyboard Backlight": self.legacy_keyboard_backlight,
|
||||||
"Miscellaneous: Legacy USB 1.1": self.legacy_uhci_ohci,
|
"Miscellaneous: Legacy USB 1.1": self.legacy_uhci_ohci,
|
||||||
"Miscellaneous: PCIe FaceTime Camera": self.legacy_pcie_webcam,
|
"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: Requires AMFI exemption": self.amfi_must_disable,
|
||||||
"Settings: Supports Auxiliary Cache": not self.requires_root_kc,
|
"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,
|
"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:
|
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": 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:
|
if self.hardware_details["Miscellaneous: PCIe FaceTime Camera"] is True:
|
||||||
required_patches.update({"PCIe FaceTime Camera": all_hardware_patchset["Miscellaneous"]["PCIe FaceTime Camera"]})
|
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:
|
if required_patches:
|
||||||
host_os_float = float(f"{self.constants.detected_os}.{self.constants.detected_os_minor}")
|
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)
|
seconds = int(seconds)
|
||||||
time = ""
|
time = ""
|
||||||
|
|
||||||
if seconds == 0:
|
if 0 <= seconds < 60:
|
||||||
return "0m "
|
return "Less than a minute "
|
||||||
if seconds < 0:
|
if seconds < 0:
|
||||||
return "Indeterminate time "
|
return "Indeterminate time "
|
||||||
|
|
||||||
|
|||||||
@@ -50,7 +50,7 @@ class DownloadFrame(wx.Frame):
|
|||||||
title_label.SetFont(gui_support.font_factory(19, wx.FONTWEIGHT_BOLD))
|
title_label.SetFont(gui_support.font_factory(19, wx.FONTWEIGHT_BOLD))
|
||||||
title_label.Centre(wx.HORIZONTAL)
|
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)
|
progress_bar.Centre(wx.HORIZONTAL)
|
||||||
|
|
||||||
label_amount = wx.StaticText(frame, label="Preparing download", pos=(-1, progress_bar.GetPosition()[1] + progress_bar.GetSize()[1]))
|
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()
|
self.download_obj.download()
|
||||||
while self.download_obj.is_active():
|
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:
|
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)"
|
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
|
# Generate GUI for main menu
|
||||||
|
# Portions of this file Copyright (c) 2023 Jazzzny
|
||||||
|
|
||||||
import wx
|
import wx
|
||||||
|
import wx.html2
|
||||||
|
import markdown2
|
||||||
|
import requests
|
||||||
import sys
|
import sys
|
||||||
import logging
|
import logging
|
||||||
import threading
|
import threading
|
||||||
@@ -285,20 +290,8 @@ class MainFrame(wx.Frame):
|
|||||||
|
|
||||||
version = dict["Version"]
|
version = dict["Version"]
|
||||||
logging.info(f"New version: {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):
|
def on_build_and_install(self, event: wx.Event = None):
|
||||||
self.Hide()
|
self.Hide()
|
||||||
@@ -345,7 +338,81 @@ class MainFrame(wx.Frame):
|
|||||||
screen_location=self.GetPosition()
|
screen_location=self.GetPosition()
|
||||||
)
|
)
|
||||||
|
|
||||||
def on_update(self, oclp_url: str, oclp_version: str):
|
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(
|
gui_update.UpdateFrame(
|
||||||
parent=self,
|
parent=self,
|
||||||
title=self.title,
|
title=self.title,
|
||||||
@@ -354,3 +421,7 @@ class MainFrame(wx.Frame):
|
|||||||
url=oclp_url,
|
url=oclp_url,
|
||||||
version_label=oclp_version
|
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": {
|
"wrap_around 2": {
|
||||||
"type": "wrap_around",
|
"type": "wrap_around",
|
||||||
},
|
},
|
||||||
"APFS Trim": {
|
"OpenCore Vaulting": {
|
||||||
"type": "checkbox",
|
"type": "checkbox",
|
||||||
"value": self.constants.apfs_trim_timeout,
|
"value": self.constants.vault,
|
||||||
"variable": "apfs_trim_timeout",
|
"variable": "vault",
|
||||||
"description": [
|
"description": [
|
||||||
"Recommended for all users, however faulty",
|
"Digitally sign OpenCore to prevent",
|
||||||
"SSDs may benefit from disabling this.",
|
"tampering or corruption."
|
||||||
],
|
],
|
||||||
|
|
||||||
},
|
},
|
||||||
|
|
||||||
"Show OpenCore Boot Picker": {
|
"Show OpenCore Boot Picker": {
|
||||||
"type": "checkbox",
|
"type": "checkbox",
|
||||||
"value": self.constants.showpicker,
|
"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)
|
"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": {
|
"Advanced": {
|
||||||
"Miscellaneous": {
|
"Miscellaneous": {
|
||||||
@@ -836,6 +846,7 @@ class SettingsFrame(wx.Frame):
|
|||||||
"Export constants.py values to a txt file.",
|
"Export constants.py values to a txt file.",
|
||||||
],
|
],
|
||||||
},
|
},
|
||||||
|
|
||||||
"Developer Root Volume Patching": {
|
"Developer Root Volume Patching": {
|
||||||
"type": "title",
|
"type": "title",
|
||||||
},
|
},
|
||||||
|
|||||||
Reference in New Issue
Block a user