mirror of
https://github.com/dortania/OpenCore-Legacy-Patcher.git
synced 2026-04-14 04:38:20 +10:00
Merge branch 'main' into ventura-alpha
This commit is contained in:
4
.github/ISSUE_TEMPLATE/bug_report.yml
vendored
4
.github/ISSUE_TEMPLATE/bug_report.yml
vendored
@@ -126,7 +126,7 @@ body:
|
||||
id: used-forums
|
||||
attributes:
|
||||
label: Have you already verified this is a patcher bug and not a macOS bug/user error on our discord servers?
|
||||
description: If no, please do not use issues for this. We'd appreciate it if users check discuss with others before filing. Issues are for valid patcher issues only, not for personal troubleshooting scessions.
|
||||
description: If no, please do not use issues for this. We'd appreciate it if users check discuss with others before filing. Issues are for valid patcher issues only, not for personal troubleshooting secessions.
|
||||
multiple: true
|
||||
options:
|
||||
- 'true'
|
||||
@@ -136,7 +136,7 @@ body:
|
||||
- type: dropdown
|
||||
id: 3rd-party-application
|
||||
attributes:
|
||||
label: Is this issue with a 3rd party application?
|
||||
label: Is this issue with a 3rd party application?
|
||||
description: If yes, please move discussions onto forums. We're unable to dedicate time to working on every single application that may be broken in macOS. Only file issues if you have a fix you'd like to add to our project
|
||||
multiple: true
|
||||
options:
|
||||
|
||||
@@ -40,7 +40,7 @@ class create_binary:
|
||||
|
||||
def parse_arguments(self):
|
||||
parser = argparse.ArgumentParser(description='Builds OpenCore-Patcher binary')
|
||||
parser.add_argument('--build_tui', action='store_true', help='Builds TUI binary, if ommited GUI binary is built')
|
||||
parser.add_argument('--build_tui', action='store_true', help='Builds TUI binary, if omitted GUI binary is built')
|
||||
parser.add_argument('--branch', type=str, help='Git branch name')
|
||||
parser.add_argument('--commit', type=str, help='Git commit URL')
|
||||
parser.add_argument('--commit_date', type=str, help='Git commit date')
|
||||
@@ -56,7 +56,7 @@ class create_binary:
|
||||
# macOS (using Python installed by homebrew (e.g. brew))
|
||||
if f"/usr/local/opt/python@3." in sys.executable:
|
||||
print(f"\t* NOTE: home(brew) python3 detected; using (sys.exec_prefix, python_path) ==> {sys.exec_prefix, python_path}")
|
||||
# - under brew, pip3 will install pyinstall at:
|
||||
# - under brew, pip3 will install pyinstaller at:
|
||||
# /usr/local/lib/python3.9/site-packages/pyinstaller
|
||||
# and /usr/local/bin/pyinstaller stub to load and run.
|
||||
|
||||
@@ -77,7 +77,7 @@ class create_binary:
|
||||
self.download_resources()
|
||||
if not self.args.build_tui:
|
||||
# payloads.dmg is only needed for GUI builds
|
||||
self.generate_paylods_dmg()
|
||||
self.generate_payloads_dmg()
|
||||
|
||||
def postflight_processes(self):
|
||||
print("- Starting postflight processes")
|
||||
@@ -174,7 +174,7 @@ class create_binary:
|
||||
print(mv_output.stderr.decode('utf-8'))
|
||||
raise Exception("Move failed")
|
||||
|
||||
def generate_paylods_dmg(self):
|
||||
def generate_payloads_dmg(self):
|
||||
if Path("./payloads.dmg").exists():
|
||||
if self.args.reset_binaries:
|
||||
print(" - Removing old payloads.dmg")
|
||||
|
||||
@@ -9,6 +9,8 @@
|
||||
- Attempt to avoid misuse of option
|
||||
- Work-around `Failed to extract AssetData` during installer creation
|
||||
- Apple bug, resolved by using CoW into a different directory than `/Applications`
|
||||
- Avoid listing beta installers in downloader
|
||||
- Warn about downloading macOS Ventura installers, unsupported by current patcher
|
||||
- Ventura Specific Updates:
|
||||
- Switch boot.efi model patch to iMac18,1
|
||||
- Resolve pre-Force Touch Trackpad support in Ventura
|
||||
@@ -290,7 +292,7 @@
|
||||
- Allow for setting custom SIP values via TUI
|
||||
- Drop `CSR_ALLOW_EXECUTABLE_POLICY_OVERRIDE` requirement for root patching
|
||||
- Lowers default SIP Disabled value to 0xA03
|
||||
- Update Legacy GMUX patchset to latest Sierra Secuirty Update
|
||||
- Update Legacy GMUX patchset to latest Sierra security Update
|
||||
- [Source](https://github.com/HackintoshHD/mbp5x-instant-gpu-switching)
|
||||
- Fix non-Metal acceleration crashing on 12.0.1
|
||||
- Yes Apple adding a notch broke our accel patches
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
# OpenCore Legacy Patcher Licence
|
||||
# OpenCore Legacy Patcher License
|
||||
|
||||
This patcher is made of multiple external applications from different people and organizations. See each program for their licensing:
|
||||
|
||||
|
||||
@@ -17,7 +17,7 @@ Below is a run down of the main logic OpenCore Legacy Patcher uses to gain nativ
|
||||
### ACPI -> Add
|
||||
|
||||
* SSDT-CPBG
|
||||
* Reason: Resolves Kernel Panic on Arrendale Macs in early Big Sur builds
|
||||
* Reason: Resolves Kernel Panic on Arrandale Macs in early Big Sur builds
|
||||
* Logic: Disable dummy CPBG device in ACPI
|
||||
* Models: MacBookPro6,x and iMac11,x
|
||||
* SSDT-PCI
|
||||
@@ -28,7 +28,7 @@ Below is a run down of the main logic OpenCore Legacy Patcher uses to gain nativ
|
||||
* Reason: Allows for software based deMUX disabling dGPUs in 2011 MacBook Pros
|
||||
* Logic: Sends power down request to dGPU via ACPI
|
||||
* Models: MacBookPro8,2 and MacBookPro8,3 with dead dGPUs
|
||||
|
||||
|
||||
### ACPI -> Patch
|
||||
|
||||
* `EHCx` and `XHC1` Patches
|
||||
@@ -39,13 +39,13 @@ Below is a run down of the main logic OpenCore Legacy Patcher uses to gain nativ
|
||||
* Reason: To be paired with SSDT-PCI
|
||||
* `_INI` to `XINI` Patch
|
||||
* Reason: To be paired with SSDT-DGPU
|
||||
|
||||
|
||||
### Booter -> Patch
|
||||
|
||||
* Reroute `HW_BID` to `OC_BID`
|
||||
* Reason: Allows macOS installers to be used on unsupported models
|
||||
* Logic: Reroutes Board ID macOS checks to custom variable
|
||||
* Models: All systems using VMM spoofing
|
||||
* Models: All systems using VMM spoofing
|
||||
|
||||
### Booter -> Quirks
|
||||
|
||||
@@ -146,7 +146,7 @@ Below is a run down of the main logic OpenCore Legacy Patcher uses to gain nativ
|
||||
* Reason: Used for proper output on machines with UGA firmware but GOP GPU
|
||||
* Logic: Provide GOP protocol instances on top of UGA protocol instances
|
||||
* Models: MacPro3,1, MacBook4,1 iMac7,1-8,1
|
||||
|
||||
|
||||
:::
|
||||
|
||||
## Injected Kext
|
||||
@@ -173,7 +173,7 @@ Below is an explanation of what Kexts OpenCore Legacy Patcher will inject into m
|
||||
* Reason: Patches BlueTool to enable bluetooth functionality on Monterey
|
||||
* Models: All models with pre-BCM94360 wireless cards or 3rd-party chipsets
|
||||
* Bluetooth-Spoof
|
||||
* Reason: Injects extra data into certain bluetooth chipsets for recognition by the system
|
||||
* Reason: Injects extra data into certain bluetooth chipsets for recognition by the system
|
||||
* Models: Models with the BCM2070 or BCM2046 chipsets
|
||||
* FeatureUnlock (Night Shift)
|
||||
* Reason: Patches CoreBrightness.framework to enable Night Shift on unsupported models
|
||||
|
||||
@@ -16,14 +16,14 @@ Term | Description
|
||||
--- | ---
|
||||
**OpenCore** | The new hotness on the scene, made with security in mind by the [Acidanthera team](https://github.com/acidanthera), has faster booting and lighter weight than previous boot managers. Supports many native Mac features such as SIP, FileVault, Secure Boot, etc
|
||||
**ACPI** | Tables defined in your firmware defining your hardware and different methods, tied directly to how IOKit/IOService handles device setup
|
||||
**NVRAM** | Non-volitile storage, where many variables are stored including default boot options, Hibernation keys, Secure Boot information, etc
|
||||
**NVRAM** | Non-volatile storage, where many variables are stored including default boot options, Hibernation keys, Secure Boot information, etc
|
||||
---
|
||||
Term | Description
|
||||
--- | ---
|
||||
**XNU** | Also known as **X** is **N**ot **U**nix, XNU is referred to as macOS's "kernel" and the heart of what makes macOS tick
|
||||
**Kexts** | Also known as **K**ernel **Ext**ensions, are macOS's drivers. They're used to perform different tasks like device drivers or for a different purpose (in this patcher) like patching the OS, injecting information or running tasks.
|
||||
**KernelCollection** | Also known as the ImmutableKernel and PrelinkedKernel, this is a bundle of the kernel(XNU) and kernel extensions(Kexts) that we use to boot macOS. This is also what OpenCore patches in memory to allow us to have a seamless experience <br/>- PrelinkedKernel: Default caching system since 10.7 <br/>- ImmutableKernel: Secure Boot based caching system since 10.13 <br/>- KernelCollection: Merge of both Prelinked and ImmutableKernel's since macOS 11, Big Sur
|
||||
**IOKit** | Backbone of how Kernel Extentions (Kexts) probe and attach onto hardware, starts quickly after kernel initates
|
||||
**IOKit** | Backbone of how Kernel Extensions (Kexts) probe and attach onto hardware, starts quickly after kernel initiates
|
||||
**WindowServer** | Backbone of the GUI interface in macOS, one of the first userfacing userspace programs to kick-in
|
||||
**OTA** | Short for **O**ver **T**he **A**ir, refers to native OS updates via System Preferences like a supported Mac
|
||||
**DELTA** | Often used with OTA, refers to OS updates that much smaller than full installers (generally ~3GB), note Deltas require the root volume to be unmodified otherwise ~12GB updates will occur.
|
||||
|
||||
@@ -2,6 +2,7 @@
|
||||
|
||||
Here are some common errors users may experience while using this patcher:
|
||||
|
||||
* [OpenCore Legacy Patcher not launching](#opencore-legacy-patcher-not-launching)
|
||||
* [Stuck on `This version of Mac OS X is not supported on this platform`](#stuck-on-this-version-of-mac-os-x-is-not-supported-on-this-platform)
|
||||
* [Cannot boot macOS without the USB](#cannot-boot-macos-without-the-usb)
|
||||
* [Infinite Recovery OS Booting](#infinite-recovery-os-reboot)
|
||||
@@ -20,6 +21,15 @@ Here are some common errors users may experience while using this patcher:
|
||||
* [No acceleration after a Metal GPU swap on Mac Pro](#no-acceleration-after-a-metal-gpu-swap-on-mac-pro)
|
||||
|
||||
|
||||
|
||||
## OpenCore Legacy Patcher not launching
|
||||
|
||||
If the application won't launch (e.g. icon will bounce in the Dock), try launching OCLP via Terminal by typing the following command, make sure you've moved the app to `/Applications` before this.
|
||||
|
||||
```sh
|
||||
/Applications/OpenCore-Patcher.app/Contents/MacOS/OpenCore-Patcher
|
||||
```
|
||||
|
||||
## Stuck on `This version of Mac OS X is not supported on this platform`
|
||||
|
||||
This means macOS has detected a SMBIOS it does not support, to resolve this ensure you're booting OpenCore **before** the macOS installer in the boot picker. Reminder the option will be called `EFI Boot`
|
||||
@@ -87,7 +97,7 @@ To work-around, we recommend users to manually connect using the "other" option
|
||||
## No Graphics Acceleration
|
||||
|
||||
|
||||
In macOS, each release generally means GPU drivers are dropped from the OS. With macOS Big Sur, currently all non-Metal GPUs require additional patches to gain acceleration. In addition, macOS Monterey removed Graphics Drivers for both Intel Ivy Bridge and NVIDIA Kepler.
|
||||
In macOS, each release generally means GPU drivers are dropped from the OS. With macOS Big Sur, currently all non-Metal GPUs require additional patches to gain acceleration. In addition, macOS Monterey removed Graphics Drivers for both Intel Ivy Bridge and NVIDIA Kepler.
|
||||
|
||||
If you're using OCLP v0.4.4, you should have been prompted to install Root Volume patches after first boot from installation of macOS. If you need to do this manually, you can within our app. Once rebooted, acceleration will be re-enabled as well as brightness control for laptops.
|
||||
|
||||
@@ -140,7 +150,7 @@ Because of this, we recommend placing a USB 2.0/3.0 hub between your devices and
|
||||
|
||||
## Stuck on "Less than a minute remaining..."
|
||||
|
||||
A common area for systems to get "stuck", namely for units that are missing the `AES` CPU instruction/older mobile hardware. During this stange a lot of heavy cryptography is performed, which can make systems appear to be stuck when in reality they are working quite hard to finish up the installation.
|
||||
A common area for systems to get "stuck", namely for units that are missing the `AES` CPU instruction/older mobile hardware. During this strange a lot of heavy cryptography is performed, which can make systems appear to be stuck when in reality they are working quite hard to finish up the installation.
|
||||
|
||||
Because this step can take a few hours or more depending on drive speeds, be patient at this stage and do not manually reboot your machine as this will break the installation and require you to reinstall. If you think your system has stalled, press the Caps Lock key. If the light turns on, your system is busy.
|
||||
|
||||
@@ -148,7 +158,7 @@ Because this step can take a few hours or more depending on drive speeds, be pat
|
||||
|
||||
If you finished installing Monterey with the original card installed (to see bootpicker for example) and swapped your GPU to a Metal supported one, you may notice that you're missing acceleration. To fix this, open OCLP and revert root patches to get your Metal-supported GPU work again.
|
||||
|
||||
Alternatively, you can remove "AutoPkg-Assets.pkg" from /Library/Packages on the USB drive before proceeding with the installation. To see the folder, enable hidden files with `Command` + `Shift` + `.`
|
||||
Alternatively, you can remove "AutoPkg-Assets.pkg" from /Library/Packages on the USB drive before proceeding with the installation. To see the folder, enable hidden files with `Command` + `Shift` + `.`
|
||||
|
||||
The reason for this is that the autopatcher will assume you will be using the original card and therefore does non-metal patching, which includes removing some drivers for other cards. This causes Metal cards to not accelerate when swapped.
|
||||
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
|
||||
Introduced in macOS 12 Monterey, Universal Control is a feature that allows a Mac to control other Macs and/or iPads, share input devices, and share files across them simultaneously. With OpenCore and FeatureUnlock, Universal Control can be unlocked for most unsupported Macs, so long as they meet the technical requirements.
|
||||
|
||||
* Note: Following page is primarily for hobbiests, no proper support is provided outside of Discord support (see bottom of page)
|
||||
* Note: Following page is primarily for hobbyists, no proper support is provided outside of Discord support (see bottom of page)
|
||||
|
||||
## Enabling Universal Control
|
||||
|
||||
@@ -44,17 +44,18 @@ Other requirements:
|
||||
### Table of models
|
||||
|
||||
This table shows which models do and don't support Universal Control out of box (OOB) and what is required to gain support.
|
||||
Note: For AirPort upgrades, only the best/newest cards are listed.
|
||||
|
||||
::: details MacBook
|
||||
|
||||
| SMBIOS | WiFi/BT version | UC OOB | Comment |
|
||||
|------------|-----------------|------------|---------|
|
||||
| MacBook4,1 | Wi-Fi 4 / BT 2.0 EDR | <span style="color:red"> NO </span> | Use the Mac Pro Wi-Fi upgrade kit to upgrade to BCM94360 |
|
||||
| MacBook5,1 | ^^ | ^^ | ^^ |
|
||||
| MacBook5,2 | WiFi 4 / BT 2.1 EDR | ^^ | ^^ |
|
||||
| MacBook6,1 | ^^ | ^^ | Upgrade to BCM94360 |
|
||||
| MacBook4,1 | Wi-Fi 4 / BT 2.0 EDR | <span style="color:red"> NO </span> | Replace stock AirPort card with an mPCIE + USB Connector Adapter board with a BCM94360CS2 card |
|
||||
| MacBook5,1 | ^^ | ^^ | <span style="color:red"> Use a Broadcom USB Bluetooth 4.0+ Dongle </span> |
|
||||
| MacBook5,2 | WiFi 4 / BT 2.1 EDR | ^^ | Replace stock AirPort card with an mPCIE + USB Connector Adapter board with a BCM94360CS2 card |
|
||||
| MacBook6,1 | ^^ | ^^ | Replace stock AirPort card with a BCM94331PCIEBT4CAX/BCM94331PCIEBT4 card |
|
||||
| MacBook7,1 | ^^ | ^^ | ^^ |
|
||||
| MacBook8,1 | WiFi 5 + BT 4.0 | <span style="color:#30BCD5"> YES </span> | Universal Control will work. |
|
||||
| MacBook8,1 | WiFi 4 + BT 4.2 | <span style="color:#30BCD5"> YES </span> | Universal Control will work. |
|
||||
|
||||
:::
|
||||
|
||||
@@ -62,8 +63,8 @@ This table shows which models do and don't support Universal Control out of box
|
||||
|
||||
| SMBIOS | WiFi/BT version | UC OOB | Comment |
|
||||
|--------|-----------------|------------|---------|
|
||||
| MacBookAir2,1 | Wi-Fi 4 / BT 2.1 EDR | <span style="color:red"> NO </span> | Replace the card with BCM94360 and disconnect/disable the BT module. |
|
||||
| MacBookAir3,1 | ^^ | ^^ | ^^ |
|
||||
| MacBookAir2,1 | Wi-Fi 4 / BT 2.1 EDR | <span style="color:red"> NO </span> | Use a Broadcom USB Bluetooth 4.0+ Dongle |
|
||||
| MacBookAir3,1 | ^^ | ^^ | Replace stock AirPort card with a BCM94360CS2 card |
|
||||
| MacBookAir3,2 | ^^ | ^^ | ^^ |
|
||||
| MacBookAir4,1 | Wi-Fi 4 + BT 4.0 | <span style="color:#30BCD5"> YES </span> | Universal Control will work. |
|
||||
| MacBookAir4,2 | ^^ | ^^ | ^^ |
|
||||
@@ -81,16 +82,16 @@ This table shows which models do and don't support Universal Control out of box
|
||||
|
||||
| SMBIOS | WiFi/BT version | UC OOB | Comment |
|
||||
|--------|-----------------|-------------|---------|
|
||||
| MacBookPro4,1 | Wi-Fi 4 / BT 2.1 EDR | <span style="color:red"> NO </span> | Use the Mac Pro Wi-Fi upgrade kit to upgrade to BCM94360 |
|
||||
| MacBookPro5,1 | ^^ | ^^ | Upgrading to BCM94331 requires some heavy case hardware modifications, so instead use a USB BT 4.0 dongle |
|
||||
| MacBookPro4,1 | Wi-Fi 4 / BT 2.1 EDR | <span style="color:red"> NO </span> | Replace stock AirPort card with an mPCIE + USB Connector Adapter board with a BCM94360CS2 card |
|
||||
| MacBookPro5,1 | ^^ | ^^ | Use a Broadcom USB Bluetooth 4.0+ Dongle |
|
||||
| MacBookPro5,2 | ^^ | ^^ | ^^ |
|
||||
| MacBookPro5,3 | ^^ | ^^ | ^^ |
|
||||
| MacBookPro5,4 | ^^ | ^^ | ^^ |
|
||||
| MacBookPro5,5 | ^^ | ^^ | ^^ |
|
||||
| MacBookPro6,1 | ^^ | ^^ | ^^ |
|
||||
| MacBookPro6,2 | ^^ | ^^ | ^^ |
|
||||
| MacBookPro7,1 | ^^ | ^^ | ^^ |
|
||||
| MacBookPro8,1 | Wi-Fi 4 + BT 2.1 EDR | ^^ | Upgrade to BCM94331 |
|
||||
| MacBookPro6,2 | ^^ | ^^ | Replace stock AirPort card with a BCM94331PCIEBT4CAX/BCM94331PCIEBT4 card |
|
||||
| MacBookPro7,1 | ^^ | ^^ | Use a Broadcom USB Bluetooth 4.0+ Dongle |
|
||||
| MacBookPro8,1 | Wi-Fi 4 + BT 2.1 EDR | ^^ | Replace stock AirPort card with a BCM94331PCIEBT4CAX/BCM94331PCIEBT4 card |
|
||||
| MacBookPro8,2 | ^^ | ^^ | ^^ |
|
||||
| MacBookPro9,1 | Wi-Fi 4 + BT 4.0 | <span style="color:#30BCD5"> YES </span> | Universal Control will work. |
|
||||
| MacBookPro9,2 | ^^ | ^^ | ^^ |
|
||||
@@ -108,8 +109,8 @@ This table shows which models do and don't support Universal Control out of box
|
||||
|
||||
| SMBIOS | WiFi/BT version | UC OOB | Comment |
|
||||
|--------|-----------------|------------|---------|
|
||||
| Macmini3,1 | Wi-Fi 4 + BT 2.1 EDR | <span style="color:red"> NO </span> | Upgrade requires some heavy electrical and case modifications, so instead used a USB BT 4.0 dongle. |
|
||||
| Macmini4,1 | ^^ | ^^ | Upgrade to BCM94360. |
|
||||
| Macmini3,1 | Wi-Fi 4 + BT 2.1 EDR | <span style="color:red"> NO </span> | Upgrade requires some heavy electrical and case modifications, so instead used a Broadcom USB Bluetooth 4.0+ Dongle. |
|
||||
| Macmini4,1 | ^^ | ^^ | ^^ |
|
||||
| Macmini5,1 | Wi-Fi 4 + BT 4.0 | <span style="color:#30BCD5"> YES </span> | Universal Control will work. |
|
||||
| Macmini5,2 | ^^ | ^^ | ^^ |
|
||||
| Macmini5,3 | ^^ | ^^ | ^^ |
|
||||
@@ -117,21 +118,21 @@ This table shows which models do and don't support Universal Control out of box
|
||||
| Macmini6,2 | ^^ | ^^ | ^^ |
|
||||
| Macmini7,1 | Wi-Fi 5 + BT 4.0 | <span style="color:red"> NO </span> | Hardware supports UC. <br> [**Spoofing required.**](#blacklisted-models) |
|
||||
|
||||
:::
|
||||
:::
|
||||
|
||||
|
||||
:::details iMac
|
||||
|
||||
| SMBIOS | WiFi/BT version | UC OOB | Comment |
|
||||
|----------|-----------------|------------|---------|
|
||||
| iMac7,1 | Wi-Fi 4 + BT 2.0 EDR | <span style="color:red"> NO </span> | Use the Mac Pro Wi-Fi upgrade kit to upgrade to BCM94360 (soldering required for BT)
|
||||
| iMac7,1 | Wi-Fi 4 + BT 2.0 EDR | <span style="color:red"> NO </span> | Replace stock AirPort card with an mPCIE + USB Connector Adapter board with a BCM94360CD card
|
||||
| iMac8,1 | ^^ | ^^ | ^^ |
|
||||
| iMac9,1 | Wi-Fi 4 / BT 2.1 EDR | ^^ | ^^ |
|
||||
| iMac10,1 | ^^ | ^^ | ^^ |
|
||||
| iMac11,1 | ^^ | ^^ | ^^ |
|
||||
| iMac11,2 | ^^ | ^^ | ^^ |
|
||||
| iMac11,3 | ^^ | ^^ | ^^ |
|
||||
| iMac12,1 | ^^ | ^^ | ^^ |
|
||||
| iMac12,1 | ^^ | ^^ | Replace stock AirPort card with an mPCIE + USB Connector Adapter board with a BCM943602CD card
|
||||
| iMac12,2 | ^^ | ^^ | ^^ |
|
||||
| iMac13,1 | Wi-Fi 4 + BT 4.0 | <span style="color:#30BCD5"> YES </span> | Universal Control will work. |
|
||||
| iMac13,2 | ^^ | ^^ | ^^ |
|
||||
@@ -144,21 +145,32 @@ This table shows which models do and don't support Universal Control out of box
|
||||
| iMac16,1 | Wi-Fi 5 + BT 4.2 | <span style="color:red"> NO </span> | Hardware supports UC. <br> [**Spoofing required.**](#blacklisted-models) |
|
||||
| iMac16,2 | ^^ | ^^ | ^^ |
|
||||
|
||||
:::
|
||||
:::
|
||||
|
||||
:::details Mac Pro
|
||||
|
||||
| SMBIOS | WiFi/BT version | UC OOB | Comment |
|
||||
|-----------|-----------------|---------|---------|
|
||||
| MacPro3,1 | Wi-Fi 4 + BT 2.0 EDR | <span style="color:red"> NO </span> | Use the Mac Pro Wi-Fi upgrade kit to upgrade to BCM94360. |
|
||||
| MacPro4,1 | Wi-Fi 4 + BT 2.1 EDR | ^^ | Use the Mac Pro Wi-Fi upgrade kit to upgrade to BCM94360 (soldering required for BT) |
|
||||
| MacPro3,1 | Wi-Fi 4 + BT 2.0 EDR | <span style="color:red"> NO </span> | Replace stock AirPort card with an mPCIE Adapter board with a BCM943602CD card |
|
||||
| MacPro4,1 | Wi-Fi 4 + BT 2.1 EDR | ^^ | Replace stock AirPort card with an mPCIE + USB Connector Adapter board with a BCM943602CD card |
|
||||
| MacPro5,1 | ^^ | ^^ | ^^ |
|
||||
| MacPro6,1 | Wi-Fi 5 + BT 4.0 | ^^ | Hardware supports UC. <br> [**Spoofing required.**](#blacklisted-models) |
|
||||
|
||||
* Note: Some older Mac Pro configurations may not have shipped with a WiFi card in the base model
|
||||
|
||||
|
||||
:::
|
||||
:::
|
||||
|
||||
|
||||
:::details Xserve ;p
|
||||
|
||||
| SMBIOS | WiFi/BT version | UC OOB | Comment |
|
||||
|-----------|-----------------|---------|---------|
|
||||
| Xserve2,1 | N/A | <span style="color:red"> NO </span> | Install a PCIe BCM943602CD card |
|
||||
| Xserve3,1 | ^^ | ^^ | ^^ |
|
||||
|
||||
:::
|
||||
|
||||
## Blacklisted models
|
||||
|
||||
The following models are blacklisted from using Universal Control by Apple:
|
||||
@@ -171,7 +183,7 @@ The following models are blacklisted from using Universal Control by Apple:
|
||||
- Macmini7,x - Mac mini 2014
|
||||
- MacPro6,x - Mac Pro Late 2013
|
||||
|
||||
The hardware in these models is capable but due to blacklisting, the only solution to use Universal Control on the models above is to spoof their SMBIOS. SMBIOS spoofing essentially fools some aspects of macOS to think they are running on a different machine.
|
||||
The hardware in these models is capable but due to blacklisting, the only solution to use Universal Control on the models above is to spoof their SMBIOS. SMBIOS spoofing essentially fools some aspects of macOS to think they are running on a different machine.
|
||||
|
||||
With SMBIOS Spoofing, the Universal Control handshake recognizes a different SMBIOS and thus grants a blacklisted Mac to connect to other iPads and Macs with Universal Control.
|
||||
|
||||
@@ -208,8 +220,8 @@ Any model after the list of officially blacklisted Macs should be supported, but
|
||||
|-------------|---------------|--------------|--------|-----------|
|
||||
| MacBook Air Early 2015 11" / 13" | MacBookAir7,x | MacBookAir8,1 | <span style="color:#30BCD5"> YES </span> | Hzlph |
|
||||
| MacBook Pro Early 2015 13" | MacBookPro12,x | MacBookPro13,1 | ^^ | ^^ |
|
||||
| MacBook Pro Mid 2015 15" | MacBookPro11,4 / 11,5 | MacBookPro13,3 | ^^ | ^^
|
||||
| iMac Late 2015 21" | iMac16,x | iMac18,2 | ^^ | ^^
|
||||
| MacBook Pro Mid 2015 15" | MacBookPro11,4 / 11,5 | MacBookPro13,3 | ^^ | ^^
|
||||
| iMac Late 2015 21" | iMac16,x | iMac18,2 | ^^ | ^^
|
||||
| Mac mini Late 2014 | Macmini7,x | MacMini8,1 | <span style="color:red"> NO </span> | N/A |
|
||||
| Mac Pro Late 2013 | MacPro6,x | MacPro7,1 | <span style="color:#30BCD5"> YES </span> | Crystall1nedev |
|
||||
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
|
||||
To install UEFI is actually super simple! All it requires is to boot Windows' Installer through OpenCore to force a UEFI setup. Here we'll be going a bit more step by step in the process including partitioning and such.
|
||||
|
||||
* Note: UEFI Windows is generally quite usable for Arrendale and newer models, however machines with Penryn CPUs may experience issues
|
||||
* Note: UEFI Windows is generally quite usable for Arrandale and newer models, however machines with Penryn CPUs may experience issues
|
||||
* Recommended Models:
|
||||
* MacBookAir4,x - 5,x
|
||||
* MacBookPro8,x - 10,x
|
||||
@@ -75,7 +75,7 @@ rsync -vha -P --exclude=sources/install.wim /Volumes/CCCOMA_X64/ /Volumes/W10USB
|
||||
|
||||
# Use wimlib to split the install.wim file into a size that fits
|
||||
wimlib-imagex split /Volumes/CCCOMA_X64/sources/install.wim /Volumes/W10USB/sources/install.swm 4000
|
||||
```
|
||||
```
|
||||
|
||||
Once that's completed, you can continue.
|
||||
:::
|
||||
|
||||
@@ -141,7 +141,7 @@ class wx_python_gui:
|
||||
self.popup = wx.MessageDialog(
|
||||
self.frame,
|
||||
f"During unpacking of our internal files, we seemed to have encountered an error.\n\nIf you keep seeing this error, please try rebooting and redownloading the application.",
|
||||
"Internal Error occured!",
|
||||
"Internal Error occurred!",
|
||||
style = wx.OK | wx.ICON_EXCLAMATION
|
||||
)
|
||||
self.popup.ShowModal()
|
||||
@@ -199,10 +199,10 @@ class wx_python_gui:
|
||||
style=wx.YES_NO | wx.CANCEL | wx.ICON_QUESTION
|
||||
)
|
||||
self.dialog.SetYesNoCancelLabels("View on Github", "Always Ignore", "Ignore Once")
|
||||
responce = self.dialog.ShowModal()
|
||||
if responce == wx.ID_YES:
|
||||
response = self.dialog.ShowModal()
|
||||
if response == wx.ID_YES:
|
||||
webbrowser.open(github_link)
|
||||
elif responce == wx.ID_NO:
|
||||
elif response == wx.ID_NO:
|
||||
print("- Setting IgnoreAppUpdates to True")
|
||||
self.constants.ignore_updates = True
|
||||
global_settings.global_settings().write_property("IgnoreAppUpdates", True)
|
||||
@@ -1104,7 +1104,7 @@ class wx_python_gui:
|
||||
# Create popup window to inform user of error
|
||||
self.popup = wx.MessageDialog(
|
||||
self.frame_modal,
|
||||
"A problem occured trying to download PatcherSupportPkg binaries\n\nIf you continue to have this error, download an Offline build from Github\nThese builds don't require a network connection to root patch",
|
||||
"A problem occurred trying to download PatcherSupportPkg binaries\n\nIf you continue to have this error, download an Offline build from Github\nThese builds don't require a network connection to root patch",
|
||||
"Network Error",
|
||||
wx.YES_NO | wx.ICON_ERROR
|
||||
)
|
||||
@@ -1180,11 +1180,11 @@ class wx_python_gui:
|
||||
try:
|
||||
sys_patch.PatchSysVolume(self.constants.custom_model or self.constants.computer.real_model, self.constants, self.patches).start_patch()
|
||||
except Exception as e:
|
||||
self.text_box.AppendText(f"- An internal error occured while running the Root Patcher:\n{str(e)}")
|
||||
self.text_box.AppendText(f"- An internal error occurred while running the Root Patcher:\n{str(e)}")
|
||||
pass
|
||||
sys.stdout = self.stock_stdout
|
||||
sys.stderr = self.stock_stderr
|
||||
if self.constants.root_patcher_succeded is True:
|
||||
if self.constants.root_patcher_succeeded is True:
|
||||
print("- Root Patcher finished successfully")
|
||||
if self.constants.needs_to_open_preferences is True:
|
||||
# Create dialog box to open System Preferences -> Security and Privacy
|
||||
@@ -1290,11 +1290,11 @@ class wx_python_gui:
|
||||
try:
|
||||
sys_patch.PatchSysVolume(self.constants.custom_model or self.constants.computer.real_model, self.constants, self.patches).start_unpatch()
|
||||
except Exception as e:
|
||||
self.text_box.AppendText(f"- An internal error occured while running the Root Patcher:\n{str(e)}")
|
||||
self.text_box.AppendText(f"- An internal error occurred while running the Root Patcher:\n{str(e)}")
|
||||
pass
|
||||
sys.stdout = self.stock_stdout
|
||||
sys.stderr = self.stock_stderr
|
||||
if self.constants.root_patcher_succeded is True:
|
||||
if self.constants.root_patcher_succeeded is True:
|
||||
print("- Root Patcher finished successfully")
|
||||
self.reboot_system(message="Root Patcher finished successfully\nWould you like to reboot now?")
|
||||
self.return_to_main_menu.Enable()
|
||||
@@ -1495,6 +1495,18 @@ class wx_python_gui:
|
||||
self.grab_installer_data(ias=ias)
|
||||
|
||||
def download_macos_click(self, app_dict):
|
||||
|
||||
try:
|
||||
app_major = app_dict['Version'].split(".")[0]
|
||||
if float(app_major) > self.constants.os_support:
|
||||
# Throw pop up warning OCLP does not support this OS
|
||||
os = os_data.os_conversion.convert_kernel_to_marketing_name(os_data.os_conversion.os_to_kernel(app_major))
|
||||
dlg = wx.MessageDialog(self.frame_modal, f"OpenCore Legacy patcher currently does not support macOS {os}. We highly recommend you select an older installer.\n\nThe newest version we officially support is macOS {os_data.os_conversion.convert_kernel_to_marketing_name(os_data.os_conversion.os_to_kernel(str(self.constants.os_support)))}\n\nWould you still want to continue downloading macOS {os}?", "Unsupported OS", wx.YES_NO | wx.ICON_WARNING)
|
||||
if dlg.ShowModal() == wx.ID_NO:
|
||||
return
|
||||
except ValueError:
|
||||
pass
|
||||
|
||||
self.frame.DestroyChildren()
|
||||
installer_name = f"macOS {app_dict['Version']} ({app_dict['Build']})"
|
||||
|
||||
@@ -1590,7 +1602,7 @@ class wx_python_gui:
|
||||
wx.App.Get().Yield()
|
||||
integrity_path = Path(Path(self.constants.payload_path) / Path(apple_integrity_file_link.split("/")[-1]))
|
||||
if utilities.download_file(apple_integrity_file_link, integrity_path, verify_checksum=False):
|
||||
# If we're unable to download the integrity file immediately after downloading the IA, there's a legitmate issue
|
||||
# If we're unable to download the integrity file immediately after downloading the IA, there's a legitimate issue
|
||||
# on Apple's end.
|
||||
# Fail gracefully and just head to installing the IA.
|
||||
utilities.disable_sleep_while_running()
|
||||
@@ -1738,12 +1750,12 @@ class wx_python_gui:
|
||||
self.usb_selection_label.Centre(wx.HORIZONTAL)
|
||||
|
||||
i = -15
|
||||
availible_disks = installer.list_disk_to_format()
|
||||
if availible_disks:
|
||||
available_disks = installer.list_disk_to_format()
|
||||
if available_disks:
|
||||
print("Disks found")
|
||||
for disk in availible_disks:
|
||||
print(f"{disk}: {availible_disks[disk]['name']} - {availible_disks[disk]['size']}")
|
||||
self.usb_selection = wx.Button(self.frame, label=f"{disk} - {availible_disks[disk]['name']} - {utilities.human_fmt(availible_disks[disk]['size'])}", size=(300, 30))
|
||||
for disk in available_disks:
|
||||
print(f"{disk}: {available_disks[disk]['name']} - {available_disks[disk]['size']}")
|
||||
self.usb_selection = wx.Button(self.frame, label=f"{disk} - {available_disks[disk]['name']} - {utilities.human_fmt(available_disks[disk]['size'])}", size=(300, 30))
|
||||
i = i + 25
|
||||
self.usb_selection.SetPosition(
|
||||
wx.Point(
|
||||
@@ -1751,7 +1763,7 @@ class wx_python_gui:
|
||||
self.usb_selection_label.GetPosition().y + self.usb_selection_label.GetSize().height + i
|
||||
)
|
||||
)
|
||||
self.usb_selection.Bind(wx.EVT_BUTTON, lambda event, temp=disk: self.format_usb_progress(availible_disks[temp]['identifier'], installer_name, installer_path))
|
||||
self.usb_selection.Bind(wx.EVT_BUTTON, lambda event, temp=disk: self.format_usb_progress(available_disks[temp]['identifier'], installer_name, installer_path))
|
||||
self.usb_selection.Centre(wx.HORIZONTAL)
|
||||
else:
|
||||
print("No disks found")
|
||||
@@ -1875,7 +1887,7 @@ class wx_python_gui:
|
||||
if self.prepare_result is True:
|
||||
self.progress_label.SetLabel("Bytes Written: 0")
|
||||
self.progress_label.Centre(wx.HORIZONTAL)
|
||||
print("- Sucessfully generated creation script")
|
||||
print("- Successfully generated creation script")
|
||||
print("- Starting creation script as admin")
|
||||
wx.GetApp().Yield()
|
||||
time.sleep(1)
|
||||
@@ -1914,18 +1926,18 @@ class wx_python_gui:
|
||||
self.constants.host_is_hackintosh is True
|
||||
)
|
||||
):
|
||||
popup_message = wx.MessageDialog(self.frame, "Sucessfully created a macOS installer!", "Success", wx.OK)
|
||||
popup_message = wx.MessageDialog(self.frame, "Successfully created a macOS installer!", "Success", wx.OK)
|
||||
popup_message.ShowModal()
|
||||
else:
|
||||
self.dialog = wx.MessageDialog(
|
||||
parent=self.frame,
|
||||
message="Would you like to continue and Install OpenCore to this disk?",
|
||||
caption="Sucessfully created the macOS installer!",
|
||||
caption="Successfully created the macOS installer!",
|
||||
style=wx.YES_NO | wx.ICON_QUESTION
|
||||
)
|
||||
self.dialog.SetYesNoLabels("Install OpenCore to disk", "Skip")
|
||||
responce = self.dialog.ShowModal()
|
||||
if responce == wx.ID_YES:
|
||||
response = self.dialog.ShowModal()
|
||||
if response == wx.ID_YES:
|
||||
self.constants.start_build_install = True
|
||||
self.build_install_menu()
|
||||
else:
|
||||
@@ -1944,7 +1956,7 @@ class wx_python_gui:
|
||||
args = [self.constants.oclp_helper_path, "/bin/sh", self.constants.installer_sh_path]
|
||||
output, error, returncode = run.Run()._stream_output(comm=args)
|
||||
if "Install media now available at" in output:
|
||||
print("- Sucessfully created macOS installer")
|
||||
print("- Successfully created macOS installer")
|
||||
while self.download_thread.is_alive():
|
||||
# wait for download_thread to finish
|
||||
# though highly unlikely this thread is still alive (flashing an Installer will take a while)
|
||||
@@ -2004,7 +2016,7 @@ class wx_python_gui:
|
||||
# Define Menu
|
||||
# - Header: Settings
|
||||
# - Dropdown: Model
|
||||
# - Chechboxes:
|
||||
# - Checkboxes:
|
||||
# - Verbose
|
||||
# - Kext Debug
|
||||
# - OpenCore Debug
|
||||
@@ -2363,7 +2375,7 @@ class wx_python_gui:
|
||||
self.disable_battery_throttling_checkbox.SetPosition(wx.Point(
|
||||
self.hibernation_checkbox.GetPosition().x,
|
||||
self.hibernation_checkbox.GetPosition().y + self.hibernation_checkbox.GetSize().height))
|
||||
self.disable_battery_throttling_checkbox.SetToolTip(wx.ToolTip("This will forcefully disable MSR Power Control on Arrendale and newer Macs\nMainly applicable for systems with severe throttling due to missing battery or display"))
|
||||
self.disable_battery_throttling_checkbox.SetToolTip(wx.ToolTip("This will forcefully disable MSR Power Control on Arrandale and newer Macs\nMainly applicable for systems with severe throttling due to missing battery or display"))
|
||||
|
||||
# Disable XCPM
|
||||
self.disable_xcpm_checkbox = wx.CheckBox(self.frame_modal, label="Disable XCPM")
|
||||
@@ -2949,9 +2961,9 @@ class wx_python_gui:
|
||||
self.configure_sip_title.SetFont(wx.Font(18, wx.FONTFAMILY_DEFAULT, wx.FONTSTYLE_NORMAL, wx.FONTWEIGHT_BOLD))
|
||||
self.configure_sip_title.Center(wx.HORIZONTAL)
|
||||
|
||||
# Label: Flip indivdual bits corresponding to XNU's csr.h
|
||||
# Label: Flip individual bits corresponding to XNU's csr.h
|
||||
# If you're unfamiliar with how SIP works, do not touch this menu
|
||||
self.sip_label = wx.StaticText(self.frame_modal, label="Flip indivdual bits corresponding to")
|
||||
self.sip_label = wx.StaticText(self.frame_modal, label="Flip individual bits corresponding to")
|
||||
self.sip_label.SetFont(wx.Font(12, wx.FONTFAMILY_DEFAULT, wx.FONTSTYLE_NORMAL, wx.FONTWEIGHT_NORMAL))
|
||||
self.sip_label.SetPosition(
|
||||
wx.Point(-1, self.configure_sip_title.GetPosition().y + self.configure_sip_title.GetSize().height + 10)
|
||||
@@ -3095,7 +3107,7 @@ OpenCore Legacy Patcher by default knows the most ideal
|
||||
self.subheader_2.SetSize(wx.Size(self.frame_modal.GetSize().width, 30))
|
||||
self.subheader_2.Centre(wx.HORIZONTAL)
|
||||
|
||||
# Label: Set FeatreUnlock status
|
||||
# Label: Set FeatureUnlock status
|
||||
self.feature_unlock_label = wx.StaticText(self.frame_modal, label="Feature Unlock Status:", style=wx.ALIGN_CENTRE)
|
||||
self.feature_unlock_label.SetFont(wx.Font(12, wx.FONTFAMILY_DEFAULT, wx.FONTSTYLE_NORMAL, wx.FONTWEIGHT_NORMAL))
|
||||
self.feature_unlock_label.SetPosition(wx.Point(0, self.subheader_2.GetPosition().y + self.subheader_2.GetSize().height -5))
|
||||
|
||||
@@ -1,9 +1,9 @@
|
||||
/* Disable the non-existant Co-processor Bridge found on Arrendale, Lynnfield and Clarkdale Macs.
|
||||
/* Disable the non-existant Co-processor Bridge found on Arrandale, Lynnfield and Clarkdale Macs.
|
||||
* IOPCIFamily in macOS 11.0 up-to 11.2 was unable to handle ACPI probing when device was not present,
|
||||
* therefore kernel panicing the machine.
|
||||
*
|
||||
* This SSDT reports the device as disabled avoiding the probing.
|
||||
* Not required for macOS 11.2 and newer, however recommended to alliviate pottential issues
|
||||
* Not required for macOS 11.2 and newer, however recommended to alleviate pottential issues
|
||||
*/
|
||||
DefinitionBlock ("", "SSDT", 2, "DRTNIA", "CPBGoff", 0x00001000)
|
||||
{
|
||||
|
||||
@@ -19,7 +19,7 @@
|
||||
<key>Enabled</key>
|
||||
<false/>
|
||||
<key>Comment</key>
|
||||
<string>Patch CPBG for Arrendale, Lynnfield and Clarkdale</string>
|
||||
<string>Patch CPBG for Arrandale, Lynnfield and Clarkdale</string>
|
||||
<key>Path</key>
|
||||
<string>SSDT-CPBG.aml</string>
|
||||
</dict>
|
||||
|
||||
@@ -1075,7 +1075,7 @@ class BuildOpenCore:
|
||||
self.config["NVRAM"]["Add"]["7C436110-AB2A-4BBB-A880-FE41995C9F82"]["boot-args"] += " -revasset"
|
||||
if self.get_kext_by_bundle_path("RestrictEvents.kext")["Enabled"] is False:
|
||||
# Ensure this is done at the end so all previous RestrictEvents patches are applied
|
||||
# RestrictEvents and EFICheckDisabler will confilict if both are injected
|
||||
# RestrictEvents and EFICheckDisabler will conflict if both are injected
|
||||
self.enable_kext("EFICheckDisabler.kext", self.constants.restrictevents_version, self.constants.efi_disabler_path)
|
||||
if self.constants.set_vmm_cpuid is True:
|
||||
# Should be unneeded with our sysctl VMM patch, however for reference purposes we'll leave it here
|
||||
@@ -1217,8 +1217,8 @@ class BuildOpenCore:
|
||||
minimal_serial_patch(self)
|
||||
else:
|
||||
# Update DataHub to resolve Lilu Race Condition
|
||||
# macOS Monterey will somtimes not present the boardIdentifier in the DeviceTree on UEFI 1.2 or older Mac,
|
||||
# Thus resulting in an infitinte loop as Lilu tries to request the Board ID
|
||||
# macOS Monterey will sometimes not present the boardIdentifier in the DeviceTree on UEFI 1.2 or older Mac,
|
||||
# Thus resulting in an infinite loop as Lilu tries to request the Board ID
|
||||
# To resolve this, set PlatformInfo -> DataHub -> BoardProduct and enable UpdateDataHub
|
||||
|
||||
# Note 1: Only apply if system is UEFI 1.2, this is generally Ivy Bridge and older, excluding MacPro6,1
|
||||
@@ -1386,7 +1386,7 @@ class BuildOpenCore:
|
||||
def sign_files(self):
|
||||
if self.constants.vault is True:
|
||||
if utilities.check_command_line_tools() is True:
|
||||
# sign.command checks for the existance of '/usr/bin/strings' however does not verify whether it's executable
|
||||
# sign.command checks for the existence of '/usr/bin/strings' however does not verify whether it's executable
|
||||
# sign.command will continue to run and create an unbootable OpenCore.efi due to the missing strings binary
|
||||
# macOS has dummy binaries that just reroute to the actual binaries after you install Xcode's Command Line Tools
|
||||
print("- Vaulting EFI")
|
||||
|
||||
@@ -171,7 +171,7 @@ Note: For security reasons, OpenShell will be disabled when Vault is set.
|
||||
utilities.cls()
|
||||
utilities.header(["Set System Integrity protection"])
|
||||
print(
|
||||
f"""SIP is used to ensure proper secuirty measures are set,
|
||||
f"""SIP is used to ensure proper security measures are set,
|
||||
however to patch the root volume this must be lowered partially.
|
||||
Only disable is absolutely necessary. SIP value = 0x802
|
||||
|
||||
@@ -553,7 +553,7 @@ be prepared if enabling.
|
||||
Some 2013-14 MacBook Pro's have issues with the built-in thunderbolt,
|
||||
resulting in kernel panics and random shutdowns.
|
||||
|
||||
To alliviate, you can disable the thunderbolt controller on MacBookPro11,x
|
||||
To alleviate, you can disable the thunderbolt controller on MacBookPro11,x
|
||||
machines with this option.
|
||||
|
||||
Note: This option only works on MacBookPro11,x, file an issue if you know of
|
||||
@@ -650,7 +650,7 @@ for Windows may prefer to only work with the dGPU and eGPU active.
|
||||
else:
|
||||
self.dGPU_switch_support()
|
||||
|
||||
def set_3rd_party_drices(self):
|
||||
def set_3rd_party_drives(self):
|
||||
utilities.cls()
|
||||
utilities.header(["Set enhanced 3rd Party SSD Support"])
|
||||
print(
|
||||
@@ -671,7 +671,7 @@ TRIM is not ideal.
|
||||
elif change_menu in {"q", "Q", "Quit", "quit"}:
|
||||
print("Returning to previous menu")
|
||||
else:
|
||||
self.set_3rd_party_drices()
|
||||
self.set_3rd_party_drives()
|
||||
|
||||
def set_software_demux(self):
|
||||
utilities.cls()
|
||||
@@ -795,7 +795,7 @@ Flipping this setting will disable automatic loading of additional drives in
|
||||
OpenCore's boot menu other than what was booted.
|
||||
|
||||
Note: This option should only be flipped under the following circumstances:
|
||||
- You are experincing wake failures from hibernation
|
||||
- You are experiencing wake failures from hibernation
|
||||
- You are only using 1 disk in your system for booting (ie. no RAID)
|
||||
- OpenCore is installed on the same disk as the OS
|
||||
- Your system has an Intel iGPU and Nvidia dGPU
|
||||
@@ -857,7 +857,7 @@ Supported Options:
|
||||
3. Disable FeatureUnlock
|
||||
"""
|
||||
)
|
||||
change_menu = input("Set FeatreUnlock (ie. 1): ")
|
||||
change_menu = input("Set FeatureUnlock (ie. 1): ")
|
||||
if change_menu == "1":
|
||||
self.constants.fu_status = True
|
||||
self.constants.fu_arguments = None
|
||||
@@ -1156,7 +1156,7 @@ system_profiler SPHardwareDataType | grep 'Model Identifier'
|
||||
[f"Disable Battery Throttling:\tCurrently {self.constants.disable_msr_power_ctl}", MenuOptions(self.constants.custom_model or self.constants.computer.real_model, self.constants).set_battery_throttle],
|
||||
[f"Disable XCPM:\t\tCurrently {self.constants.disable_xcpm}", MenuOptions(self.constants.custom_model or self.constants.computer.real_model, self.constants).set_xcpm],
|
||||
[f"Set Software Demux:\tCurrently {self.constants.software_demux}", MenuOptions(self.constants.custom_model or self.constants.computer.real_model, self.constants).set_software_demux],
|
||||
[f"Set 3rd Party SSD Support:\tCurrently {self.constants.allow_3rd_party_drives}", MenuOptions(self.constants.custom_model or self.constants.computer.real_model, self.constants).set_3rd_party_drices],
|
||||
[f"Set 3rd Party SSD Support:\tCurrently {self.constants.allow_3rd_party_drives}", MenuOptions(self.constants.custom_model or self.constants.computer.real_model, self.constants).set_3rd_party_drives],
|
||||
[f"Set FeatureUnlock: \tCurrently {self.constants.fu_status}", MenuOptions(self.constants.custom_model or self.constants.computer.real_model, self.constants).set_fu_settings],
|
||||
[f"Set NVRAM Write:\t\tCurrently {self.constants.nvram_write}", MenuOptions(self.constants.custom_model or self.constants.computer.real_model, self.constants).set_nvram_write],
|
||||
[f"Set Content Caching:\tCurrently {self.constants.set_content_caching}", MenuOptions(self.constants.custom_model or self.constants.computer.real_model, self.constants).set_cc_support],
|
||||
|
||||
@@ -190,7 +190,7 @@ class Constants:
|
||||
self.set_content_caching = False # Set Content Caching
|
||||
self.allow_nvme_fixing = True # Allow NVMe Kernel Space Patches
|
||||
self.disable_xcpm = False # Disable XCPM (X86PlatformPlugin.kext)
|
||||
self.root_patcher_succeded = False # Determine if root patcher succeeded
|
||||
self.root_patcher_succeeded = False # Determine if root patcher succeeded
|
||||
self.booted_oc_disk = None # Determine current disk OCLP booted from
|
||||
self.start_build_install = False # Determine if build install should be started
|
||||
self.host_is_non_metal = False # Determine if host is non-metal (ie. enable UI hacks)
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
# Alternative to Apple's 'defaults' tool
|
||||
# Store data in '/Users/Shared'
|
||||
# This is to ensure compatibility when running wihout a user
|
||||
# This is to ensure compatibility when running without a user
|
||||
# ie. during automated patching
|
||||
|
||||
from pathlib import Path
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
# Installation of OpenCore files to ESP
|
||||
# Usage soley for TUI
|
||||
# Usage solely for TUI
|
||||
# Copyright (C) 2020-2022, Dhinak G, Mykola Grymalyuk
|
||||
|
||||
import plistlib
|
||||
|
||||
@@ -207,6 +207,11 @@ def only_list_newest_installers(available_apps):
|
||||
|
||||
# Now remove all versions that are not the largest
|
||||
for ia in list(available_apps):
|
||||
if available_apps[ia]["Variant"] in ["DeveloperSeed", "PublicSeed"]:
|
||||
# Remove Beta builds from default listing
|
||||
available_apps.pop(ia)
|
||||
continue
|
||||
|
||||
if available_apps[ia]["Version"].startswith(version):
|
||||
remote_version = available_apps[ia]["Version"].split(".")
|
||||
if remote_version[0] == "10":
|
||||
@@ -340,7 +345,7 @@ def generate_installer_creation_script(tmp_location, installer_path, disk):
|
||||
# Goals:
|
||||
# - Format provided disk as HFS+ GPT
|
||||
# - Run createinstallmedia on provided disk
|
||||
# Implemnting this into a single installer.sh script allows us to only call
|
||||
# Implementing this into a single installer.sh script allows us to only call
|
||||
# OCLP-Helper once to avoid nagging the user about permissions
|
||||
|
||||
additional_args = ""
|
||||
@@ -363,10 +368,17 @@ def generate_installer_creation_script(tmp_location, installer_path, disk):
|
||||
subprocess.run(["rm", "-rf", str(file)])
|
||||
|
||||
# Copy installer to tmp (use CoW to avoid extra disk writes)
|
||||
subprocess.run(["cp", "-cR", installer_path, ia_tmp])
|
||||
args = ["cp", "-cR", installer_path, ia_tmp]
|
||||
if utilities.check_filesystem_type() != "apfs":
|
||||
# HFS+ disks do not support CoW
|
||||
args[1] = "-R"
|
||||
subprocess.run(args)
|
||||
|
||||
# Adjust installer_path to point to the copied installer
|
||||
installer_path = Path(ia_tmp) / Path(Path(installer_path).name)
|
||||
if not Path(installer_path).exists():
|
||||
print(f"Failed to copy installer to {ia_tmp}")
|
||||
return False
|
||||
|
||||
createinstallmedia_path = str(Path(installer_path) / Path("Contents/Resources/createinstallmedia"))
|
||||
plist_path = str(Path(installer_path) / Path("Contents/Info.plist"))
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
# Reoute binaries to tmp directory, and mount a disk image of the payloads
|
||||
# Reroute binaries to tmp directory, and mount a disk image of the payloads
|
||||
# Implements a shadowfile to avoid direct writes to the dmg
|
||||
# Copyright (C) 2022, Mykola Grymalyuk
|
||||
|
||||
@@ -46,7 +46,7 @@ class reroute_payloads:
|
||||
def unmount_active_dmgs(self, unmount_all_active=True):
|
||||
# Find all DMGs that are mounted, and forcefully unmount them
|
||||
# If our disk image was previously mounted, we need to unmount it to use again
|
||||
# This can happen if we crash during a previous scession, however 'atexit' class should hopefully avoid this
|
||||
# This can happen if we crash during a previous secession, however 'atexit' class should hopefully avoid this
|
||||
dmg_info = subprocess.run(["hdiutil", "info", "-plist"], stdout=subprocess.PIPE, stderr=subprocess.STDOUT)
|
||||
dmg_info = plistlib.loads(dmg_info.stdout)
|
||||
|
||||
|
||||
@@ -47,7 +47,7 @@ class PatchSysVolume:
|
||||
self.computer = self.constants.computer
|
||||
self.root_mount_path = None
|
||||
self.root_supports_snapshot = utilities.check_if_root_is_apfs_snapshot()
|
||||
self.constants.root_patcher_succeded = False # Reset Variable each time we start
|
||||
self.constants.root_patcher_succeeded = False # Reset Variable each time we start
|
||||
self.constants.needs_to_open_preferences = False
|
||||
self.patch_set_dictionary = {}
|
||||
self.needs_kmutil_exemptions = False # For '/Library/Extensions' rebuilds
|
||||
@@ -144,7 +144,7 @@ class PatchSysVolume:
|
||||
else:
|
||||
self.clean_skylight_plugins()
|
||||
self.delete_nonmetal_enforcement()
|
||||
self.constants.root_patcher_succeded = True
|
||||
self.constants.root_patcher_succeeded = True
|
||||
print("- Unpatching complete")
|
||||
print("\nPlease reboot the machine for patches to take effect")
|
||||
|
||||
@@ -370,7 +370,7 @@ class PatchSysVolume:
|
||||
elif Path(source_folder + "/" + file_name_str).is_dir():
|
||||
# Applicable for .kext, .app, .plugin, .bundle, all of which are directories
|
||||
if Path(destination_folder + "/" + file_name).exists():
|
||||
print(f" - Found existing {file_name}, overwritting...")
|
||||
print(f" - Found existing {file_name}, overwriting...")
|
||||
utilities.process_status(utilities.elevated(["rm", "-R", f"{destination_folder}/{file_name}"], stdout=subprocess.PIPE, stderr=subprocess.STDOUT))
|
||||
else:
|
||||
print(f" - Installing: {file_name}")
|
||||
@@ -379,7 +379,7 @@ class PatchSysVolume:
|
||||
else:
|
||||
# Assume it's an individual file, replace as normal
|
||||
if Path(destination_folder + "/" + file_name).exists():
|
||||
print(f" - Found existing {file_name}, overwritting...")
|
||||
print(f" - Found existing {file_name}, overwriting...")
|
||||
utilities.process_status(utilities.elevated(["rm", f"{destination_folder}/{file_name}"], stdout=subprocess.PIPE, stderr=subprocess.STDOUT))
|
||||
else:
|
||||
print(f" - Installing: {file_name}")
|
||||
|
||||
@@ -193,7 +193,7 @@ class AutomaticSysPatch:
|
||||
utilities.process_status(utilities.elevated(["ditto", path, "/Library/Application Support/Dortania/OpenCore-Patcher.app"], stdout=subprocess.PIPE, stderr=subprocess.STDOUT))
|
||||
|
||||
if not Path("/Library/Application Support/Dortania/OpenCore-Patcher.app").exists():
|
||||
# Sometimes the binary the user launches maye have a suffix (ie. OpenCore-Patcher 3.app)
|
||||
# Sometimes the binary the user launches may have a suffix (ie. OpenCore-Patcher 3.app)
|
||||
# We'll want to rename it to OpenCore-Patcher.app
|
||||
path = path.split("/")[-1]
|
||||
print(f"- Renaming {path} to OpenCore-Patcher.app")
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
# Copyright (C) 2020-2022, Dhinak G, Mykola Grymaluk
|
||||
# Copyright (C) 2020-2022, Dhinak G, Mykola Grymalyuk
|
||||
from resources import utilities
|
||||
|
||||
class TUIMenu:
|
||||
|
||||
@@ -62,7 +62,7 @@ class check_binary_updates:
|
||||
# print("- Network connection functional")
|
||||
response = requests.get(self.binary_url)
|
||||
data_set = response.json()
|
||||
# print("- Retrived latest version data")
|
||||
# print("- Retrieved latest version data")
|
||||
self.remote_version = data_set["tag_name"]
|
||||
# print(f"- Latest version: {self.remote_version}")
|
||||
self.remote_version_array = self.remote_version.split(".")
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
# Copyright (C) 2020-2022, Dhinak G, Mykola Grymaluk
|
||||
# Copyright (C) 2020-2022, Dhinak G, Mykola Grymalyuk
|
||||
|
||||
import hashlib
|
||||
import math
|
||||
@@ -93,6 +93,10 @@ def check_seal():
|
||||
else:
|
||||
return False
|
||||
|
||||
def check_filesystem_type():
|
||||
# Expected to return 'apfs' or 'hfs'
|
||||
filesystem_type = plistlib.loads(subprocess.run(["diskutil", "info", "-plist", "/"], stdout=subprocess.PIPE).stdout.decode().strip().encode())
|
||||
return filesystem_type["FilesystemType"]
|
||||
|
||||
def csr_dump():
|
||||
# Based off sip_config.py
|
||||
@@ -250,7 +254,7 @@ def check_secure_boot_level():
|
||||
#
|
||||
# Genuine Mac logic:
|
||||
# - On genuine non-T2 Macs, they always return 0
|
||||
# - T2 Macs will return based on their Starup Policy (Full(2), Medium(1), Disabled(0))
|
||||
# - T2 Macs will return based on their Startup Policy (Full(2), Medium(1), Disabled(0))
|
||||
# Ref: https://support.apple.com/en-us/HT208198
|
||||
if check_ap_security_policy() != 0:
|
||||
return True
|
||||
@@ -598,7 +602,7 @@ def check_boot_mode():
|
||||
return sys_plist[0]["_items"][0]["boot_mode"]
|
||||
|
||||
def elevated(*args, **kwargs) -> subprocess.CompletedProcess:
|
||||
# When runnign through our GUI, we run as root, however we do not get uid 0
|
||||
# When running through our GUI, we run as root, however we do not get uid 0
|
||||
# Best to assume CLI is running as root
|
||||
if os.getuid() == 0 or check_cli_args() is not None:
|
||||
return subprocess.run(*args, **kwargs)
|
||||
|
||||
Reference in New Issue
Block a user