mirror of
https://github.com/dortania/OpenCore-Legacy-Patcher.git
synced 2026-04-15 13:18:56 +10:00
Compare commits
81 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
342177b092 | ||
|
|
b5698d4a14 | ||
|
|
a665baaed5 | ||
|
|
c73a86d07f | ||
|
|
2215d8ea67 | ||
|
|
b877fc0f45 | ||
|
|
b8200ad262 | ||
|
|
09cd863752 | ||
|
|
9bc816f353 | ||
|
|
b19543cac0 | ||
|
|
26e917b2b0 | ||
|
|
ac615959a1 | ||
|
|
99f5dbd01f | ||
|
|
ff20aab2e8 | ||
|
|
4435c469a2 | ||
|
|
9cae696255 | ||
|
|
cad87ba6c0 | ||
|
|
20fdd25444 | ||
|
|
0dc904c21e | ||
|
|
c822fc0fd7 | ||
|
|
7f9e36e086 | ||
|
|
f35d8495d4 | ||
|
|
6f2353d874 | ||
|
|
17899778d2 | ||
|
|
790a932574 | ||
|
|
3678b72888 | ||
|
|
c83658b891 | ||
|
|
6ed2c04ae1 | ||
|
|
7491de6b4a | ||
|
|
f6cebfff03 | ||
|
|
153b3a3823 | ||
|
|
77c19e32a0 | ||
|
|
a1d267e7c9 | ||
|
|
d43ab53682 | ||
|
|
91c9aaec1e | ||
|
|
4b60389653 | ||
|
|
2be8934e9b | ||
|
|
9ac02b0f6b | ||
|
|
d41d19b3e1 | ||
|
|
da8299db27 | ||
|
|
4ce91cad3d | ||
|
|
95bf012438 | ||
|
|
f87f803cf2 | ||
|
|
7f80c6ba3b | ||
|
|
1a871fd93c | ||
|
|
c2f773aa6e | ||
|
|
3635fc1d0c | ||
|
|
67bf7c5095 | ||
|
|
d1459344e4 | ||
|
|
27b48c97f9 | ||
|
|
8098cc6520 | ||
|
|
d1bf5abd2b | ||
|
|
28e57d5d00 | ||
|
|
33d1b294eb | ||
|
|
3c91e6e9ed | ||
|
|
803cfcb255 | ||
|
|
653f7cc56a | ||
|
|
bb715537bc | ||
|
|
16c0e880cd | ||
|
|
3881fcfad1 | ||
|
|
1f6bff465a | ||
|
|
664444edbc | ||
|
|
bad8d24edd | ||
|
|
743076a411 | ||
|
|
10af52634f | ||
|
|
87fad93941 | ||
|
|
df4e30a814 | ||
|
|
041a291a14 | ||
|
|
ff4a875704 | ||
|
|
0673714d5b | ||
|
|
12d0bbc155 | ||
|
|
12d57e0c66 | ||
|
|
4437eaaf69 | ||
|
|
73babf41fd | ||
|
|
77c53d393c | ||
|
|
fdc45f928d | ||
|
|
886e9a6341 | ||
|
|
f8242874ab | ||
|
|
9c0b4f4ff2 | ||
|
|
550686c88c | ||
|
|
e39247960b |
28
.github/workflows/build-app-wxpython.yml
vendored
28
.github/workflows/build-app-wxpython.yml
vendored
@@ -2,7 +2,7 @@ name: CI - Build wxPython
|
||||
|
||||
on:
|
||||
push:
|
||||
paths-ignore:
|
||||
paths-ignore:
|
||||
- 'docs/**'
|
||||
workflow_dispatch:
|
||||
release:
|
||||
@@ -84,23 +84,6 @@ jobs:
|
||||
--run-as-individual-steps
|
||||
--prepare-package
|
||||
|
||||
- name: Prepare Update Shim (--prepare-shim)
|
||||
run: >
|
||||
/Library/Frameworks/Python.framework/Versions/3.11/bin/python3 Build-Project.command
|
||||
--application-signing-identity "${{ env.ORG_MAC_DEVELOPER_ID_APPLICATION_IDENTITY }}"
|
||||
--notarization-apple-id "${{ env.ORG_MAC_NOTARIZATION_APPLE_ID }}" --notarization-password "${{ env.ORG_MAC_NOTARIZATION_PASSWORD }}" --notarization-team-id "${{ env.ORG_MAC_NOTARIZATION_TEAM_ID }}"
|
||||
--run-as-individual-steps
|
||||
--prepare-shim
|
||||
|
||||
- name: Prepare App for Upload
|
||||
run: /bin/mv ./dist/OpenCore-Patcher.app.zip ./OpenCore-Patcher-GUI.app.zip
|
||||
|
||||
- name: Upload App to Artifacts
|
||||
uses: actions/upload-artifact@v4
|
||||
with:
|
||||
name: OpenCore-Patcher.app (GUI)
|
||||
path: OpenCore-Patcher-GUI.app.zip
|
||||
|
||||
- name: Upload AutoPkg Package to Artifacts
|
||||
uses: actions/upload-artifact@v4
|
||||
with:
|
||||
@@ -119,15 +102,6 @@ jobs:
|
||||
name: OpenCore-Patcher-Uninstaller.pkg
|
||||
path: ./dist/OpenCore-Patcher-Uninstaller.pkg
|
||||
|
||||
- name: Upload Binary to Release
|
||||
if: github.event_name == 'release'
|
||||
uses: svenstaro/upload-release-action@e74ff71f7d8a4c4745b560a485cc5fdb9b5b999d
|
||||
with:
|
||||
repo_token: ${{ secrets.GITHUB_TOKEN }}
|
||||
file: OpenCore-Patcher-GUI.app.zip
|
||||
tag: ${{ github.ref }}
|
||||
file_glob: true
|
||||
|
||||
- name: Upload AutoPkg Package to Release
|
||||
if: github.event_name == 'release'
|
||||
uses: svenstaro/upload-release-action@e74ff71f7d8a4c4745b560a485cc5fdb9b5b999d
|
||||
|
||||
@@ -7,7 +7,6 @@ import os
|
||||
import sys
|
||||
import time
|
||||
import argparse
|
||||
import plistlib
|
||||
|
||||
from pathlib import Path
|
||||
|
||||
@@ -15,12 +14,9 @@ from ci_tooling.build_modules import (
|
||||
application,
|
||||
disk_images,
|
||||
package,
|
||||
sign_notarize,
|
||||
shim
|
||||
sign_notarize
|
||||
)
|
||||
|
||||
from opencore_legacy_patcher import constants
|
||||
|
||||
|
||||
def main() -> None:
|
||||
"""
|
||||
@@ -55,10 +51,6 @@ def main() -> None:
|
||||
parser.add_argument("--prepare-package", action="store_true", help="CI: Prepare Package", default=False)
|
||||
parser.add_argument("--prepare-assets", action="store_true", help="CI: Prepare Assets", default=False)
|
||||
|
||||
# CI/CD Parameters for additional steps
|
||||
# If not specified, will not run additional steps
|
||||
parser.add_argument("--prepare-shim", action="store_true", help="CI: Prepare Update Shim", default=False)
|
||||
|
||||
# Analytics Parameters
|
||||
parser.add_argument("--analytics-key", type=str, help="Analytics Key", default=None)
|
||||
parser.add_argument("--analytics-endpoint", type=str, help="Analytics Endpoint", default=None)
|
||||
@@ -136,31 +128,6 @@ def main() -> None:
|
||||
notarization_team_id=args.notarization_team_id,
|
||||
).sign_and_notarize()
|
||||
|
||||
# Create Update Shim
|
||||
if args.prepare_shim:
|
||||
shim.GenerateShim().generate()
|
||||
if Path("dist/OpenCore-Patcher.app").exists():
|
||||
if Path("dist/OpenCore-Patcher (Original).app").exists():
|
||||
Path("dist/OpenCore-Patcher (Original).app").unlink()
|
||||
Path("dist/OpenCore-Patcher.app").rename("dist/OpenCore-Patcher (Original).app")
|
||||
Path("dist/OpenCore-Patcher (Shim).app").rename("dist/OpenCore-Patcher.app")
|
||||
|
||||
# Update app version in Info.plist
|
||||
plist_path = Path("dist/OpenCore-Patcher.app/Contents/Info.plist")
|
||||
contents = plistlib.load(plist_path.open("rb"))
|
||||
contents["CFBundleVersion"] = constants.Constants().patcher_version
|
||||
contents["CFBundleShortVersionString"] = constants.Constants().patcher_version
|
||||
plistlib.dump(contents, plist_path.open("wb"))
|
||||
|
||||
sign_notarize.SignAndNotarize(
|
||||
path=Path("dist/OpenCore-Patcher.app"),
|
||||
signing_identity=args.application_signing_identity,
|
||||
notarization_apple_id=args.notarization_apple_id,
|
||||
notarization_password=args.notarization_password,
|
||||
notarization_team_id=args.notarization_team_id,
|
||||
entitlements=Path("./ci_tooling/entitlements/entitlements.plist"),
|
||||
).sign_and_notarize()
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
_start = time.time()
|
||||
|
||||
45
CHANGELOG.md
45
CHANGELOG.md
@@ -1,5 +1,50 @@
|
||||
# OpenCore Legacy Patcher changelog
|
||||
|
||||
## 2.4.0
|
||||
- Reduce CPU usage on main UI thread
|
||||
- Thanks [goneng](https://github.com/goneng) for the implementation!
|
||||
- Resolve T1 issues:
|
||||
- coreautha crashes on macOS 14.4 or later
|
||||
- ApplePay on macOS 15.5
|
||||
- Resolve USB Camera support on USB 1.1 Macs in macOS Sequoia
|
||||
- Increment binaries:
|
||||
- PatcherSupportPkg 1.9.5 - release
|
||||
|
||||
## 2.3.2
|
||||
- Resolve erroring in Passwords app and Safari Autofill on T1 Macs running 15.4 or later
|
||||
- Increment binaries:
|
||||
- PatcherSupportPkg 1.9.3 - release
|
||||
|
||||
## 2.3.1
|
||||
- Resolve error on OpenCore Vaulted configs
|
||||
- Regression from 2.3.0
|
||||
|
||||
## 2.3.0
|
||||
- Disable crash analytics
|
||||
- Disabled server side for years, removing client side
|
||||
- `OpenCore-Patcher-GUI.app.zip` removed from release
|
||||
- Deprecated in 1.5.0, use `OpenCore-Patcher.pkg` for installation
|
||||
- Sync copyright label to 2025
|
||||
- Resolve MetallibSupportPkg failing to be cached on units without Kernel Debug Kit requirements
|
||||
- Resolve Broadwell widget rendering on macOS Sequoia
|
||||
- Resolve non-Metal crashing on macOS Big Sur and Sequoia (15.4)
|
||||
- Resolve T1 erroring on macOS Sequoia (15.4)
|
||||
- Enabled non-metal beta menubar styling globally
|
||||
- No changes to GUI settings
|
||||
- Increment binaries:
|
||||
- OpenCorePkg 1.0.4 - release
|
||||
- Lilu 1.7.0 - release
|
||||
- WhateverGreen 1.6.9 - release
|
||||
- AirPortBrcmFixup 2.1.9 - release
|
||||
- NVMeFix 1.1.2 - release
|
||||
- RestrictEvents 1.1.5 - release
|
||||
- FeatureUnlock 1.1.7 - release
|
||||
- DebugEnhancer 1.1.0 - release
|
||||
- CPUFriend 1.2.9 - release
|
||||
- BlueToolFixup 2.6.9 - release
|
||||
- CryptexFixup 1.0.4 - release
|
||||
- PatcherSupportPkg 1.9.2 - release
|
||||
|
||||
## 2.2.0
|
||||
- Resolved non-metal accessibility zoom on macOS Sonoma/Sequoia
|
||||
- Resolved non-metal photos app on macOS Sequoia
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
Copyright (c) 2020-2024 Dhinak G, Mykola Grymalyuk, and individual contributors.
|
||||
Copyright (c) 2020-2025 Dhinak G, Mykola Grymalyuk, and individual contributors.
|
||||
|
||||
All rights reserved.
|
||||
|
||||
|
||||
@@ -1,34 +0,0 @@
|
||||
"""
|
||||
shim.py: Generate Update Shim
|
||||
"""
|
||||
|
||||
from pathlib import Path
|
||||
|
||||
from opencore_legacy_patcher.volume import generate_copy_arguments
|
||||
from opencore_legacy_patcher.support import subprocess_wrapper
|
||||
|
||||
|
||||
class GenerateShim:
|
||||
|
||||
def __init__(self) -> None:
|
||||
self._shim_path = "./ci_tooling/update_shim/OpenCore-Patcher.app"
|
||||
self._shim_pkg = f"{self._shim_path}/Contents/Resources/OpenCore-Patcher.pkg"
|
||||
|
||||
self._build_pkg = "./dist/OpenCore-Patcher.pkg"
|
||||
self._output_shim = "./dist/OpenCore-Patcher (Shim).app"
|
||||
|
||||
|
||||
def generate(self) -> None:
|
||||
"""
|
||||
Generate Update Shim
|
||||
"""
|
||||
print("Generating Update Shim")
|
||||
if Path(self._shim_pkg).exists():
|
||||
Path(self._shim_pkg).unlink()
|
||||
|
||||
subprocess_wrapper.run_and_verify(generate_copy_arguments(self._build_pkg, self._shim_pkg))
|
||||
|
||||
if Path(self._output_shim).exists():
|
||||
Path(self._output_shim).unlink()
|
||||
|
||||
subprocess_wrapper.run_and_verify(generate_copy_arguments(self._shim_path, self._output_shim))
|
||||
@@ -1,30 +0,0 @@
|
||||
<?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>CFBundleDisplayName</key>
|
||||
<string>OpenCore-Patcher</string>
|
||||
<key>CFBundleExecutable</key>
|
||||
<string>OpenCore-Patcher</string>
|
||||
<key>CFBundleIconFile</key>
|
||||
<string>AppIcon.icns</string>
|
||||
<key>CFBundleIdentifier</key>
|
||||
<string>com.dortania.opencore-legacy-patcher</string>
|
||||
<key>CFBundleInfoDictionaryVersion</key>
|
||||
<string>6.0</string>
|
||||
<key>CFBundleName</key>
|
||||
<string>OpenCore Legacy Patcher</string>
|
||||
<key>CFBundlePackageType</key>
|
||||
<string>APPL</string>
|
||||
<key>LSMinimumSystemVersion</key>
|
||||
<string>10.10.0</string>
|
||||
<key>NSHighResolutionCapable</key>
|
||||
<true/>
|
||||
<key>NSHumanReadableCopyright</key>
|
||||
<string>Copyright © 2020-2024 Dortania</string>
|
||||
<key>NSPrincipalClass</key>
|
||||
<string>NSApplication</string>
|
||||
<key>NSRequiresAquaSystemAppearance</key>
|
||||
<false/>
|
||||
</dict>
|
||||
</plist>
|
||||
Binary file not shown.
Binary file not shown.
@@ -1,8 +0,0 @@
|
||||
# OpenCore-Patcher Update Shim
|
||||
|
||||
To handle the new PKG installation method, old versions of OpenCore Legacy Patcher updating to newer versions will still require 'OpenCore-Patcher.app' to be available for download.
|
||||
|
||||
Thus the goal of this app is to install an embedded PKG under ./OpenCore-Patcher.app/Contents/Resources/OpenCore-Patcher.pkg to handle the update process.
|
||||
|
||||
Source is available at:
|
||||
* https://github.com/dortania/OCLP-Helper
|
||||
@@ -5,7 +5,7 @@
|
||||
* [Unable to run Zoom](#unable-to-run-zoom)
|
||||
* [Unable to grant special permissions to apps (ie. Camera Access to Zoom)](#unable-to-grant-special-permissions-to-apps-ie-camera-access-to-zoom)
|
||||
* [Keyboard Backlight broken](#keyboard-backlight-broken)
|
||||
* [Photos and Maps Apps Heavily Distorted](#photos-and-maps-apps-heavily-distorted)
|
||||
* [Photos and Maps app issues](#photos-and-maps-app-issues)
|
||||
* [Cannot press "Done" when editing a Sidebar Widget](#cannot-press-done-when-editing-a-sidebar-widget)
|
||||
* [Wake from sleep heavily distorted on AMD/ATI from macOS 11.3 to Monterey](#wake-from-sleep-heavily-distorted-on-amd-ati-from-macos-11-3-to-monterey)
|
||||
* [Unable to switch GPUs on 2011 15" and 17" MacBook Pros](#unable-to-switch-gpus-on-2011-15-and-17-macbook-pros)
|
||||
@@ -105,10 +105,16 @@ $ sudo sqlite3 ~/Library/Application\ Support/com.apple.TCC/TCC.db "INSERT or RE
|
||||
|
||||
Due to forcing `hidd` into spinning up with the fallback mode enabled, this can break the OS's recognition of backlight keyboards. Thankfully the drivers themselves still do operate so applications such as [LabTick](https://www.macupdate.com/app/mac/22151/lab-tick) are able to set the brightness manually.
|
||||
|
||||
## Photos and Maps Apps Heavily Distorted
|
||||
## Photos and Maps app issues
|
||||
|
||||
**Starting from macOS Monterey, Maps and everything relying on it (such as Find My or 'Places' in Photos) are non-functional on non-Metal due to Metal reliance.**
|
||||
|
||||
::: details For Big Sur (click to expand)
|
||||
|
||||
Due to the Metal Backend, the enhanced color output of these apps seems to heavily break overall UI usage. To work around this, [users reported](https://forums.macrumors.com/threads/macos-11-big-sur-on-unsupported-macs-thread.2242172/post-29870324) forcing the color output of their monitor from Billions to Millions of colors helped greatly. Apps easily allowing this customization are [SwitchResX](https://www.madrau.com), [ResXreme](https://macdownload.informer.com/resxtreme/) and [EasyRes](http://easyresapp.com).
|
||||
|
||||
:::
|
||||
|
||||
## Cannot press "Done" when editing a Sidebar Widget
|
||||
|
||||
Workaround: Press some combination of Tab, or Tab and then Shift-Tab, or just Shift-Tab until the "Done" button is highlighted. Then press spacebar to activate the button, the same as in any other dialog with a highlighted button halo.
|
||||
|
||||
82
docs/FAQ.md
82
docs/FAQ.md
@@ -2,6 +2,7 @@
|
||||
|
||||
|
||||
* [Application requirements](#application-requirements)
|
||||
* [Application versioning](#application-versioning)
|
||||
* [How do I make sure I'm all up to date?](#how-do-i-make-sure-i-m-all-up-to-date)
|
||||
* [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)
|
||||
@@ -11,6 +12,7 @@
|
||||
* [Can I update to macOS betas?](#can-i-update-to-macos-betas)
|
||||
* [Can I downgrade macOS while keeping data?](#can-i-downgrade-macos-while-keeping-data)
|
||||
* [Why is my system slow?](#why-is-my-system-slow)
|
||||
* [Applications crashing with "illegal instruction"](#applications-crashing-with-illegal-instruction)
|
||||
* [What is Metal and non-Metal?](#what-is-metal-and-non-metal)
|
||||
* [What are FeatureUnlock and mediaanalysisd?](#what-are-featureunlock-and-mediaanalysisd)
|
||||
* [Why isn't iPhone Mirroring working?](#why-isn-t-iphone-mirroring-working)
|
||||
@@ -20,11 +22,21 @@
|
||||
|
||||
## Application requirements
|
||||
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 installers for macOS Ventura and later.
|
||||
* **El Capitan 10.11** or later is required to make installers for macOS Ventura
|
||||
* **High Sierra 10.13** or later is required to make installers for macOS Sonoma and newer.
|
||||
|
||||
The patcher is designed to target **macOS Big Sur 11.x to macOS Sequoia 15.x**.
|
||||
* Other versions may work, albeit in a broken state. No support is provided for any version outside of the above.
|
||||
|
||||
## Application versioning
|
||||
|
||||
Since 1.0.0, OCLP adheres to a proper versioning scheme with major, minor and bug fix system ([Semantic Versioning](https://semver.org/)).
|
||||
|
||||
- First digit: Major changes, including new OS support, API changes, and significant patch set changes, etc
|
||||
- Second digit: Minor changes, including incoming OS update fixes, minor patch set changes, etc
|
||||
- Third digit: Bug fixes, primarily hot fixes either due to a regression in prior release or resolving issues in already released OS updates
|
||||
|
||||
|
||||
## How do I make sure I'm all up to date?
|
||||
|
||||
Updating the OCLP installation is a three step process, first the application, second the bootloader and finally root patches.
|
||||
@@ -71,7 +83,9 @@ It is extremely recommended to disable automatic updates (even downloading) when
|
||||
|
||||
For a related "System version mismatch" error while root patching and more information, 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.
|
||||
|
||||
### Disabling updates
|
||||
* Note: macOS Sequoia has begun prompting to enable automatic updates from 15.4 onward after an update install has finished and isn't giving a choice to fully decline, this means you may have to keep doing it again after updating to newer versions.
|
||||
|
||||
::: details How to disable updates (click to expand)
|
||||
|
||||
**macOS Ventura and newer:**
|
||||
|
||||
@@ -81,14 +95,17 @@ System Settings -> General -> Software Update -> (i) button next to Automatic Up
|
||||
|
||||
System Preferences -> Software Update -> Advanced -> Disable "Download new updates when available".
|
||||
|
||||
:::
|
||||
|
||||
## Why are macOS updates so large?
|
||||
|
||||
macOS by default uses a sealed system volume that is unwritable. When the seal is broken, macOS thinks the volume is broken and downloads a full copy of macOS for every update to "repair" it to a known state. In order for root patching to work, this seal has to be broken since root patching by design requires on-disk file manipulation. This is also why root patches have to be reinstalled after each update.
|
||||
|
||||
## 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.
|
||||
OCLP patch development and testing happens at the beta phase in order to target a stable release, as such it is impossible for OCLP to support betas properly and previous versions may be incompatible. Only install a beta if you know what you're doing, have your expectations in check and don't mind having to fully reset to recover your system.
|
||||
|
||||
Be advised that no help will be given in situations where a beta was installed.
|
||||
|
||||
## Can I downgrade macOS while keeping data?
|
||||
|
||||
@@ -104,28 +121,71 @@ However, if your system is being **really** slow and you have no transparency in
|
||||
|
||||
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.
|
||||
|
||||
## Applications crashing with "illegal instruction"
|
||||
|
||||
If the crash log includes a string saying "illegal instruction", this typically means the application requires AVX or AVX2 CPU instructions.
|
||||
|
||||
Since macOS Ventura, AVX2 is required from all Macs supported by it. While OCLP is able to patch macOS to boot without it, many applications are beginning to utilize AVX and AVX2 as well in newer versions because all supported Macs are expected to have them. This creates an issue for older systems where some applications cannot be ran on CPUs lacking such instructions. Some older Macs may need older versions of applications and cannot update to newer versions. AVX was introduced in Sandy Bridge CPU generation and AVX2 in Haswell generation.
|
||||
|
||||
In essence, this means that some models are now aging rapidly and newer OS won't always provide support for newer applications because of hardware requirements. If an application still supports macOS versions older than Ventura, it may have a chance of running on an older OS version on the old system, since some Macs running them natively don't support AVX2 and the app takes a different path.
|
||||
|
||||
::: details Earliest Mac models supporting AVX instruction (click to expand)
|
||||
|
||||
- Macmini5,x (2011)
|
||||
- iMac12,x (2011)
|
||||
- MacBookPro8,x (2011)
|
||||
- MacBookAir4,x (2011)
|
||||
- MacBook8,x (2015)
|
||||
- MacPro6,1 (2013)
|
||||
:::
|
||||
|
||||
::: details Earliest Mac models supporting AVX2 instruction (click to expand)
|
||||
|
||||
- Macmini7,x (2014)
|
||||
- iMac14,x (2013)
|
||||
- MacBookPro11,x (2013)
|
||||
- MacBookAir6,x (2013)
|
||||
- MacBook8,x (2015)
|
||||
- MacPro7,1 (2019)
|
||||
:::
|
||||
|
||||
## What is Metal and Non-Metal?
|
||||
|
||||
Metal is Apple's proprietary graphics API which fully superseded OpenGL rendering of the operating system starting from macOS Mojave. When the word "Non-Metal" is used, it describes GPUs that are not Metal supported and require using OpenGL instead.
|
||||
Metal is Apple's proprietary graphics API which fully superseded OpenGL rendering of the operating system starting from macOS Mojave. When the word "Non-Metal" is used, it describes GPUs that are not Metal supported and require using OpenGL instead. Due to deprecation of OpenGL, many newer applications may require Metal rendering and as such will fail to run on systems with Non-Metal GPUs. Some built-in apps like Maps and everything relying on it (such as Find My) will fail to render as well on versions later than Big Sur.
|
||||
|
||||
GPUs that support Metal are as follows:
|
||||
A great rule of thumb is that Macs older than 2012 are non-Metal, with the exception of systems having upgradable GPUs.
|
||||
|
||||
::: details Metal supported GPUs (click to expand)
|
||||
|
||||
* Intel HD 4000 series (Ivy Bridge/3rd gen) and newer
|
||||
* AMD HD 7000 series and newer (GCN 1)
|
||||
* AMD HD 7000 series (GCN 1) and newer
|
||||
* NVIDIA GTX 600 and 700 series (Kepler)
|
||||
|
||||
Everything older than mentioned are Non-Metal and therefore only support OpenGL. A great rule of thumb is that Macs older than 2012 are non-Metal, with the exception of systems with upgradable GPUs. Non-Metal also includes NVIDIA Maxwell (GTX 900 series) and Pascal (GTX 1000 series) when used with patched Web Drivers on newer than macOS High Sierra.
|
||||
Everything older than mentioned are Non-Metal and therefore only support OpenGL. Non-Metal also includes NVIDIA Maxwell (GTX 900 series) and Pascal (GTX 1000 series) when used with patched Web Drivers on newer than macOS High Sierra.
|
||||
|
||||
Refer to [Supported models](https://dortania.github.io/OpenCore-Legacy-Patcher/MODELS.html) and [Working Around Non-Metal Issues](https://dortania.github.io/OpenCore-Legacy-Patcher/ACCEL.html) pages for more information.
|
||||
:::
|
||||
|
||||
Due to deprecation of OpenGL, many newer applications may require Metal rendering and as such will fail to run on systems with Non-Metal GPUs.
|
||||
Refer to [Supported models,](https://dortania.github.io/OpenCore-Legacy-Patcher/MODELS.html) the [Non-Metal GitHub issue](https://github.com/dortania/OpenCore-Legacy-Patcher/issues/108) and [Working Around Non-Metal Issues](https://dortania.github.io/OpenCore-Legacy-Patcher/ACCEL.html) pages for more information.
|
||||
|
||||
|
||||
## What are FeatureUnlock and mediaanalysisd?
|
||||
|
||||
FeatureUnlock is an extension to enable some macOS features, such as Sidecar or Universal Control. All features enabled by FeatureUnlock are listed [here](https://github.com/acidanthera/FeatureUnlock). Medianalysisd is utilized for face detection in Photos, as well as the Live Text feature.
|
||||
**Important:** These features have the potential to cause instability in many places and as such a decision has been made to disable them by default (mediaanalysisd only on 3802-based* systems) starting from OpenCore Legacy Patcher version 2.1.0. If you want to enable these features at the risk of additional instability, you can do so in the OCLP settings and rebuilding OpenCore.
|
||||
|
||||
These features have the potential to cause instability in many places and as such a decision has been made to disable them by default (mediaanalysisd only on 3802-based* systems) starting from OpenCore Legacy Patcher version 2.1.0. If you want to enable these features at the risk of additional instability, you can do so in the OCLP settings and rebuilding OpenCore.
|
||||
FeatureUnlock may also have issues functioning with some OS versions and systems due to race condition during system bootup. If this happens to you, try rebooting multiple times or different (older) OS versions to see if it will remedy the issue.
|
||||
|
||||
FeatureUnlock is an extension to enable some macOS features, including:
|
||||
- Sidecar
|
||||
- Universal Control
|
||||
- AirPlay to Mac
|
||||
- Continuity Camera
|
||||
- NightShift (non-Metal)
|
||||
|
||||
Further information, requirements and the models affected for FeatureUnlock features can be found [here](https://github.com/acidanthera/FeatureUnlock).
|
||||
|
||||
Medianalysisd is utilized for
|
||||
- Face detection in Photos
|
||||
- Live Text
|
||||
|
||||
| FeatureUnlock | mediaanalysisd |
|
||||
| :--- | :--- |
|
||||
|
||||
@@ -4,6 +4,8 @@ This document is centered around downloading and writing the macOS installer to
|
||||
|
||||
* Note: A 32GB drive is recommended, later versions of Sonoma and Sequoia cannot fit installer and patches to a 16GB disk. 16GB drive may work for older versions.
|
||||
|
||||
Before proceeding, please read the application and macOS installer creation requirements [from the FAQ.](https://dortania.github.io/OpenCore-Legacy-Patcher/FAQ.html#application-requirements) Newer macOS versions require you to be on a newer base OS before you can create an installer, due to requirements of Apple's `createinstallmedia` tool OCLP uses as its backbone.
|
||||
|
||||
|
||||
## Downloading the installer
|
||||
|
||||
|
||||
@@ -9,7 +9,9 @@ Any Intel-based Mac listed below can install and make use of OpenCore Legacy Pat
|
||||
It is **extremely recommended** to update your Mac to its latest native version before using OpenCore Legacy Patcher, to ensure you're on the highest firmware.
|
||||
:::
|
||||
|
||||
|
||||
::: warning 3GB+ RAM required for macOS Sonoma 14.5+ installers and macOS Sequoia
|
||||
Models with 2GB RAM will not be able to install macOS Sonoma 14.5+ and macOS Sequoia will be unable to boot. macOS Sonoma 14.5+ may be installed using a disk swap method where installation is done on another system but your mileage may vary and this is not recommended.
|
||||
:::
|
||||
|
||||
The below tables can be used to reference issues with a particular model, and see which OS would work best on your machine.
|
||||
* [MacBook](#macbook)
|
||||
@@ -48,7 +50,7 @@ The below tables can be used to reference issues with a particular model, and se
|
||||
| MacBook Air (13-inch, Mid 2013)<br>MacBook Air (13-inch, Early 2014) | `MacBookAir6,2` | ^^ |
|
||||
| MacBook Air (11-inch, Early 2015) | `MacBookAir7,1` | ^^ |
|
||||
| MacBook Air (13-inch, Early 2015)<br>MacBook Air (13-inch, 2017) | `MacBookAir7,2` | ^^ |
|
||||
| MacBook Air (Retina, 13-inch, 2018) | `MacBookAir8,1` | - Supported natively up to Sonoma<br>- Currently not supported on Sequoia due to T2 issues<br> |
|
||||
| MacBook Air (Retina, 13-inch, 2018) | `MacBookAir8,1` | - Supported natively up to Sonoma<br>- [Currently not supported with OpenCore due to T2 issues](https://github.com/dortania/OpenCore-Legacy-Patcher/issues/1136)<br> |
|
||||
| MacBook Air (Retina, 13-inch, 2019) | `MacBookAir8,2` | ^^ |
|
||||
| MacBook Air (Retina, 13-inch, 2020) | `MacBookAir9,1` | Supported by Apple |
|
||||
|
||||
|
||||
@@ -79,7 +79,17 @@ Non-Metal systems still require lowered SIP.
|
||||
|
||||
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 and the proper model was selected before installer creation.** 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.
|
||||
These patches include things such as:
|
||||
|
||||
- Graphics drivers
|
||||
- WiFi drivers
|
||||
- Bluetooth drivers
|
||||
- Touchbar / T1 drivers
|
||||
- Built-in camera (iSight) drivers
|
||||
- USB 1.1 drivers
|
||||
- Other patches for compatibility with older drivers
|
||||
|
||||
OCLP will automatically root patch your system during a first time install **if the USB install media was created within OCLP and the proper model was selected before installer creation.** 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.
|
||||
|
||||
Users can also see whether applicable patches have been installed, date and version the system was root patched with in the Post-Install Menu.
|
||||
|
||||
|
||||
@@ -22,5 +22,5 @@ features:
|
||||
details: Unlock Sidecar, AirPlay to Mac, Night Shift, and Universal Control, even on natively supported models!
|
||||
- title: A helpful community
|
||||
details: Whether it's getting started or learning the specifics, you can always find answers with our amazing community of tinkerers, developers, and dreamers.
|
||||
footer: Copyright © Dortania 2020-2024
|
||||
footer: Copyright © Dortania 2020-2025
|
||||
---
|
||||
|
||||
@@ -78,29 +78,8 @@ While USB 1.1 may seem unimportant, it handles many important devices on your sy
|
||||
* IR Receivers
|
||||
* Bluetooth
|
||||
|
||||
Users will need to use a USB hub for installation and post-OS updates when patches are cleaned:
|
||||
Refer to [the troubleshooting page](https://dortania.github.io/OpenCore-Legacy-Patcher/TROUBLESHOOTING.html#keyboard-mouse-and-trackpad-not-working-in-installer-or-after-update) on how to workaround this issue.
|
||||
|
||||
However, the driver has recently been weakened starting from Sonoma, which means even some USB hubs may not work properly.
|
||||
|
||||
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.
|
||||
|
||||
After that run Post Install Volume Patching by typing `/Applications/OpenCore-Patcher.app/Contents/MacOS/OpenCore-Patcher --patch_sys_vol` and finally `sudo reboot`.
|
||||
|
||||
|
||||

|
||||
|
||||
::: warning The following systems rely on USB 1.1
|
||||
|
||||
* iMac10,x and older
|
||||
* Macmini4,1 and older
|
||||
* MacBook7,1 and older
|
||||
* MacBookAir3,1 and older
|
||||
* MacPro5,1 and older
|
||||
* Xserve 3,1 and older
|
||||
:::
|
||||
|
||||
[More information here](https://github.com/dortania/OpenCore-Legacy-Patcher/issues/1021)
|
||||
|
||||
### Graphics support and issues
|
||||
This build includes both Legacy Metal and non-Metal patches for macOS Sequoia. Refer to the following links for more information about Legacy Metal and non-Metal support and their respective issues.
|
||||
|
||||
@@ -6,15 +6,6 @@
|
||||
|
||||
Apple has yet again dropped a bunch of models, continuing their journey on discontinuing Intel Macs. With the release of OpenCore Legacy Patcher 1.0.0, early support for macOS Sonoma has been implemented.
|
||||
|
||||
## Versioning
|
||||
|
||||
With 1.0.0, we'll be switching to a proper major, minor and bug fix system ([Semantic Versioning](https://semver.org/)). This means the coming release will be version 1.0.0, and future releases plan to follow this scheme:
|
||||
|
||||
- First digit: Major changes, including new OS support, API changes, and significant patch set changes, etc
|
||||
- Second digit: Minor changes, including incoming OS update fixes, minor patch set changes, etc
|
||||
- Third digit: Bug fixes, primarily hot fixes either due to a regression in prior release or resolving issues in already released OS updates
|
||||
|
||||
|
||||
## Newly dropped hardware
|
||||
|
||||
* MacBook10,1: MacBook (Retina, 12-inch, 2017)
|
||||
@@ -71,21 +62,7 @@ While USB 1.1 may seem unimportant, it handles many important devices on your sy
|
||||
* IR Receivers
|
||||
* Bluetooth
|
||||
|
||||
With OpenCore Legacy Patcher v0.6.0+, basic support has been implemented via Root Volume patching. However due to this, users will need to use a USB hub for installation and post-OS updates when patches are cleaned:
|
||||
|
||||

|
||||
|
||||
::: warning The following systems rely on USB 1.1
|
||||
|
||||
* iMac10,x and older
|
||||
* Macmini4,1 and older
|
||||
* MacBook7,1 and older
|
||||
* MacBookAir3,1 and older
|
||||
* MacPro5,1 and older
|
||||
* Xserve 3,1 and older
|
||||
:::
|
||||
|
||||
[More information here](https://github.com/dortania/OpenCore-Legacy-Patcher/issues/1021)
|
||||
Refer to [the troubleshooting page](https://dortania.github.io/OpenCore-Legacy-Patcher/TROUBLESHOOTING.html#keyboard-mouse-and-trackpad-not-working-in-installer-or-after-update) on how to workaround this issue.
|
||||
|
||||
### Graphics support and issues
|
||||
This build includes both Legacy Metal and non-Metal patches for macOS Sonoma. Refer to the following links for more information about Legacy Metal and non-Metal support and their respective issues.
|
||||
|
||||
@@ -1,10 +1,31 @@
|
||||
# Restoring Time Machine backup
|
||||
|
||||
OCLP automatically installs root patches when installing from the USB drive for the first time to ensure smooth operation of the first time settings.
|
||||
OCLP automatically installs root patches when installing from the USB drive for the first time to ensure smooth operation of the first time settings. However, as an unfortunate side effect, doing a full restore via Time Machine breaks while root patches are installed and restoring requires a few tricks to avoid a kernel panic. Below are two different methods to restore.
|
||||
|
||||
However, as an unfortunate side effect, restoring via Time Machine breaks while root patches are installed and restoring a root patched machine requires a few tricks to avoid a kernel panic.
|
||||
::: warning Warning for Sequoia
|
||||
|
||||
Time Machine on Sequoia may not function even after uninstalling root patches, leading to a loop with "Migration Finished" window. If you encounter this issue, restore on older OS and then upgrade to Sequoia.
|
||||
|
||||
:::
|
||||
|
||||
|
||||
## Method 1 - Restore with root patches installed (partial)
|
||||
|
||||
**Warning:** Be advised that with this method, folders **other than** "Desktop", "Documents", "Applications" etc (main folders under profile) may not be restored. If you want a full restore, use method 2 below.
|
||||
|
||||
1. Start Time Machine restore either in Setup Assistant (first time settings) or Migration Assistant.
|
||||
2. When asked to select information to transfer, **uncheck** "Other files and folders" as seen in the image below.
|
||||
3. Start transfer.
|
||||
|
||||
<div align="left">
|
||||
<img src="./images/TimeMachine-Transfer-Uncheck.png" alt="Uncheck other files and folders" width="600" />
|
||||
</div>
|
||||
|
||||
Now you should be restored with your user profile, applications and settings.
|
||||
|
||||
|
||||
## Method 2 - Restore without root patches (full)
|
||||
|
||||
To ensure a smooth Time Machine restore, follow the steps listed under:
|
||||
|
||||
1. In first time settings (Setup Assistant), do not restore the backup. Instead do all settings like you would want to start fresh.
|
||||
2. Once you reach desktop, open the OCLP application and revert root patches in the Post Install Volume Patches section.
|
||||
@@ -16,10 +37,3 @@ To ensure a smooth Time Machine restore, follow the steps listed under:
|
||||
|
||||
Now you should be fully restored with Time Machine and also running with all patches.
|
||||
|
||||
|
||||
::: warning Sequoia Note
|
||||
|
||||
Time Machine restoring seems to be currently broken on Sequoia even after uninstalling root patches, leading to a loop with "Migration Finished" window. Currently the only way is to restore on older OS and then upgrade to Sequoia.
|
||||
|
||||
:::
|
||||
|
||||
|
||||
@@ -7,7 +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 hard disk selection with greyed out buttons in installer](#stuck-on-hard-disk-selection-with-greyed-out-buttons-in-installer)
|
||||
* [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-booting)
|
||||
* [Internal disk missing when building OpenCore](#internal-disk-missing-when-building-opencore)
|
||||
* [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)
|
||||
@@ -18,8 +18,8 @@ Here are some common errors that users may experience while using this patcher:
|
||||
* [No Brightness Control](#no-brightness-control)
|
||||
* [Cannot connect Wi-Fi on Monterey with legacy cards](#cannot-connect-Wi-Fi-on-Monterey-with-legacy-cards)
|
||||
* [No Graphics Acceleration](#no-graphics-acceleration)
|
||||
* [Black Screen on MacBookPro11,3 in macOS Monterey](#black-screen-on-macbookpro113-in-macos-monterey)
|
||||
* [No DisplayPort Output on Mac Pros with NVIDIA Kepler](#no-displayport-output-on-mac-pros-with-NVIDIA-kepler)
|
||||
* [Black Screen on MacBookPro11,3 in macOS Monterey](#black-screen-on-macbookpro11-3-in-macos-monterey)
|
||||
* [No DisplayPort Output on Mac Pros with NVIDIA Kepler](#no-displayport-output-on-mac-pros-with-nvidia-kepler)
|
||||
* [Volume Hash Mismatch Error in macOS Monterey](#volume-hash-mismatch-error-in-macos-monterey)
|
||||
* [Cannot Disable SIP in recoveryOS](#cannot-disable-sip-in-recoveryos)
|
||||
* [Stuck on "Less than a minute remaining..."](#stuck-on-less-than-a-minute-remaining)
|
||||
@@ -30,10 +30,10 @@ Here are some common errors that users may experience while using this patcher:
|
||||
|
||||
## 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.
|
||||
If the application won't launch (e.g. icon will bounce in the Dock), try launching OCLP via Terminal by typing the following command.
|
||||
|
||||
```sh
|
||||
/Applications/OpenCore-Patcher.app/Contents/MacOS/OpenCore-Patcher
|
||||
/Library/Application Support/Dortania/OpenCore-Patcher.app/Contents/MacOS/OpenCore-Patcher
|
||||
```
|
||||
|
||||
## "You don't have permission to save..." error when creating USB installer
|
||||
@@ -108,11 +108,26 @@ There are two ways to to try and resolve this.
|
||||
|
||||
## 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.
|
||||
Due to a change by Apple, updates now modify the system volume **already while downloading**, which can lead to broken patches out of a sudden, since the operating system gets into a liminal state between two versions. Hence while root patching, you may get an error that looks like the following:
|
||||
|
||||
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.
|
||||
`SystemVersion.plist build version mismatch: found 15.4 (24E247), expected 13.7.5 (22H527)`
|
||||
|
||||
Disabling automatic macOS updates is extremely recommended once recovered, to prevent it from happening again.
|
||||
In this example, it is telling that a version 13.7.5 (Ventura) is expected which is currently running but macOS has already staged an update to version 15.4 (Sequoia) and has already modified the filesystem to prepare for an update, including writing the new version in SystemVersion.plist where OCLP is able to read it from. 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.
|
||||
|
||||
There are few options to resolve it:
|
||||
|
||||
1. Update/upgrade to the version already staged.
|
||||
2. Reinstall macOS.
|
||||
* You can try doing an in-place install without wiping the disk to keep your data but this may not be possible due to the OS being partially on newer version and it will complain about downgrade.
|
||||
4. Use an experimental "PurgePendingUpdate" tool [from the Discord server](https://discord.com/channels/417165963327176704/1253268648324235345/1257348959454625985).
|
||||
* Download it and then run it in Terminal to get rid of a pending update, then repatch again. If "purge failed" appears, you can ignore it.
|
||||
* 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.**
|
||||
|
||||
* Note: macOS Sequoia has begun prompting to enable automatic updates from 15.4 onward after an update install has finished and isn't giving a choice to fully decline, this means you may have to keep doing it again after updating to newer versions.
|
||||
|
||||
::: details How to disable updates (click to expand)
|
||||
|
||||
**macOS Ventura and newer:**
|
||||
|
||||
@@ -122,8 +137,12 @@ System Settings -> General -> Software Update -> (i) button next to Automatic Up
|
||||
|
||||
System Preferences -> Software Update -> Advanced -> Disable "Download new updates when available".
|
||||
|
||||
:::
|
||||
|
||||
## Stuck on boot after root patching
|
||||
|
||||
**Applies to macOS Monterey and newer. Big Sur does not support snapshot reversion.**
|
||||
|
||||
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. You can figure out your disk name by typing `ls /Volumes`.
|
||||
@@ -280,24 +299,10 @@ The reason for this is that the autopatcher will assume that you will be using t
|
||||
|
||||
## Keyboard, Mouse and Trackpad not working in installer or after update
|
||||
|
||||
For Macs using legacy USB 1.1 controllers, OpenCore Legacy Patcher can only restore support once it has performed root volume patches. Thus to install macOS, you need to hook up a USB hub between your Mac and Keyboard/Mouse.
|
||||
|
||||
::: warning Note
|
||||
|
||||
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`.
|
||||
|
||||
:::
|
||||
|
||||
|
||||
Starting from macOS Ventura, USB 1.1 drivers are no longer provided in the operating system. For Macs using legacy USB 1.1 controllers, OpenCore Legacy Patcher can only restore support once it has performed root volume patches which restore the drivers. Thus when installing macOS or after an update, you need to hook up a USB hub between your Mac and keyboard/mouse, forcing USB 2.0 mode in order to install the root patches.
|
||||
|
||||
* For MacBook users, you'll need to find an external keyboard/mouse in addition to the USB hub
|
||||
|
||||
More information can be found here:
|
||||
|
||||
* [Legacy UHCI/OHCI support in Ventura #1021](https://github.com/dortania/OpenCore-Legacy-Patcher/issues/1021)
|
||||
|
||||
Applicable models include:
|
||||
|
||||
| Family | Year | Model | Notes |
|
||||
@@ -309,12 +314,43 @@ Applicable models include:
|
||||
| Mac mini | Mid 2011 and older | Macmini3,1 - Macmini5,x | |
|
||||
| Mac Pro | Mid 2010 and older | MacPro3,1 - MacPro5,1 | |
|
||||
|
||||
|
||||
<div align="left">
|
||||
<img src="./images/usb11-chart.png" alt="USB1.1 chart" width="800" />
|
||||
</div>
|
||||
|
||||
::: warning Note
|
||||
|
||||
In macOS Sonoma, this seems to have been further weakened and some hubs may not be functional. If you encounter this issue, try another hub.
|
||||
|
||||
:::
|
||||
|
||||
### Alternative method for Software Update
|
||||
|
||||
Alternative way for updates 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 and run Post Install Volume Patching.
|
||||
|
||||
**This only applies to updates via Software Update and is not applicable when booting to installer via USB drive.**
|
||||
|
||||
Use the following commands:
|
||||
|
||||
1. `ssh username@lan-ip-address` - Connects via SSH, change username and IP address to the system's
|
||||
2. `/Applications/OpenCore-Patcher.app/Contents/MacOS/OpenCore-Patcher --patch_sys_vol` - Installs root patches via CLI
|
||||
3. `sudo reboot`.
|
||||
|
||||
More information can be found here:
|
||||
|
||||
* [Legacy UHCI/OHCI support in Ventura #1021](https://github.com/dortania/OpenCore-Legacy-Patcher/issues/1021)
|
||||
|
||||
|
||||
## No T1 functionality after installing Sonoma or newer
|
||||
|
||||
If you notice your Touchbar etc not working, this means loss of T1 functionality.
|
||||
|
||||
Wiping the entire disk using Disk Utility with Sonoma or newer causes the T1 firmware to be removed, which due to removed support, the macOS Sonoma+ installer will not restore. To restore T1 functionality, Ventura or older has to be reinstalled. This can be done in another volume or external disk as well, as long as the OS is booted once. After this you can wipe the old OS or unplug the external disk.
|
||||
Wiping the entire disk using Disk Utility with Sonoma or newer causes the T1 firmware to be removed, which due to removed support, the macOS Sonoma+ installer will not restore. If the firmware is missing from EFI, T1 will not work regardless whether OCLP reinstates the driver during root patching. To restore T1 functionality, Ventura or older has to be reinstalled. This can be done in another volume or external disk as well, as long as the OS is booted once. After this you can wipe the old OS or unplug the external disk.
|
||||
|
||||
|
||||
To prevent this from happening in the future, with T1 systems only wipe the volume containing the operating system.
|
||||
|
||||
<div align="left">
|
||||
<img src="./images/wipe-volume.png" alt="WipeVolume" width="800" />
|
||||
</div>
|
||||
|
||||
@@ -4,34 +4,33 @@ This guide tells you different ways to uninstall OCLP and/or patches.
|
||||
|
||||
## Delete everything and revert back to native macOS
|
||||
|
||||
Boot a native macOS installer, go to Disk Utility and choose View -> Show All Devices. Wipe the full disk by choosing the top option on the left sidebar and start macOS installation.
|
||||
1. Create a USB drive with the latest officially supported macOS installer.
|
||||
2. Restart the computer and [Reset NVRAM.](https://support.apple.com/HT204063)
|
||||
3. Boot the computer using the installer USB drive.
|
||||
4. Go to Disk Utility and choose View -> Show All Devices.
|
||||
5. Wipe the full disk by choosing the top disk option on the left sidebar and selecting "Erase".
|
||||
6. Start macOS installation.
|
||||
|
||||
[Reset NVRAM](https://support.apple.com/HT204063) afterwards.
|
||||
## Manual methods
|
||||
|
||||
## Uninstalling the application
|
||||
Uninstalling OCLP manually is a three part process which includes the application, OpenCore and the root patches. If you want to remove OCLP and patches entirely, go through all three in succession. Otherwise do the part(s) you need.
|
||||
|
||||
### Version 1.5.0 and newer
|
||||
### Reverting root patches
|
||||
|
||||
Version 1.5.0 and newer use a Privileged Helper Tool that requires more thorough uninstallation than previous versions. Download the uninstaller package from [the releases page.](https://github.com/dortania/OpenCore-Legacy-Patcher/releases)
|
||||
Open the OCLP application and go into the Post Install Root Patch menu, choose Revert Root Patches.
|
||||
|
||||
### Version 1.4.3 and older.
|
||||
### Uninstalling the application
|
||||
|
||||
Navigate to `/Library/Application Support/` and delete the Dortania folder.
|
||||
To uninstall the OCLP application including LaunchAgent and PrivilegedHelperTool, download the uninstaller package from [the releases page.](https://github.com/dortania/OpenCore-Legacy-Patcher/releases)
|
||||
|
||||
## Reverting root patches
|
||||
|
||||
Open the OCLP application and go into the Post Install Root Patch menu, choose Revert Root Patches.
|
||||
|
||||
If you're planning to revert back to native version, you don't have to do this. Root patches get wiped when you wipe the disk.
|
||||
|
||||
## Uninstalling the bootloader
|
||||
### Uninstalling the bootloader
|
||||
|
||||
1. Remove OpenCore either from the USB or internal drive
|
||||
|
||||
* You'll need to mount the drive's EFI partition, and delete the `EFI/OC` and `System` folders
|
||||
* Mount the drive's EFI partition, and delete the `EFI/OC` and `System` folders
|
||||
* Note: **Do not** delete the entire EFI folder, this will likely break any existing Windows and Linux installations.
|
||||
* [See here for an example on how to mount](https://dortania.github.io/OpenCore-Post-Install/universal/oc2hdd.html)
|
||||
* For 5K iMac users, you will also need to delete `boot.efi` on the root of the EFI partition.
|
||||
* 5K iMac users, also delete `boot.efi` on the root of the EFI partition.
|
||||
|
||||
2. [Reset NVRAM](https://support.apple.com/HT204063)
|
||||
|
||||
@@ -43,3 +42,4 @@ Note that after you remove OpenCore, your Mac will no longer boot and show the "
|
||||
:::
|
||||
|
||||
|
||||
|
||||
|
||||
@@ -33,7 +33,6 @@ For older hardware, see below sections:
|
||||
* [Currently Unsupported/Broken Hardware in Ventura](#currently-unsupportedbroken-hardware-in-ventura)
|
||||
* [AMD Polaris, Vega and Navi support on pre-2019 Mac Pros and pre-2012 iMacs](#amd-polaris-vega-and-navi-support-on-pre-2019-mac-pros-and-pre-2012-imacs)
|
||||
* [USB 1.1 (OHCI/UHCI) Support](#usb-11-ohciuhci-support)
|
||||
* [Ethernet issue with Early 2008 Mac Pro](#ethernet-issue-with-early-2008-mac-pro)
|
||||
|
||||
The team is doing their best to investigate and fix the aforementioned issues, however no estimated time can be provided.
|
||||
|
||||
@@ -64,21 +63,9 @@ For Penryn systems and pre-2013 Mac Pros, USB 1.1 support was outright removed i
|
||||
* IR Receivers
|
||||
* Bluetooth
|
||||
|
||||
With OpenCore Legacy Patcher v0.6.0, basic support has been implemented via Root Volume patching. However due to this, users will need to use a USB hub for installation and post-OS updates when patches are cleaned:
|
||||
Refer to [the troubleshooting page](https://dortania.github.io/OpenCore-Legacy-Patcher/TROUBLESHOOTING.html#keyboard-mouse-and-trackpad-not-working-in-installer-or-after-update) on how to workaround this issue.
|
||||
|
||||

|
||||
|
||||
::: warning The following systems rely on USB 1.1
|
||||
|
||||
* iMac10,x and older
|
||||
* Macmini3,1 and older
|
||||
* MacBook7,1 and older
|
||||
* MacBookAir3,1 and older
|
||||
* MacBookPro7,1 and older
|
||||
* MacBookPro6,x is exempt
|
||||
* MacPro5,1 and older
|
||||
|
||||
:::
|
||||
### Graphics and wireless support
|
||||
|
||||
::: details Legacy Wireless Support (Resolved in v0.6.0 and newer)
|
||||
|
||||
|
||||
BIN
docs/images/TimeMachine-Transfer-Uncheck.png
Normal file
BIN
docs/images/TimeMachine-Transfer-Uncheck.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 101 KiB |
@@ -130,7 +130,7 @@ class OpenCoreLegacyPatcher:
|
||||
|
||||
if not any(x in sys.argv for x in ignore_args):
|
||||
while self.constants.unpack_thread.is_alive():
|
||||
time.sleep(0.1)
|
||||
time.sleep(self.constants.thread_sleep_interval)
|
||||
|
||||
arguments.arguments(self.constants)
|
||||
|
||||
|
||||
@@ -13,9 +13,9 @@ from .detections import device_probe
|
||||
class Constants:
|
||||
def __init__(self) -> None:
|
||||
# Patcher Versioning
|
||||
self.patcher_version: str = "2.2.0" # OpenCore-Legacy-Patcher
|
||||
self.patcher_support_pkg_version: str = "1.9.1" # PatcherSupportPkg
|
||||
self.copyright_date: str = "Copyright © 2020-2024 Dortania"
|
||||
self.patcher_version: str = "2.4.0" # OpenCore-Legacy-Patcher
|
||||
self.patcher_support_pkg_version: str = "1.9.5" # PatcherSupportPkg
|
||||
self.copyright_date: str = "Copyright © 2020-2025 Dortania"
|
||||
self.patcher_name: str = "OpenCore Legacy Patcher"
|
||||
|
||||
# URLs
|
||||
@@ -28,25 +28,25 @@ class Constants:
|
||||
|
||||
# OpenCore Versioning
|
||||
# https://github.com/acidanthera/OpenCorePkg
|
||||
self.opencore_version: str = "1.0.1"
|
||||
self.opencore_version: str = "1.0.4"
|
||||
|
||||
# Kext Versioning
|
||||
## Acidanthera
|
||||
## https://github.com/acidanthera
|
||||
self.lilu_version: str = "1.6.8" # Lilu
|
||||
self.whatevergreen_version: str = "1.6.7" # WhateverGreen
|
||||
self.whatevergreen_navi_version: str = "1.6.7-Navi" # WhateverGreen (Navi Patch)
|
||||
self.airportbcrmfixup_version: str = "2.1.8" # AirPortBrcmFixup
|
||||
self.nvmefix_version: str = "1.1.1" # NVMeFix
|
||||
self.lilu_version: str = "1.7.0" # Lilu
|
||||
self.whatevergreen_version: str = "1.6.9" # WhateverGreen
|
||||
self.whatevergreen_navi_version: str = "1.6.9-Navi" # WhateverGreen (Navi Patch)
|
||||
self.airportbcrmfixup_version: str = "2.1.9" # AirPortBrcmFixup
|
||||
self.nvmefix_version: str = "1.1.2" # NVMeFix
|
||||
self.applealc_version: str = "1.6.3" # AppleALC
|
||||
self.restrictevents_version: str = "1.1.4" # RestrictEvents
|
||||
self.featureunlock_version: str = "1.1.6" # FeatureUnlock
|
||||
self.debugenhancer_version: str = "1.0.9" # DebugEnhancer
|
||||
self.cpufriend_version: str = "1.2.8" # CPUFriend
|
||||
self.bluetool_version: str = "2.6.8" # BlueToolFixup (BrcmPatchRAM)
|
||||
self.restrictevents_version: str = "1.1.5" # RestrictEvents
|
||||
self.featureunlock_version: str = "1.1.7" # FeatureUnlock
|
||||
self.debugenhancer_version: str = "1.1.0" # DebugEnhancer
|
||||
self.cpufriend_version: str = "1.2.9" # CPUFriend
|
||||
self.bluetool_version: str = "2.6.9" # BlueToolFixup (BrcmPatchRAM)
|
||||
self.cslvfixup_version: str = "2.6.1" # CSLVFixup
|
||||
self.autopkg_version: str = "1.0.4" # AutoPkgInstaller
|
||||
self.cryptexfixup_version: str = "1.0.3" # CryptexFixup
|
||||
self.cryptexfixup_version: str = "1.0.4" # CryptexFixup
|
||||
|
||||
## Apple
|
||||
## https://www.apple.com
|
||||
@@ -155,6 +155,7 @@ class Constants:
|
||||
self.unpack_thread = None # Determine if unpack thread finished (threading.Thread)
|
||||
self.update_stage: int = 0 # Determine update stage (see gui_support.py)
|
||||
self.log_filepath: Path = None # Path to log file
|
||||
self.thread_sleep_interval: float = 0.01 # Sleep interval between UI updates (seconds) - balance between UI responsiveness and CPU usage
|
||||
|
||||
self.commit_info: tuple = (None, None, None) # Commit info (Branch, Commit Date, Commit URL)
|
||||
|
||||
|
||||
@@ -200,7 +200,6 @@ class InitializeLoggingSupport:
|
||||
return
|
||||
|
||||
if self.constants.cli_mode is True:
|
||||
threading.Thread(target=analytics_handler.Analytics(self.constants).send_crash_report, args=(self.log_filepath,)).start()
|
||||
return
|
||||
|
||||
error_msg = f"OpenCore Legacy Patcher encountered the following internal error:\n\n"
|
||||
@@ -208,17 +207,7 @@ class InitializeLoggingSupport:
|
||||
if tb:
|
||||
error_msg += f"\n\n{traceback.extract_tb(tb)[-1]}"
|
||||
|
||||
cant_log: bool = global_settings.GlobalEnviromentSettings().read_property("DisableCrashAndAnalyticsReporting")
|
||||
if not isinstance(cant_log, bool):
|
||||
cant_log = False
|
||||
|
||||
if self.constants.commit_info[0].startswith("refs/tags"):
|
||||
cant_log = True
|
||||
|
||||
if cant_log is True:
|
||||
error_msg += "\n\nReveal log file?"
|
||||
else:
|
||||
error_msg += "\n\nSend crash report to Dortania?"
|
||||
error_msg += "\n\nReveal log file?"
|
||||
|
||||
# Ask user if they want to send crash report
|
||||
try:
|
||||
@@ -230,11 +219,7 @@ class InitializeLoggingSupport:
|
||||
if result[applescript.AEType(b'bhit')] != "Yes":
|
||||
return
|
||||
|
||||
if cant_log is True:
|
||||
subprocess.run(["/usr/bin/open", "--reveal", self.log_filepath])
|
||||
return
|
||||
|
||||
threading.Thread(target=analytics_handler.Analytics(self.constants).send_crash_report, args=(self.log_filepath,)).start()
|
||||
subprocess.run(["/usr/bin/open", "--reveal", self.log_filepath])
|
||||
|
||||
|
||||
def custom_thread_excepthook(args) -> None:
|
||||
|
||||
@@ -33,4 +33,5 @@ class BasePatchset:
|
||||
self.macOS_14_1: float = 23.1
|
||||
self.macOS_14_2: float = 23.2
|
||||
self.macOS_14_4: float = 23.4
|
||||
self.macOS_15_2: float = 24.2
|
||||
self.macOS_15_2: float = 24.2
|
||||
self.macOS_15_3: float = 24.3
|
||||
@@ -84,6 +84,7 @@ class T1SecurityChip(BaseHardware):
|
||||
"SharedUtils.framework": f"13.6-{self._xnu_major}" if self._xnu_major < os_data.sequoia else f"13.7.1-{self._xnu_major}", # Required for Password Authentication (SharedUtils.framework)
|
||||
**({ "MechanismPlugins": "15.0 Beta 4" } if self._xnu_major >= os_data.sequoia else {}), # Required to add a TouchID fingerprint
|
||||
**({ "ModulePlugins": "15.1" } if self._xnu_float >= self.macOS_15_2 else {}),
|
||||
**({ "ModuleBase.framework": "15.2" } if self._xnu_float >= self.macOS_15_3 else {}),
|
||||
},
|
||||
"/System/Library/PrivateFrameworks": {
|
||||
"EmbeddedOSInstall.framework": "13.6", # Required for biometrickitd
|
||||
|
||||
@@ -112,6 +112,24 @@ class USB11Controller(BaseHardware):
|
||||
}
|
||||
|
||||
|
||||
def _usb_webcam_patches(self) -> dict:
|
||||
"""
|
||||
Patches for USB 1.1 Webcam
|
||||
"""
|
||||
if self._xnu_major < os_data.sequoia.value:
|
||||
return {}
|
||||
|
||||
return {
|
||||
"Legacy USB 1.1 Webcam": {
|
||||
PatchType.MERGE_SYSTEM_VOLUME: {
|
||||
"/System/Library/Frameworks": {
|
||||
"IOUSBHost.framework": "14.6.1",
|
||||
},
|
||||
},
|
||||
},
|
||||
}
|
||||
|
||||
|
||||
def patches(self) -> dict:
|
||||
"""
|
||||
Patches for USB 1.1 Controller
|
||||
@@ -122,4 +140,5 @@ class USB11Controller(BaseHardware):
|
||||
return {
|
||||
**self._base_patches(),
|
||||
**self._extended_patches(),
|
||||
**self._usb_webcam_patches(),
|
||||
}
|
||||
@@ -100,6 +100,9 @@ class PatchSysVolume:
|
||||
|
||||
self.skip_root_kmutil_requirement = not self.hardware_details[HardwarePatchsetSettings.KERNEL_DEBUG_KIT_REQUIRED] if self.constants.detected_os >= os_data.os_data.ventura else False
|
||||
|
||||
self.requires_kdk_caching = self.hardware_details[HardwarePatchsetSettings.KERNEL_DEBUG_KIT_REQUIRED] and self.constants.detected_os >= os_data.os_data.ventura
|
||||
self.requires_metallib_caching = self.hardware_details[HardwarePatchsetSettings.METALLIB_SUPPORT_PKG_REQUIRED] and self.constants.detected_os >= os_data.os_data.sequoia
|
||||
|
||||
self.mount_obj = RootVolumeMount(self.constants.detected_os)
|
||||
|
||||
|
||||
@@ -345,7 +348,7 @@ class PatchSysVolume:
|
||||
|
||||
if self.constants.wxpython_variant is True and self.constants.detected_os >= os_data.os_data.big_sur:
|
||||
needs_daemon = False
|
||||
if self.constants.detected_os >= os_data.os_data.ventura and self.skip_root_kmutil_requirement is False:
|
||||
if self.requires_kdk_caching is True or self.requires_metallib_caching is True:
|
||||
needs_daemon = True
|
||||
InstallAutomaticPatchingServices(self.constants).install_auto_patcher_launch_agent(kdk_caching_needed=needs_daemon)
|
||||
|
||||
|
||||
@@ -6,6 +6,7 @@ import wx
|
||||
import logging
|
||||
import threading
|
||||
import traceback
|
||||
import time
|
||||
|
||||
from .. import constants
|
||||
|
||||
@@ -101,12 +102,12 @@ class BuildFrame(wx.Frame):
|
||||
"""
|
||||
while gui_support.PayloadMount(self.constants, self).is_unpack_finished() is False:
|
||||
wx.Yield()
|
||||
time.sleep(self.constants.thread_sleep_interval)
|
||||
|
||||
thread = threading.Thread(target=self._build)
|
||||
thread.start()
|
||||
|
||||
while thread.is_alive():
|
||||
wx.Yield()
|
||||
gui_support.wait_for_thread(thread)
|
||||
|
||||
self.return_button.Enable()
|
||||
|
||||
|
||||
@@ -76,13 +76,11 @@ class OSUpdateFrame(wx.Frame):
|
||||
if results[HardwarePatchsetSettings.KERNEL_DEBUG_KIT_REQUIRED] is True:
|
||||
kdk_thread = threading.Thread(target=_kdk_thread_spawn)
|
||||
kdk_thread.start()
|
||||
while kdk_thread.is_alive():
|
||||
wx.Yield()
|
||||
gui_support.wait_for_thread(kdk_thread)
|
||||
if results[HardwarePatchsetSettings.METALLIB_SUPPORT_PKG_REQUIRED] is True:
|
||||
metallib_thread = threading.Thread(target=_metallib_thread_spawn)
|
||||
metallib_thread.start()
|
||||
while metallib_thread.is_alive():
|
||||
wx.Yield()
|
||||
gui_support.wait_for_thread(metallib_thread)
|
||||
|
||||
|
||||
download_objects = {
|
||||
@@ -149,8 +147,7 @@ class OSUpdateFrame(wx.Frame):
|
||||
kdk_checksum_thread = threading.Thread(target=_validate_kdk_checksum_thread)
|
||||
kdk_checksum_thread.start()
|
||||
|
||||
while kdk_checksum_thread.is_alive():
|
||||
wx.Yield()
|
||||
gui_support.wait_for_thread(kdk_checksum_thread)
|
||||
|
||||
if self.kdk_checksum_result is False:
|
||||
logging.error("KDK checksum validation failed")
|
||||
@@ -172,8 +169,7 @@ class OSUpdateFrame(wx.Frame):
|
||||
kdk_install_thread = threading.Thread(target=_install_kdk_thread)
|
||||
kdk_install_thread.start()
|
||||
|
||||
while kdk_install_thread.is_alive():
|
||||
wx.Yield()
|
||||
gui_support.wait_for_thread(kdk_install_thread)
|
||||
|
||||
if self.kdk_install_result is False:
|
||||
logging.info("Failed to install KDK")
|
||||
@@ -194,8 +190,7 @@ class OSUpdateFrame(wx.Frame):
|
||||
metallib_install_thread = threading.Thread(target=_install_metallib_thread)
|
||||
metallib_install_thread.start()
|
||||
|
||||
while metallib_install_thread.is_alive():
|
||||
wx.Yield()
|
||||
gui_support.wait_for_thread(metallib_install_thread)
|
||||
|
||||
if self.metallib_install_result is False:
|
||||
logging.info("Failed to install Metallib")
|
||||
|
||||
@@ -4,6 +4,7 @@ gui_download.py: Generate UI for downloading files
|
||||
|
||||
import wx
|
||||
import logging
|
||||
import time
|
||||
|
||||
from .. import constants
|
||||
|
||||
@@ -86,6 +87,7 @@ class DownloadFrame(wx.Frame):
|
||||
label_amount.Centre(wx.HORIZONTAL)
|
||||
|
||||
wx.Yield()
|
||||
time.sleep(self.constants.thread_sleep_interval)
|
||||
|
||||
if self.download_obj.download_complete is False and self.user_cancelled is False:
|
||||
wx.MessageBox(f"Download failed: \n{self.download_obj.error_msg}", "Error", wx.OK | wx.ICON_ERROR)
|
||||
|
||||
@@ -103,9 +103,7 @@ class InstallOCFrame(wx.Frame):
|
||||
thread = threading.Thread(target=self._fetch_disks)
|
||||
thread.start()
|
||||
|
||||
while thread.is_alive():
|
||||
wx.Yield()
|
||||
continue
|
||||
gui_support.wait_for_thread(thread)
|
||||
|
||||
self.progress_bar_animation.stop_pulse()
|
||||
self.progress_bar.Hide()
|
||||
@@ -281,8 +279,7 @@ class InstallOCFrame(wx.Frame):
|
||||
thread = threading.Thread(target=self._install_oc, args=(partition,))
|
||||
thread.start()
|
||||
|
||||
while thread.is_alive():
|
||||
wx.Yield()
|
||||
gui_support.wait_for_thread(thread)
|
||||
|
||||
if self.result is True:
|
||||
if self.constants.update_stage != gui_support.AutoUpdateStages.INACTIVE and self.constants.detected_os >= os_data.os_data.big_sur:
|
||||
|
||||
@@ -149,8 +149,7 @@ class macOSInstallerDownloadFrame(wx.Frame):
|
||||
thread = threading.Thread(target=_fetch_installers)
|
||||
thread.start()
|
||||
|
||||
while thread.is_alive():
|
||||
wx.Yield()
|
||||
gui_support.wait_for_thread(thread)
|
||||
|
||||
progress_bar_animation.stop_pulse()
|
||||
progress_bar.Hide()
|
||||
@@ -412,8 +411,7 @@ class macOSInstallerDownloadFrame(wx.Frame):
|
||||
self.Show()
|
||||
|
||||
# Wait for thread to finish
|
||||
while thread.is_alive():
|
||||
wx.Yield()
|
||||
gui_support.wait_for_thread(thread)
|
||||
|
||||
progress_bar_animation.stop_pulse()
|
||||
progress_bar.Hide()
|
||||
|
||||
@@ -3,7 +3,6 @@ gui_macos_installer_flash.py: macOS Installer Flash Frame
|
||||
"""
|
||||
|
||||
import wx
|
||||
import time
|
||||
import logging
|
||||
import plistlib
|
||||
import tempfile
|
||||
@@ -88,8 +87,7 @@ class macOSInstallerFlashFrame(wx.Frame):
|
||||
thread = threading.Thread(target=fetch_installers)
|
||||
thread.start()
|
||||
|
||||
while thread.is_alive():
|
||||
wx.Yield()
|
||||
gui_support.wait_for_thread(thread)
|
||||
|
||||
frame_modal = wx.Dialog(self, title=self.title, size=(350, 200))
|
||||
|
||||
@@ -180,8 +178,7 @@ class macOSInstallerFlashFrame(wx.Frame):
|
||||
thread = threading.Thread(target=_fetch_disks)
|
||||
thread.start()
|
||||
|
||||
while thread.is_alive():
|
||||
wx.Yield()
|
||||
gui_support.wait_for_thread(thread)
|
||||
|
||||
self.frame_modal = wx.Dialog(self, title=self.title, size=(350, 200))
|
||||
|
||||
@@ -317,7 +314,9 @@ class macOSInstallerFlashFrame(wx.Frame):
|
||||
except:
|
||||
bytes_written = 0
|
||||
wx.CallAfter(progress_bar.SetValue, bytes_written)
|
||||
|
||||
wx.Yield()
|
||||
thread.join(timeout=self.constants.thread_sleep_interval)
|
||||
|
||||
if self.result is False:
|
||||
logging.error("Failed to flash installer, cannot continue.")
|
||||
@@ -370,8 +369,7 @@ class macOSInstallerFlashFrame(wx.Frame):
|
||||
thread = threading.Thread(target=prepare_script, args=(self, installer_path, disk, self.constants))
|
||||
thread.start()
|
||||
|
||||
while thread.is_alive():
|
||||
wx.Yield()
|
||||
gui_support.wait_for_thread(thread)
|
||||
|
||||
return self.prepare_result
|
||||
|
||||
@@ -399,10 +397,11 @@ class macOSInstallerFlashFrame(wx.Frame):
|
||||
return False
|
||||
|
||||
logging.info("Successfully created macOS installer")
|
||||
while thread.is_alive():
|
||||
# wait for download_thread to finish
|
||||
# though highly unlikely this thread is still alive (flashing an Installer will take a while)
|
||||
time.sleep(0.1)
|
||||
|
||||
# wait for download_thread to finish
|
||||
# though highly unlikely this thread is still alive (flashing an Installer will take a while)
|
||||
gui_support.wait_for_thread(thread)
|
||||
|
||||
logging.info("Installing Root Patcher to drive")
|
||||
self._install_installer_pkg(disk)
|
||||
|
||||
@@ -617,8 +616,7 @@ class macOSInstallerFlashFrame(wx.Frame):
|
||||
|
||||
thread = threading.Thread(target=_integrity_check)
|
||||
thread.start()
|
||||
while thread.is_alive():
|
||||
wx.Yield()
|
||||
gui_support.wait_for_thread(thread)
|
||||
|
||||
if error_message == "":
|
||||
logging.info("Installer pkg validated")
|
||||
|
||||
@@ -263,6 +263,19 @@ class ThreadHandler(logging.Handler):
|
||||
wx.CallAfter(self.text_box.AppendText, self.format(record) + '\n')
|
||||
|
||||
|
||||
def wait_for_thread(thread: threading.Thread, sleep_interval=None):
|
||||
"""
|
||||
Waits for a thread to finish while processing UI events at regular intervals
|
||||
to prevent UI freezing and excessive CPU usage.
|
||||
"""
|
||||
# Use the passed sleep_interval, or get from global_constants
|
||||
interval = sleep_interval if sleep_interval is not None else constants.Constants().thread_sleep_interval
|
||||
|
||||
while thread.is_alive():
|
||||
wx.Yield()
|
||||
thread.join(timeout=interval)
|
||||
|
||||
|
||||
class RestartHost:
|
||||
"""
|
||||
Restarts the host machine
|
||||
|
||||
@@ -93,9 +93,7 @@ class SysPatchDisplayFrame(wx.Frame):
|
||||
|
||||
frame.ShowWindowModal()
|
||||
|
||||
while thread.is_alive():
|
||||
wx.Yield()
|
||||
|
||||
gui_support.wait_for_thread(thread)
|
||||
|
||||
frame.Close()
|
||||
|
||||
|
||||
@@ -88,8 +88,7 @@ class SysPatchStartFrame(wx.Frame):
|
||||
kdk_thread = threading.Thread(target=_kdk_thread_spawn)
|
||||
kdk_thread.start()
|
||||
|
||||
while kdk_thread.is_alive():
|
||||
wx.Yield()
|
||||
gui_support.wait_for_thread(kdk_thread)
|
||||
|
||||
if self.kdk_obj.success is False:
|
||||
progress_bar_animation.stop_pulse()
|
||||
@@ -170,8 +169,7 @@ class SysPatchStartFrame(wx.Frame):
|
||||
metallib_thread = threading.Thread(target=_metallib_thread_spawn)
|
||||
metallib_thread.start()
|
||||
|
||||
while metallib_thread.is_alive():
|
||||
wx.Yield()
|
||||
gui_support.wait_for_thread(metallib_thread)
|
||||
|
||||
if self.metallib_obj.success is False:
|
||||
progress_bar_animation.stop_pulse()
|
||||
@@ -209,8 +207,7 @@ class SysPatchStartFrame(wx.Frame):
|
||||
install_thread = threading.Thread(target=_install_metallib)
|
||||
install_thread.start()
|
||||
|
||||
while install_thread.is_alive():
|
||||
wx.Yield()
|
||||
gui_support.wait_for_thread(install_thread)
|
||||
|
||||
if self.result is False:
|
||||
progress_bar_animation.stop_pulse()
|
||||
@@ -314,6 +311,7 @@ class SysPatchStartFrame(wx.Frame):
|
||||
|
||||
while gui_support.PayloadMount(self.constants, self).is_unpack_finished() is False:
|
||||
wx.Yield()
|
||||
time.sleep(self.constants.thread_sleep_interval)
|
||||
|
||||
if self.patches[HardwarePatchsetSettings.KERNEL_DEBUG_KIT_REQUIRED] is True:
|
||||
if self._kdk_download(self) is False:
|
||||
@@ -329,8 +327,7 @@ class SysPatchStartFrame(wx.Frame):
|
||||
thread = threading.Thread(target=self._start_root_patching, args=(self.patches,))
|
||||
thread.start()
|
||||
|
||||
while thread.is_alive():
|
||||
wx.Yield()
|
||||
gui_support.wait_for_thread(thread)
|
||||
|
||||
self._post_patch()
|
||||
self.return_button.Enable()
|
||||
@@ -356,8 +353,7 @@ class SysPatchStartFrame(wx.Frame):
|
||||
thread = threading.Thread(target=self._revert_root_patching, args=(self.patches,))
|
||||
thread.start()
|
||||
|
||||
while thread.is_alive():
|
||||
wx.Yield()
|
||||
gui_support.wait_for_thread(thread)
|
||||
|
||||
self._post_patch()
|
||||
self.return_button.Enable()
|
||||
|
||||
@@ -102,8 +102,7 @@ class UpdateFrame(wx.Frame):
|
||||
|
||||
thread = threading.Thread(target=_fetch_update)
|
||||
thread.start()
|
||||
while thread.is_alive():
|
||||
wx.Yield()
|
||||
gui_support.wait_for_thread(thread)
|
||||
|
||||
gui_download.DownloadFrame(
|
||||
self.frame,
|
||||
@@ -128,8 +127,7 @@ class UpdateFrame(wx.Frame):
|
||||
thread = threading.Thread(target=self._extract_update)
|
||||
thread.start()
|
||||
|
||||
while thread.is_alive():
|
||||
wx.Yield()
|
||||
gui_support.wait_for_thread(thread)
|
||||
|
||||
# Title: Installing update
|
||||
title_label.SetLabel("Installing update...")
|
||||
@@ -138,8 +136,7 @@ class UpdateFrame(wx.Frame):
|
||||
thread = threading.Thread(target=self._install_update)
|
||||
thread.start()
|
||||
|
||||
while thread.is_alive():
|
||||
wx.Yield()
|
||||
gui_support.wait_for_thread(thread)
|
||||
|
||||
# Title: Update complete
|
||||
title_label.SetLabel("Update complete!")
|
||||
@@ -170,8 +167,7 @@ class UpdateFrame(wx.Frame):
|
||||
thread = threading.Thread(target=self._launch_update)
|
||||
thread.start()
|
||||
|
||||
while thread.is_alive():
|
||||
wx.Yield()
|
||||
gui_support.wait_for_thread(thread)
|
||||
|
||||
timer = 5
|
||||
while True:
|
||||
|
||||
@@ -296,6 +296,8 @@
|
||||
<false/>
|
||||
<key>AvoidRuntimeDefrag</key>
|
||||
<false/>
|
||||
<key>ClearTaskSwitchBit</key>
|
||||
<false/>
|
||||
<key>DevirtualiseMmio</key>
|
||||
<false/>
|
||||
<key>DisableSingleUser</key>
|
||||
@@ -3191,6 +3193,8 @@
|
||||
</dict>
|
||||
<key>ReservedMemory</key>
|
||||
<array/>
|
||||
<key>Unload</key>
|
||||
<array/>
|
||||
</dict>
|
||||
</dict>
|
||||
</plist>
|
||||
|
||||
Binary file not shown.
Binary file not shown.
BIN
payloads/Kexts/Acidanthera/AirportBrcmFixup-v2.1.9-DEBUG.zip
Normal file
BIN
payloads/Kexts/Acidanthera/AirportBrcmFixup-v2.1.9-DEBUG.zip
Normal file
Binary file not shown.
BIN
payloads/Kexts/Acidanthera/AirportBrcmFixup-v2.1.9-RELEASE.zip
Normal file
BIN
payloads/Kexts/Acidanthera/AirportBrcmFixup-v2.1.9-RELEASE.zip
Normal file
Binary file not shown.
Binary file not shown.
Binary file not shown.
BIN
payloads/Kexts/Acidanthera/BlueToolFixup-v2.6.9-DEBUG.zip
Normal file
BIN
payloads/Kexts/Acidanthera/BlueToolFixup-v2.6.9-DEBUG.zip
Normal file
Binary file not shown.
BIN
payloads/Kexts/Acidanthera/BlueToolFixup-v2.6.9-RELEASE.zip
Normal file
BIN
payloads/Kexts/Acidanthera/BlueToolFixup-v2.6.9-RELEASE.zip
Normal file
Binary file not shown.
Binary file not shown.
Binary file not shown.
BIN
payloads/Kexts/Acidanthera/CPUFriend-v1.2.9-DEBUG.zip
Normal file
BIN
payloads/Kexts/Acidanthera/CPUFriend-v1.2.9-DEBUG.zip
Normal file
Binary file not shown.
BIN
payloads/Kexts/Acidanthera/CPUFriend-v1.2.9-RELEASE.zip
Normal file
BIN
payloads/Kexts/Acidanthera/CPUFriend-v1.2.9-RELEASE.zip
Normal file
Binary file not shown.
Binary file not shown.
Binary file not shown.
BIN
payloads/Kexts/Acidanthera/CryptexFixup-v1.0.4-DEBUG.zip
Normal file
BIN
payloads/Kexts/Acidanthera/CryptexFixup-v1.0.4-DEBUG.zip
Normal file
Binary file not shown.
BIN
payloads/Kexts/Acidanthera/CryptexFixup-v1.0.4-RELEASE.zip
Normal file
BIN
payloads/Kexts/Acidanthera/CryptexFixup-v1.0.4-RELEASE.zip
Normal file
Binary file not shown.
Binary file not shown.
Binary file not shown.
BIN
payloads/Kexts/Acidanthera/DebugEnhancer-v1.1.0-DEBUG.zip
Normal file
BIN
payloads/Kexts/Acidanthera/DebugEnhancer-v1.1.0-DEBUG.zip
Normal file
Binary file not shown.
BIN
payloads/Kexts/Acidanthera/DebugEnhancer-v1.1.0-RELEASE.zip
Normal file
BIN
payloads/Kexts/Acidanthera/DebugEnhancer-v1.1.0-RELEASE.zip
Normal file
Binary file not shown.
Binary file not shown.
Binary file not shown.
BIN
payloads/Kexts/Acidanthera/FeatureUnlock-v1.1.7-DEBUG.zip
Normal file
BIN
payloads/Kexts/Acidanthera/FeatureUnlock-v1.1.7-DEBUG.zip
Normal file
Binary file not shown.
BIN
payloads/Kexts/Acidanthera/FeatureUnlock-v1.1.7-RELEASE.zip
Normal file
BIN
payloads/Kexts/Acidanthera/FeatureUnlock-v1.1.7-RELEASE.zip
Normal file
Binary file not shown.
Binary file not shown.
Binary file not shown.
BIN
payloads/Kexts/Acidanthera/Lilu-v1.7.0-DEBUG.zip
Normal file
BIN
payloads/Kexts/Acidanthera/Lilu-v1.7.0-DEBUG.zip
Normal file
Binary file not shown.
BIN
payloads/Kexts/Acidanthera/Lilu-v1.7.0-RELEASE.zip
Normal file
BIN
payloads/Kexts/Acidanthera/Lilu-v1.7.0-RELEASE.zip
Normal file
Binary file not shown.
Binary file not shown.
Binary file not shown.
BIN
payloads/Kexts/Acidanthera/NVMeFix-v1.1.2-DEBUG.zip
Normal file
BIN
payloads/Kexts/Acidanthera/NVMeFix-v1.1.2-DEBUG.zip
Normal file
Binary file not shown.
BIN
payloads/Kexts/Acidanthera/NVMeFix-v1.1.2-RELEASE.zip
Normal file
BIN
payloads/Kexts/Acidanthera/NVMeFix-v1.1.2-RELEASE.zip
Normal file
Binary file not shown.
Binary file not shown.
Binary file not shown.
BIN
payloads/Kexts/Acidanthera/RestrictEvents-v1.1.5-DEBUG.zip
Normal file
BIN
payloads/Kexts/Acidanthera/RestrictEvents-v1.1.5-DEBUG.zip
Normal file
Binary file not shown.
BIN
payloads/Kexts/Acidanthera/RestrictEvents-v1.1.5-RELEASE.zip
Normal file
BIN
payloads/Kexts/Acidanthera/RestrictEvents-v1.1.5-RELEASE.zip
Normal file
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
BIN
payloads/Kexts/Acidanthera/WhateverGreen-v1.6.9-DEBUG.zip
Normal file
BIN
payloads/Kexts/Acidanthera/WhateverGreen-v1.6.9-DEBUG.zip
Normal file
Binary file not shown.
BIN
payloads/Kexts/Acidanthera/WhateverGreen-v1.6.9-Navi-DEBUG.zip
Normal file
BIN
payloads/Kexts/Acidanthera/WhateverGreen-v1.6.9-Navi-DEBUG.zip
Normal file
Binary file not shown.
BIN
payloads/Kexts/Acidanthera/WhateverGreen-v1.6.9-Navi-RELEASE.zip
Normal file
BIN
payloads/Kexts/Acidanthera/WhateverGreen-v1.6.9-Navi-RELEASE.zip
Normal file
Binary file not shown.
BIN
payloads/Kexts/Acidanthera/WhateverGreen-v1.6.9-RELEASE.zip
Normal file
BIN
payloads/Kexts/Acidanthera/WhateverGreen-v1.6.9-RELEASE.zip
Normal file
Binary file not shown.
Binary file not shown.
Binary file not shown.
@@ -49,6 +49,17 @@ UNUSED_DRIVERS = [
|
||||
"Dhcp4Dxe.efi",
|
||||
"ArpDxe.efi",
|
||||
"FirmwareSettingsEntry.efi",
|
||||
"UefiPxeBcDxe.efi",
|
||||
"RngDxe.efi",
|
||||
"TlsDxe.efi",
|
||||
"Udp6Dxe.efi",
|
||||
"Hash2DxeCrypto.efi",
|
||||
"Dhcp6Dxe.efi",
|
||||
"Ip6Dxe.efi",
|
||||
"Mtftp4Dxe.efi",
|
||||
"RamDiskDxe.efi",
|
||||
"Mtftp6Dxe.efi",
|
||||
"OpenNetworkBoot.efi",
|
||||
]
|
||||
|
||||
UNUSED_TOOLS = [
|
||||
|
||||
Binary file not shown.
Binary file not shown.
@@ -60,7 +60,8 @@ fi
|
||||
|
||||
echo "Signing OpenCore..."
|
||||
./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))
|
||||
|
||||
off=$((0x$(/usr/bin/hexdump -C "${OCBin}" | /usr/bin/grep "=BEGIN OC VAULT=" | /usr/bin/awk '{print $1}') + 16))
|
||||
if [ "${off}" -le 16 ]; then
|
||||
abort "${OCBin} is borked"
|
||||
fi
|
||||
|
||||
Reference in New Issue
Block a user