Compare commits
247 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 | ||
|
|
5f1e21eb09 | ||
|
|
213e161458 | ||
|
|
40841407c9 | ||
|
|
5fc24214af | ||
|
|
1383d6ac00 | ||
|
|
04bd4da742 | ||
|
|
67b44851fe | ||
|
|
38def456e0 | ||
|
|
ab864bd3c2 | ||
|
|
29e75171f3 | ||
|
|
1bfeac3f09 | ||
|
|
82310eac1a | ||
|
|
46c350ba32 | ||
|
|
6661089f89 | ||
|
|
069f191359 | ||
|
|
01035019b2 | ||
|
|
0632d1ff7e | ||
|
|
028999f666 | ||
|
|
b686016222 | ||
|
|
9d9226cc83 | ||
|
|
2d597501c4 | ||
|
|
e9e681c272 | ||
|
|
4a9564fe4e | ||
|
|
66435494cc | ||
|
|
a863b5cd54 | ||
|
|
e94f6ac63d | ||
|
|
5e4b124b2a | ||
|
|
67df72290f | ||
|
|
ab740371c8 | ||
|
|
d508e8e9f9 | ||
|
|
39c03e3f8b | ||
|
|
94f77c20a0 | ||
|
|
2dc9961ffe | ||
|
|
24bc4432ab | ||
|
|
2a578734b9 | ||
|
|
bb56544182 | ||
|
|
70e62c946a | ||
|
|
d24eb642ce | ||
|
|
81fee375a1 | ||
|
|
581c7fcb4e | ||
|
|
4939c1dc0f | ||
|
|
f635c21f29 | ||
|
|
ed0e3ff66a | ||
|
|
7ac83d8dd6 | ||
|
|
b7bca45910 | ||
|
|
737aed5635 | ||
|
|
868cfa62c1 | ||
|
|
b561a35ca9 | ||
|
|
5542f10ea1 | ||
|
|
bccf1dc31d | ||
|
|
b50ddb6e26 | ||
|
|
4f980d7562 | ||
|
|
6780fe307f | ||
|
|
dfcb7fdb0c | ||
|
|
97d956190e | ||
|
|
41b9fcb85f | ||
|
|
4015b8bb25 | ||
|
|
be155127cf | ||
|
|
203b5cf127 | ||
|
|
fbec713b43 | ||
|
|
734e14b0cf | ||
|
|
ad1faf2ea2 | ||
|
|
58435188eb | ||
|
|
0b92e022e9 | ||
|
|
4db2e97662 | ||
|
|
d1ba89049c | ||
|
|
33d60f19d0 | ||
|
|
15d4e201f4 | ||
|
|
af67ec2bbe | ||
|
|
e30434a70e | ||
|
|
3a442e67c6 | ||
|
|
32a98e5b34 | ||
|
|
d9828999eb | ||
|
|
07daef6f63 | ||
|
|
2cccd34870 | ||
|
|
31790190be | ||
|
|
b7ecafb5ec | ||
|
|
4f6e8c4fb8 | ||
|
|
e142702c3d | ||
|
|
8b5663c3c7 | ||
|
|
7c89ab6ba3 | ||
|
|
80e2aa9447 | ||
|
|
170b00694b | ||
|
|
f5ffdd158a | ||
|
|
c504c95b50 | ||
|
|
9da6c85c98 | ||
|
|
6a58ef1dab | ||
|
|
a8f76af6bc | ||
|
|
1ec6b02cd7 | ||
|
|
8ff76ba3cd | ||
|
|
6742372e91 | ||
|
|
65caa6d028 | ||
|
|
31cb5f9367 | ||
|
|
9aacf826f2 | ||
|
|
ca34c57fde | ||
|
|
49c138bd19 | ||
|
|
c8db4663ce | ||
|
|
7fcf5fcab4 | ||
|
|
7fcb824dc2 | ||
|
|
9455d5357b | ||
|
|
3a7265e985 | ||
|
|
03ac2ec155 | ||
|
|
cfde6978f5 | ||
|
|
8ca7a2ebbb | ||
|
|
7d50f96cf1 | ||
|
|
0eb351f270 | ||
|
|
3bfa50950a | ||
|
|
2fb9fb866f | ||
|
|
87b5b49f06 | ||
|
|
4cc88d18a0 | ||
|
|
5b332eeac5 | ||
|
|
8f88444ac3 | ||
|
|
15ad0c509e | ||
|
|
0e0b1436b2 | ||
|
|
528d32cc9d | ||
|
|
8e15ed6d6e | ||
|
|
796b5bcd9e | ||
|
|
a37571a8a5 | ||
|
|
9796ecf75e | ||
|
|
cade003b31 | ||
|
|
2d8c9c5beb | ||
|
|
0a138ee435 | ||
|
|
6b414526ac | ||
|
|
a67a6d6c67 | ||
|
|
da887e3722 | ||
|
|
e65b8386ab | ||
|
|
0d7edc8e09 | ||
|
|
32080fdcc3 | ||
|
|
c2d9d01a24 | ||
|
|
cdb6603ed6 | ||
|
|
dbf7444009 | ||
|
|
c46133b0b5 | ||
|
|
dde558a951 | ||
|
|
9bdce62f59 | ||
|
|
098a4f9661 | ||
|
|
d9f23b556c | ||
|
|
0f63ce2fde | ||
|
|
adc58b417b | ||
|
|
b1bb01af69 | ||
|
|
2751ca69de | ||
|
|
e9744fffd6 | ||
|
|
e0e731b13a | ||
|
|
bb34bbb6a1 | ||
|
|
c68afc2f8e | ||
|
|
55ed78f5b4 | ||
|
|
c065aae29f | ||
|
|
8333c3d8ec | ||
|
|
b8b591a8ed | ||
|
|
4542287613 | ||
|
|
597b167285 | ||
|
|
7e5f171210 | ||
|
|
861898272b | ||
|
|
16ab3367f8 | ||
|
|
9d43d66f5d | ||
|
|
753cd6cf3f | ||
|
|
192dfb79ae | ||
|
|
d7f3d09c14 | ||
|
|
41a5731546 | ||
|
|
2e513b98ca | ||
|
|
5c1326881a | ||
|
|
1d6631f24d | ||
|
|
61872a8b94 | ||
|
|
024559885d | ||
|
|
3e0a2a2198 | ||
|
|
86be4acedb | ||
|
|
ce08129d4b |
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()
|
||||
|
||||
108
CHANGELOG.md
@@ -1,5 +1,113 @@
|
||||
# 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
|
||||
- Resolved non-metal Screen Sharing on macOS Sequoia
|
||||
- Resolved non-metal inverted screenshots on macOS Sequoia
|
||||
- Improved non-metal beta menubar reliability
|
||||
- Disabled non-metal broken weather background animations on macOS Sequoia
|
||||
- Resolved non-metal safari hide distracting items crash on macOS Sequoia
|
||||
- Resolved non-metal full screen transition on macOS Sonoma/Sequoia
|
||||
- Resolved T1 Apple Pay on macOS Sequoia
|
||||
- Resolved T1 TouchID support on macOS Sequoia 15.2
|
||||
- Resolved iCloud sync problems
|
||||
- Resolved JavaScriptCore on pre-AVX Macs on macOS Sequoia 15.2/Safari 18.2
|
||||
- Increment binaries:
|
||||
- PatcherSupportPkg 1.9.1 - release
|
||||
|
||||
## 2.1.2
|
||||
- Add additional error handling for when building OpenCore errors out
|
||||
- Prevents broken EFI from being installed to disk
|
||||
- Add additional error handling for broken settings file from OCLP 2.1.0
|
||||
- If typing for settings is wrong, app will skip setting it, delete from settings file and use default
|
||||
- Delete `/Users/Shared/.com.dortania.opencore-legacy-patcher.plist` and restart app to avoid this issue
|
||||
- Add additional warning about OCLP 2.1.0 bug where certain settings saved incorrectly
|
||||
- Delete `/Users/Shared/.com.dortania.opencore-legacy-patcher.plist` and restart app if `TypeError: unsupported type: <class 'NoneType'>` error occurs
|
||||
|
||||
## 2.1.1
|
||||
- Resolve boolean GUI settings saving incorrectly as Python's None type
|
||||
|
||||
## 2.1.0
|
||||
- Disable FeatureUnlock by default
|
||||
- Intended to maintain long term stability
|
||||
- If features unlocked by FeatureUnlock desired, can be enabled in settings
|
||||
- Disable mediaanalysisd on Metal 3802-based GPUs
|
||||
- Intended to maintain long term stability
|
||||
- If Live Text support desired, can be enabled in settings
|
||||
- Support for retaining GUI settings when building on-model
|
||||
- When switching to a different model, model-specific GUI settings will be reset
|
||||
- Note resetting saved settings not implemented yet
|
||||
- Delete `/Users/Shared/.com.dortania.opencore-legacy-patcher.plist` and restart app to reset settings
|
||||
- Resolve macOS 15.1 (24B2083) Apple Silicon installer appearing as download option
|
||||
- Resolve WhatsApp crashing on 15.1
|
||||
- Increment binaries:
|
||||
- PatcherSupportPkg 1.8.4 - release
|
||||
|
||||
## 2.0.2
|
||||
- Fix Nvidia Kepler patches not installing on Monterey
|
||||
- Fix `iMac7,1` and `iMac8,1` failing to apply root patches on macOS Sequoia
|
||||
- Avoid downgrading AppleGVA stack on AMD GCN and newer GPUs
|
||||
- Resolves VTDecoderXPC crashes
|
||||
- Thanks @ausdauersportler for the catch!
|
||||
- Resolve glitched widgets on 3802-based GPUs running macOS Sequoia 15.1
|
||||
- Resolve CoreImage crashes on 3802-based GPUs running macOS Sequoia
|
||||
- Resolve missing screen capture crop borders on non-Metal GPUs running macOS Sequoia
|
||||
- Resolve TeraScale 2 HDCP kernel panic
|
||||
- Resolve specific Wallpaper locking up on non-Metal GPUs running macOS Sequoia
|
||||
- Removes unsupported Metal-based wallpaper (Macintosh Wallpaper)
|
||||
- Resolve firmware upload incompatibilities on pre-2012 Macs with 2012+ Airport cards
|
||||
- Thanks @ausdauersportler for the catch!
|
||||
- Resolve `diskutil` failing to be located in the installer creation process
|
||||
- Thanks @niklasravnsborg for the report!
|
||||
- Increment binaries:
|
||||
- PatcherSupportPkg 1.8.3 - release
|
||||
|
||||
## 2.0.1
|
||||
- Fix MacBookPro13,3 listing 'Available patches' after having installed all applicable patches
|
||||
- Fix Nvidia Tesla and Kepler patches not installing on Monterey (and older if applicable)
|
||||
|
||||
@@ -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.
|
||||
|
||||
|
||||
21
README.md
@@ -67,8 +67,22 @@ To run the project from source, see here: [Build and run from source](./SOURCE.m
|
||||
* Great amounts of help with debugging, and code suggestions
|
||||
* [vit9696](https://github.com/vit9696)
|
||||
* Endless amount of help troubleshooting, determining fixes and writing patches
|
||||
* [ASentientBot](https://github.com/ASentientBot), [EduCovas](https://github.com/educovas) and [ASentientHedgehog](https://github.com/moosethegoose2213)
|
||||
* Legacy Acceleration Patch set and documentation, [Moraea Organization](https://github.com/moraea)
|
||||
* [EduCovas](https://github.com/covasedu)
|
||||
* [non-Metal patch set](https://github.com/moraea/non-metal-frameworks) for nVidia Tesla/Fermi/Maxwell/Pascal, AMD TeraScale 1/2, and Intel Core 1st/2nd Generation GPUs
|
||||
* [3802 Metal patch set](https://github.com/moraea/misc-patches/tree/main/3802-Metal-15) and [MetallibSupportPkg](https://github.com/dortania/MetallibSupportPkg) for nVidia Kepler and Intel Core 3rd/4th Generation GPUs
|
||||
* Metal bundle patches and shims for [nVidia Kepler](https://github.com/moraea/misc-patches/tree/main/Kepler%2013%2B), [AMD GCN 1 - 4](https://github.com/moraea/misc-patches/tree/main/GCN%2013%2B), and [AMD GCN 5 (Vega)](https://github.com/moraea/misc-patches/tree/main/vega%2013%2B)
|
||||
* [IOSurface offset patches](https://github.com/moraea/misc-patches/tree/main/Sonoma%2014.4%20IOSurface) for nVidia Kepler, AMD GCN 1 - 5, and Intel Core 3rd - 6th Generation GPUs
|
||||
* [legacy Wi-Fi patch set](https://github.com/moraea/unsupported-wifi-patches) restores functionality for Wi-Fi cards in all 2007 - 2017 models
|
||||
* [T1 patch set](https://github.com/moraea/misc-patches/tree/main/T1-Patch) restores Touch ID, Apple Pay, and other secure functionality in 2016 - 2017 models
|
||||
* AppleGVA downgrade for accelerated video decoding on 2012 - 2016 models
|
||||
* OpenCL and OpenGL downgrade for AMD GCN
|
||||
* [USB 1 patch](https://github.com/moraea/misc-patches/tree/main/IOUSBHostFamily-14.4)
|
||||
* [ASentientHedgehog](https://github.com/moosethegoose2213)
|
||||
* [non-Metal patch set](https://github.com/moraea/non-metal-frameworks) for nVidia Tesla/Fermi/Maxwell/Pascal, AMD TeraScale 1/2, and Intel Core 1st/2nd Generation GPUs
|
||||
* [ASentientBot](https://github.com/ASentientBot)
|
||||
* [non-Metal patch set](https://github.com/moraea/non-metal-frameworks) for nVidia Tesla/Fermi/Maxwell/Pascal, AMD TeraScale 1/2, and Intel Core 1st/2nd Generation GPUs
|
||||
* [Metal bundle interposer](https://github.com/moraea/misc-patches/tree/main/sequoia%2031001%20interposer) for AMD GCN 1 - 5 and Intel Core 5th/6th Generation GPUs
|
||||
* [dsce](https://github.com/moraea/dsce) and [shared code](https://github.com/moraea/moraea-common) used by some other patches
|
||||
* [cdf](https://github.com/cdf)
|
||||
* Mac Pro on OpenCore Patch set and documentation
|
||||
* [Innie](https://github.com/cdf/Innie) and [NightShiftEnabler](https://github.com/cdf/NightShiftEnabler)
|
||||
@@ -89,6 +103,9 @@ To run the project from source, see here: [Build and run from source](./SOURCE.m
|
||||
* Endless hours helping architect and troubleshoot many portions of the project
|
||||
* [flagers](https://github.com/flagersgit)
|
||||
* Aid with Nvidia Web Driver research and development
|
||||
* [non-Metal patch set](https://github.com/moraea/non-metal-frameworks) for nVidia Tesla/Fermi/Maxwell/Pascal, AMD TeraScale 1/2, and Intel Core 1st/2nd Generation GPUs
|
||||
* [Metal bundle interposer](https://github.com/moraea/misc-patches/tree/main/sequoia%2031001%20interposer) for AMD GCN 1 - 5 and Intel Core 5th/6th Generation GPUs
|
||||
* LegacyRVPL, SnapshotIsKill, etc. to aid in rapid testing and development
|
||||
* [joevt](https://github.com/joevt)
|
||||
* [FixPCIeLinkrate](https://github.com/joevt/joevtApps)
|
||||
* [Jazzzny](https://github.com/Jazzzny)
|
||||
|
||||
@@ -31,8 +31,8 @@ pip3 install -r requirements.txt
|
||||
|
||||
If you have any installation errors, see the following troubleshooting options:
|
||||
|
||||
* Use Python 3.10
|
||||
* Our build server currently uses Python 3.10 for generating binaries used in releases
|
||||
* Use Python 3.11
|
||||
* Our build server currently uses Python 3.11 for generating binaries used in releases
|
||||
* Use .whl snapshots for installing additional dependencies
|
||||
|
||||
## Running OpenCore Legacy Patcher
|
||||
|
||||
@@ -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>
|
||||
@@ -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
|
||||
@@ -69,77 +69,63 @@ module.exports = {
|
||||
children: [
|
||||
'START',
|
||||
'MODELS',
|
||||
'FAQ',
|
||||
]
|
||||
|
||||
},
|
||||
{
|
||||
title: 'Setting up',
|
||||
title: 'How to install',
|
||||
collapsable: false,
|
||||
sidebarDepth: 1,
|
||||
children: [
|
||||
'INSTALLER',
|
||||
'BUILD',
|
||||
]
|
||||
|
||||
},
|
||||
{
|
||||
title: 'Installation',
|
||||
collapsable: false,
|
||||
sidebarDepth: 1,
|
||||
children: [
|
||||
'BOOT',
|
||||
'BUILD',
|
||||
'BOOT',
|
||||
'POST-INSTALL',
|
||||
]
|
||||
|
||||
},
|
||||
{
|
||||
title: 'macOS Sequoia',
|
||||
title: 'macOS Support',
|
||||
collapsable: false,
|
||||
sidebarDepth: 1,
|
||||
children: [
|
||||
'SEQUOIA-DROP',
|
||||
'SONOMA-DROP',
|
||||
'VENTURA-DROP',
|
||||
'MONTEREY-DROP',
|
||||
]
|
||||
},
|
||||
{
|
||||
title: 'macOS Sonoma',
|
||||
{
|
||||
title: 'Application',
|
||||
collapsable: false,
|
||||
sidebarDepth: 1,
|
||||
children: [
|
||||
'SONOMA-DROP',
|
||||
'UPDATE',
|
||||
'UNINSTALL',
|
||||
'PROCESS',
|
||||
]
|
||||
},
|
||||
|
||||
{
|
||||
title: 'macOS Ventura',
|
||||
{
|
||||
title: 'Troubleshooting',
|
||||
collapsable: false,
|
||||
sidebarDepth: 1,
|
||||
children: [
|
||||
'VENTURA-DROP',
|
||||
'TROUBLESHOOTING',
|
||||
'ACCEL',
|
||||
'DEBUG',
|
||||
|
||||
]
|
||||
},
|
||||
|
||||
{
|
||||
title: 'macOS Monterey',
|
||||
collapsable: false,
|
||||
sidebarDepth: 1,
|
||||
children: [
|
||||
'MONTEREY-DROP',
|
||||
]
|
||||
},
|
||||
},
|
||||
{
|
||||
title: 'Misc',
|
||||
collapsable: false,
|
||||
sidebarDepth: 1,
|
||||
children: [
|
||||
'ACCEL',
|
||||
'TROUBLESHOOTING',
|
||||
'DEBUG',
|
||||
'UPDATE',
|
||||
'UNINSTALL',
|
||||
'TIMEMACHINE',
|
||||
'ICNS',
|
||||
'WINDOWS',
|
||||
'UNIVERSALCONTROL',
|
||||
'PROCESS',
|
||||
]
|
||||
},
|
||||
{
|
||||
|
||||
@@ -1,11 +1,11 @@
|
||||
# Working Around Legacy Acceleration Issues
|
||||
# Working Around Non-Metal Issues
|
||||
|
||||
* [Broken Background Blurs](#broken-background-blurs)
|
||||
* [Downloading older non-Metal Apps](#downloading-older-non-metal-apps)
|
||||
* [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)
|
||||
@@ -46,7 +46,11 @@ Metal is Apple's in-house graphics API that acts as a replacement for OpenGL/Ope
|
||||
|
||||
By default with the non-Metal acceleration patches, many background blur menus may act distorted when moving a cursor over it. With 0.4.1 and newer, users can enable a new Beta Blur feature to try and resolve the issue:
|
||||
|
||||

|
||||
![]()
|
||||
|
||||
<div align="left">
|
||||
<img src="./images/OCLP-GUI-Settings-Beta-Blur.png" alt="Beta Blur settings" width="600" />
|
||||
</div>
|
||||
|
||||
Do note that enabling beta blurs can be more demanding on slower hardware
|
||||
## Downloading older non-Metal Apps
|
||||
@@ -101,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.
|
||||
|
||||
58
docs/BOOT.md
@@ -6,7 +6,10 @@ Reboot the machine while holding `Option` to select the EFI Boot entry with the
|
||||
|
||||
* This will be the Mac Boot Picker
|
||||
|
||||

|
||||
|
||||
<div align="left">
|
||||
<img src="./images/efi-boot.png" alt="EFI boot" width="800" />
|
||||
</div>
|
||||
|
||||
::: details Note for Mac Pros/Xserves/iMacs with unflashed GPUs
|
||||
|
||||
@@ -27,7 +30,10 @@ Now you'll want to get a list of drive identifiers. To do so, run the following
|
||||
diskutil list
|
||||
```
|
||||
The command should produce a list of drives installed in your system:
|
||||

|
||||
|
||||
<div align="left">
|
||||
<img src="./images/Unflashed-Boot-1.png" alt="Unflashed boot" width="800" />
|
||||
</div>
|
||||
|
||||
Keep track of the drive with the OCLP install. You will need the drive identifer for later.
|
||||
|
||||
@@ -37,7 +43,11 @@ Run the following command (Replace X with the drive number):
|
||||
```sh
|
||||
diskutil mount diskXs1
|
||||
```
|
||||

|
||||
|
||||
<div align="left">
|
||||
<img src="./images/Unflashed-Boot-2.png" alt="Unflashed boot 2" width="800" />
|
||||
</div>
|
||||
|
||||
If everything is correct, the EFI partion should be mounted.
|
||||
|
||||
Now you'll want to use the `bless` command to set the default boot device:
|
||||
@@ -45,7 +55,10 @@ Now you'll want to use the `bless` command to set the default boot device:
|
||||
bless --mount /Volumes/EFI --setBoot --file /Volumes/EFI/System/Library/CoreServices/boot.efi
|
||||
```
|
||||
Once the command is run, it should produce no output.
|
||||

|
||||
|
||||
<div align="left">
|
||||
<img src="./images/Unflashed-Boot-3.png" alt="Unflashed boot 3" width="800" />
|
||||
</div>
|
||||
|
||||
If the command produces an output, ensure that you've typed it in correctly.
|
||||
|
||||
@@ -56,28 +69,27 @@ Now that you've loaded OpenCore, "select Install macOS":
|
||||
|
||||
* This will be the OpenCore Picker
|
||||
|
||||

|
||||
<div align="left">
|
||||
<img src="./images/oc-boot.png" alt="OpenCore boot" width="800" />
|
||||
</div>
|
||||
|
||||
|
||||
You will soon reach the installer screen! If you enabled verbose mode when building OCLP, a lot of text will run across the screen. From there, it's just like any normal macOS install. For an example of how the boot process looks, see the following video:
|
||||
|
||||
* [OpenCore Legacy Patcher Boot Process](https://www.youtube.com/watch?v=AN3zsbQV_n4)
|
||||
|
||||
If your Mac is looping back into the beginning of the setup after the first reboot, turn it off, start it again and hold `Option`. This time, select the option with a grey hard disk icon, it can say "macOS Installer" or the name you gave the disk during the installer process. Keep repeating this step after every reboot if necessary.
|
||||
|
||||

|
||||
**Important:** If you're using a brand new disk that has not been used before, choose "View -> Show all devices" in Disk Utility and format the entire disk by choosing the topmost option in the sidebar to avoid a missing internal EFI later when trying to boot OpenCore to internal disk.
|
||||
|
||||
|
||||
::: warning
|
||||
<div align="left">
|
||||
<img src="./images/wipe-disk.png" alt="Wipe disk" width="800" />
|
||||
</div>
|
||||
|
||||
**MacBookPro11,3 Note**: When booting macOS Monterey, you'll need to boot into safe mode if acceleration patches are not installed yet. [Otherwise, you'll hit a black screen due to missing NVIDIA drivers.](https://github.com/dortania/OpenCore-Legacy-Patcher/issues/522) Safe Mode can be entered by holding `Shift + Enter` when selecting macOS Monterey in OCLP's Boot Menu.
|
||||
::: warning Warning for T1 Macs
|
||||
|
||||
:::
|
||||
When installing macOS Sonoma or newer on a T1 system (2016-2017), full disk wipe will remove T1 functionality (touchbar etc). Therefore when installing, only wipe the volume containing the operating system.
|
||||
|
||||
::: warning
|
||||
|
||||
**T1 Macs**: When installing macOS Sonoma or newer on a T1 system, full disk wipe will remove T1 functionality (touchbar etc). Therefore when installing, only wipe the volume containing the operating system.
|
||||
|
||||
<div align="center">
|
||||
<div align="left">
|
||||
<img src="./images/wipe-volume.png" alt="WipeVolume" width="800" />
|
||||
</div>
|
||||
|
||||
@@ -86,5 +98,19 @@ If your Mac is looping back into the beginning of the setup after the first rebo
|
||||
:::
|
||||
|
||||
|
||||
If your Mac is looping back into the beginning of the setup after the first reboot, turn it off, start it again and hold Option. This time (after choosing `EFI Boot` first) select the option with a grey hard disk icon in the OpenCore picker. It can either say `macOS Installer` or the name you gave the disk during the installer process. Keep repeating this step after every reboot if necessary.
|
||||
|
||||
<div align="left">
|
||||
<img src="./images/oclp-stuck-firstreboot.png" alt="Stuck on first reboot" width="800" />
|
||||
</div>
|
||||
|
||||
|
||||
::: warning
|
||||
|
||||
**MacBookPro11,3 Note**: When booting macOS Monterey, you'll need to boot into safe mode if acceleration patches are not installed yet. [Otherwise, you'll hit a black screen due to missing NVIDIA drivers.](https://github.com/dortania/OpenCore-Legacy-Patcher/issues/522) Safe Mode can be entered by holding `Shift + Enter` when selecting macOS Monterey in OCLP's Boot Menu.
|
||||
|
||||
:::
|
||||
|
||||
|
||||
# Once installed and booting, head to [Post-Installation](./POST-INSTALL.md)
|
||||
|
||||
|
||||
@@ -11,8 +11,8 @@ Next, run the `OpenCore-Patcher.app`
|
||||
Here we'll select Build and Install OpenCore and start building:
|
||||
|
||||
|
||||
<div align="center">
|
||||
<img src="./images/OCLP-GUI-Main-Menu.png" alt="OCLP GUI Main Menu" width="800" />
|
||||
<div align="left">
|
||||
<img src="./images/OCLP-GUI-Main-Menu.png" alt="OCLP GUI Main Menu" width="700" />
|
||||
</div>
|
||||
|
||||
::: warning
|
||||
@@ -23,7 +23,8 @@ If you're building OpenCore for a different model than you're currently running,
|
||||
|
||||
| Start Building | Finished Building |
|
||||
| :--- | :--- |
|
||||
|  |  |
|
||||
| <img src="./images/OCLP-GUI-Build-Start.png" alt="Build start" width="600" /> | <img src="./images/OCLP-GUI-Build-Finished.png" alt="Build finished" width="600" /> |
|
||||
|
||||
|
||||
Once it finishes building, you'll want to select the Install OpenCore button:
|
||||
|
||||
@@ -32,6 +33,8 @@ Once it finishes building, you'll want to select the Install OpenCore button:
|
||||
|
||||
| Select Drive | Select Partition |
|
||||
| :--- | :--- |
|
||||
|  |  |
|
||||
| <img src="./images/OCLP-GUI-EFI-Select-Disk.png" alt="Select disk" width="600" /> | <img src="./images/OCLP-GUI-EFI-Select-Partition.png" alt="Select partition" width="600" /> |
|
||||
|
||||
|
||||
|
||||
# Once finished, head to [Booting OpenCore and macOS](./BOOT.md)
|
||||
|
||||
@@ -10,7 +10,10 @@ The easiest way to debug yourself is via Patcher Settings. Here there are many d
|
||||
* "Enable OpenCore DEBUG"
|
||||
* "Enable Kext DEBUG"
|
||||
|
||||

|
||||
<div align="left">
|
||||
<img src="./images/ocdebugimage.png" alt="OCLP debug" width="600" />
|
||||
</div>
|
||||
|
||||
|
||||
When you've enabled these 3 options, rebuild OpenCore and install to your drive. This will provide much greater debug information as well as write logs to the EFI Partition.
|
||||
|
||||
@@ -18,11 +21,15 @@ When you've enabled these 3 options, rebuild OpenCore and install to your drive.
|
||||
|
||||
With "Enable OpenCore DEBUG" set, on every boot there will be a .txt file generated on the EFI Partition. To grab these logs, [download and run MountEFI](https://github.com/corpnewt/MountEFI):
|
||||
|
||||

|
||||
<div align="left">
|
||||
<img src="./images/mountefi.png" alt="Mount EFI" width="600" />
|
||||
</div>
|
||||
|
||||
Once you've mounted the EFI Partition of the drive you have macOS on, you should see some nice logs:
|
||||
|
||||

|
||||
<div align="left">
|
||||
<img src="./images/logs-efi.png" alt="Mount EFI" width="800" />
|
||||
</div>
|
||||
|
||||
## Obtaining Kernel logs from macOS
|
||||
|
||||
|
||||
214
docs/FAQ.md
Normal file
@@ -0,0 +1,214 @@
|
||||
# FAQ
|
||||
|
||||
|
||||
* [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)
|
||||
* [Can I use OTA updates?](#can-i-use-ota-updates)
|
||||
* [Can I use automatic updates?](#can-i-use-automatic-updates)
|
||||
* [Why are macOS updates so large?](#why-are-macos-updates-so-large)
|
||||
* [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)
|
||||
* [Where is Apple Intelligence?](#where-is-apple-intelligence)
|
||||
|
||||
|
||||
|
||||
## Application requirements
|
||||
The patcher application requires **OS X Yosemite 10.10** or later to run.
|
||||
* **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.
|
||||
|
||||
Refer to [Updating OpenCore and patches](https://dortania.github.io/OpenCore-Legacy-Patcher/UPDATE.html) for how to update the application and patches.
|
||||
|
||||
## Why are the settings "not saving"?
|
||||
|
||||
Starting with OpenCore Legacy Patcher 2.1.0, the status of settings in the GUI will now be saved under ```/Users/Shared/.com.dortania.opencore-legacy-patcher.plist```. The application will utilize this file to keep track of and retain settings for relaunches and application updates, no longer requiring a reconfiguring each time. The user interface will reset if any model other than "Host Model" is selected, as building for a different model will require different settings.
|
||||
|
||||
In case of issues, delete the file and restart the application to revert the GUI to default settings, then rebuild OpenCore with newly configured settings.
|
||||
|
||||
::: warning
|
||||
|
||||
Only settings made within OCLP are accounted for, modifications made directly into the ```config.plist``` file in the EFI partition outside of OCLP **will continue to reset**. Additionally, modifying ```config.plist``` manually may lead to a state where settings showed in the GUI are not in sync compared to settings in use, due to the application not knowing whether the file has been manually modified.
|
||||
|
||||
:::
|
||||
|
||||
::: details Explainer for older versions (click to expand)
|
||||
|
||||
OpenCore Legacy Patcher is a config build tool and as such the user interface always reverts to safe defaults, the user interface therefore **does not** reflect the status of settings. Settings are accounted for and saved by the OpenCore building process and you will always have to build OpenCore again after settings change.
|
||||
|
||||
Settings are saved to a config.plist file inside your EFI partition.
|
||||
|
||||
In SIP settings, booted SIP is reported in text form e.g. "0x803" but the checkboxes **do not** reflect the applied settings. Refer to [SIP Settings](https://dortania.github.io/OpenCore-Legacy-Patcher/POST-INSTALL.html#sip-settings) for more information.
|
||||
|
||||
:::
|
||||
|
||||
## Can I use the same USB install media as a universal installer?
|
||||
|
||||
OpenCore configurations are device specific, due to different quirks needed for different systems. If you are building OpenCore for a different system that you're running, you will have to select the targeted model from Settings before building OpenCore on the USB media.
|
||||
|
||||
When building OpenCore on a different system, OCLP cannot be aware of all the hardware installed in the target, meaning safe defaults will be used. However, this may not be the most optimal experience especially with custom hardware. As such it's recommended to rebuild OpenCore **on device** to apply settings that are based on hardware detection, after the OS has been installed.
|
||||
|
||||
## Can I use OTA updates?
|
||||
|
||||
You can. However it is extremely recommended to use USB drive for major OS upgrades (such as 13 -> 14) to avoid larger issues from potentially occurring.
|
||||
|
||||
General updates are usually fine, though it is always a good idea to wait few days to see whether patches break and have to be fixed.
|
||||
|
||||
## Can I use automatic updates?
|
||||
|
||||
It is extremely recommended to disable automatic updates (even downloading) when using OCLP, as Apple has recently changed the way automatic updates work. Updates are now getting staged during the download process and are already modifying the system volume, which can lead to broken system out of nowhere since the operating system gets into a liminal state between two versions. You can still manually initiate an update when you're ready to do so.
|
||||
|
||||
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.
|
||||
|
||||
* 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:**
|
||||
|
||||
System Settings -> General -> Software Update -> (i) button next to Automatic Updates -> Disable "Download new updates when available".
|
||||
|
||||
**macOS Big Sur and Monterey:**
|
||||
|
||||
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?
|
||||
|
||||
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?
|
||||
|
||||
macOS doesn't allow direct downgrades, as such you will have to wipe the disk in order to revert. Backup your data beforehand either via Time Machine, ASR or some other solution.
|
||||
|
||||
## Why is my system slow?
|
||||
|
||||
This can mean many things. Firstly, newer operating systems are harder to run and can appear more slow.
|
||||
|
||||
Additionally if your macOS installation is recent, Spotlight starts creating a full disk index which can cause high CPU load, high temps and general slowness. It's recommended to keep the system running for few hours, once Spotlight has indexed the load will ease. A way to check whether it's caused by Spotlight is to open Activity Monitor, choosing "All Processes" from the "View" menu item, then sorting by the CPU value to see if a process called ```mds_stores``` is using a lot of CPU resources.
|
||||
|
||||
However, if your system is being **really** slow and you have no transparency in Dock and menubar, this typically indicates that root patches are not installed and as such there is no acceleration. Make sure to install root patches to get proper drivers and functionality. Refer to [Applying post install volume patches](https://dortania.github.io/OpenCore-Legacy-Patcher/POST-INSTALL.html#applying-post-install-volume-patches) and the [Troubleshooting](https://dortania.github.io/OpenCore-Legacy-Patcher/TROUBLESHOOTING.html) section for more information.
|
||||
|
||||
Patches can also break if automatic updates are enabled and an update modifies the system volume, refer to [System version mismatch error when root patching](https://dortania.github.io/OpenCore-Legacy-Patcher/TROUBLESHOOTING.html#system-version-mismatch-error-when-root-patching) for more information.
|
||||
|
||||
## 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. 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.
|
||||
|
||||
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 (GCN 1) and newer
|
||||
* NVIDIA GTX 600 and 700 series (Kepler)
|
||||
|
||||
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) 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?
|
||||
|
||||
**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.
|
||||
|
||||
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 |
|
||||
| :--- | :--- |
|
||||
|  |  |
|
||||
|
||||
|
||||
::: details *3802 systems list (click to expand)
|
||||
|
||||
* NVIDIA
|
||||
* Kepler (600-800 series GPUs)
|
||||
* Intel
|
||||
* Ivy Bridge (3rd generation, HD 4000 series GPUs)
|
||||
* Haswell (4th generation, HD/Iris 4000-5000 series GPUs)
|
||||
|
||||
These GPUs are typically met in systems from 2012-2015.
|
||||
|
||||
:::
|
||||
|
||||
## Why isn't iPhone Mirroring working?
|
||||
|
||||
iPhone Mirroring requires a T2 chip, which means it will not be available on OCLP patched systems. The connection fails due to failure to establish T2 attestation.
|
||||
|
||||
## Where is Apple Intelligence?
|
||||
|
||||
Apple Intelligence requires Neural Engine, which is only found in Apple Silicon chips.
|
||||
|
||||
@@ -1,10 +1,13 @@
|
||||
# Download and build macOS Installers
|
||||
# Creating macOS Installers
|
||||
|
||||
This document is centered around downloading and writing the macOS installer to a USB drive. If you're already familiar with how to do this, you can skip this section.
|
||||
This document is centered around downloading and writing the macOS installer to a USB drive. If you're planning to install macOS on other system than you're currently running, it is recommended to choose the Mac model in Settings now before proceeding, so that automatic root patching works correctly later on.
|
||||
|
||||
* 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.
|
||||
|
||||
## Creating the installer
|
||||
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
|
||||
|
||||
To start off, you'll want to grab the app:
|
||||
|
||||
@@ -20,13 +23,17 @@ For this example, we'll assume you'll need an installer. Select the "Download ma
|
||||
| :--- | :--- | --- |
|
||||
|  |  |  |
|
||||
|
||||
|
||||
## Creating the installer
|
||||
|
||||
Once the download is finished, you can proceed to write the installer onto a USB drive.
|
||||
|
||||
* Note: The entire USB drive will be formatted
|
||||
|
||||
| Select Downloaded Installer | Select disk to format |
|
||||
| :--- | :--- |
|
||||
|  |  |
|
||||
| <img src="./images/OCLP-GUI-Installer-Select-Local-Installer.png" alt="Select local installer" width="600" /> | <img src="./images/OCLP-GUI-Installer-Format-USB.png" alt="Select disk to format" width="600" /> |
|
||||
|
||||
|
||||
Now the patcher will start the installer flashing!
|
||||
|
||||
|
||||
@@ -1,14 +1,5 @@
|
||||
# Supported Models
|
||||
|
||||
### 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.
|
||||
|
||||
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.
|
||||
|
||||
-------
|
||||
|
||||
Any Intel-based Mac listed below can install and make use of OpenCore Legacy Patcher. To check your hardware model, open System Information and look for the `Model Identifier` key.
|
||||
* This applies even if Apple supports the model natively.
|
||||
* OpenCore Legacy Patcher does not support PowerPC- or Apple Silicon-based Macs.
|
||||
@@ -18,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)
|
||||
@@ -32,7 +25,7 @@ The below tables can be used to reference issues with a particular model, and se
|
||||
|
||||
### MacBook
|
||||
|
||||
| Model Name | Identifier | Tagged Issues |
|
||||
| Model Name | Identifier | Additional info |
|
||||
| :--- | :--- | :--- |
|
||||
| MacBook (13-inch, Aluminum, Late 2008) | `MacBook5,1` | - [non-Metal GPU (macOS 11+)](https://github.com/dortania/OpenCore-Legacy-Patcher/issues/108)<br>- [USB 1.1 (macOS 13+)](https://github.com/dortania/OpenCore-Legacy-Patcher/issues/1021)|
|
||||
| MacBook (13-inch, Early 2009)<br>MacBook (13-inch, Mid 2009) | `MacBook5,2` | - [non-Metal GPU (macOS 11+)](https://github.com/dortania/OpenCore-Legacy-Patcher/issues/108)<br>- [USB 1.1 (macOS 13+)](https://github.com/dortania/OpenCore-Legacy-Patcher/issues/1021)<br>- Trackpad gestures are partially broken |
|
||||
@@ -40,11 +33,11 @@ The below tables can be used to reference issues with a particular model, and se
|
||||
| MacBook (13-inch, Mid 2010) | `MacBook7,1` | ^^ |
|
||||
| MacBook (Retina, 12-inch, Early 2015) | `MacBook8,1` | - [Legacy Metal (macOS 13+)](https://github.com/dortania/OpenCore-Legacy-Patcher/issues/1008) |
|
||||
| MacBook (Retina, 12-inch, Early 2016) | `MacBook9,1` | ^^ |
|
||||
| MacBook (Retina, 12-inch, 2017) | `MacBook10,1` | - Supported by OpenCore Legacy Patcher |
|
||||
| MacBook (Retina, 12-inch, 2017) | `MacBook10,1` | - Native graphics support |
|
||||
|
||||
### MacBook Air
|
||||
|
||||
| Model Name | Identifier | Tagged Issues |
|
||||
| Model Name | Identifier | Additional info |
|
||||
| :--- | :--- | :--- |
|
||||
| MacBook Air (13-inch, Late 2008)<br>MacBook Air (13-inch, Mid 2009) | `MacBookAir2,1` | - [non-Metal GPU (macOS 11+)](https://github.com/dortania/OpenCore-Legacy-Patcher/issues/108)<br>- [USB 1.1 (macOS 13+)](https://github.com/dortania/OpenCore-Legacy-Patcher/issues/1021)|
|
||||
| MacBook Air (11-inch, Late 2010) | `MacBookAir3,1` | ^^ |
|
||||
@@ -57,13 +50,13 @@ 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 |
|
||||
|
||||
### MacBook Pro
|
||||
|
||||
| Model Name | Identifier | Tagged Issues |
|
||||
| Model Name | Identifier | Additional info |
|
||||
| :--- | :--- | :--- |
|
||||
| MacBook Pro (15-inch, Early 2008)<br>MacBook Pro (17-inch, Early 2008) | `MacBookPro4,1` | - [non-Metal GPU (macOS 11+)](https://github.com/dortania/OpenCore-Legacy-Patcher/issues/108)<br>- [USB 1.1 (macOS 13+)](https://github.com/dortania/OpenCore-Legacy-Patcher/issues/1021)|
|
||||
| MacBook Pro (15-inch, Late 2008)<br>MacBook Pro (15-inch, Early 2009) | `MacBookPro5,1` | ^^ |
|
||||
@@ -87,7 +80,7 @@ The below tables can be used to reference issues with a particular model, and se
|
||||
| MacBook Pro (13-inch, 2016, 2 Thunderbolt 3 ports) | `MacBookPro13,1` | ^^ |
|
||||
| MacBook Pro (13-inch, 2016, 4 Thunderbolt 3 ports) | `MacBookPro13,2` | ^^ |
|
||||
| MacBook Pro (15-inch, 2016) | `MacBookPro13,3` | ^^ |
|
||||
| MacBook Pro (13-inch, 2017, 2 Thunderbolt 3 ports) | `MacBookPro14,1` | - Supported by OpenCore Legacy Patcher |
|
||||
| MacBook Pro (13-inch, 2017, 2 Thunderbolt 3 ports) | `MacBookPro14,1` | - Native graphics support |
|
||||
| MacBook Pro (13-inch, 2017, 4 Thunderbolt 3 ports) | `MacBookPro14,2` | ^^ |
|
||||
| MacBook Pro (15-inch, 2017) | `MacBookPro14,3` | - [Legacy Metal (macOS 14+)](https://github.com/dortania/OpenCore-Legacy-Patcher/issues/1008) |
|
||||
| MacBook Pro (13-inch, 2018, 4 Thunderbolt 3 ports)<br>MacBook Pro (13-inch, 2019, 4 Thunderbolt 3 ports) | `MacBookPro15,2` | - Supported by Apple |
|
||||
@@ -99,7 +92,7 @@ The below tables can be used to reference issues with a particular model, and se
|
||||
|
||||
### Mac mini
|
||||
|
||||
| Model Name | Identifier | Tagged Issues |
|
||||
| Model Name | Identifier | Additional info |
|
||||
| :--- | :--- | :--- |
|
||||
| Mac mini (Early 2009) | `Macmini3,1` | - [non-Metal GPU (macOS 11+)](https://github.com/dortania/OpenCore-Legacy-Patcher/issues/108)<br>- [USB 1.1 (macOS 13+)](https://github.com/dortania/OpenCore-Legacy-Patcher/issues/1021) |
|
||||
| Mac mini (Mid 2010) | `Macmini4,1` | ^^ |
|
||||
@@ -109,7 +102,7 @@ The below tables can be used to reference issues with a particular model, and se
|
||||
| Mac mini (Late 2018) | `Macmini8,1` | - Supported by Apple |
|
||||
|
||||
### iMac
|
||||
| Model Name | Identifier | Tagged Issues |
|
||||
| Model Name | Identifier | Additional info |
|
||||
| :--- | :--- | :--- |
|
||||
| iMac (20-inch, Mid 2007)<br>iMac (24-inch, Mid 2007) | `iMac7,1` | - [Requires SSE4.1 CPU](https://lowendmac.com/2018/penryn-t9300-9500-cpu-upgrades-for-the-2007-imac/)<br>- [non-Metal GPU (macOS 11+)](https://github.com/dortania/OpenCore-Legacy-Patcher/issues/108)<br>- [USB 1.1 (macOS 13+)](https://github.com/dortania/OpenCore-Legacy-Patcher/issues/1021)<br>- Remove stock Bluetooth to prevent panics |
|
||||
| iMac (20-inch, Early 2008)<br>iMac (24-inch, Early 2008) | `iMac8,1` | - [non-Metal GPU (macOS 11+)](https://github.com/dortania/OpenCore-Legacy-Patcher/issues/108)<br>- [USB 1.1 (macOS 13+)](https://github.com/dortania/OpenCore-Legacy-Patcher/issues/1021) |
|
||||
@@ -130,7 +123,7 @@ The below tables can be used to reference issues with a particular model, and se
|
||||
| iMac (21.5-inch, Late 2015) | `iMac16,1` | ^^ |
|
||||
| iMac (Retina 4K, 21.5-inch, Late 2015) | `iMac16,2` | ^^ |
|
||||
| iMac (Retina 5K, 27-inch, Late 2015) | `iMac17,1` | ^^ |
|
||||
| iMac (21.5-inch, 2017) | `iMac18,1` | - Supported by OpenCore Legacy Patcher |
|
||||
| iMac (21.5-inch, 2017) | `iMac18,1` | - Native graphics support |
|
||||
| iMac (Retina 4K, 21.5-inch, 2017) | `iMac18,2` | ^^ |
|
||||
| iMac (Retina 5K, 27-inch, 2017) | `iMac18,3` | ^^ |
|
||||
| iMac (Retina 5K, 27-inch, 2019) | `iMac19,1` | - Supported by Apple |
|
||||
@@ -140,7 +133,7 @@ The below tables can be used to reference issues with a particular model, and se
|
||||
|
||||
### Mac Pro
|
||||
|
||||
| Model Name | Identifier | Tagged Issues |
|
||||
| Model Name | Identifier | Additional info |
|
||||
| :--- | :--- | :--- |
|
||||
| Mac Pro (Early 2008) | `MacPro3,1` | - [Recommend upgrade to Metal GPU](https://github.com/dortania/OpenCore-Legacy-Patcher/issues/1008)<br>- [non-Metal GPU (macOS 11+)](https://github.com/dortania/OpenCore-Legacy-Patcher/issues/108)<br>- [USB 1.1 (macOS 13+)](https://github.com/dortania/OpenCore-Legacy-Patcher/issues/1021)<br>- Remove stock Bluetooth to prevent panics |
|
||||
| Mac Pro (Early 2009) | `MacPro4,1` | - [Recommend upgrade to Metal GPU](https://github.com/dortania/OpenCore-Legacy-Patcher/issues/1008)<br>- [non-Metal GPU (macOS 11+)](https://github.com/dortania/OpenCore-Legacy-Patcher/issues/108)<br>- [USB 1.1 (macOS 13+)](https://github.com/dortania/OpenCore-Legacy-Patcher/issues/1021) |
|
||||
@@ -150,7 +143,7 @@ The below tables can be used to reference issues with a particular model, and se
|
||||
|
||||
### Xserve
|
||||
|
||||
| Model Name | Identifier | Tagged Issues |
|
||||
| Model Name | Identifier | Additional info |
|
||||
| :--- | :--- | :--- |
|
||||
| Xserve (Early 2008) | `Xserve2,1` | - Recommend upgrade to Metal GPU<br>- [non-Metal GPU (macOS 11+)](https://github.com/dortania/OpenCore-Legacy-Patcher/issues/108)<br>- [USB 1.1 (macOS 13+)](https://github.com/dortania/OpenCore-Legacy-Patcher/issues/1021)
|
||||
| Xserve (Early 2009) | `Xserve3,1` | ^^ |
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
# macOS Monterey Support
|
||||
# macOS Monterey
|
||||
|
||||

|
||||
|
||||
|
||||
@@ -17,12 +17,14 @@ Once you've installed macOS through OpenCore, you can boot up and go through the
|
||||
|
||||
And voila! No more USB drive required.
|
||||
|
||||
If you're having issues with undetected internal disk, refer to [Internal disk missing when building OpenCore](https://dortania.github.io/OpenCore-Legacy-Patcher/TROUBLESHOOTING.html#internal-disk-missing-when-building-opencore) for troubleshooting.
|
||||
|
||||
## Booting seamlessly without Boot Picker
|
||||
|
||||
To do this, run the OpenCore Patcher and head to Patcher Settings, then uncheck "Show OpenCore Bootpicker" on the Build tab:
|
||||
|
||||
|
||||
<div align="center">
|
||||
<div align="left">
|
||||
<img src="./images/OCLP-GUI-Settings-ShowPicker.png" alt="GUI Settings ShowPicker" width="600" />
|
||||
</div>
|
||||
|
||||
@@ -31,7 +33,9 @@ Once you've toggled it off, build your OpenCore EFI once again and install to yo
|
||||
|
||||
## SIP settings
|
||||
|
||||
SIP, or System Integrity Protection, needs to be lowered on systems where root patching is required to patch data on disk. This will vary between OS versions and the model in question. OCLP by default will determine the proper SIP options for the OS version and Mac model, in most cases the user has no need to touch these settings. However, this part explains how the SIP settings work in OCLP, where lowered SIP is needed and where full SIP could be enabled.
|
||||
SIP, or System Integrity Protection, needs to be lowered on systems where root patching is required to patch data on disk. This will vary between OS versions and the model in question.
|
||||
|
||||
OCLP by default will determine the proper SIP options for the OS version and Mac model, in most cases the user has no need to touch these settings.
|
||||
|
||||
:::warning
|
||||
|
||||
@@ -39,13 +43,17 @@ If you're unsure whether you should change the SIP settings, leave them as-is. S
|
||||
|
||||
:::
|
||||
|
||||
SIP settings can be accessed from the Security tab shown in the images. To change SIP settings, make the changes here, return in main menu and rebuild OpenCore using the first option.
|
||||
|
||||
| SIP Enabled | SIP Lowered (Root Patching) | SIP Disabled |
|
||||
| SIP Enabled | SIP Lowered (OCLP default) | SIP Disabled |
|
||||
| :--- | :--- | :--- |
|
||||
|  |  |  |
|
||||
|
||||
|
||||
The guide in the dropdown below explains how the SIP settings work in OCLP, where lowered SIP is needed and where full SIP could be enabled.
|
||||
|
||||
::: details Configuring SIP manually (click to expand)
|
||||
|
||||
SIP settings can be accessed from the Security tab shown in the images. To change SIP settings, make the changes here, return in main menu and rebuild OpenCore using the first option.
|
||||
|
||||
In the cases where SIP can be enabled, manually enabling it is needed.
|
||||
|
||||
Easiest way to check whether you can fully enable SIP is the "Post Install Root Patch" section, if that section tells your system doesn't need patches (or you don't install the patches e.g. in case you don't need WiFi on a Mac Pro with upgraded GPU running Monterey) then it is safe to assume full SIP can be enabled.
|
||||
@@ -58,53 +66,65 @@ All unsupported systems require lowered SIP.
|
||||
|
||||
Majority of unsupported systems from 2013 onward can enable full SIP.
|
||||
|
||||
Pre-2012 systems, also known as "non-Metal" (includes Mac Pros without upgraded GPU), as well as NVIDIA Kepler and Intel HD 4000 GPUs require lowered SIP.
|
||||
|
||||
Some systems such as Mac Pros also require lowered SIP for stock WiFi cards and stock GPUs (due to root patching) but if you do not need WiFi (or you plan to upgrade it) and you're running on an upgraded GPU, there is no need for root patching and as such SIP can be fully enabled.
|
||||
Pre-2012 systems, also known as "non-Metal", as well as NVIDIA Kepler and Intel HD 4000 GPUs require lowered SIP. Mac Pros also require lowered SIP for stock WiFi cards and stock GPUs (due to root patching) but if you do not need WiFi (or you plan to upgrade it) and you're running on an upgraded GPU, there is no need for root patching and as such SIP can be fully enabled.
|
||||
|
||||
**Big Sur**
|
||||
|
||||
All Metal capable systems from 2012 onward (incl. NVIDIA Kepler and Intel HD 4000) as well as Mac Pros with upgraded GPU can run with full SIP enabled.
|
||||
Non-Metal systems still require lowered SIP.
|
||||
|
||||
:::
|
||||
|
||||
## Applying Post Install Volume Patches
|
||||
|
||||
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.
|
||||
|
||||
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.
|
||||
|
||||
- **Note:** In some cases OCLP may require packages to be obtained from the internet, such as KDK or MetallibSupprtPkg if they do not already exist on the system. In these cases OCLP may only install the WiFi driver on first patch run to ensure you can connect to the internet, which means no graphics acceleration
|
||||
after reboot. Root patching has to be ran again manually to install the rest of the required patches after internet connection is established to obtain the required packages.
|
||||
|
||||
Check the affected systems and GPUs from the warnings below.
|
||||
|
||||
:::warning
|
||||
|
||||
If you need to use Migration Assistant to bring over data to your new macOS install, it is **highly recommended** to avoid restoring from inside Setup Assistant and waiting to install root patches until after the transfer is complete. If root patches were automatically installed, you can use the options available in the OCLP app to remove them.
|
||||
|
||||
Using Migration Assistant while patches are installed can lead to an unbootable system, requiring a reinstall of macOS.
|
||||
|
||||
For more information on how to restore a Time Machine backup, [refer to the guide here.](https://dortania.github.io/OpenCore-Legacy-Patcher/TIMEMACHINE.html)
|
||||
|
||||
:::
|
||||
|
||||
Post Install Volume Patches, sometimes also called root patches, are patches that have to be installed to disk for some older Macs to gain back functionality.
|
||||
|
||||
OCLP will automatically root patch your system during a first time install **if the USB install media was created within OCLP.** Users will also be prompted to install these patches after macOS updates or whenever patches are not detected on the system. We recommend rebuilding OpenCore with the latest version of OCLP to take advantage of these new features.
|
||||
|
||||
Users can also see whether applicable patches have been installed, date and version the system was root patched with in the Post-Install Menu.
|
||||
|
||||
| Automatic install prompt | Status |
|
||||
| :--- | :--- |
|
||||
|  |  |
|
||||
|
||||
|
||||
|
||||
### Running Post Install patches manually
|
||||
|
||||
If you're using OCLP v0.4.3 or earlier, or need to run the patcher manually, you can do so with the app. There is no harm in trying to run the Patcher, as without compatible hardware, nothing will be done. You can see below on whether your hardware needs root volume patching or not.
|
||||
|
||||
There is also an option to remove root patches, which may be required in some situations, such as switching GPUs in Mac Pros or using Migration Assistant.
|
||||
You can install and revert Root Patching manually from the app.
|
||||
|
||||
| Listing Patches | Patching Finished |
|
||||
| :--- | :--- |
|
||||
|  |  |
|
||||
|
||||
|
||||
|
||||
:::warning
|
||||
|
||||
With macOS Sequoia, MetallibSupportPkg is required to be downloaded for all 3802 systems. OCLP will handle this as long as you're connected to the internet.
|
||||
With macOS Sequoia, MetallibSupportPkg is required to be downloaded for all 3802-based systems. OCLP will handle this as long as you're connected to the internet.
|
||||
|
||||
Such systems include:
|
||||
3802 based GPUs:
|
||||
|
||||
* NVIDIA
|
||||
* Kepler (GTX 600 - 700 series)
|
||||
|
||||
@@ -12,8 +12,8 @@ meta:
|
||||
features:
|
||||
# - title: Built with security in mind
|
||||
# details: Supporting System Integrity Protection(SIP), FileVault 2, .im4m Secure Boot and Vaulting. We make an effort to ensure your system is as secure as possible.
|
||||
- title: Native OTA updates
|
||||
details: Install updates the moment they come out, with native System Preferences support, just like a supported Mac.
|
||||
- title: Near-native OTA updates.
|
||||
details: Install updates from System Settings, with just couple more additional steps compared to native.
|
||||
- title: Zero firmware patching
|
||||
details: Using the capabilities of the OpenCore boot manager, our protocol upgrades are done in memory and are never permanent.
|
||||
- title: Supporting more hardware
|
||||
@@ -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
|
||||
---
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
# macOS Sequoia Support
|
||||
# macOS Sequoia
|
||||
|
||||

|
||||
|
||||
@@ -30,7 +30,7 @@ iPhone Mirroring requires T2 for attestation and Apple Intelligence requires an
|
||||
|
||||
* [Dual socket CPUs with Mac Pros and Xserve](#dual-socket-cpus-with-mac-pro-2008-and-xserve-2008)
|
||||
* [T2 Security chip](#t2-security-chip)
|
||||
* [USB 1.1 (OHCI/UHCI) Support](#usb-11-ohciuhci-support)
|
||||
* [USB 1.1 (OHCI/UHCI) Support](#usb-1-1-ohci-uhci-support)
|
||||
* [Graphics support and issues](#graphics-support-and-issues)
|
||||
|
||||
|
||||
@@ -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.
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
# macOS Sonoma Support
|
||||
# macOS Sonoma
|
||||
|
||||

|
||||
|
||||
@@ -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)
|
||||
@@ -33,7 +24,7 @@ OpenCore Legacy Patcher 1.0.0 will support Sonoma for all models normally suppor
|
||||
|
||||
* [Bluetooth](#bluetooth)
|
||||
* [T1 Security chip](#t1-security-chip)
|
||||
* [USB 1.1 (OHCI/UHCI) Support](#usb-11-ohciuhci-support)
|
||||
* [USB 1.1 (OHCI/UHCI) Support](#usb-1-1-ohci-uhci-support)
|
||||
* [Graphics support and issues](#graphics-support-and-issues)
|
||||
|
||||
|
||||
@@ -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.
|
||||
|
||||
@@ -7,8 +7,6 @@ OpenCore is a sophisticated boot loader used to inject and patch data in memory,
|
||||
|
||||
## How do I get started?
|
||||
|
||||
1. The first step of ensuring whether your model is supported is by checking the [Supported Models](./MODELS.md) page.
|
||||
|
||||
2. [Download and build macOS Installer](./INSTALLER.md)
|
||||
3. [Run the `OpenCore-Patcher.app`](./BUILD.md)
|
||||
4. [Reboot and boot OpenCore](./BOOT.md)
|
||||
1. Read the [FAQ](./FAQ.md) for application requirements and other information.
|
||||
2. Check that your model is supported from the [Supported Models](./MODELS.md) page.
|
||||
3. Once you've verified your model is supported, you can jump into the process in [Download and build macOS Installer](./INSTALLER.md)
|
||||
|
||||
39
docs/TIMEMACHINE.md
Normal file
@@ -0,0 +1,39 @@
|
||||
# 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. 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.
|
||||
|
||||
::: 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)
|
||||
|
||||
|
||||
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.
|
||||
3. Restart your machine.
|
||||
* Note: Your Mac will feel slow due to lack of graphics drivers and resolution may be wrong. WiFi will also be unavailable in most cases, if your backup is on a network drive, use Ethernet.
|
||||
4. Login and start Migration Assistant.
|
||||
5. Go through the restoring process.
|
||||
6. Once finished, go into the OCLP app and reinstall the root patches.
|
||||
|
||||
Now you should be fully restored with Time Machine and also running with all patches.
|
||||
|
||||
@@ -1,12 +1,15 @@
|
||||
# Troubleshooting
|
||||
# General troubleshooting
|
||||
|
||||
Here are some common errors that users may experience while using this patcher:
|
||||
|
||||
* [OpenCore Legacy Patcher not launching](#opencore-legacy-patcher-not-launching)
|
||||
* ["You don't have permission to save..." error when creating USB installer](#you-don-t-have-permission-to-save-error-when-creating-usb-installer)
|
||||
* [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)
|
||||
* ["Unable to resolve dependencies, error code 71" when root patching](#unable-to-resolve-dependencies-error-code-71-when-root-patching)
|
||||
* [Reboot when entering Hibernation (`Sleep Wake Failure`)](#reboot-when-entering-hibernation-sleep-wake-failure)
|
||||
@@ -15,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)
|
||||
@@ -27,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
|
||||
@@ -38,8 +41,8 @@ If the application won't launch (e.g. icon will bounce in the Dock), try launchi
|
||||
In some cases, a following error saying "The bless of the installer disk failed" stating the reason as "You don't have permission to save..." may appear.
|
||||
|
||||
|
||||
<div align="center">
|
||||
<img src="./images/Error-No-Permission-To-Save.png" alt="NoPermissionToSave" width="400" />
|
||||
<div align="left">
|
||||
<img src="./images/Error-No-Permission-To-Save.png" alt="NoPermissionToSave" width="600" />
|
||||
</div>
|
||||
|
||||
|
||||
@@ -64,6 +67,12 @@ Once you've booted OpenCore at least once, your hardware should now auto-boot it
|
||||
|
||||
However, if the 🚫 Symbol only appears after the boot process has already started (the bootscreen appears/verbose boot starts), it could mean that your USB drive has failed to pass macOS' integrity checks. To resolve this, create a new installer using a different USB drive (preferably of a different model.)
|
||||
|
||||
## Stuck on hard disk selection with greyed out buttons in installer
|
||||
|
||||
Switch installer language to English. If the language selector doesn't show up, [reset NVRAM](https://support.apple.com/en-mide/102603) and boot into the installer again.
|
||||
|
||||
You can switch back to different language once macOS has installed.
|
||||
|
||||
## Cannot boot macOS without the USB
|
||||
|
||||
By default, the OpenCore Patcher won't install OpenCore onto the internal drive itself during installs.
|
||||
@@ -78,8 +87,62 @@ With OpenCore Legacy Patcher, we rely on Apple Secure Boot to ensure OS updates
|
||||
|
||||
* Note: Machines with modified root volumes will also result in an infinite recovery loop until integrity is restored.
|
||||
|
||||
## Internal disk missing when building OpenCore
|
||||
|
||||
If you're using a brand new disk that has not been used before or was never formatted in any macOS type, you may face the following error in OCLP when trying to build on the internal disk.
|
||||
|
||||
<div align="left">
|
||||
<img src="./images/OCLP_Failed_to_find_applicable_disks.png" alt="Failed to find applicable disks" width="600" />
|
||||
</div>
|
||||
|
||||
There are two ways to to try and resolve this.
|
||||
|
||||
1. Create a new FAT32 partition using Disk Utility, sized at around 100MB, naming does not matter. OpenCore will detect it and you will be able to build your EFI there.
|
||||
|
||||
2. When installing macOS, choose "View -> Show all devices" in Disk Utility and format the entire disk by choosing the topmost option in the sidebar.
|
||||
|
||||
<div align="left">
|
||||
<img src="./images/wipe-disk.png" alt="Wipe disk" width="800" />
|
||||
</div>
|
||||
|
||||
|
||||
## System version mismatch error when root patching
|
||||
|
||||
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:
|
||||
|
||||
`SystemVersion.plist build version mismatch: found 15.4 (24E247), expected 13.7.5 (22H527)`
|
||||
|
||||
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:**
|
||||
|
||||
System Settings -> General -> Software Update -> (i) button next to Automatic Updates -> Disable "Download new updates when available".
|
||||
|
||||
**macOS Big Sur and Monterey:**
|
||||
|
||||
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`.
|
||||
@@ -179,13 +242,17 @@ Due to Apple dropping NVIDIA Kepler support in macOS Monterey, [MacBookPro11,3's
|
||||
|
||||
If you're having trouble with DisplayPort output on Mac Pros, try enabling Minimal Spoofing in Settings -> SMBIOS Settings and rebuild/install OpenCore. This will trick macOS drivers into thinking you have a newer MacPro7,1 and resolve the issue.
|
||||
|
||||

|
||||
|
||||
<div align="left">
|
||||
<img src="./images/OCLP-GUI-SMBIOS-Minimal.png" alt="GUI SMBIOS minimal" width="800" />
|
||||
</div>
|
||||
|
||||
|
||||
## Volume Hash Mismatch Error in macOS Monterey
|
||||
|
||||
A semi-common popup some users face is the "Volume Hash Mismatch" error:
|
||||
|
||||
<p align="center">
|
||||
<p align="left">
|
||||
<img src="./images/Hash-Mismatch.png">
|
||||
</p>
|
||||
|
||||
@@ -224,7 +291,7 @@ Because this step can take a few hours or more depending on drive speeds, be pat
|
||||
|
||||
## No acceleration after a Metal GPU swap on Mac Pro
|
||||
|
||||
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.
|
||||
If you finished installing macOS 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. In macOS Ventura and newer, repatching is needed after reversion.
|
||||
|
||||
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` + `.`
|
||||
|
||||
@@ -232,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 |
|
||||
@@ -262,10 +315,42 @@ Applicable models include:
|
||||
| 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>
|
||||
|
||||
@@ -1,23 +1,45 @@
|
||||
# Uninstalling OpenCore
|
||||
# Uninstall
|
||||
|
||||
## Uninstalling the bootloader
|
||||
This guide tells you different ways to uninstall OCLP and/or patches.
|
||||
|
||||
## Delete everything and revert back to native macOS
|
||||
|
||||
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.
|
||||
|
||||
## Manual methods
|
||||
|
||||
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.
|
||||
|
||||
### Reverting root patches
|
||||
|
||||
Open the OCLP application and go into the Post Install Root Patch menu, choose Revert Root Patches.
|
||||
|
||||
### Uninstalling the application
|
||||
|
||||
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)
|
||||
|
||||
### 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)
|
||||
|
||||
:::warning
|
||||
|
||||
Note that after you remove OpenCore, your Mac will no longer boot and show the "prohibited" symbol. Be ready to install a natively-supported version of macOS before you uninstall OpenCore.
|
||||
Note that after you remove OpenCore, your Mac will no longer boot and show the "prohibited" symbol. Be prepared to have a bootable USB drive with either OpenCore or natively-supported version of macOS before you uninstall the bootloader.
|
||||
|
||||
* This does not apply to native Macs just using OpenCore to achieve features like AirPlay to Mac and Sidecar, but it is still recommended to reinstall macOS after removing OpenCore, if using SMBIOS spoofing to enable Universal Control and other features.
|
||||
:::
|
||||
|
||||
## Uninstalling the application
|
||||
|
||||
If you want to remove the application without reinstalling the OS, navigate to `/Library/Application Support/` and delete the Dortania folder.
|
||||
|
||||
|
||||
@@ -3,7 +3,11 @@
|
||||
|
||||
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, as long as they meet the technical requirements listed on this page.
|
||||
|
||||
* Note: The following page is primarily for tinkerers, no proper support is provided outside of Discord support (see bottom of page).
|
||||
::: warning Note
|
||||
|
||||
These features are not actively tested and may break at any time. The following page is primarily for tinkerers, no proper support is provided outside of Discord support (see bottom of page).
|
||||
|
||||
:::
|
||||
|
||||
## Enabling Universal Control
|
||||
|
||||
@@ -202,7 +206,38 @@ Before we continue, please keep in mind that SMBIOS Spoofing is an advanced feat
|
||||
|
||||
### How to spoof
|
||||
|
||||
Ventura has dropped more models which includes all of the blacklisted Macs in question, making the procedure slightly different. It is important to follow the guide for the version you're on, failing to do so is likely to cause boot issues.
|
||||
|
||||
::: details macOS Sequoia
|
||||
|
||||
Firstly run OpenCore Legacy Patcher.
|
||||
|
||||
Then go to **Settings** and **SMBIOS** tab, set SMBIOS Spoof Level to **Moderate**. Set SMBIOS Spoof Model **one listed next to your native model in the table for spoofed models below.**
|
||||
|
||||
Notice that "Allow native models" and "Allow Native Spoofs" **are NOT** enabled unlike on Monterey, this is on purpose. They are no longer relevant on Sonoma and enabling them will cause boot issues.
|
||||
|
||||
| Main Settings view | SMBIOS settings |
|
||||
| :--- | :--- |
|
||||
|  |  |
|
||||
|
||||
|
||||
|
||||
::: details Table for spoofed models (click to expand)
|
||||
|
||||
Spoofing to any model with native Sequoia support should work, but these are the earliest Macs natively supported by Sequoia and thus chosen for the sake of simplicity.
|
||||
|
||||
**Reminder:** Macs that are not listed on this table work without spoofing, including systems that do not natively support Sequoia as long as the other requirements are met, since they aren't blacklisted.
|
||||
|
||||
|
||||
| Mac by name | Native SMBIOS | Spoof SMBIOS |
|
||||
|-------------|---------------|--------------|
|
||||
| MacBook Air Early 2015 11" / 13" | MacBookAir7,x | MacBookAir9,1 |
|
||||
| MacBook Pro Early 2015 13" | MacBookPro12,x | MacBookPro15,2 |
|
||||
| MacBook Pro Mid 2015 15" | MacBookPro11,4 / 11,5 | MacBookPro15,2 |
|
||||
| iMac Late 2015 21" | iMac16,x | iMac19,2 |
|
||||
| Mac mini Late 2014 | Macmini7,x | MacMini8,1 |
|
||||
| Mac Pro Late 2013 | MacPro6,x | MacPro7,1 |
|
||||
|
||||
:::
|
||||
|
||||
::: details macOS Sonoma
|
||||
|
||||
@@ -222,7 +257,7 @@ Notice that "Allow native models" and "Allow Native Spoofs" **are NOT** enabled
|
||||
|
||||
Spoofing to any model with native Sonoma support should work, but these are the earliest Macs natively supported by Sonoma and thus chosen for the sake of simplicity.
|
||||
|
||||
**Reminder:** Macs that are not listed on this table work without spoofing, including systems that do not natively support Ventura as long as the other requirements are met, since they aren't blacklisted.
|
||||
**Reminder:** Macs that are not listed on this table work without spoofing, including systems that do not natively support Sonoma as long as the other requirements are met, since they aren't blacklisted.
|
||||
|
||||
|
||||
| Mac by name | Native SMBIOS | Spoof SMBIOS |
|
||||
|
||||
@@ -1,22 +1,45 @@
|
||||
# Updating OpenCore and Patches
|
||||
|
||||
With OpenCore Legacy Patcher, there's generally very little reason for users to update the OpenCore installation on their machine unless you feel there's a benefit with new versions for your setup, e.g. Bluetooth has stopped working with a new macOS update.
|
||||
|
||||
For those who do wish to update, simply [download the latest release](https://github.com/dortania/OpenCore-Legacy-Patcher/releases) and rerun the patcher:
|
||||
|
||||

|
||||
|
||||
Then, rebuild your OpenCore build and install again. OpenCore Will now be updated!
|
||||
|
||||
To check what version of OpenCore and the Patcher you're currently running, you can run the following in the terminal:
|
||||
|
||||
```bash
|
||||
# OpenCore Version
|
||||
nvram 4D1FDA02-38C7-4A6A-9CC6-4BCCA8B30102:opencore-version
|
||||
# Patcher Version
|
||||
nvram 4D1FDA02-38C7-4A6A-9CC6-4BCCA8B30102:OCLP-Version
|
||||
```
|
||||
|
||||

|
||||
|
||||
From this, we can see that we're running a RELEASE version of OpenCore 0.8.0 built on April 18th, 2022 with Patcher Version 0.4.5!
|
||||
# Updating OpenCore and Patches
|
||||
|
||||
This guide explains how to get fully up to date application, bootloader and patches.
|
||||
|
||||
## Updating the application
|
||||
|
||||
Latest versions of OCLP can download updates by themselves, you will get notified of a new update with the changelog.
|
||||
|
||||
[You can also manually download the latest release here.](https://github.com/dortania/OpenCore-Legacy-Patcher/releases)
|
||||
|
||||
|
||||
<div align="left">
|
||||
<img src="./images/OCLP_Update_Available.png" alt="Update Avaialble" />
|
||||
</div>
|
||||
|
||||
|
||||
## Updating patches
|
||||
|
||||
After the update, the application asks if you want to update OpenCore and root patches.
|
||||
|
||||
If you do not need to change any settings, you can click "Yes" and follow the procedure. If you want to change settings, select "No" from here and do your settings, then manually build and install OpenCore to update to the latest version of the bootloader.
|
||||
|
||||
Finally install new root patches to ensure you're running on the latest fixes for on-disk patches.
|
||||
|
||||
|
||||
<div align="left">
|
||||
<img src="./images/OCLP_Update_Successful.png" alt="Update Successful" />
|
||||
</div>
|
||||
|
||||
## Checking OCLP and OpenCore versions
|
||||
|
||||
To check what version of OpenCore bootloader and the Patcher you're currently running, you can run the following in the terminal:
|
||||
|
||||
```bash
|
||||
# OpenCore Version
|
||||
nvram 4D1FDA02-38C7-4A6A-9CC6-4BCCA8B30102:opencore-version
|
||||
# Patcher Version
|
||||
nvram 4D1FDA02-38C7-4A6A-9CC6-4BCCA8B30102:OCLP-Version
|
||||
```
|
||||
|
||||
<div align="left">
|
||||
<img src="./images/oclp-version.png" alt="OCLP version" width="600" />
|
||||
</div>
|
||||
|
||||
From this, we can see that we're running a RELEASE version of OpenCore 0.9.0 built on January 1st, 2023 with Patcher Version 0.6.0!
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
# macOS Ventura Support
|
||||
# macOS Ventura
|
||||
|
||||

|
||||
|
||||
@@ -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)
|
||||
|
||||
|
||||
@@ -3,6 +3,13 @@
|
||||
Modern versions of Windows officially support two types of firmware: UEFI and BIOS. Users may want to boot Windows through the OCLP Bootpicker, but only UEFI Installations of Windows will show up in the OCLP Bootpicker.
|
||||
Many older Macs do not "officially" support UEFI Windows installations, leading to installation failures and strange behaviour, but OCLP can be used to prevent almost all of these issues.
|
||||
|
||||
::: warning
|
||||
|
||||
When booting Windows with OpenCore, it's highly recommended to create a new 200MB **MS-DOS (FAT)** partition in Disk Utility to install OpenCore in. This will prevent Windows from overwriting OpenCore with its own bootloader in the EFI partition and causing boot issues.
|
||||
|
||||
::::
|
||||
|
||||
|
||||
## Minimum Requirements
|
||||
|
||||
This guide will focus on the installation of modern Windows (10/11) without using Boot Camp Assistant.
|
||||
@@ -232,4 +239,4 @@ Intel's iGPU drivers for the HD 3000 series do not support UEFI booting in Windo
|
||||
|
||||
### NVIDIA Tesla Black Screen after driver installation
|
||||
|
||||
The NVIDIA Tesla GPUs found in 2008-2010 Macs do not support UEFI booting in Windows. You cannot use UEFI Windows without low-level patching on these machines.
|
||||
The NVIDIA Tesla GPUs found in 2008-2010 Macs do not support UEFI booting in Windows. You cannot use UEFI Windows without low-level patching on these machines.
|
||||
|
||||
BIN
docs/images/OCLP_Disable_mediaanalysisd_Setting.png
Normal file
|
After Width: | Height: | Size: 203 KiB |
BIN
docs/images/OCLP_Failed_to_find_applicable_disks.png
Normal file
|
After Width: | Height: | Size: 202 KiB |
BIN
docs/images/OCLP_FeatureUnlock_Setting.png
Normal file
|
After Width: | Height: | Size: 178 KiB |
BIN
docs/images/OCLP_Update_Available.png
Normal file
|
After Width: | Height: | Size: 109 KiB |
BIN
docs/images/OCLP_Update_Successful.png
Normal file
|
After Width: | Height: | Size: 73 KiB |
BIN
docs/images/TimeMachine-Transfer-Uncheck.png
Normal file
|
After Width: | Height: | Size: 101 KiB |
|
Before Width: | Height: | Size: 79 KiB After Width: | Height: | Size: 588 KiB |
|
Before Width: | Height: | Size: 454 KiB After Width: | Height: | Size: 629 KiB |
BIN
docs/images/macos-sequoia.png.png
Normal file
|
After Width: | Height: | Size: 399 KiB |
|
Before Width: | Height: | Size: 354 KiB After Width: | Height: | Size: 1.5 MiB |
|
Before Width: | Height: | Size: 374 KiB After Width: | Height: | Size: 1.0 MiB |
BIN
docs/images/wipe-disk.png
Normal file
|
After Width: | Height: | Size: 581 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.0.1" # OpenCore-Legacy-Patcher
|
||||
self.patcher_support_pkg_version: str = "1.8.0" # 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)
|
||||
|
||||
@@ -186,8 +187,8 @@ class Constants:
|
||||
self.custom_board_serial_number: str = "" # Set SMBIOS board serial number
|
||||
|
||||
## FeatureUnlock Settings
|
||||
self.fu_status: bool = True # Enable FeatureUnlock
|
||||
self.fu_arguments: str = None # Set FeatureUnlock arguments
|
||||
self.fu_status: bool = False # Enable FeatureUnlock
|
||||
self.fu_arguments: str = None # Set FeatureUnlock arguments
|
||||
|
||||
## Security Settings
|
||||
self.sip_status: bool = True # System Integrity Protection
|
||||
|
||||
@@ -12,6 +12,7 @@ from .. import constants
|
||||
from ..detections import device_probe
|
||||
|
||||
from ..datasets import (
|
||||
cpu_data,
|
||||
smbios_data,
|
||||
bluetooth_data
|
||||
)
|
||||
@@ -44,19 +45,26 @@ class BuildBluetooth:
|
||||
self._prebuilt_assumption()
|
||||
|
||||
|
||||
def _bluetooth_firmware_incompatibility_workaround(self) -> None:
|
||||
"""
|
||||
For Mac firmwares that are unable to perform firmware uploads.
|
||||
Namely Macs with BCM2070 and BCM2046 chipsets, as well as pre-2012 Macs with upgraded chipsets.
|
||||
"""
|
||||
self.config["NVRAM"]["Add"]["7C436110-AB2A-4BBB-A880-FE41995C9F82"]["bluetoothInternalControllerInfo"] = binascii.unhexlify("0000000000000000000000000000")
|
||||
self.config["NVRAM"]["Add"]["7C436110-AB2A-4BBB-A880-FE41995C9F82"]["bluetoothExternalDongleFailed"] = binascii.unhexlify("00")
|
||||
self.config["NVRAM"]["Delete"]["7C436110-AB2A-4BBB-A880-FE41995C9F82"] += ["bluetoothInternalControllerInfo", "bluetoothExternalDongleFailed"]
|
||||
|
||||
|
||||
def _on_model(self) -> None:
|
||||
"""
|
||||
On-Model Hardware Detection Handling
|
||||
"""
|
||||
|
||||
if self.computer.bluetooth_chipset in ["BRCM2070 Hub", "BRCM2046 Hub"]:
|
||||
logging.info("- Fixing Legacy Bluetooth for macOS Monterey")
|
||||
support.BuildSupport(self.model, self.constants, self.config).enable_kext("BlueToolFixup.kext", self.constants.bluetool_version, self.constants.bluetool_path)
|
||||
support.BuildSupport(self.model, self.constants, self.config).enable_kext("Bluetooth-Spoof.kext", self.constants.btspoof_version, self.constants.btspoof_path)
|
||||
self.config["NVRAM"]["Add"]["7C436110-AB2A-4BBB-A880-FE41995C9F82"]["boot-args"] += " -btlfxallowanyaddr"
|
||||
self.config["NVRAM"]["Add"]["7C436110-AB2A-4BBB-A880-FE41995C9F82"]["bluetoothInternalControllerInfo"] = binascii.unhexlify("0000000000000000000000000000")
|
||||
self.config["NVRAM"]["Add"]["7C436110-AB2A-4BBB-A880-FE41995C9F82"]["bluetoothExternalDongleFailed"] = binascii.unhexlify("00")
|
||||
self.config["NVRAM"]["Delete"]["7C436110-AB2A-4BBB-A880-FE41995C9F82"] += ["bluetoothInternalControllerInfo", "bluetoothExternalDongleFailed"]
|
||||
self._bluetooth_firmware_incompatibility_workaround()
|
||||
elif self.computer.bluetooth_chipset == "BRCM20702 Hub":
|
||||
# BCM94331 can include either BCM2070 or BRCM20702 v1 Bluetooth chipsets
|
||||
# Note Monterey only natively supports BRCM20702 v2 (found with BCM94360)
|
||||
@@ -65,6 +73,13 @@ class BuildBluetooth:
|
||||
if self.computer.wifi.chipset == device_probe.Broadcom.Chipsets.AirPortBrcm4360:
|
||||
logging.info("- Fixing Legacy Bluetooth for macOS Monterey")
|
||||
support.BuildSupport(self.model, self.constants, self.config).enable_kext("BlueToolFixup.kext", self.constants.bluetool_version, self.constants.bluetool_path)
|
||||
|
||||
# Older Mac firmwares (pre-2012) don't support the new chipsets correctly (regardless of WiFi card)
|
||||
if self.model in smbios_data.smbios_dictionary:
|
||||
if smbios_data.smbios_dictionary[self.model]["CPU Generation"] < cpu_data.CPUGen.ivy_bridge.value:
|
||||
logging.info("- Fixing Legacy Bluetooth for macOS Monterey")
|
||||
support.BuildSupport(self.model, self.constants, self.config).enable_kext("BlueToolFixup.kext", self.constants.bluetool_version, self.constants.bluetool_path)
|
||||
self._bluetooth_firmware_incompatibility_workaround()
|
||||
elif self.computer.bluetooth_chipset == "3rd Party Bluetooth 4.0 Hub":
|
||||
logging.info("- Detected 3rd Party Bluetooth Chipset")
|
||||
support.BuildSupport(self.model, self.constants, self.config).enable_kext("BlueToolFixup.kext", self.constants.bluetool_version, self.constants.bluetool_path)
|
||||
@@ -87,7 +102,5 @@ class BuildBluetooth:
|
||||
support.BuildSupport(self.model, self.constants, self.config).enable_kext("BlueToolFixup.kext", self.constants.bluetool_version, self.constants.bluetool_path)
|
||||
if smbios_data.smbios_dictionary[self.model]["Bluetooth Model"] <= bluetooth_data.bluetooth_data.BRCM2070.value:
|
||||
self.config["NVRAM"]["Add"]["7C436110-AB2A-4BBB-A880-FE41995C9F82"]["boot-args"] += " -btlfxallowanyaddr"
|
||||
self.config["NVRAM"]["Add"]["7C436110-AB2A-4BBB-A880-FE41995C9F82"]["bluetoothInternalControllerInfo"] = binascii.unhexlify("0000000000000000000000000000")
|
||||
self.config["NVRAM"]["Add"]["7C436110-AB2A-4BBB-A880-FE41995C9F82"]["bluetoothExternalDongleFailed"] = binascii.unhexlify("00")
|
||||
self.config["NVRAM"]["Delete"]["7C436110-AB2A-4BBB-A880-FE41995C9F82"] += ["bluetoothInternalControllerInfo", "bluetoothExternalDongleFailed"]
|
||||
self._bluetooth_firmware_incompatibility_workaround()
|
||||
support.BuildSupport(self.model, self.constants, self.config).enable_kext("Bluetooth-Spoof.kext", self.constants.btspoof_version, self.constants.btspoof_path)
|
||||
@@ -72,7 +72,7 @@ xw
|
||||
return
|
||||
|
||||
support.BuildSupport(self.model, self.constants, self.config).enable_kext("FeatureUnlock.kext", self.constants.featureunlock_version, self.constants.featureunlock_path)
|
||||
if self.constants.fu_arguments is not None:
|
||||
if self.constants.fu_arguments is not None and self.constants.fu_arguments != "":
|
||||
logging.info(f"- Adding additional FeatureUnlock args: {self.constants.fu_arguments}")
|
||||
self.config["NVRAM"]["Add"]["7C436110-AB2A-4BBB-A880-FE41995C9F82"]["boot-args"] += self.constants.fu_arguments
|
||||
|
||||
|
||||
@@ -55,7 +55,7 @@ class CatalogProducts:
|
||||
# Ensure Apple Silicon specific Installers are not listed
|
||||
if "VMM-x86_64" not in data["MobileAssetProperties"]["SupportedDeviceModels"]:
|
||||
if self.vmm_only:
|
||||
return {}
|
||||
return {"Missing VMM Support": True}
|
||||
|
||||
version = data["MobileAssetProperties"]["OSVersion"]
|
||||
build = data["MobileAssetProperties"]["Build"]
|
||||
@@ -82,7 +82,7 @@ class CatalogProducts:
|
||||
|
||||
With macOS Sequoia, the Info.plist is no longer present in the InstallAssistant's assets
|
||||
"""
|
||||
|
||||
_does_support_vmm = False
|
||||
for entry in data["Assets"]:
|
||||
if "SupportedDeviceModels" not in entry:
|
||||
continue
|
||||
@@ -94,6 +94,8 @@ class CatalogProducts:
|
||||
if self.vmm_only:
|
||||
continue
|
||||
|
||||
_does_support_vmm = True
|
||||
|
||||
build = entry["Build"]
|
||||
version = entry["OSVersion"]
|
||||
|
||||
@@ -109,6 +111,10 @@ class CatalogProducts:
|
||||
"Catalog": CatalogURL().catalog_url_to_seed(catalog_url),
|
||||
}
|
||||
|
||||
if _does_support_vmm is False:
|
||||
if self.vmm_only:
|
||||
return {"Missing VMM Support": True}
|
||||
|
||||
return {}
|
||||
|
||||
|
||||
@@ -325,9 +331,18 @@ class CatalogProducts:
|
||||
|
||||
if plist_contents:
|
||||
if Path(package["URL"]).name == "Info.plist":
|
||||
_product_map.update(self._legacy_parse_info_plist(plist_contents))
|
||||
result = self._legacy_parse_info_plist(plist_contents)
|
||||
else:
|
||||
_product_map.update(self._parse_mobile_asset_plist(plist_contents))
|
||||
result = self._parse_mobile_asset_plist(plist_contents)
|
||||
|
||||
if result == {"Missing VMM Support": True}:
|
||||
_product_map = {}
|
||||
break
|
||||
|
||||
_product_map.update(result)
|
||||
|
||||
if _product_map == {}:
|
||||
continue
|
||||
|
||||
if _product_map["Version"] is not None:
|
||||
_product_map["Title"] = self._build_installer_name(_product_map["Version"], _product_map["Catalog"])
|
||||
|
||||
@@ -2,8 +2,12 @@
|
||||
defaults.py: Generate default data for host/target
|
||||
"""
|
||||
|
||||
import logging
|
||||
import plistlib
|
||||
import subprocess
|
||||
|
||||
from pathlib import Path
|
||||
|
||||
from .. import constants
|
||||
|
||||
from ..detections import device_probe
|
||||
@@ -22,19 +26,52 @@ from ..datasets import (
|
||||
|
||||
class GenerateDefaults:
|
||||
|
||||
def __init__(self, model: str, host_is_target: bool, global_constants: constants.Constants) -> None:
|
||||
def __init__(self, model: str, host_is_target: bool, global_constants: constants.Constants, ignore_settings_file: bool = False) -> None:
|
||||
self.constants: constants.Constants = global_constants
|
||||
|
||||
self.model: str = model
|
||||
|
||||
self.host_is_target: bool = host_is_target
|
||||
self.ignore_settings_file: bool = ignore_settings_file
|
||||
|
||||
# Reset Variables
|
||||
self.constants.sip_status = True
|
||||
self.constants.secure_status = False
|
||||
self.constants.disable_cs_lv = False
|
||||
self.constants.disable_amfi = False
|
||||
self.constants.fu_status = True
|
||||
self.constants.fu_status = False
|
||||
|
||||
# Reset Variables - GUI override
|
||||
# Match constants.py for model specific settings
|
||||
# TODO: Write a sane system for this...
|
||||
self.constants.firewire_boot = False
|
||||
self.constants.xhci_boot = False
|
||||
self.constants.nvme_boot = False
|
||||
self.constants.force_quad_thread = False
|
||||
self.constants.enable_wake_on_wlan = False
|
||||
self.constants.disable_tb = False
|
||||
self.constants.dGPU_switch = False
|
||||
self.constants.disallow_cpufriend = False
|
||||
self.constants.disable_mediaanalysisd = False
|
||||
self.constants.set_alc_usage = True
|
||||
self.constants.nvram_write = True
|
||||
self.constants.allow_nvme_fixing = True
|
||||
self.constants.allow_3rd_party_drives = True
|
||||
self.constants.disable_fw_throttle = False
|
||||
self.constants.software_demux = False
|
||||
self.constants.disable_connectdrivers = False
|
||||
self.constants.amd_gop_injection = False
|
||||
self.constants.nvidia_kepler_gop_injection = False
|
||||
self.constants.disable_cs_lv = False
|
||||
self.constants.disable_amfi = False
|
||||
self.constants.secure_status = False
|
||||
self.constants.serial_settings = "None"
|
||||
self.constants.override_smbios = "Default"
|
||||
self.constants.allow_native_spoofs = False
|
||||
self.constants.allow_oc_everywhere = False
|
||||
self.constants.sip_status = True
|
||||
self.constants.custom_sip_value = None
|
||||
|
||||
|
||||
self.constants.fu_arguments = None
|
||||
|
||||
@@ -55,6 +92,8 @@ class GenerateDefaults:
|
||||
self._misc_hardwares_probe()
|
||||
self._smbios_probe()
|
||||
self._check_amfipass_supported()
|
||||
self._load_gui_defaults()
|
||||
|
||||
|
||||
def _general_probe(self) -> None:
|
||||
"""
|
||||
@@ -185,7 +224,6 @@ class GenerateDefaults:
|
||||
is_modern_wifi = True
|
||||
|
||||
else:
|
||||
print("Checking WiFi")
|
||||
if self.model not in smbios_data.smbios_dictionary:
|
||||
return
|
||||
if (
|
||||
@@ -217,11 +255,10 @@ class GenerateDefaults:
|
||||
self.constants.disable_cs_lv = True
|
||||
self.constants.disable_amfi = True
|
||||
|
||||
if is_legacy_wifi is True:
|
||||
# 13.0: Enabling AirPlay to Mac patches breaks Control Center on legacy chipsets
|
||||
# AirPlay to Mac was unsupported regardless, so we can safely disable it
|
||||
self.constants.fu_status = True
|
||||
self.constants.fu_arguments = " -disable_sidecar_mac"
|
||||
# if is_legacy_wifi is True:
|
||||
# # 13.0: Enabling AirPlay to Mac patches breaks Control Center on legacy chipsets
|
||||
# # AirPlay to Mac was unsupported regardless, so we can safely disable it
|
||||
# self.constants.fu_arguments = " -disable_sidecar_mac"
|
||||
|
||||
|
||||
def _misc_hardwares_probe(self) -> None:
|
||||
@@ -274,6 +311,7 @@ class GenerateDefaults:
|
||||
device_probe.NVIDIA.Archs.Kepler,
|
||||
]:
|
||||
self.constants.disable_amfi = True
|
||||
self.constants.disable_mediaanalysisd = True
|
||||
|
||||
if arch in [
|
||||
device_probe.AMD.Archs.Legacy_GCN_7000,
|
||||
@@ -365,3 +403,46 @@ class GenerateDefaults:
|
||||
|
||||
self.constants.disable_amfi = False
|
||||
self.constants.disable_cs_lv = False
|
||||
|
||||
|
||||
def _load_gui_defaults(self) -> None:
|
||||
"""
|
||||
Load GUI defaults from global settings
|
||||
"""
|
||||
if not self.host_is_target:
|
||||
return
|
||||
if self.ignore_settings_file is True:
|
||||
return
|
||||
|
||||
settings_plist = global_settings.GlobalEnviromentSettings().global_settings_plist
|
||||
if not Path(settings_plist).exists():
|
||||
return
|
||||
|
||||
try:
|
||||
plist = plistlib.load(Path(settings_plist).open("rb"))
|
||||
except Exception as e:
|
||||
logging.error("Error: Unable to read global settings file")
|
||||
logging.error(e)
|
||||
return
|
||||
|
||||
for key in plist:
|
||||
if not key.startswith("GUI:"):
|
||||
continue
|
||||
|
||||
constants_key = key.replace("GUI:", "")
|
||||
|
||||
if plist[key] == "PYTHON_NONE_VALUE":
|
||||
plist[key] = None
|
||||
|
||||
if hasattr(self.constants, constants_key):
|
||||
# Check if type is different
|
||||
original_type = type(getattr(self.constants, constants_key))
|
||||
new_type = type(plist[key])
|
||||
if original_type != new_type:
|
||||
logging.error(f"Global settings type mismatch for {constants_key}: {original_type} vs {new_type}")
|
||||
logging.error(f"Removing {key} from global settings")
|
||||
global_settings.GlobalEnviromentSettings().delete_property(key)
|
||||
continue
|
||||
|
||||
logging.info(f"Setting {constants_key} to {plist[key]}")
|
||||
setattr(self.constants, constants_key, plist[key])
|
||||
@@ -44,6 +44,25 @@ class GlobalEnviromentSettings:
|
||||
return None
|
||||
|
||||
|
||||
def delete_property(self, property_name: str) -> None:
|
||||
"""
|
||||
Deletes a property from the global settings file
|
||||
"""
|
||||
if Path(self.global_settings_plist).exists():
|
||||
try:
|
||||
plist = plistlib.load(Path(self.global_settings_plist).open("rb"))
|
||||
except Exception as e:
|
||||
logging.error("Error: Unable to read global settings file")
|
||||
logging.error(e)
|
||||
return
|
||||
if property_name in plist:
|
||||
del plist[property_name]
|
||||
try:
|
||||
plistlib.dump(plist, Path(self.global_settings_plist).open("wb"))
|
||||
except PermissionError:
|
||||
logging.info("Failed to write to global settings")
|
||||
|
||||
|
||||
def write_property(self, property_name: str, property_value) -> None:
|
||||
"""
|
||||
Writes a property to the global settings file
|
||||
|
||||
@@ -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:
|
||||
|
||||
@@ -135,7 +135,7 @@ class InstallerCreation():
|
||||
|
||||
with script_location.open("w") as script:
|
||||
script.write(f'''#!/bin/bash
|
||||
erase_disk='diskutil eraseDisk HFS+ OCLP-Installer {disk}'
|
||||
erase_disk='/usr/sbin/diskutil eraseDisk HFS+ OCLP-Installer {disk}'
|
||||
if $erase_disk; then
|
||||
"{createinstallmedia_path}" --volume /Volumes/OCLP-Installer --nointeraction{additional_args}
|
||||
fi
|
||||
|
||||
@@ -124,7 +124,7 @@ class PatcherValidation:
|
||||
minor_kernel (int): Minor kernel version
|
||||
"""
|
||||
|
||||
patch_type_merge_exempt = ["MechanismPlugins"]
|
||||
patch_type_merge_exempt = ["MechanismPlugins", "ModulePlugins"]
|
||||
patch_type_overwrite_exempt = []
|
||||
|
||||
patchset = HardwarePatchsetDetection(self.constants, xnu_major=major_kernel, xnu_minor=minor_kernel, validation=True).patches
|
||||
|
||||
@@ -40,7 +40,7 @@ class AuxiliaryKernelCollection(BaseKernelCache):
|
||||
collection to be used.
|
||||
"""
|
||||
|
||||
print("- Forcing Auxiliary Kernel Collection usage")
|
||||
logging.info("- Forcing Auxiliary Kernel Collection usage")
|
||||
result = subprocess_wrapper.run_as_root(["/usr/bin/killall", "syspolicyd", "kernelmanagerd"], stdout=subprocess.PIPE, stderr=subprocess.STDOUT)
|
||||
if result.returncode != 0:
|
||||
logging.info("- Unable to kill syspolicyd and kernelmanagerd")
|
||||
|
||||
@@ -32,4 +32,6 @@ class BasePatchset:
|
||||
self.macOS_13_3: float = 22.4
|
||||
self.macOS_14_1: float = 23.1
|
||||
self.macOS_14_2: float = 23.2
|
||||
self.macOS_14_4: float = 23.4
|
||||
self.macOS_14_4: float = 23.4
|
||||
self.macOS_15_2: float = 24.2
|
||||
self.macOS_15_3: float = 24.3
|
||||
@@ -44,6 +44,7 @@ from .hardware.misc import (
|
||||
pcie_webcam,
|
||||
t1_security,
|
||||
usb11,
|
||||
cpu_missing_avx,
|
||||
)
|
||||
|
||||
from ... import constants
|
||||
@@ -133,6 +134,7 @@ class HardwarePatchsetDetection:
|
||||
pcie_webcam.PCIeFaceTimeCamera,
|
||||
t1_security.T1SecurityChip,
|
||||
usb11.USB11Controller,
|
||||
cpu_missing_avx.CPUMissingAVX,
|
||||
]
|
||||
|
||||
self.device_properties = None
|
||||
@@ -366,7 +368,7 @@ class HardwarePatchsetDetection:
|
||||
logging.error("Stripping out Non-Metal GPUs")
|
||||
for hardware in list(present_hardware):
|
||||
if hardware.hardware_variant_graphics_subclass() == HardwareVariantGraphicsSubclass.NON_METAL_GRAPHICS:
|
||||
print(f" Stripping out {hardware.name()}")
|
||||
logging.info(f" Stripping out {hardware.name()}")
|
||||
present_hardware.remove(hardware)
|
||||
|
||||
if metal_3802_gpu_present and metal_31001_gpu_present and self._xnu_major >= os_data.sequoia.value:
|
||||
|
||||
@@ -120,11 +120,10 @@ class AMDLegacyGCN(BaseHardware):
|
||||
|
||||
_base = {}
|
||||
|
||||
if self._is_gpu_architecture_present(gpu_architectures=[device_probe.Intel.Archs.Skylake]) is False:
|
||||
# Monterey GVA is not required for Intel Skylake iGPUs
|
||||
_base.update({
|
||||
**MontereyGVA(self._xnu_major, self._xnu_minor, self._constants.detected_os_version).patches(),
|
||||
})
|
||||
# AMD GCN and newer GPUs can still use the native GVA stack
|
||||
_base.update({
|
||||
**MontereyGVA(self._xnu_major, self._xnu_minor, self._constants.detected_os_version).revert_patches(),
|
||||
})
|
||||
|
||||
_base.update({
|
||||
**MontereyOpenCL(self._xnu_major, self._xnu_minor, self._constants.detected_os_version).patches(),
|
||||
|
||||
@@ -0,0 +1,131 @@
|
||||
"""
|
||||
amd_navi.py: AMD Navi detection (Not implemented, only present for reference)
|
||||
"""
|
||||
|
||||
from ..base import BaseHardware, HardwareVariant, HardwareVariantGraphicsSubclass
|
||||
|
||||
from ...base import PatchType
|
||||
|
||||
from ...shared_patches.monterey_gva import MontereyGVA
|
||||
from ...shared_patches.monterey_opencl import MontereyOpenCL
|
||||
from ...shared_patches.amd_opencl import AMDOpenCL
|
||||
|
||||
from .....constants import Constants
|
||||
from .....detections import device_probe
|
||||
|
||||
from .....datasets.os_data import os_data
|
||||
|
||||
|
||||
class AMDNavi(BaseHardware):
|
||||
|
||||
def __init__(self, xnu_major, xnu_minor, os_build, global_constants: Constants) -> None:
|
||||
super().__init__(xnu_major, xnu_minor, os_build, global_constants)
|
||||
|
||||
|
||||
def name(self) -> str:
|
||||
"""
|
||||
Display name for end users
|
||||
"""
|
||||
return f"{self.hardware_variant()}: AMD Navi"
|
||||
|
||||
|
||||
def present(self) -> bool:
|
||||
"""
|
||||
Targeting AMD Navi GPUs with CPUs lacking AVX2.0
|
||||
"""
|
||||
return self._is_gpu_architecture_present(
|
||||
gpu_architectures=[
|
||||
device_probe.AMD.Archs.Navi
|
||||
]
|
||||
) and "AVX2" not in self._computer.cpu.leafs and self._dortania_internal_check() is True
|
||||
|
||||
|
||||
def native_os(self) -> bool:
|
||||
"""
|
||||
Dropped support with macOS 13, Ventura
|
||||
"""
|
||||
return self._xnu_major < os_data.ventura.value
|
||||
|
||||
|
||||
def hardware_variant(self) -> HardwareVariant:
|
||||
"""
|
||||
Type of hardware variant
|
||||
"""
|
||||
return HardwareVariant.GRAPHICS
|
||||
|
||||
|
||||
def hardware_variant_graphics_subclass(self) -> HardwareVariantGraphicsSubclass:
|
||||
"""
|
||||
Type of hardware variant subclass
|
||||
"""
|
||||
return HardwareVariantGraphicsSubclass.METAL_31001_GRAPHICS
|
||||
|
||||
|
||||
def requires_kernel_debug_kit(self) -> bool:
|
||||
"""
|
||||
Apple no longer provides standalone kexts in the base OS
|
||||
"""
|
||||
return self._xnu_major >= os_data.ventura.value
|
||||
|
||||
|
||||
def _model_specific_patches(self) -> dict:
|
||||
"""
|
||||
Model specific patches
|
||||
"""
|
||||
return {
|
||||
"AMD Navi": {
|
||||
PatchType.OVERWRITE_SYSTEM_VOLUME: {
|
||||
"/System/Library/Extensions": {
|
||||
"AMDRadeonX6000.kext": self._resolve_monterey_framebuffers(),
|
||||
"AMDRadeonX6000Framebuffer.kext": "12.5",
|
||||
|
||||
"AMDRadeonVADriver2.bundle": "12.5",
|
||||
"AMDRadeonX6000GLDriver.bundle": "12.5",
|
||||
"AMDRadeonX6000MTLDriver.bundle": "12.5" if self._xnu_major < os_data.sequoia else "12.5-24",
|
||||
"AMDRadeonX6000Shared.bundle": "12.5",
|
||||
|
||||
"AMDShared.bundle": "12.5",
|
||||
},
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
def _model_specific_patches_extended(self) -> dict:
|
||||
"""
|
||||
Support mixed legacy and modern AMD GPUs
|
||||
Specifically systems using AMD GCN 1-3 and Navi (ex. MacPro6,1 with eGPU)
|
||||
Assume 'AMD Legacy GCN' patchset is installed alongside this
|
||||
"""
|
||||
if self._is_gpu_architecture_present([
|
||||
device_probe.AMD.Archs.Legacy_GCN_7000,
|
||||
device_probe.AMD.Archs.Legacy_GCN_8000,
|
||||
device_probe.AMD.Archs.Legacy_GCN_9000
|
||||
]) is False:
|
||||
return {}
|
||||
|
||||
return {
|
||||
"AMD Navi Extended": {
|
||||
PatchType.OVERWRITE_SYSTEM_VOLUME: {
|
||||
"/System/Library/Extensions": {
|
||||
"AMDRadeonX6000HWServices.kext": "12.5",
|
||||
},
|
||||
},
|
||||
},
|
||||
}
|
||||
|
||||
|
||||
def patches(self) -> dict:
|
||||
"""
|
||||
Patches for AMD Navi GPUs
|
||||
"""
|
||||
if self.native_os() is True:
|
||||
return {}
|
||||
|
||||
return {
|
||||
**MontereyGVA(self._xnu_major, self._xnu_minor, self._constants.detected_os_version).revert_patches(),
|
||||
**MontereyOpenCL(self._xnu_major, self._xnu_minor, self._constants.detected_os_version).patches(),
|
||||
**AMDOpenCL(self._xnu_major, self._xnu_minor, self._constants.detected_os_version).patches(),
|
||||
**self._model_specific_patches(),
|
||||
**self._model_specific_patches_extended(),
|
||||
}
|
||||
@@ -139,10 +139,9 @@ class AMDPolaris(BaseHardware):
|
||||
**AMDOpenCL(self._xnu_major, self._xnu_minor, self._constants.detected_os_version).patches(),
|
||||
})
|
||||
|
||||
if self._is_gpu_architecture_present(gpu_architectures=[device_probe.Intel.Archs.Skylake]) is False:
|
||||
# Monterey GVA is not required for Intel Skylake iGPUs
|
||||
_base.update({
|
||||
**MontereyGVA(self._xnu_major, self._xnu_minor, self._constants.detected_os_version).patches(),
|
||||
})
|
||||
# AMD GCN and newer GPUs can still use the native GVA stack
|
||||
_base.update({
|
||||
**MontereyGVA(self._xnu_major, self._xnu_minor, self._constants.detected_os_version).revert_patches(),
|
||||
})
|
||||
|
||||
return _base
|
||||
@@ -122,7 +122,9 @@ class AMDVega(BaseHardware):
|
||||
return {}
|
||||
|
||||
return {
|
||||
**MontereyGVA(self._xnu_major, self._xnu_minor, self._constants.detected_os_version).patches(),
|
||||
# AMD GCN and newer GPUs can still use the native GVA stack
|
||||
**MontereyGVA(self._xnu_major, self._xnu_minor, self._constants.detected_os_version).revert_patches(),
|
||||
|
||||
**MontereyOpenCL(self._xnu_major, self._xnu_minor, self._constants.detected_os_version).patches(),
|
||||
**AMDOpenCL(self._xnu_major, self._xnu_minor, self._constants.detected_os_version).patches(),
|
||||
**self._model_specific_patches(),
|
||||
|
||||
@@ -49,10 +49,9 @@ class NvidiaKepler(BaseHardware):
|
||||
return True
|
||||
|
||||
if self._xnu_major == os_data.monterey:
|
||||
if self._xnu_minor < 0: # 12.0 Beta 8
|
||||
return True
|
||||
if self._os_build != "21A5522h": # 12.0 Beta 7
|
||||
return True
|
||||
if self._xnu_minor <= 0: # 12.0 Beta 8 increased XNU minor
|
||||
if self._os_build != "21A5522h": # 12.0 Beta 7
|
||||
return True
|
||||
|
||||
return False
|
||||
|
||||
|
||||
@@ -0,0 +1,86 @@
|
||||
"""
|
||||
cpu_missing_avx.py: Legacy CPUs (Lacking AVX) Detection
|
||||
|
||||
Note that this system is implemented only for macOS Ventura and
|
||||
machines not using the legacy/modern wireless patches (AVX patch integrated into WiFi patches).
|
||||
|
||||
This commit implemented unconditional AVX usage, thus Safari 18.2 and later will crash:
|
||||
https://github.com/WebKit/WebKit/commit/c15e741266db8ff9df309ce9971eda1cfd9021cc
|
||||
"""
|
||||
|
||||
from ..base import BaseHardware, HardwareVariant
|
||||
|
||||
from ..networking.legacy_wireless import LegacyWireless
|
||||
from ..networking.modern_wireless import ModernWireless
|
||||
|
||||
from ...base import PatchType
|
||||
|
||||
from .....constants import Constants
|
||||
|
||||
from .....datasets.os_data import os_data
|
||||
|
||||
|
||||
class CPUMissingAVX(BaseHardware):
|
||||
|
||||
def __init__(self, xnu_major, xnu_minor, os_build, global_constants: Constants) -> None:
|
||||
super().__init__(xnu_major, xnu_minor, os_build, global_constants)
|
||||
|
||||
|
||||
def name(self) -> str:
|
||||
"""
|
||||
Display name for end users
|
||||
"""
|
||||
return f"{self.hardware_variant()}: Legacy CPUs (Lacking AVX)"
|
||||
|
||||
|
||||
def present(self) -> bool:
|
||||
"""
|
||||
Targeting CPUs without AVX support
|
||||
"""
|
||||
if self._constants.computer.rosetta_active is True:
|
||||
return False
|
||||
if "AVX1.0" in self._constants.computer.cpu.flags:
|
||||
return False
|
||||
|
||||
return True
|
||||
|
||||
|
||||
def native_os(self) -> bool:
|
||||
"""
|
||||
Only install this patch on macOS Ventura.
|
||||
This is because we integrated the patch into the WiFi patches which all Macs use in Sonoma+.
|
||||
"""
|
||||
if self._xnu_major != os_data.ventura.value:
|
||||
return True
|
||||
|
||||
if LegacyWireless(self._xnu_major, self._xnu_minor, self._os_build, self._constants).present() is True:
|
||||
return True
|
||||
if ModernWireless(self._xnu_major, self._xnu_minor, self._os_build, self._constants).present() is True:
|
||||
return True
|
||||
|
||||
return False
|
||||
|
||||
|
||||
def hardware_variant(self) -> HardwareVariant:
|
||||
"""
|
||||
Type of hardware variant
|
||||
"""
|
||||
return HardwareVariant.MISCELLANEOUS
|
||||
|
||||
|
||||
def patches(self) -> dict:
|
||||
"""
|
||||
Patches for Legacy CPUs (Lacking AVX)
|
||||
"""
|
||||
if self.native_os() is True:
|
||||
return {}
|
||||
|
||||
return {
|
||||
"CPU Missing AVX": {
|
||||
PatchType.MERGE_SYSTEM_VOLUME: {
|
||||
"/System/Library/PrivateFrameworks": {
|
||||
"IO80211.framework": "13.7.2-22",
|
||||
},
|
||||
}
|
||||
},
|
||||
}
|
||||
@@ -118,6 +118,7 @@ class LegacyAudio(BaseHardware):
|
||||
"AppleVirtualPlatform.kext",
|
||||
"ApplePVPanic.kext",
|
||||
"AppleVirtIOStorage.kext",
|
||||
"AvpFairPlayDriver.kext",
|
||||
],
|
||||
},
|
||||
},
|
||||
|
||||
@@ -81,12 +81,14 @@ class T1SecurityChip(BaseHardware):
|
||||
},
|
||||
PatchType.MERGE_SYSTEM_VOLUME: {
|
||||
"/System/Library/Frameworks/LocalAuthentication.framework/Support": {
|
||||
"SharedUtils.framework": f"13.6-{self._xnu_major}", # Required for Password Authentication (SharedUtils.framework)
|
||||
"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
|
||||
**({ "NearField.framework": "14.5" } if self._xnu_major >= os_data.sequoia else {}),
|
||||
**({ "NearField.framework": "14.7.2" } if self._xnu_major >= os_data.sequoia else {}),
|
||||
},
|
||||
}
|
||||
},
|
||||
|
||||
@@ -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(),
|
||||
}
|
||||
@@ -118,18 +118,18 @@ class LegacyWireless(BaseHardware):
|
||||
"Legacy Wireless Extended": {
|
||||
PatchType.OVERWRITE_SYSTEM_VOLUME: {
|
||||
"/usr/libexec": {
|
||||
"wps": "12.7.2",
|
||||
"wifip2pd": "12.7.2",
|
||||
"wps": "12.7.2" if self._xnu_major < os_data.sequoia else f"12.7.2-{self._xnu_major}",
|
||||
"wifip2pd": "12.7.2" if self._xnu_major < os_data.sequoia else f"12.7.2-{self._xnu_major}",
|
||||
},
|
||||
},
|
||||
PatchType.MERGE_SYSTEM_VOLUME: {
|
||||
"/System/Library/Frameworks": {
|
||||
"CoreWLAN.framework": "12.7.2",
|
||||
"CoreWLAN.framework": "12.7.2" if self._xnu_major < os_data.sequoia else f"12.7.2-{self._xnu_major}",
|
||||
},
|
||||
"/System/Library/PrivateFrameworks": {
|
||||
"CoreWiFi.framework": "12.7.2",
|
||||
"IO80211.framework": "12.7.2",
|
||||
"WiFiPeerToPeer.framework": "12.7.2",
|
||||
"CoreWiFi.framework": "12.7.2" if self._xnu_major < os_data.sequoia else f"12.7.2-{self._xnu_major}",
|
||||
"IO80211.framework": "12.7.2" if self._xnu_major < os_data.sequoia else f"12.7.2-{self._xnu_major}",
|
||||
"WiFiPeerToPeer.framework": "12.7.2" if self._xnu_major < os_data.sequoia else f"12.7.2-{self._xnu_major}",
|
||||
},
|
||||
}
|
||||
},
|
||||
|
||||
@@ -64,21 +64,21 @@ class ModernWireless(BaseHardware):
|
||||
"Modern Wireless": {
|
||||
PatchType.OVERWRITE_SYSTEM_VOLUME: {
|
||||
"/usr/libexec": {
|
||||
"airportd": "13.6.5",
|
||||
"wifip2pd": "13.6.5",
|
||||
"airportd": f"13.7.2-{self._xnu_major}",
|
||||
"wifip2pd": f"13.7.2-{self._xnu_major}",
|
||||
},
|
||||
"/System/Library/CoreServices": {
|
||||
**({ "WiFiAgent.app": "14.5" } if self._xnu_major >= os_data.sequoia else {}),
|
||||
**({ "WiFiAgent.app": "14.7.2" } if self._xnu_major >= os_data.sequoia else {}),
|
||||
},
|
||||
},
|
||||
PatchType.MERGE_SYSTEM_VOLUME: {
|
||||
"/System/Library/Frameworks": {
|
||||
"CoreWLAN.framework": f"13.6.5-{self._xnu_major}",
|
||||
"CoreWLAN.framework": f"13.7.2-{self._xnu_major}",
|
||||
},
|
||||
"/System/Library/PrivateFrameworks": {
|
||||
"CoreWiFi.framework": f"13.6.5-{self._xnu_major}",
|
||||
"IO80211.framework": f"13.6.5-{self._xnu_major}",
|
||||
"WiFiPeerToPeer.framework": f"13.6.5-{self._xnu_major}",
|
||||
"CoreWiFi.framework": f"13.7.2-{self._xnu_major}",
|
||||
"IO80211.framework": f"13.7.2-{self._xnu_major}",
|
||||
"WiFiPeerToPeer.framework": f"13.7.2-{self._xnu_major}",
|
||||
},
|
||||
}
|
||||
},
|
||||
|
||||
@@ -34,7 +34,7 @@ class AMDTeraScale(BaseSharedPatchSet):
|
||||
PatchType.OVERWRITE_SYSTEM_VOLUME: {
|
||||
"/System/Library/Extensions": {
|
||||
"AMDFramebuffer.kext": "10.13.6",
|
||||
"AMDLegacyFramebuffer.kext": "10.13.6",
|
||||
"AMDLegacyFramebuffer.kext": "10.13.6" if self._xnu_float < self.macOS_13_3 else "10.13.6 TS2",
|
||||
"AMDLegacySupport.kext": "10.13.6",
|
||||
"AMDShared.bundle": "10.13.6",
|
||||
"AMDSupport.kext": "10.13.6",
|
||||
|
||||
@@ -2,6 +2,8 @@
|
||||
metal_3802.py: Metal 3802 patches
|
||||
"""
|
||||
|
||||
import packaging.version
|
||||
|
||||
from .base import BaseSharedPatchSet
|
||||
|
||||
from ..base import PatchType, DynamicPatchset
|
||||
@@ -129,7 +131,7 @@ class LegacyMetal3802(BaseSharedPatchSet):
|
||||
"default.metallib": "15.0 Beta 7",
|
||||
},
|
||||
"/System/Library/PrivateFrameworks/RenderBox.framework/Versions/A/Resources": {
|
||||
"default.metallib": "15.0 Beta 8",
|
||||
"default.metallib": "15.0 Beta 8" if packaging.version.parse(self._marketing_version) < packaging.version.parse("15.1") else "15.1 Beta 4",
|
||||
},
|
||||
"/System/iOSSupport/System/Library/PrivateFrameworks/VFX.framework/Versions/A/Resources": {
|
||||
"default.metallib": DynamicPatchset.MetallibSupportPkg,
|
||||
|
||||
@@ -39,4 +39,25 @@ class MontereyGVA(BaseSharedPatchSet):
|
||||
},
|
||||
},
|
||||
},
|
||||
}
|
||||
|
||||
|
||||
def revert_patches(self) -> dict:
|
||||
"""
|
||||
Revert if patches are no longer required/misapplied
|
||||
"""
|
||||
if self._os_requires_patches() is False:
|
||||
return {}
|
||||
|
||||
return {
|
||||
"Revert Monterey GVA": {
|
||||
PatchType.REMOVE_SYSTEM_VOLUME: {
|
||||
"/System/Library/PrivateFrameworks/AppleGVA.framework/Versions/A": [
|
||||
"AppleGVA"
|
||||
],
|
||||
"/System/Library/PrivateFrameworks/AppleGVACore.framework/Versions/A": [
|
||||
"AppleGVACore"
|
||||
],
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -38,6 +38,14 @@ class NonMetal(BaseSharedPatchSet):
|
||||
"/System/Applications": {
|
||||
**({ "Photo Booth.app": "11.7.9"} if self._xnu_major >= os_data.monterey else {}),
|
||||
},
|
||||
"/usr/sbin": {
|
||||
**({ "screencapture": "14.7"} if self._xnu_major >= os_data.sequoia else {}),
|
||||
},
|
||||
"/System/Library/CoreServices/RemoteManagement": {
|
||||
**({"ScreensharingAgent.bundle": "14.7.2"} if self._xnu_major >= os_data.sequoia else {}),
|
||||
**({"screensharingd.bundle": "14.7.2"} if self._xnu_major >= os_data.sequoia else {}),
|
||||
**({"SSMenuAgent.app": "14.7.2"} if self._xnu_major >= os_data.sequoia else {}),
|
||||
},
|
||||
},
|
||||
PatchType.REMOVE_SYSTEM_VOLUME: {
|
||||
"/System/Library/Extensions": [
|
||||
@@ -67,6 +75,9 @@ class NonMetal(BaseSharedPatchSet):
|
||||
"IOGPUFamily.kext",
|
||||
"AppleAfterburner.kext",
|
||||
],
|
||||
"/System/Library/ExtensionKit/Extensions/": [
|
||||
"WallpaperMacintoshExtension.appex"
|
||||
],
|
||||
},
|
||||
PatchType.OVERWRITE_DATA_VOLUME: {
|
||||
"/Library/Application Support/SkyLightPlugins": {
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -28,6 +29,8 @@ class BuildFrame(wx.Frame):
|
||||
super(BuildFrame, self).__init__(parent, title=title, size=(350, 200), style=wx.DEFAULT_FRAME_STYLE & ~(wx.RESIZE_BORDER | wx.MAXIMIZE_BOX))
|
||||
gui_support.GenerateMenubar(self, global_constants).generate()
|
||||
|
||||
self.build_successful: bool = False
|
||||
|
||||
self.install_button: wx.Button = None
|
||||
self.text_box: wx.TextCtrl = None
|
||||
self.frame_modal: wx.Dialog = None
|
||||
@@ -99,14 +102,26 @@ 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()
|
||||
|
||||
# Check if config.plist was built
|
||||
if self.build_successful is False:
|
||||
dialog = wx.MessageDialog(
|
||||
parent=self,
|
||||
message="An error occurred while building OpenCore",
|
||||
caption="Error building OpenCore",
|
||||
style=wx.OK | wx.ICON_ERROR
|
||||
)
|
||||
dialog.ShowModal()
|
||||
return
|
||||
|
||||
dialog = wx.MessageDialog(
|
||||
parent=self,
|
||||
message=f"Would you like to install OpenCore now?",
|
||||
@@ -126,9 +141,16 @@ class BuildFrame(wx.Frame):
|
||||
logger.addHandler(gui_support.ThreadHandler(self.text_box))
|
||||
try:
|
||||
build.BuildOpenCore(self.constants.custom_model or self.constants.computer.real_model, self.constants)
|
||||
except:
|
||||
self.build_successful = True
|
||||
except Exception as e:
|
||||
logging.error("An internal error occurred while building:\n")
|
||||
logging.error(traceback.format_exc())
|
||||
|
||||
# Handle bug from 2.1.0 where None type was stored in config.plist from global settings
|
||||
if "TypeError: unsupported type: <class 'NoneType'>" in traceback.format_exc():
|
||||
logging.error("If you continue to see this error, delete the following file and restart the application:")
|
||||
logging.error("Path: /Users/Shared/.com.dortania.opencore-legacy-patcher.plist")
|
||||
|
||||
logger.removeHandler(logger.handlers[2])
|
||||
|
||||
|
||||
|
||||
@@ -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")
|
||||
|
||||
@@ -23,7 +23,8 @@ from ..support import (
|
||||
global_settings,
|
||||
defaults,
|
||||
generate_smbios,
|
||||
network_handler
|
||||
network_handler,
|
||||
subprocess_wrapper
|
||||
)
|
||||
from ..datasets import (
|
||||
model_array,
|
||||
@@ -157,7 +158,16 @@ class SettingsFrame(wx.Frame):
|
||||
if setting_info["type"] == "checkbox":
|
||||
# Add checkbox, and description underneath
|
||||
checkbox = wx.CheckBox(panel, label=setting, pos=(10 + width, 10 + height), size = (300,-1))
|
||||
checkbox.SetValue(setting_info["value"] if setting_info["value"] else False)
|
||||
|
||||
value = False
|
||||
if "value" in setting_info:
|
||||
try:
|
||||
value = bool(setting_info["value"])
|
||||
except ValueError:
|
||||
logging.error(f"Invalid value for {setting}, got {setting_info['value']} (type: {type(setting_info['value'])})")
|
||||
value = False
|
||||
|
||||
checkbox.SetValue(value)
|
||||
checkbox.SetFont(gui_support.font_factory(13, wx.FONTWEIGHT_BOLD))
|
||||
event = lambda event, warning=setting_info["warning"] if "warning" in setting_info else "", override=bool(setting_info["override_function"]) if "override_function" in setting_info else False: self.on_checkbox(event, warning, override)
|
||||
checkbox.Bind(wx.EVT_CHECKBOX, event)
|
||||
@@ -739,9 +749,9 @@ class SettingsFrame(wx.Frame):
|
||||
"value": self._get_system_settings("Moraea.EnableSpinHack"),
|
||||
"variable": "Moraea.EnableSpinHack",
|
||||
"description": [
|
||||
"Note: May be more CPU intensive.",
|
||||
"Control beach ball cursor behaviour.",
|
||||
],
|
||||
"override_function": self._update_system_defaults,
|
||||
"override_function": self._update_system_defaults_root,
|
||||
"condition": gui_support.CheckProperties(self.constants).host_is_non_metal(general_check=True)
|
||||
},
|
||||
"wrap_around 2": {
|
||||
@@ -1105,11 +1115,18 @@ Hardware Information:
|
||||
def _update_setting(self, variable, value):
|
||||
logging.info(f"Updating Local Setting: {variable} = {value}")
|
||||
setattr(self.constants, variable, value)
|
||||
tmp_value = value
|
||||
if tmp_value is None:
|
||||
tmp_value = "PYTHON_NONE_VALUE"
|
||||
global_settings.GlobalEnviromentSettings().write_property(f"GUI:{variable}", tmp_value)
|
||||
|
||||
|
||||
def _update_global_settings(self, variable, value, global_setting = None):
|
||||
logging.info(f"Updating Global Setting: {variable} = {value}")
|
||||
global_settings.GlobalEnviromentSettings().write_property(variable, value)
|
||||
tmp_value = value
|
||||
if tmp_value is None:
|
||||
tmp_value = "PYTHON_NONE_VALUE"
|
||||
global_settings.GlobalEnviromentSettings().write_property(variable, tmp_value)
|
||||
if global_setting is not None:
|
||||
self._update_setting(global_setting, value)
|
||||
|
||||
@@ -1127,6 +1144,19 @@ Hardware Information:
|
||||
subprocess.run(["/usr/bin/defaults", "write", "-globalDomain", variable, value_type, str(value)])
|
||||
|
||||
|
||||
def _update_system_defaults_root(self, variable, value, global_setting = None):
|
||||
value_type = type(value)
|
||||
if value_type is str:
|
||||
value_type = "-string"
|
||||
elif value_type is int:
|
||||
value_type = "-int"
|
||||
elif value_type is bool:
|
||||
value_type = "-bool"
|
||||
|
||||
logging.info(f"Updating System Defaults (root): {variable} = {value} ({value_type})")
|
||||
subprocess_wrapper.run_as_root(["/usr/bin/defaults", "write", "/Library/Preferences/.GlobalPreferences.plist", variable, value_type, str(value)])
|
||||
|
||||
|
||||
def _find_parent_for_key(self, key: str) -> str:
|
||||
for parent in self.settings:
|
||||
if key in self.settings[parent]:
|
||||
@@ -1146,11 +1176,16 @@ Hardware Information:
|
||||
if hex(self.sip_value) == "0x0":
|
||||
self.constants.custom_sip_value = None
|
||||
self.constants.sip_status = True
|
||||
global_settings.GlobalEnviromentSettings().write_property("GUI:custom_sip_value", "PYTHON_NONE_VALUE")
|
||||
global_settings.GlobalEnviromentSettings().write_property("GUI:sip_status", True)
|
||||
elif hex(self.sip_value) == "0x803":
|
||||
self.constants.custom_sip_value = None
|
||||
self.constants.sip_status = False
|
||||
global_settings.GlobalEnviromentSettings().write_property("GUI:custom_sip_value", "PYTHON_NONE_VALUE")
|
||||
global_settings.GlobalEnviromentSettings().write_property("GUI:sip_status", False)
|
||||
else:
|
||||
self.constants.custom_sip_value = hex(self.sip_value)
|
||||
global_settings.GlobalEnviromentSettings().write_property("GUI:custom_sip_value", hex(self.sip_value))
|
||||
|
||||
self.sip_configured_label.SetLabel(f"Currently configured SIP: {hex(self.sip_value)}")
|
||||
|
||||
@@ -1177,10 +1212,12 @@ Hardware Information:
|
||||
|
||||
def on_custom_serial_number_textbox(self, event: wx.Event) -> None:
|
||||
self.constants.custom_serial_number = event.GetEventObject().GetValue()
|
||||
global_settings.GlobalEnviromentSettings().write_property("GUI:custom_serial_number", self.constants.custom_serial_number)
|
||||
|
||||
|
||||
def on_custom_board_serial_number_textbox(self, event: wx.Event) -> None:
|
||||
self.constants.custom_board_serial_number = event.GetEventObject().GetValue()
|
||||
global_settings.GlobalEnviromentSettings().write_property("GUI:custom_board_serial_number", self.constants.custom_board_serial_number)
|
||||
|
||||
|
||||
def _populate_fu_override(self, panel: wx.Panel) -> None:
|
||||
@@ -1193,7 +1230,7 @@ Hardware Information:
|
||||
gpu_combo_box.Bind(wx.EVT_CHOICE, self.fu_selection_click)
|
||||
if self.constants.fu_status is False:
|
||||
gpu_combo_box.SetStringSelection("Disabled")
|
||||
elif self.constants.fu_arguments is None:
|
||||
elif self.constants.fu_arguments is None or self.constants.fu_arguments == "":
|
||||
gpu_combo_box.SetStringSelection("Enabled")
|
||||
else:
|
||||
gpu_combo_box.SetStringSelection("Partial")
|
||||
@@ -1205,17 +1242,23 @@ Hardware Information:
|
||||
logging.info("Updating FU Status: Enabled")
|
||||
self.constants.fu_status = True
|
||||
self.constants.fu_arguments = None
|
||||
global_settings.GlobalEnviromentSettings().write_property("GUI:fu_status", True)
|
||||
global_settings.GlobalEnviromentSettings().write_property("GUI:fu_arguments", "PYTHON_NONE_VALUE")
|
||||
return
|
||||
|
||||
if value == "Partial":
|
||||
logging.info("Updating FU Status: Partial")
|
||||
self.constants.fu_status = True
|
||||
self.constants.fu_arguments = " -disable_sidecar_mac"
|
||||
global_settings.GlobalEnviromentSettings().write_property("GUI:fu_status", True)
|
||||
global_settings.GlobalEnviromentSettings().write_property("GUI:fu_arguments", " -disable_sidecar_mac")
|
||||
return
|
||||
|
||||
logging.info("Updating FU Status: Disabled")
|
||||
self.constants.fu_status = False
|
||||
self.constants.fu_arguments = None
|
||||
global_settings.GlobalEnviromentSettings().write_property("GUI:fu_status", False)
|
||||
global_settings.GlobalEnviromentSettings().write_property("GUI:fu_arguments", "PYTHON_NONE_VALUE")
|
||||
|
||||
|
||||
def _populate_graphics_override(self, panel: wx.Panel) -> None:
|
||||
@@ -1255,6 +1298,9 @@ Hardware Information:
|
||||
self.constants.imac_model = "Navi"
|
||||
else:
|
||||
raise Exception("Unknown GPU Model")
|
||||
global_settings.GlobalEnviromentSettings().write_property("GUI:imac_vendor", "AMD")
|
||||
global_settings.GlobalEnviromentSettings().write_property("GUI:metal_build", True)
|
||||
global_settings.GlobalEnviromentSettings().write_property("GUI:imac_model", self.constants.imac_model)
|
||||
elif "Nvidia" in gpu_choice:
|
||||
self.constants.imac_vendor = "Nvidia"
|
||||
self.constants.metal_build = True
|
||||
@@ -1264,9 +1310,14 @@ Hardware Information:
|
||||
self.constants.imac_model = "GT"
|
||||
else:
|
||||
raise Exception("Unknown GPU Model")
|
||||
global_settings.GlobalEnviromentSettings().write_property("GUI:imac_vendor", "Nvidia")
|
||||
global_settings.GlobalEnviromentSettings().write_property("GUI:metal_build", True)
|
||||
global_settings.GlobalEnviromentSettings().write_property("GUI:imac_model", self.constants.imac_model)
|
||||
else:
|
||||
self.constants.imac_vendor = "None"
|
||||
self.constants.metal_build = False
|
||||
global_settings.GlobalEnviromentSettings().write_property("GUI:imac_vendor", "None")
|
||||
global_settings.GlobalEnviromentSettings().write_property("GUI:metal_build", False)
|
||||
|
||||
|
||||
def _get_system_settings(self, variable) -> bool:
|
||||
|
||||
@@ -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>
|
||||
|
||||