Compare commits

...

54 Commits
2.0.1 ... 2.0.2

Author SHA1 Message Date
Mykola Grymalyuk
15ad0c509e macos_installer_handler.py: Reference full diskutil path
Thanks @niklasravnsborg for the report!
2024-09-27 11:26:43 -06:00
Mykola Grymalyuk
0e0b1436b2 bluetooth.py: Set legacy patches on Macs with upgraded chipsets 2024-09-27 10:06:31 -06:00
Mykola Grymalyuk
528d32cc9d non_metal.py: Remove Metal wallpaper 2024-09-26 16:15:55 -06:00
Mykola Grymalyuk
8e15ed6d6e constants.py: Set to bug fix release 2024-09-26 11:47:22 -06:00
Mykola Grymalyuk
796b5bcd9e gui_settings.py: Adjust pathing for root settings 2024-09-25 11:40:35 -06:00
neon ball
a37571a8a5 Edit a bit more 2024-09-25 19:09:20 +03:00
neon ball
9796ecf75e Slight edit 2024-09-25 19:03:48 +03:00
neon ball
cade003b31 Update FAQ.md 2024-09-25 18:59:44 +03:00
neon ball
2d8c9c5beb Update FAQ.md 2024-09-25 18:40:56 +03:00
neon ball
0a138ee435 Update FAQ.md 2024-09-25 18:07:01 +03:00
neon ball
6b414526ac Update FAQ.md 2024-09-25 18:02:35 +03:00
neon ball
a67a6d6c67 Fix link 2024-09-25 17:59:35 +03:00
neon ball
da887e3722 Update FAQ.md 2024-09-25 17:59:13 +03:00
neon ball
e65b8386ab Fix typo 2024-09-25 11:01:44 +03:00
neon ball
0d7edc8e09 Update FAQ.md 2024-09-25 10:58:49 +03:00
neon ball
32080fdcc3 Update FAQ.md 2024-09-25 10:56:42 +03:00
neon ball
c2d9d01a24 Fix link 2024-09-24 23:17:37 +03:00
neon ball
cdb6603ed6 Update FAQ.md 2024-09-24 23:15:57 +03:00
neon ball
dbf7444009 Update FAQ.md 2024-09-24 23:11:44 +03:00
neon ball
c46133b0b5 Update FAQ.md 2024-09-24 23:11:31 +03:00
neon ball
dde558a951 Update TROUBLESHOOTING.md 2024-09-24 23:02:59 +03:00
neon ball
9bdce62f59 Remove "currently" repetition 2024-09-24 22:58:35 +03:00
neon ball
098a4f9661 Update FAQ.md 2024-09-24 22:55:23 +03:00
neon ball
d9f23b556c Fix link 2024-09-24 22:52:58 +03:00
neon ball
0f63ce2fde Move a part to troubleshooting 2024-09-24 22:51:16 +03:00
neon ball
adc58b417b Fix typo 2024-09-24 22:16:51 +03:00
neon ball
b1bb01af69 Update FAQ.md 2024-09-24 22:15:57 +03:00
neon ball
2751ca69de Add link 2024-09-24 21:55:51 +03:00
neon ball
e9744fffd6 Update FAQ.md 2024-09-24 21:52:11 +03:00
neon ball
e0e731b13a Update FAQ.md 2024-09-24 21:48:50 +03:00
neon ball
bb34bbb6a1 Fix typo 2024-09-24 21:47:50 +03:00
neon ball
c68afc2f8e Update FAQ.md 2024-09-24 21:47:08 +03:00
neon ball
55ed78f5b4 Fix typo 2024-09-24 21:38:08 +03:00
neon ball
c065aae29f Update FAQ.md 2024-09-24 21:37:31 +03:00
neon ball
8333c3d8ec Update FAQ.md 2024-09-24 21:28:53 +03:00
neon ball
b8b591a8ed Fix title 2024-09-24 20:02:28 +03:00
neon ball
4542287613 Add FAQ 2024-09-24 20:01:02 +03:00
neon ball
597b167285 Add files via upload 2024-09-24 20:00:22 +03:00
Mykola Grymalyuk
7e5f171210 gui_settings.py: Resolve Beachball defaults write 2024-09-23 11:09:23 -06:00
Eduardo Covas
861898272b Sync PatcherSupportPkg 2024-09-23 13:58:43 -03:00
Eduardo Covas
16ab3367f8 Sync CHANGELOG 2024-09-23 13:17:37 -03:00
Mykola Grymalyuk
9d43d66f5d patchsets: Update for GCN GVA logic 2024-09-23 09:54:27 -06:00
Mykola Grymalyuk
753cd6cf3f patchsets: Avoid downgrading AppleGVA on AMD Polaris+ GPUs 2024-09-23 09:45:56 -06:00
Mykola Grymalyuk
192dfb79ae patchsets: Add reference patch
Unused, only present for referencing
2024-09-23 09:45:30 -06:00
Mykola Grymalyuk
d7f3d09c14 non_metal.py: Downgrade screencapture 2024-09-23 09:34:00 -06:00
Mykola Grymalyuk
41a5731546 metal_3802.py: Add 15.1 RenderBox metallib 2024-09-23 09:33:35 -06:00
Mykola Grymalyuk
2e513b98ca contants.py: Sync PatcherSupportPkg 2024-09-23 09:32:51 -06:00
neon ball
5c1326881a Remove duplicate explanations 2024-09-21 16:55:31 +03:00
Dhinak G
1d6631f24d Update TROUBLESHOOTING.md (#1148)
Co-authored-by: daCaPo <daCaPo@users.noreply.github.com>
2024-09-18 11:19:57 -04:00
Eduardo Covas
61872a8b94 legacy_audio.py: fix kext linking on macOS Sequoia 2024-09-18 10:16:40 -03:00
neon ball
024559885d Fix link here as well 2024-09-17 17:25:02 +03:00
neon ball
3e0a2a2198 Fix link 2024-09-17 17:24:18 +03:00
neon ball
86be4acedb Fix argument in patch sys command 2024-09-17 17:19:44 +03:00
Mykola Grymalyuk
ce08129d4b nvidia_kepler.py: Fix build comparison 2024-09-16 13:28:53 -06:00
21 changed files with 322 additions and 37 deletions

View File

@@ -1,5 +1,24 @@
# OpenCore Legacy Patcher changelog # OpenCore Legacy Patcher changelog
## 2.0.2
- Fix Nvidia Kepler patches not installing on Monterey
- Fix `iMac7,1` and `iMac8,1` failing to apply root patches on macOS Sequoia
- Avoid downgrading AppleGVA stack on AMD GCN and newer GPUs
- Resolves VTDecoderXPC crashes
- Thanks @ausdauersportler for the catch!
- Resolve glitched widgets on 3802-based GPUs running macOS Sequoia 15.1
- Resolve CoreImage crashes on 3802-based GPUs running macOS Sequoia
- Resolve missing screen capture crop borders on non-Metal GPUs running macOS Sequoia
- Resolve TeraScale 2 HDCP kernel panic
- Resolve specific Wallpaper locking up on non-Metal GPUs running macOS Sequoia
- Removes unsupported Metal-based wallpaper (Macintosh Wallpaper)
- Resolve firmware upload incompatibilities on pre-2012 Macs with 2012+ Airport cards
- Thanks @ausdauersportler for the catch!
- Resolve `diskutil` failing to be located in the installer creation process
- Thanks @niklasravnsborg for the report!
- Increment binaries:
- PatcherSupportPkg 1.8.3 - release
## 2.0.1 ## 2.0.1
- Fix MacBookPro13,3 listing 'Available patches' after having installed all applicable patches - Fix MacBookPro13,3 listing 'Available patches' after having installed all applicable patches
- Fix Nvidia Tesla and Kepler patches not installing on Monterey (and older if applicable) - Fix Nvidia Tesla and Kepler patches not installing on Monterey (and older if applicable)

View File

@@ -69,6 +69,7 @@ module.exports = {
children: [ children: [
'START', 'START',
'MODELS', 'MODELS',
'FAQ',
] ]
}, },

75
docs/FAQ.md Normal file
View File

@@ -0,0 +1,75 @@
# FAQ
* [Why are the settings "not saving"?](#why-are-the-settings-not-saving)
* [Can I use the same USB install media as a universal installer?](#can-i-use-the-same-usb-install-media-as-a-universal-installer)
* [Can I use OTA updates?](#can-i-use-ota-updates)
* [Can I update to macOS betas?](#can-i-update-to-macos-betas)
* [Can I use automatic updates?](#can-i-use-automatic-updates)
* [Why is my system slow?](#why-is-my-system-slow)
* [Crashing in random places](#crashing-in-random-places)
* [Why isn't iPhone Mirroring working?](#why-isn-t-iphone-mirroring-working)
* [Where is Apple Intelligence?](#where-is-apple-intelligence)
## Why are the settings "not saving"?
OpenCore Legacy Patcher is a config build tool and as such the user interface always reverts to safe defaults, the user interface therefore **does not** reflect the status of settings. Settings are accounted for and saved by the OpenCore building process and you will always have to build OpenCore again after settings change.
Settings are saved to a config.plist file inside your EFI partition.
In SIP settings, booted SIP is reported in text form e.g. "0x803" but the checkboxes **do not** reflect the applied settings. Refer to [SIP Settings](https://dortania.github.io/OpenCore-Legacy-Patcher/POST-INSTALL.html#sip-settings) for more information.
## Can I use the same USB install media as a universal installer?
OpenCore configurations are device specific, due to different quirks needed for different systems. If you are building OpenCore for a different system that you're running, you will have to select the targeted model from Settings before building OpenCore on the USB media.
When building OpenCore on a different system, OCLP cannot be aware of all the hardware installed in the target, meaning safe defaults will be used. However, this may not be the most optimal experience especially with custom hardware. As such it's recommended to rebuild OpenCore **on device** to apply settings that are based on hardware detection, after the OS has been installed.
## Can I use OTA updates?
You can. However it is extremely recommended to use USB drive for major OS upgrades (such as 13 -> 14) to avoid larger issues from potentially occurring.
General updates are usually fine, though it is always a good idea to wait few days to see whether patches break and have to be fixed.
## Can I update to macOS betas?
If you are feeling brave and don't mind having to possibly recover your system. However, be advised that no help will be given in situations where a beta was installed.
## Can I use automatic updates?
It is extremely recommended to disable automatic updates (even downloading) when using OCLP, as Apple has recently changed the way automatic updates work. You can still manually initiate an update when you're ready to do so.
For a related "System version mismatch" error while root patching, refer to [System version mismatch error when root patching](https://dortania.github.io/OpenCore-Legacy-Patcher/TROUBLESHOOTING.html#system-version-mismatch-error-when-root-patching) for troubleshooting.
## Why is my system slow?
This can mean many things. Firstly, newer operating systems are harder to run and can appear more slow.
However, if your system is being **really** slow and you have no transparency in Dock and menubar, this typically indicates that root patches are not installed and as such there is no acceleration. Make sure to install root patches to get proper drivers and functionality. Refer to [Applying post install volume patches](https://dortania.github.io/OpenCore-Legacy-Patcher/POST-INSTALL.html#applying-post-install-volume-patches) and the [Troubleshooting](https://dortania.github.io/OpenCore-Legacy-Patcher/TROUBLESHOOTING.html) section for more information.
Patches can also break if automatic updates are enabled and an update modifies the system volume, refer to [System version mismatch error when root patching](https://dortania.github.io/OpenCore-Legacy-Patcher/TROUBLESHOOTING.html#system-version-mismatch-error-when-root-patching) for more information.
## Crashing in random places
There are two rather common things that can cause weird crashing. First is a process called "mediaanalysisd" on 3802-based systems* and secondly FeatureUnlock. You can try disabling these settings in OCLP to try and gain higher stability.
Be advised that by disabling FeatureUnlock, you will lose some macOS functionality. The features enabled by FeatureUnlock are listed [here](https://github.com/acidanthera/FeatureUnlock).
*3802 systems include:
* NVIDIA
* Kepler (600-800 series GPUs)
* Intel
* Ivy Bridge (3rd generation, HD 4000 series GPUs)
* Haswell (4th generation, HD/Iris 4000-5000 series GPUs)
These GPUs are typically met in systems from 2012-2015.
## Why isn't iPhone Mirroring working?
iPhone Mirroring requires a T2 chip, which means it will not be available on OCLP patched systems. The connection fails due to failure to establish T2 attestation.
## Where is Apple Intelligence?
Apple Intelligence requires Neural Engine, which is only found in Apple Silicon chips.

View File

@@ -58,9 +58,7 @@ All unsupported systems require lowered SIP.
Majority of unsupported systems from 2013 onward can enable full SIP. Majority of unsupported systems from 2013 onward can enable full SIP.
Pre-2012 systems, also known as "non-Metal" (includes Mac Pros without upgraded GPU), as well as NVIDIA Kepler and Intel HD 4000 GPUs require lowered SIP. Pre-2012 systems, also known as "non-Metal", as well as NVIDIA Kepler and Intel HD 4000 GPUs require lowered SIP. Mac Pros also require lowered SIP for stock WiFi cards and stock GPUs (due to root patching) but if you do not need WiFi (or you plan to upgrade it) and you're running on an upgraded GPU, there is no need for root patching and as such SIP can be fully enabled.
Some systems such as Mac Pros also require lowered SIP for stock WiFi cards and stock GPUs (due to root patching) but if you do not need WiFi (or you plan to upgrade it) and you're running on an upgraded GPU, there is no need for root patching and as such SIP can be fully enabled.
**Big Sur** **Big Sur**

View File

@@ -30,7 +30,7 @@ iPhone Mirroring requires T2 for attestation and Apple Intelligence requires an
* [Dual socket CPUs with Mac Pros and Xserve](#dual-socket-cpus-with-mac-pro-2008-and-xserve-2008) * [Dual socket CPUs with Mac Pros and Xserve](#dual-socket-cpus-with-mac-pro-2008-and-xserve-2008)
* [T2 Security chip](#t2-security-chip) * [T2 Security chip](#t2-security-chip)
* [USB 1.1 (OHCI/UHCI) Support](#usb-11-ohciuhci-support) * [USB 1.1 (OHCI/UHCI) Support](#usb-1-1-ohci-uhci-support)
* [Graphics support and issues](#graphics-support-and-issues) * [Graphics support and issues](#graphics-support-and-issues)
@@ -85,7 +85,7 @@ However, the driver has recently been weakened starting from Sonoma, which means
An alternative way is making sure to enable "Remote Login" in General -> Sharing before updating, which will enable SSH. An alternative way is making sure to enable "Remote Login" in General -> Sharing before updating, which will enable SSH.
That means you can take control using Terminal in another system by typing `ssh username@lan-ip-address` and your password. That means you can take control using Terminal in another system by typing `ssh username@lan-ip-address` and your password.
After that run Post Install Volume Patching by typing `/Applications/OpenCore-Patcher.app/Contents/MacOS/OpenCore-Patcher --patch-sys-vol` and finally `sudo reboot`. After that run Post Install Volume Patching by typing `/Applications/OpenCore-Patcher.app/Contents/MacOS/OpenCore-Patcher --patch_sys_vol` and finally `sudo reboot`.
![](./images/usb11-chart.png) ![](./images/usb11-chart.png)

View File

@@ -33,7 +33,7 @@ OpenCore Legacy Patcher 1.0.0 will support Sonoma for all models normally suppor
* [Bluetooth](#bluetooth) * [Bluetooth](#bluetooth)
* [T1 Security chip](#t1-security-chip) * [T1 Security chip](#t1-security-chip)
* [USB 1.1 (OHCI/UHCI) Support](#usb-11-ohciuhci-support) * [USB 1.1 (OHCI/UHCI) Support](#usb-1-1-ohci-uhci-support)
* [Graphics support and issues](#graphics-support-and-issues) * [Graphics support and issues](#graphics-support-and-issues)

View File

@@ -7,6 +7,7 @@ Here are some common errors that users may experience while using this patcher:
* [Stuck on `This version of Mac OS X is not supported on this platform` or (🚫) Prohibited Symbol](#stuck-on-this-version-of-mac-os-x-is-not-supported-on-this-platform-or-🚫-prohibited-symbol) * [Stuck on `This version of Mac OS X is not supported on this platform` or (🚫) Prohibited Symbol](#stuck-on-this-version-of-mac-os-x-is-not-supported-on-this-platform-or-🚫-prohibited-symbol)
* [Cannot boot macOS without the USB](#cannot-boot-macos-without-the-usb) * [Cannot boot macOS without the USB](#cannot-boot-macos-without-the-usb)
* [Infinite Recovery OS Booting](#infinite-recovery-os-reboot) * [Infinite Recovery OS Booting](#infinite-recovery-os-reboot)
* [System version mismatch error when root patching](#system-version-mismatch-error-when-root-patching)
* [Stuck on boot after root patching](#stuck-on-boot-after-root-patching) * [Stuck on boot after root patching](#stuck-on-boot-after-root-patching)
* ["Unable to resolve dependencies, error code 71" when root patching](#unable-to-resolve-dependencies-error-code-71-when-root-patching) * ["Unable to resolve dependencies, error code 71" when root patching](#unable-to-resolve-dependencies-error-code-71-when-root-patching)
* [Reboot when entering Hibernation (`Sleep Wake Failure`)](#reboot-when-entering-hibernation-sleep-wake-failure) * [Reboot when entering Hibernation (`Sleep Wake Failure`)](#reboot-when-entering-hibernation-sleep-wake-failure)
@@ -78,6 +79,14 @@ With OpenCore Legacy Patcher, we rely on Apple Secure Boot to ensure OS updates
* Note: Machines with modified root volumes will also result in an infinite recovery loop until integrity is restored. * Note: Machines with modified root volumes will also result in an infinite recovery loop until integrity is restored.
## System version mismatch error when root patching
Updates from now on modify the system volume already while downloading, which can lead to broken patches out of a sudden as well as a "version mismatch" error while root patching, since the operating system gets into a liminal state between two versions. The "version mismatch" error is a safeguard preventing OCLP from patching on a system that is in a weird liminal state, to avoid leading to a very likely boot failure.
Currently there is a "PurgePendingUpdate" tool available [on the Discord server](https://discord.com/channels/417165963327176704/1037474131526029362/1255993208966742108) you can download and then run it in Terminal, to get rid of a pending update. This may be integrated into OCLP later on, however there is currently no ETA.
Disabling automatic macOS updates is extremely recommended once recovered, to prevent it from happening again.
## Stuck on boot after root patching ## Stuck on boot after root patching
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)
@@ -238,7 +247,7 @@ For Macs using legacy USB 1.1 controllers, OpenCore Legacy Patcher can only rest
In macOS Sonoma, this seems to have been further weakened and some hubs may not be functional. In macOS Sonoma, this seems to have been further weakened and some hubs may not be functional.
Alternative way is making sure to enable "Remote Login" in General -> Sharing before updating, which will enable SSH. That means you can take control using Terminal in another system by typing `ssh username@lan-ip-address` and your password. After that run Post Install Volume Patching by typing `/Applications/OpenCore-Patcher.app/Contents/MacOS/OpenCore-Patcher --patch-sys-vol` and finally `sudo reboot`. Alternative way is making sure to enable "Remote Login" in General -> Sharing before updating, which will enable SSH. That means you can take control using Terminal in another system by typing `ssh username@lan-ip-address` and your password. After that run Post Install Volume Patching by typing `/Applications/OpenCore-Patcher.app/Contents/MacOS/OpenCore-Patcher --patch_sys_vol` and finally `sudo reboot`.
::: :::

View File

@@ -13,8 +13,8 @@ from .detections import device_probe
class Constants: class Constants:
def __init__(self) -> None: def __init__(self) -> None:
# Patcher Versioning # Patcher Versioning
self.patcher_version: str = "2.0.1" # OpenCore-Legacy-Patcher self.patcher_version: str = "2.0.2" # OpenCore-Legacy-Patcher
self.patcher_support_pkg_version: str = "1.8.0" # PatcherSupportPkg self.patcher_support_pkg_version: str = "1.8.3" # PatcherSupportPkg
self.copyright_date: str = "Copyright © 2020-2024 Dortania" self.copyright_date: str = "Copyright © 2020-2024 Dortania"
self.patcher_name: str = "OpenCore Legacy Patcher" self.patcher_name: str = "OpenCore Legacy Patcher"

View File

@@ -12,6 +12,7 @@ from .. import constants
from ..detections import device_probe from ..detections import device_probe
from ..datasets import ( from ..datasets import (
cpu_data,
smbios_data, smbios_data,
bluetooth_data bluetooth_data
) )
@@ -44,19 +45,26 @@ class BuildBluetooth:
self._prebuilt_assumption() self._prebuilt_assumption()
def _bluetooth_firmware_incompatibility_workaround(self) -> None:
"""
For Mac firmwares that are unable to perform firmware uploads.
Namely Macs with BCM2070 and BCM2046 chipsets, as well as pre-2012 Macs with upgraded chipsets.
"""
self.config["NVRAM"]["Add"]["7C436110-AB2A-4BBB-A880-FE41995C9F82"]["bluetoothInternalControllerInfo"] = binascii.unhexlify("0000000000000000000000000000")
self.config["NVRAM"]["Add"]["7C436110-AB2A-4BBB-A880-FE41995C9F82"]["bluetoothExternalDongleFailed"] = binascii.unhexlify("00")
self.config["NVRAM"]["Delete"]["7C436110-AB2A-4BBB-A880-FE41995C9F82"] += ["bluetoothInternalControllerInfo", "bluetoothExternalDongleFailed"]
def _on_model(self) -> None: def _on_model(self) -> None:
""" """
On-Model Hardware Detection Handling On-Model Hardware Detection Handling
""" """
if self.computer.bluetooth_chipset in ["BRCM2070 Hub", "BRCM2046 Hub"]: if self.computer.bluetooth_chipset in ["BRCM2070 Hub", "BRCM2046 Hub"]:
logging.info("- Fixing Legacy Bluetooth for macOS Monterey") logging.info("- Fixing Legacy Bluetooth for macOS Monterey")
support.BuildSupport(self.model, self.constants, self.config).enable_kext("BlueToolFixup.kext", self.constants.bluetool_version, self.constants.bluetool_path) support.BuildSupport(self.model, self.constants, self.config).enable_kext("BlueToolFixup.kext", self.constants.bluetool_version, self.constants.bluetool_path)
support.BuildSupport(self.model, self.constants, self.config).enable_kext("Bluetooth-Spoof.kext", self.constants.btspoof_version, self.constants.btspoof_path) support.BuildSupport(self.model, self.constants, self.config).enable_kext("Bluetooth-Spoof.kext", self.constants.btspoof_version, self.constants.btspoof_path)
self.config["NVRAM"]["Add"]["7C436110-AB2A-4BBB-A880-FE41995C9F82"]["boot-args"] += " -btlfxallowanyaddr" self.config["NVRAM"]["Add"]["7C436110-AB2A-4BBB-A880-FE41995C9F82"]["boot-args"] += " -btlfxallowanyaddr"
self.config["NVRAM"]["Add"]["7C436110-AB2A-4BBB-A880-FE41995C9F82"]["bluetoothInternalControllerInfo"] = binascii.unhexlify("0000000000000000000000000000") self._bluetooth_firmware_incompatibility_workaround()
self.config["NVRAM"]["Add"]["7C436110-AB2A-4BBB-A880-FE41995C9F82"]["bluetoothExternalDongleFailed"] = binascii.unhexlify("00")
self.config["NVRAM"]["Delete"]["7C436110-AB2A-4BBB-A880-FE41995C9F82"] += ["bluetoothInternalControllerInfo", "bluetoothExternalDongleFailed"]
elif self.computer.bluetooth_chipset == "BRCM20702 Hub": elif self.computer.bluetooth_chipset == "BRCM20702 Hub":
# BCM94331 can include either BCM2070 or BRCM20702 v1 Bluetooth chipsets # BCM94331 can include either BCM2070 or BRCM20702 v1 Bluetooth chipsets
# Note Monterey only natively supports BRCM20702 v2 (found with BCM94360) # Note Monterey only natively supports BRCM20702 v2 (found with BCM94360)
@@ -65,6 +73,13 @@ class BuildBluetooth:
if self.computer.wifi.chipset == device_probe.Broadcom.Chipsets.AirPortBrcm4360: if self.computer.wifi.chipset == device_probe.Broadcom.Chipsets.AirPortBrcm4360:
logging.info("- Fixing Legacy Bluetooth for macOS Monterey") logging.info("- Fixing Legacy Bluetooth for macOS Monterey")
support.BuildSupport(self.model, self.constants, self.config).enable_kext("BlueToolFixup.kext", self.constants.bluetool_version, self.constants.bluetool_path) support.BuildSupport(self.model, self.constants, self.config).enable_kext("BlueToolFixup.kext", self.constants.bluetool_version, self.constants.bluetool_path)
# Older Mac firmwares (pre-2012) don't support the new chipsets correctly (regardless of WiFi card)
if self.model in smbios_data.smbios_dictionary:
if smbios_data.smbios_dictionary[self.model]["CPU Generation"] < cpu_data.CPUGen.ivy_bridge.value:
logging.info("- Fixing Legacy Bluetooth for macOS Monterey")
support.BuildSupport(self.model, self.constants, self.config).enable_kext("BlueToolFixup.kext", self.constants.bluetool_version, self.constants.bluetool_path)
self._bluetooth_firmware_incompatibility_workaround()
elif self.computer.bluetooth_chipset == "3rd Party Bluetooth 4.0 Hub": elif self.computer.bluetooth_chipset == "3rd Party Bluetooth 4.0 Hub":
logging.info("- Detected 3rd Party Bluetooth Chipset") logging.info("- Detected 3rd Party Bluetooth Chipset")
support.BuildSupport(self.model, self.constants, self.config).enable_kext("BlueToolFixup.kext", self.constants.bluetool_version, self.constants.bluetool_path) support.BuildSupport(self.model, self.constants, self.config).enable_kext("BlueToolFixup.kext", self.constants.bluetool_version, self.constants.bluetool_path)
@@ -87,7 +102,5 @@ class BuildBluetooth:
support.BuildSupport(self.model, self.constants, self.config).enable_kext("BlueToolFixup.kext", self.constants.bluetool_version, self.constants.bluetool_path) support.BuildSupport(self.model, self.constants, self.config).enable_kext("BlueToolFixup.kext", self.constants.bluetool_version, self.constants.bluetool_path)
if smbios_data.smbios_dictionary[self.model]["Bluetooth Model"] <= bluetooth_data.bluetooth_data.BRCM2070.value: if smbios_data.smbios_dictionary[self.model]["Bluetooth Model"] <= bluetooth_data.bluetooth_data.BRCM2070.value:
self.config["NVRAM"]["Add"]["7C436110-AB2A-4BBB-A880-FE41995C9F82"]["boot-args"] += " -btlfxallowanyaddr" self.config["NVRAM"]["Add"]["7C436110-AB2A-4BBB-A880-FE41995C9F82"]["boot-args"] += " -btlfxallowanyaddr"
self.config["NVRAM"]["Add"]["7C436110-AB2A-4BBB-A880-FE41995C9F82"]["bluetoothInternalControllerInfo"] = binascii.unhexlify("0000000000000000000000000000") self._bluetooth_firmware_incompatibility_workaround()
self.config["NVRAM"]["Add"]["7C436110-AB2A-4BBB-A880-FE41995C9F82"]["bluetoothExternalDongleFailed"] = binascii.unhexlify("00")
self.config["NVRAM"]["Delete"]["7C436110-AB2A-4BBB-A880-FE41995C9F82"] += ["bluetoothInternalControllerInfo", "bluetoothExternalDongleFailed"]
support.BuildSupport(self.model, self.constants, self.config).enable_kext("Bluetooth-Spoof.kext", self.constants.btspoof_version, self.constants.btspoof_path) support.BuildSupport(self.model, self.constants, self.config).enable_kext("Bluetooth-Spoof.kext", self.constants.btspoof_version, self.constants.btspoof_path)

View File

@@ -135,7 +135,7 @@ class InstallerCreation():
with script_location.open("w") as script: with script_location.open("w") as script:
script.write(f'''#!/bin/bash script.write(f'''#!/bin/bash
erase_disk='diskutil eraseDisk HFS+ OCLP-Installer {disk}' erase_disk='/usr/sbin/diskutil eraseDisk HFS+ OCLP-Installer {disk}'
if $erase_disk; then if $erase_disk; then
"{createinstallmedia_path}" --volume /Volumes/OCLP-Installer --nointeraction{additional_args} "{createinstallmedia_path}" --volume /Volumes/OCLP-Installer --nointeraction{additional_args}
fi fi

View File

@@ -120,11 +120,10 @@ class AMDLegacyGCN(BaseHardware):
_base = {} _base = {}
if self._is_gpu_architecture_present(gpu_architectures=[device_probe.Intel.Archs.Skylake]) is False: # AMD GCN and newer GPUs can still use the native GVA stack
# Monterey GVA is not required for Intel Skylake iGPUs _base.update({
_base.update({ **MontereyGVA(self._xnu_major, self._xnu_minor, self._constants.detected_os_version).revert_patches(),
**MontereyGVA(self._xnu_major, self._xnu_minor, self._constants.detected_os_version).patches(), })
})
_base.update({ _base.update({
**MontereyOpenCL(self._xnu_major, self._xnu_minor, self._constants.detected_os_version).patches(), **MontereyOpenCL(self._xnu_major, self._xnu_minor, self._constants.detected_os_version).patches(),

View File

@@ -0,0 +1,127 @@
"""
amd_navi.py: AMD Navi detection (Not implemented, only present for reference)
"""
from ..base import BaseHardware, HardwareVariant, HardwareVariantGraphicsSubclass
from ...base import PatchType
from ...shared_patches.monterey_opencl import MontereyOpenCL
from ...shared_patches.amd_opencl import AMDOpenCL
from .....constants import Constants
from .....detections import device_probe
from .....datasets.os_data import os_data
class AMDNavi(BaseHardware):
def __init__(self, xnu_major, xnu_minor, os_build, global_constants: Constants) -> None:
super().__init__(xnu_major, xnu_minor, os_build, global_constants)
def name(self) -> str:
"""
Display name for end users
"""
return f"{self.hardware_variant()}: AMD Navi"
def present(self) -> bool:
"""
Targeting AMD Navi GPUs with CPUs lacking AVX2.0
"""
return self._is_gpu_architecture_present(
gpu_architectures=[
device_probe.AMD.Archs.Navi
]
) and "AVX2" not in self._computer.cpu.leafs and self._dortania_internal_check() is True
def native_os(self) -> bool:
"""
Dropped support with macOS 13, Ventura
"""
return self._xnu_major < os_data.ventura.value
def hardware_variant(self) -> HardwareVariant:
"""
Type of hardware variant
"""
return HardwareVariant.GRAPHICS
def hardware_variant_graphics_subclass(self) -> HardwareVariantGraphicsSubclass:
"""
Type of hardware variant subclass
"""
return HardwareVariantGraphicsSubclass.METAL_31001_GRAPHICS
def requires_kernel_debug_kit(self) -> bool:
"""
Apple no longer provides standalone kexts in the base OS
"""
return self._xnu_major >= os_data.ventura.value
def _model_specific_patches(self) -> dict:
"""
Model specific patches
"""
return {
"AMD Navi": {
PatchType.OVERWRITE_SYSTEM_VOLUME: {
"AMDRadeonX6000.kext": self._resolve_monterey_framebuffers(),
"AMDRadeonX6000Framebuffer.kext": "12.5",
"AMDRadeonVADriver2.bundle": "12.5",
"AMDRadeonX6000GLDriver.bundle": "12.5",
"AMDRadeonX6000MTLDriver.bundle": "12.5" if self._xnu_major < os_data.sequoia else "12.5-24",
"AMDRadeonX6000Shared.bundle": "12.5",
"AMDShared.bundle": "12.5",
}
}
}
def _model_specific_patches_extended(self) -> dict:
"""
Support mixed legacy and modern AMD GPUs
Specifically systems using AMD GCN 1-3 and Navi (ex. MacPro6,1 with eGPU)
Assume 'AMD Legacy GCN' patchset is installed alongside this
"""
if self._is_gpu_architecture_present([
device_probe.AMD.Archs.Legacy_GCN_7000,
device_probe.AMD.Archs.Legacy_GCN_8000,
device_probe.AMD.Archs.Legacy_GCN_9000
]) is False:
return {}
return {
"AMD Navi Extended": {
PatchType.OVERWRITE_SYSTEM_VOLUME: {
"/System/Library/Extensions": {
"AMDRadeonX6000HWServices.kext": "12.5",
},
},
},
}
def patches(self) -> dict:
"""
Patches for AMD Navi GPUs
"""
if self.native_os() is True:
return {}
return {
**MontereyOpenCL(self._xnu_major, self._xnu_minor, self._constants.detected_os_version).patches(),
**AMDOpenCL(self._xnu_major, self._xnu_minor, self._constants.detected_os_version).patches(),
**self._model_specific_patches(),
**self._model_specific_patches_extended(),
}

View File

@@ -139,10 +139,9 @@ class AMDPolaris(BaseHardware):
**AMDOpenCL(self._xnu_major, self._xnu_minor, self._constants.detected_os_version).patches(), **AMDOpenCL(self._xnu_major, self._xnu_minor, self._constants.detected_os_version).patches(),
}) })
if self._is_gpu_architecture_present(gpu_architectures=[device_probe.Intel.Archs.Skylake]) is False: # AMD GCN and newer GPUs can still use the native GVA stack
# Monterey GVA is not required for Intel Skylake iGPUs _base.update({
_base.update({ **MontereyGVA(self._xnu_major, self._xnu_minor, self._constants.detected_os_version).revert_patches(),
**MontereyGVA(self._xnu_major, self._xnu_minor, self._constants.detected_os_version).patches(), })
})
return _base return _base

View File

@@ -122,7 +122,9 @@ class AMDVega(BaseHardware):
return {} return {}
return { return {
**MontereyGVA(self._xnu_major, self._xnu_minor, self._constants.detected_os_version).patches(), # AMD GCN and newer GPUs can still use the native GVA stack
**MontereyGVA(self._xnu_major, self._xnu_minor, self._constants.detected_os_version).revert_patches(),
**MontereyOpenCL(self._xnu_major, self._xnu_minor, self._constants.detected_os_version).patches(), **MontereyOpenCL(self._xnu_major, self._xnu_minor, self._constants.detected_os_version).patches(),
**AMDOpenCL(self._xnu_major, self._xnu_minor, self._constants.detected_os_version).patches(), **AMDOpenCL(self._xnu_major, self._xnu_minor, self._constants.detected_os_version).patches(),
**self._model_specific_patches(), **self._model_specific_patches(),

View File

@@ -49,10 +49,9 @@ class NvidiaKepler(BaseHardware):
return True return True
if self._xnu_major == os_data.monterey: if self._xnu_major == os_data.monterey:
if self._xnu_minor < 0: # 12.0 Beta 8 if self._xnu_minor <= 0: # 12.0 Beta 8 increased XNU minor
return True if self._os_build != "21A5522h": # 12.0 Beta 7
if self._os_build != "21A5522h": # 12.0 Beta 7 return True
return True
return False return False

View File

@@ -118,6 +118,7 @@ class LegacyAudio(BaseHardware):
"AppleVirtualPlatform.kext", "AppleVirtualPlatform.kext",
"ApplePVPanic.kext", "ApplePVPanic.kext",
"AppleVirtIOStorage.kext", "AppleVirtIOStorage.kext",
"AvpFairPlayDriver.kext",
], ],
}, },
}, },

View File

@@ -34,7 +34,7 @@ class AMDTeraScale(BaseSharedPatchSet):
PatchType.OVERWRITE_SYSTEM_VOLUME: { PatchType.OVERWRITE_SYSTEM_VOLUME: {
"/System/Library/Extensions": { "/System/Library/Extensions": {
"AMDFramebuffer.kext": "10.13.6", "AMDFramebuffer.kext": "10.13.6",
"AMDLegacyFramebuffer.kext": "10.13.6", "AMDLegacyFramebuffer.kext": "10.13.6" if self._xnu_float < self.macOS_13_3 else "10.13.6 TS2",
"AMDLegacySupport.kext": "10.13.6", "AMDLegacySupport.kext": "10.13.6",
"AMDShared.bundle": "10.13.6", "AMDShared.bundle": "10.13.6",
"AMDSupport.kext": "10.13.6", "AMDSupport.kext": "10.13.6",

View File

@@ -2,6 +2,8 @@
metal_3802.py: Metal 3802 patches metal_3802.py: Metal 3802 patches
""" """
import packaging.version
from .base import BaseSharedPatchSet from .base import BaseSharedPatchSet
from ..base import PatchType, DynamicPatchset from ..base import PatchType, DynamicPatchset
@@ -129,7 +131,7 @@ class LegacyMetal3802(BaseSharedPatchSet):
"default.metallib": "15.0 Beta 7", "default.metallib": "15.0 Beta 7",
}, },
"/System/Library/PrivateFrameworks/RenderBox.framework/Versions/A/Resources": { "/System/Library/PrivateFrameworks/RenderBox.framework/Versions/A/Resources": {
"default.metallib": "15.0 Beta 8", "default.metallib": "15.0 Beta 8" if packaging.version.parse(self._marketing_version) < packaging.version.parse("15.1") else "15.1 Beta 4",
}, },
"/System/iOSSupport/System/Library/PrivateFrameworks/VFX.framework/Versions/A/Resources": { "/System/iOSSupport/System/Library/PrivateFrameworks/VFX.framework/Versions/A/Resources": {
"default.metallib": DynamicPatchset.MetallibSupportPkg, "default.metallib": DynamicPatchset.MetallibSupportPkg,

View File

@@ -39,4 +39,25 @@ class MontereyGVA(BaseSharedPatchSet):
}, },
}, },
}, },
}
def revert_patches(self) -> dict:
"""
Revert if patches are no longer required/misapplied
"""
if self._os_requires_patches() is False:
return {}
return {
"Revert Monterey GVA": {
PatchType.REMOVE_SYSTEM_VOLUME: {
"/System/Library/PrivateFrameworks/AppleGVA.framework/Versions/A": [
"AppleGVA"
],
"/System/Library/PrivateFrameworks/AppleGVACore.framework/Versions/A": [
"AppleGVACore"
],
}
}
} }

View File

@@ -38,6 +38,9 @@ class NonMetal(BaseSharedPatchSet):
"/System/Applications": { "/System/Applications": {
**({ "Photo Booth.app": "11.7.9"} if self._xnu_major >= os_data.monterey else {}), **({ "Photo Booth.app": "11.7.9"} if self._xnu_major >= os_data.monterey else {}),
}, },
"/usr/sbin": {
**({ "screencapture": "14.7"} if self._xnu_major >= os_data.sequoia else {}),
},
}, },
PatchType.REMOVE_SYSTEM_VOLUME: { PatchType.REMOVE_SYSTEM_VOLUME: {
"/System/Library/Extensions": [ "/System/Library/Extensions": [
@@ -67,6 +70,9 @@ class NonMetal(BaseSharedPatchSet):
"IOGPUFamily.kext", "IOGPUFamily.kext",
"AppleAfterburner.kext", "AppleAfterburner.kext",
], ],
"/System/Library/ExtensionKit/Extensions/": [
"WallpaperMacintoshExtension.appex"
],
}, },
PatchType.OVERWRITE_DATA_VOLUME: { PatchType.OVERWRITE_DATA_VOLUME: {
"/Library/Application Support/SkyLightPlugins": { "/Library/Application Support/SkyLightPlugins": {

View File

@@ -23,7 +23,8 @@ from ..support import (
global_settings, global_settings,
defaults, defaults,
generate_smbios, generate_smbios,
network_handler network_handler,
subprocess_wrapper
) )
from ..datasets import ( from ..datasets import (
model_array, model_array,
@@ -739,9 +740,9 @@ class SettingsFrame(wx.Frame):
"value": self._get_system_settings("Moraea.EnableSpinHack"), "value": self._get_system_settings("Moraea.EnableSpinHack"),
"variable": "Moraea.EnableSpinHack", "variable": "Moraea.EnableSpinHack",
"description": [ "description": [
"Note: May be more CPU intensive.", "Control beach ball cursor behaviour.",
], ],
"override_function": self._update_system_defaults, "override_function": self._update_system_defaults_root,
"condition": gui_support.CheckProperties(self.constants).host_is_non_metal(general_check=True) "condition": gui_support.CheckProperties(self.constants).host_is_non_metal(general_check=True)
}, },
"wrap_around 2": { "wrap_around 2": {
@@ -1127,6 +1128,19 @@ Hardware Information:
subprocess.run(["/usr/bin/defaults", "write", "-globalDomain", variable, value_type, str(value)]) subprocess.run(["/usr/bin/defaults", "write", "-globalDomain", variable, value_type, str(value)])
def _update_system_defaults_root(self, variable, value, global_setting = None):
value_type = type(value)
if value_type is str:
value_type = "-string"
elif value_type is int:
value_type = "-int"
elif value_type is bool:
value_type = "-bool"
logging.info(f"Updating System Defaults (root): {variable} = {value} ({value_type})")
subprocess_wrapper.run_as_root(["/usr/bin/defaults", "write", "/Library/Preferences/.GlobalPreferences.plist", variable, value_type, str(value)])
def _find_parent_for_key(self, key: str) -> str: def _find_parent_for_key(self, key: str) -> str:
for parent in self.settings: for parent in self.settings:
if key in self.settings[parent]: if key in self.settings[parent]: