Compare commits

...

16 Commits

Author SHA1 Message Date
Mykola Grymalyuk
df61370b7c Sync changelog 2021-03-14 14:39:15 -06:00
Mykola Grymalyuk
79ab028b0a Re-enable legacy networking patches
Reference: https://github.com/dortania/OpenCore-Legacy-Patcher/issues/102
2021-03-14 13:37:14 -06:00
Mykola Grymalyuk
444819b6a0 Clarify BCM94322 chipset support 2021-03-14 12:03:38 -06:00
Mykola Grymalyuk
079a1ac2ff Add custom EFI Boot icons per drive type 2021-03-14 11:27:15 -06:00
Dhinak G
9113dab049 Use python from brew 2021-03-13 23:15:45 -05:00
Mykola Grymalyuk
377b29f317 Set build target to python 3.6 2021-03-13 20:59:32 -07:00
Mykola Grymalyuk
be9bb8bef1 Fix typos and link 2021-03-13 11:13:47 -07:00
Mykola Grymalyuk
51c3921cf8 Add custom icon guide 2021-03-13 10:25:56 -07:00
Mykola Grymalyuk
6f5d5922dc Disable verbose and misc fixes
Closes https://github.com/dortania/OpenCore-Legacy-Patcher/issues/97
Closes https://github.com/dortania/OpenCore-Legacy-Patcher/issues/96
2021-03-13 08:52:53 -07:00
Mykola Grymalyuk
fa5266b069 Update issue templates 2021-03-13 08:04:32 -07:00
Mykola Grymalyuk
d619f15d36 Undo previous commit 2021-03-12 13:18:30 -07:00
Mykola Grymalyuk
3e9ec51ef5 Set macOS 10.13 building 2021-03-12 13:10:27 -07:00
Mykola Grymalyuk
0ac54c7ec4 Fix copying 2021-03-12 11:50:47 -07:00
Mykola Grymalyuk
6220d21a7b Fixes BootCamp BOOTx64 compatibility
Closes https://github.com/dortania/OpenCore-Legacy-Patcher/issues/94
2021-03-12 11:50:21 -07:00
Mykola Grymalyuk
7661b52a0a Disable Vault due to breaking installations 2021-03-11 20:27:50 -07:00
Mykola Grymalyuk
8c9b47b4d5 Add example video 2021-03-11 18:47:53 -07:00
30 changed files with 390 additions and 61 deletions

31
.github/ISSUE_TEMPLATE/bug_report.md vendored Normal file
View File

@@ -0,0 +1,31 @@
---
name: Bug report
about: Create a report to help notify of issues
title: ''
labels: ''
assignees: ''
---
**Describe the bug**
A clear and concise description of what the issue is.
**To Reproduce**
Steps to reproduce the behavior:
1. Open app or .command '...'
2. Enter '....'
3. See error
**Screenshots**
If applicable, add screenshots to help explain your problem.
**Build Folder**
If applicable, add the generated OpenCore Build to help explain your problem.
**Hardware (please complete the following information):**
- OS Running (ie. macOS 10.15.7, Catalina)
- OS Patching (ie. macOS 11.2.3, Big Sur)
- Model Patching (ie. MacPro5,1)
**Additional context**
Add any other context about the problem here.

View File

@@ -14,10 +14,6 @@ jobs:
steps:
- uses: actions/checkout@v2
- name: Set up Python 3
uses: actions/setup-python@v2
with:
python-version: "3.x"
- name: Install Python Dependencies
run: |
python3 -m pip install -U pip

View File

@@ -1,5 +1,15 @@
# OpenCore Legacy Patcher changelog
## 0.0.18
- Disable Vault by default due to breaking installations
- Move BOOTx64.efi to System/Library/CoreServices/ to support GPT BootCamp installs
- Disable verbose by default, still configurable by end-user
- Remove `AppleInternal`(0x10) from SIP value
- Add Mac Pro DRM patches for Metal GPUs
- Force `Moderate` SMBIOS replacement for models without native APFS support
- Re-enable legacy BCM94322 networking patches
- Add custom drive icons for external drives
## 0.0.17
- Fix build detection breaking on older OS

161
OCLP-GUI.command Executable file
View File

@@ -0,0 +1,161 @@
#!/usr/bin/env python3
# Current GUI issues:
#
# - Settings:
# - Broken toggle(Does not update variable)
# - Missing toggles(OpenCore, Kext, Metal, Wifi, SMBIOS)
# - Install OpenCore:
# - Outright non-functional
# - Pottential implementations would be to copy TUI's UI
from tkinter import *
import subprocess, sys, time
import tkinter as tk
from Resources import build, ModelArray, Constants, utilities
# Build main menu
class GUI_MENU():
def __init__(self):
self.constants = Constants.Constants()
self.current_model: str = None
self.constants.gui_mode = True
opencore_model: str = subprocess.run("nvram 4D1FDA02-38C7-4A6A-9CC6-4BCCA8B30102:oem-product".split(), stdout=subprocess.PIPE, stderr=subprocess.STDOUT).stdout.decode()
if not opencore_model.startswith("nvram: Error getting variable"):
opencore_model = [line.strip().split(":oem-product ", 1)[1] for line in opencore_model.split("\n") if line.strip().startswith("4D1FDA02-38C7-4A6A-9CC6-4BCCA8B30102:")][0]
self.current_model = opencore_model
else:
self.current_model = subprocess.run("system_profiler SPHardwareDataType".split(), stdout=subprocess.PIPE, stderr=subprocess.STDOUT)
self.current_model = [line.strip().split(": ", 1)[1] for line in self.current_model.stdout.decode().split("\n") if line.strip().startswith("Model Identifier")][0]
# Update SMBIOS
def update_model_clicked(self):
current_model = self.entry_smbios.get()
self.current_model = current_model.strip()
if self.current_model in ModelArray.SupportedSMBIOS11:
self.support = True
self.support_string = "Model is supported"
else:
self.support = False
self.support_string = "Model is unsupported"
# Update Labels
self.label_smbios.configure(text=f" Configured model: {self.current_model} ", font=(".AppleSystemUIFont", 15))
self.label_support.configure(text=self.support_string, font=(".AppleSystemUIFont", 15))
def build_clicked(self):
build_window = tk.Tk()
build_window.title("Build Menu")
build_window.minsize(250, 30)
build_window.eval('tk::PlaceWindow %s center' % build_window.winfo_pathname(build_window.winfo_id()))
support_build_2 = """Model is unsupported
Please enter a supported model in the main menu.
"""
build_label = tk.Label(build_window, text=support_build_2)
if self.current_model in ModelArray.SupportedSMBIOS11:
support_build_2 = """
Model is supported, building EFI..
If you see this text for more than 15 seconds, try restarting the build
If repeated, please open an issue on Github
"""
build_label.configure(text=support_build_2)
build_label.pack()
build.BuildOpenCore(self.current_model, self.constants).build_opencore()
support_build_2 = f"""Finished building OpenCore for model {self.current_model}!
Built at:
{self.constants.opencore_release_folder}
Close this window and select Install OpenCore 🔧
"""
build_label.configure(text=support_build_2)
build_label.pack()
else:
support_build_2 = "Model is unsupported"
build_label.pack()
build_window.eval('tk::PlaceWindow %s center' % build_window.winfo_pathname(build_window.winfo_id()))
def settings_menu(self):
#def v_func(self, v_var):
settings_window = tk.Tk()
settings_window.title("Settings Menu")
settings_window.minsize(250, 20)
label_settings = tk.Label(settings_window, text="Patcher Settings")
label_settings.place(relx=0.1, rely=0.1, anchor=SW)
local_verbose_debug = tk.BooleanVar()
verbose_box = tk.Checkbutton(settings_window, text='Enable Verbose Booting', variable=local_verbose_debug)
verbose_box.pack()
local_verbose_debug.set(True)
print(local_verbose_debug.get())
verbose_box.local_verbose_debug = local_verbose_debug
#local_verbose_debug..set(self.constants.verbose_debug)
settings_window.eval('tk::PlaceWindow %s center' % settings_window.winfo_pathname(settings_window.winfo_id()))
def main_menu(self):
#self.identify_model()
main_window = tk.Tk()
main_window.title("Main Menu")
window_height = 350
window_width = 400
main_window.resizable(False, False)
screen_width = main_window.winfo_screenwidth()
screen_height = main_window.winfo_screenheight()
x_cordinate = int((screen_width/2) - (window_width/2))
y_cordinate = int((screen_height/2) - (window_height/2))
main_window.geometry("{}x{}+{}+{}".format(window_width, window_height, x_cordinate, y_cordinate))
# Check if supported
if self.current_model in ModelArray.SupportedSMBIOS11:
self.support = True
self.support_string = "Model is supported"
else:
self.support = False
self.support_string = "Model is unsupported"
# Setup Labels
self.label_header = tk.Label(text=f"OpenCore Legacy Patcher v{self.constants.patcher_version}", font=(".AppleSystemUIFont", 20))
self.label_smbios = tk.Label(text=f"Detected model: {self.current_model}", font=(".AppleSystemUIFont", 15))
self.label_support = tk.Label(text=self.support_string, font=(".AppleSystemUIFont", 15))
self.label_build = tk.Label(text="🔨",font=(".AppleSystemUIFont", 50))
self.label_install = tk.Label(text="🔧",font=(".AppleSystemUIFont", 50))
# Setup Text Entry
self.entry_smbios = tk.Entry(width=12, justify='center')
# Setup Buttons
self.button_update = tk.Button(text="Update SMBIOS", command=self.update_model_clicked)
self.button_build = tk.Button(text="Build OpenCore", command=self.build_clicked)
self.button_install = tk.Button(text="Install OpenCore")
self.button_settings = tk.Button(text="⚙️", command=self.settings_menu)
# Place Labels
self.label_header.place(relx=0.5, rely=0.0, anchor=N)
self.label_smbios.place(relx=0.5, rely=0.1, anchor=N)
self.label_support.place(relx=0.5, rely=0.2, anchor=N)
self.entry_smbios.place(relx=0.5, rely=0.3, anchor=N)
self.button_update.place(relx=0.5, rely=0.4, anchor=N)
self.label_build.place(relx=0.25, rely=0.75, anchor=S)
self.button_build.place(relx=0.25, rely=0.85, anchor=S)
self.label_install.place(relx=0.75, rely=0.75, anchor=S)
self.button_install.place(relx=0.75, rely=0.85, anchor=S)
self.button_settings.place(relx=0.9, rely=0.175, anchor=S)
main_window.mainloop()
GUI_MENU().main_menu()

View File

@@ -20,6 +20,8 @@ class OpenCoreLegacyPatcher():
self.current_model = [line.strip().split(": ", 1)[1] for line in self.current_model.stdout.decode().split("\n") if line.strip().startswith("Model Identifier")][0]
self.constants.detected_os, _, _ = platform.mac_ver()
self.constants.detected_os = float('.'.join(self.constants.detected_os.split('.')[:2]))
if self.current_model in ModelArray.NoAPFSsupport:
self.constants.serial_settings = "Moderate"
def build_opencore(self):
build.BuildOpenCore(self.constants.custom_model or self.current_model, self.constants).build_opencore()
@@ -44,6 +46,8 @@ system_profiler SPHardwareDataType | grep 'Model Identifier'
if print_models in {"y", "Y", "yes", "Yes"}:
print("\n".join(ModelArray.SupportedSMBIOS))
input("Press any key to continue...")
if self.constants.custom_model in ModelArray.NoAPFSsupport:
self.constants.serial_settings = "Moderate"
def change_os(self):
utilities.cls()
@@ -150,7 +154,7 @@ Recommended for adanced users who want control how serials are handled
Valid options:
1. Minimal:\tUse original serials and minimally update SMBIOS
2. Moderate:\tReplave entire SMBIOS but keep original serials
2. Moderate:\tReplace entire SMBIOS but keep original serials
3. Advanced:\tReplace entire SMBIOS and generate new serials
Note: For new users we recommend leaving as default(1. Minimal)
@@ -202,7 +206,7 @@ Note: For secuirty reasons, OpenShell will be disabled when Vault is set.
utilities.header(["Set SIP and SecureBootModel"])
print("""SIP and SecureBootModel are used to ensure proper OTA functionality,
however to patch the root volume both of these must be disabled.
Only disable is absolutely necessary.
Only disable is absolutely necessary. SIP value = 0xFEF
Note: for minor changes, SIP can be adjusted in recovery like normal.
Additionally, when disabling SIP via the patcher amfi_get_out_of_my_way=1

View File

@@ -8,7 +8,7 @@ from pathlib import Path
class Constants:
def __init__(self):
self.patcher_version = "0.0.17"
self.patcher_version = "0.0.18"
self.opencore_commit = "7bb41aa - 2021-03-06"
self.opencore_version = "0.6.8"
self.lilu_version = "1.5.1"
@@ -42,7 +42,7 @@ class Constants:
self.opencore_debug = False
self.opencore_build = "RELEASE"
self.kext_debug = False
self.verbose_debug = True
self.verbose_debug = False
self.os_support = 11.0
self.min_os_support = 11.0
self.max_os_support = 11.0
@@ -52,7 +52,7 @@ class Constants:
self.gui_mode = False
self.serial_settings = "Minimal"
self.showpicker = True
self.vault = True
self.vault = False
self.sip_status = True
self.secure_status = True
self.detected_os = 0.0
@@ -149,6 +149,8 @@ class Constants:
@property
def app_icon_path(self): return self.current_path / Path("OC-Patcher.icns")
@property
def icon_path(self): return self.payload_path / Path("Icon/.VolumeIcon.icns")
def icon_path_external(self): return self.payload_path / Path("Icon/External/.VolumeIcon.icns")
@property
def icon_path_internal(self): return self.payload_path / Path("Icon/Internal/.VolumeIcon.icns")
@property
def gui_path(self): return self.payload_path / Path("Icon/Resources.zip")

View File

@@ -185,48 +185,26 @@ WifiBCM94322 = [
"MacBook5,2",
"MacBookAir3,1",
"MacBookAir3,2",
"MacBookAir4,1",
"MacBookAir4,2",
"MacBookAir5,1",
"MacBookAir5,2",
"MacBookPro5,1",
"MacBookPro5,2",
"MacBookPro5,3",
"MacBookPro5,4",
"MacBookPro5,5",
"MacBookPro7,1",
"Dortania1,1"
]
WifiBCM943224 = [
"MacBook6,1",
"MacBook7,1",
"MacBookPro6,1",
"MacBookPro6,2",
"Macmini3,1",
"Macmini4,1",
"iMac9,1",
"Dortania1,1"
]
WifiBCM94331 = [
"MacBook5,1", # PciRoot(0x0)/Pci(0x15,0x0)/Pci(0x0,0x0)
"MacBook5,2", # PciRoot(0x0)/Pci(0x15,0x0)/Pci(0x0,0x0)
"MacBook6,1", # PciRoot(0x0)/Pci(0x15,0x0)/Pci(0x0,0x0)
"MacBook7,1", # PciRoot(0x0)/Pci(0x15,0x0)/Pci(0x0,0x0)
"MacBookAir3,1", # PciRoot(0x0)/Pci(0x15,0x0)/Pci(0x0,0x0)
"MacBookAir3,2", # PciRoot(0x0)/Pci(0x15,0x0)/Pci(0x0,0x0)
"MacBookAir4,1", # PciRoot(0x0)/Pci(0x1C,0x1)/Pci(0x0,0x0)
"MacBookAir4,2", # PciRoot(0x0)/Pci(0x1C,0x1)/Pci(0x0,0x0)
"MacBookAir5,1", # PciRoot(0x0)/Pci(0x1C,0x1)/Pci(0x0,0x0)
"MacBookAir5,2", # PciRoot(0x0)/Pci(0x1C,0x1)/Pci(0x0,0x0)
"MacBookPro5,1", # PciRoot(0x0)/Pci(0x15,0x0)/Pci(0x0,0x0)
"MacBookPro5,2", # PciRoot(0x0)/Pci(0x15,0x0)/Pci(0x0,0x0)
"MacBookPro5,3", # PciRoot(0x0)/Pci(0x15,0x0)/Pci(0x0,0x0)
"MacBookPro5,4", # PciRoot(0x0)/Pci(0x15,0x0)/Pci(0x0,0x0)
"MacBookPro5,5", # PciRoot(0x0)/Pci(0x15,0x0)/Pci(0x0,0x0)
"MacBookPro6,1", # PciRoot(0x0)/Pci(0x1C,0x1)/Pci(0x0,0x0)
"MacBookPro6,2", # PciRoot(0x0)/Pci(0x1C,0x1)/Pci(0x0,0x0)
"MacBookPro7,1", # PciRoot(0x0)/Pci(0x15,0x0)/Pci(0x0,0x0)
"MacBookPro8,1", # PciRoot(0x0)/Pci(0x1C,0x1)/Pci(0x0,0x0)
"MacBookPro8,2", # PciRoot(0x0)/Pci(0x1C,0x1)/Pci(0x0,0x0)
"MacBookPro8,3", # PciRoot(0x0)/Pci(0x1C,0x1)/Pci(0x0,0x0)
@@ -234,14 +212,12 @@ WifiBCM94331 = [
"MacBookPro9,2", # PciRoot(0x0)/Pci(0x1C,0x1)/Pci(0x0,0x0)
"MacBookPro10,1",# PciRoot(0x0)/Pci(0x1C,0x1)/Pci(0x0,0x0)
"MacBookPro10,2",# PciRoot(0x0)/Pci(0x1C,0x1)/Pci(0x0,0x0)
"Macmini3,1", # PciRoot(0x0)/Pci(0x15,0x0)/Pci(0x0,0x0)
"Macmini4,1", # PciRoot(0x0)/Pci(0x15,0x0)/Pci(0x0,0x0)
"Macmini5,1", # PciRoot(0x0)/Pci(0x1C,0x1)/Pci(0x0,0x0)
"Macmini5,2", # PciRoot(0x0)/Pci(0x1C,0x1)/Pci(0x0,0x0)
"Macmini5,3", # PciRoot(0x0)/Pci(0x1C,0x1)/Pci(0x0,0x0)
"Macmini6,1", # PciRoot(0x0)/Pci(0x1C,0x1)/Pci(0x0,0x0)
"Macmini6,2", # PciRoot(0x0)/Pci(0x1C,0x1)/Pci(0x0,0x0)
#"iMac9,1", # PciRoot(0x0)/Pci(0x15,0x0)/Pci(0x0,0x0)
"iMac13,1", # PciRoot(0x0)/Pci(0x1C,0x3)/Pci(0x0,0x0)
"iMac13,2", # PciRoot(0x0)/Pci(0x1C,0x3)/Pci(0x0,0x0)
"MacPro5,1", # PciRoot(0x0)/Pci(0x1C,0x5)/Pci(0x0,0x0)
@@ -816,4 +792,24 @@ NoSATAPatch = [
"iMac14,1",
"iMac14,2",
"iMac14,3",
]
NoAPFSsupport = [
"MacBook5,1",
"MacBook5,2",
"MacBookAir2,1",
"MacBookPro4,1",
"MacBookPro5,1",
"MacBookPro5,2",
"MacBookPro5,3",
"MacBookPro5,4",
"MacBookPro5,5",
"Macmini3,1",
"iMac7,1",
"iMac8,1",
"iMac9,1",
"MacPro3,1",
"MacPro4,1",
"Xserve3,1",
"Dortania1,1"
]

View File

@@ -126,6 +126,9 @@ class BuildOpenCore:
property_path = "PciRoot(0x0)/Pci(0x1C,0x1)/Pci(0x0,0x0)"
print("- Applying fake ID for WiFi")
self.config["DeviceProperties"]["Add"][property_path] = {"device-id": binascii.unhexlify("ba430000"), "compatible": "pci14e4,43ba"}
if self.model in ModelArray.WifiBCM94322:
self.enable_kext("IO80211Mojave.kext", self.constants.io80211mojave_version, self.constants.io80211mojave_path)
self.get_kext_by_bundle_path("IO80211Mojave.kext/Contents/PlugIns/AirPortBrcm4331.kext")["Enabled"] = True
# CPUFriend
pp_map_path = Path(self.constants.current_path) / Path(f"payloads/Kexts/PlatformPlugin/{self.model}/Info.plist")
@@ -208,6 +211,10 @@ class BuildOpenCore:
amd_patch(self)
elif (self.constants.current_gpuv == "NVIDIA (0x10de)") & (self.constants.current_gpud in ModelArray.NVIDIAMXMGPUs):
nvidia_patch(self)
elif self.model in ModelArray.MacPro71:
print("- Adding Mac Pro, Xserve DRM patches")
self.config["NVRAM"]["Add"]["7C436110-AB2A-4BBB-A880-FE41995C9F82"]["boot-args"] += " shikigva=128 unfairgva=1 -wegtree"
# Add OpenCanopy
print("- Adding OpenCanopy GUI")
@@ -250,7 +257,7 @@ class BuildOpenCore:
self.get_tool_by__path("OpenShell.efi")["Enabled"] = False
if self.constants.sip_status is False:
print("- Disabling SIP")
self.config["NVRAM"]["Add"]["7C436110-AB2A-4BBB-A880-FE41995C9F82"]["csr-active-config"] = binascii.unhexlify("FF0F0000")
self.config["NVRAM"]["Add"]["7C436110-AB2A-4BBB-A880-FE41995C9F82"]["csr-active-config"] = binascii.unhexlify("EF0F0000")
self.config["NVRAM"]["Delete"]["7C436110-AB2A-4BBB-A880-FE41995C9F82"] += ["csr-active-config"]
self.config["NVRAM"]["Add"]["7C436110-AB2A-4BBB-A880-FE41995C9F82"]["boot-args"] += " amfi_get_out_of_my_way=1"
if self.constants.secure_status is False:
@@ -335,10 +342,13 @@ class BuildOpenCore:
self.config["PlatformInfo"]["Generic"]["SystemUUID"] = str(uuid.uuid4()).upper()
if self.constants.serial_settings == "Moderate":
print("- Using Moderate SMBIOS patching")
moderate_serial_patch(self)
elif self.constants.serial_settings == "Advanced":
print("- Using Advanced SMBIOS patching")
adanced_serial_patch(self)
else:
print("- Using Minimal SMBIOS patching")
self.spoofed_model = self.model
minimal_serial_patch(self)
@@ -544,18 +554,27 @@ Please build OpenCore first!"""
# TODO: Remount if readonly
partition_info = plistlib.loads(subprocess.run(f"diskutil info -plist {disk_identifier}s{response}".split(), stdout=subprocess.PIPE).stdout.decode().strip().encode())
mount_path = Path(partition_info["MountPoint"])
disk_type = partition_info["BusProtocol"]
utilities.cls()
utilities.header(["Copying OpenCore"])
if mount_path.exists():
if (mount_path / Path("EFI")).exists():
print("- Removing preexisting EFI folder")
shutil.rmtree(mount_path / Path("EFI"), onerror=rmtree_handler)
if (mount_path / Path("EFI/OC")).exists():
print("- Removing preexisting EFI/OC folder")
shutil.rmtree(mount_path / Path("EFI/OC"), onerror=rmtree_handler)
if (mount_path / Path("System")).exists():
print("- Removing preexisting System folder")
shutil.rmtree(mount_path / Path("System"), onerror=rmtree_handler)
print("- Coping OpenCore onto EFI partition")
shutil.copytree(self.constants.opencore_release_folder / Path("EFI"), mount_path / Path("EFI"))
shutil.copy(self.constants.icon_path, mount_path)
print("OpenCore transfer complete")
shutil.copytree(self.constants.opencore_release_folder / Path("EFI/OC"), mount_path / Path("EFI/OC"))
shutil.copytree(self.constants.opencore_release_folder / Path("System"), mount_path / Path("System"))
if disk_type == "USB":
print("- Adding External USB Drive icon")
shutil.copy(self.constants.icon_path_external, mount_path)
else:
print("- Adding Internal Drive icon")
shutil.copy(self.constants.icon_path_internal, mount_path)
print("- OpenCore transfer complete")
print("\nPress [Enter] to continue.\n")
input()
else:

View File

@@ -97,6 +97,7 @@ module.exports = {
children: [
'TROUBLESHOOTING',
'UNINSTALL',
'ICNS',
]
},

View File

@@ -15,6 +15,8 @@ Now that you've loaded OpenCore, now select Install macOS!:
![](../images/oc-boot.png)
After plenty of verbose booting, you will reach the installer screen! From there it's just like any normal macOS install.
After plenty of verbose booting, you will reach the installer 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)
# Once installed and booting, head to [Post-Installation](./POST-INSTALL.md)

105
docs/ICNS.md Normal file
View File

@@ -0,0 +1,105 @@
# Creating custom icons for OpenCore and Mac Boot Picker
For users who want to customize your setup to be more personal, OpenCore does allow for custom icons and images in the boot picker.
* [Custom OpenCore icons](#custom-opencore-icons)
* [Custom Mac Boot Picker icons](#custom-mac-boot-picker-icons)
* [Installing updated icons](#installing-updated-icons)
# Custom OpenCore icons
To generate custom OpenCore icons, you'll need the following:
* Images in PNG format
* Each image, with the following res:
* Cursor — Mouse cursor (mandatory, up to 144x144).
* Selected — Selected item (mandatory, 144x144).
* Selector — Selecting item (mandatory, up to 144x40).
* Left — Scrolling left (mandatory, 40x40).
* Right — Scrolling right (mandatory, 40x40).
* HardDrive — Generic OS (mandatory, 128x128).
* Background — Centred background image. (Recommended max size 1920x1080)
* Apple — Apple OS (128x128).
* AppleRecv — Apple Recovery OS (128x128).
* AppleTM — Apple Time Machine (128x128).
* Windows — Windows (128x128).
* Other — Custom entry (see [Entries](https://dortania.github.io/docs/latest/Configuration.html), 128x128).
* ResetNVRAM — Reset NVRAM system action or tool (128x128).
* Shell — Entry with UEFI Shell name for e.g. OpenShell (128x128).
* Tool — Any other tool (128x128).
Note, for each image we recommend having one of double the size. This ensures that icons are scaled correctly since .icns support dedicated images depending on HiDPI or not.
Once you have a custom image you want to use(for example, as a background), download the [latest release of OpenCorePkg](https://github.com/acidanthera/OpenCorePkg/releases) and enter the `Utilities/icnspack/` folder:
![](../images/icnspack-folder.png)
Now `cd` this folder in terminal and run the following:
```sh
./icnspack Background.icns <insert_x1_image> <insert_x2_image>
```
Once done, you'll see your custom icon generated in `icnspack`'s folder:
![](../images/icnspack-done.png)
# Custom Mac Boot Picker icons
Custom boot picker icons is much more complicated on Legacy Macs, on late 2013+ Macs the [Custom OpenCore icons](#custom-opencore-icons) method will work just fine. However on many 2012 and older Macs, the icons generated will be incompatible with the firmware.
To generate legacy icons, you'll need the following:
* A machine running macOS 10.4 through 10.11
* Icon Composer.app (Requires Apple Developer Account for official download)
* Users without the developer account can find a mirrors here:
* [Icon Composer 10.6](https://github.com/dortania/OpenCore-Legacy-Patcher/blob/main/docs/Icon-Composer-10.6.zip)
* [Icon Composer 10.11](https://github.com/dortania/OpenCore-Legacy-Patcher/blob/main/docs/Icon-Composer-10.11.zip)
* PNG Image you wish to convert
Head to [developer.apple's More Downloads page](https://developer.apple.com/download/more/) and search for `Graphics Tools` that is supported by your OS(note for 10.6 and older, the app is hidden inside `Developer Tools`):
![](../images/graphics-download.png)
Once downloaded, open the disk image and you'll find Icon Composer.app:
![Graphics Open](../images/graphics-open.png)
Now run the app and simply drag the images to each section as so:
![](../images/icon-SL.png)
Now save and export the new icns
# Installing updated icons
To install, please ensure that Vault is disabled when you built OpenCore. If you're unsure, simply rebuild OpenCore with the Patcher setting "Vault" set to false.
* <span style="color:red"> Warning</span>: Editing your OpenCore EFI incorrectly can result in a bricked install. Please ensure you have a natively supported version of macOS installed to boot into in case of issues.
Now that you've verified you can edit OpenCore safely, you'll need to mount the drive that OpenCore is stored on. To do this, download [MountEFI](https://github.com/corpnewt/MountEFI) and run it:
![](../images/mountefi.png)
Select the drive you installed OpenCore to and mount it.
* [Updating OpenCore icons](#updating-opencore-icons)
* [Updating Mac Boot Picker icons](#updating-mac-boot-picker-icons)
### Updating OpenCore icons
Head to `EFI/OC/Resources/Image/` on your drive and you'll see all the custom icons. For Background.icns, we need to ensure the file matches the theme OpenCore has set so we add the prefix `Modern` to it:
![](../images/background-moved.png)
Now reboot and you should see your updated icon(s)!
### Updating Mac Boot Picker icons
To update the Mac Boot Picker icons is actually quite simple, on the root of your drive simply drop the icon onto the root of the drive with the name `.VolumeIcon.icns`
![](../images/mac-icns-drive.png)
Now reboot and you'll see the new icon!

Binary file not shown.

BIN
docs/Icon-Composer-10.6.zip Normal file

Binary file not shown.

View File

@@ -16,6 +16,8 @@ The below table will list all supported and unsupported functions of the patcher
* [Mac Pro](#mac-pro)
* [Xserve](#xserve)
Note: In this patcher, Brightness Control is tied to GPU acceleration
### MacBook
| SMBIOS | Year | Supported | Comment |
@@ -24,9 +26,9 @@ The below table will list all supported and unsupported functions of the patcher
| MacBook2,1 | Late 2006 | ^^ | 32-Bit Firmware limitation |
| MacBook3,1 | Late 2007 | ^^ | ^^ |
| MacBook4,1 | Early 2008 | ^^ | ^^ |
| MacBook5,1 | Late 2008 | <span style="color:#30BCD5"> YES </span> | - No GPU Acceleration in Big Sur<br/>- No AppleHDA(Audio) Patching implemented(yet) |
| MacBook5,1 | Late 2008 | <span style="color:#30BCD5"> YES </span> | - No GPU Acceleration in Big Sur<br/>- No AppleHDA(Audio) Patching implemented<br/>- No Wifi Patches implemented |
| MacBook5,2 | Early 2009 | ^^ | ^^ |
| MacBook6,1 | Late 2009 | ^^ | ^^ |
| MacBook6,1 | Late 2009 | ^^ | - No GPU Acceleration in Big Sur<br/>- No AppleHDA(Audio) Patching implemented<br/> |
| MacBook7,1 | Mid-2010 | ^^ | ^^ |
### MacBook Air
@@ -34,8 +36,8 @@ The below table will list all supported and unsupported functions of the patcher
| SMBIOS | Year | Supported | Comment |
| :--- | :--- | :--- | :--- |
| MacBookAir1,1 | Early 2008 | <span style="color:red"> NO </span> | Requires SSE4.1 CPU |
| MacBookAir2,1 | Late 2008 |<span style="color:#30BCD5"> YES </span> | - No GPU Acceleration in Big Sur<br/>- No AppleHDA(Audio) Patching implemented(yet)<br/>- No Wifi Patches implemented(yet) |
| MacBookAir3,1 | Late 2010 | ^^ | - No GPU Acceleration in Big Sur<br/>- No AppleHDA(Audio) Patching implemented(yet) |
| MacBookAir2,1 | Late 2008 |<span style="color:#30BCD5"> YES </span> | - No GPU Acceleration in Big Sur<br/>- No AppleHDA(Audio) Patching implemented<br/>- No Wifi Patches implemented |
| MacBookAir3,1 | Late 2010 | ^^ | - No GPU Acceleration in Big Sur<br/>- No AppleHDA(Audio) Patching implemented |
| MacBookAir3,2 | ^^ | ^^ | ^^ |
| MacBookAir4,1 | Mid-2011 | ^^ | ^^ |
| MacBookAir4,2 | ^^ | ^^ | ^^ |
@@ -51,16 +53,16 @@ The below table will list all supported and unsupported functions of the patcher
| MacBookPro2,1 | Late 2006 | ^^ | 32-Bit Firmware limitation |
| MacBookPro2,2 | Late 2006 | ^^ | ^^ |
| MacBookPro3,1 | Mid-2007 | ^^ | - Requires SSE4.1 CPU |
| MacBookPro4,1 | Early 2008 | <span style="color:#30BCD5"> YES </span> | - No GPU Acceleration in Big Sur<br/>- No AppleHDA(Audio) Patching implemented(yet)<br/>- No Wifi Patches implemented(yet) |
| MacBookPro5,1 | Late 2008 | ^^ | - No GPU Acceleration in Big Sur<br/>- No AppleHDA(Audio) Patching implemented(yet) |
| MacBookPro4,1 | Early 2008 | <span style="color:#30BCD5"> YES </span> | - No GPU Acceleration in Big Sur<br/>- No AppleHDA(Audio) Patching implemented<br/>- No Wifi Patches implemented |
| MacBookPro5,1 | Late 2008 | ^^ | - No GPU Acceleration in Big Sur<br/>- No AppleHDA(Audio) Patching implemented |
| MacBookPro5,2 | Early 2009 | ^^ | ^^ |
| MacBookPro5,3 | Mid-2009 | ^^ | ^^ |
| MacBookPro5,4 | ^^ | ^^ | ^^ |
| MacBookPro5,5 | ^^ | ^^ | ^^ |
| MacBookPro6,1 | Mid-2010 | ^^ | ^^ |
| MacBookPro6,2 | ^^ | ^^ | ^^ |
| MacBookPro7,1 | ^^ | ^^ | ^^ |
| MacBookPro8,1 | Early 2011 | ^^ | - No GPU Acceleration in Big Sur<br/>- No AppleHDA(Audio) Patching implemented(yet)<br/>- Ethernet Connection Issues |
| MacBookPro7,1 | ^^ | ^^ | - No GPU Acceleration in Big Sur<br/>- No AppleHDA(Audio) Patching implemented<br/>- Ethernet issues |
| MacBookPro8,1 | Early 2011 | ^^ | - No GPU Acceleration in Big Sur<br/>- No AppleHDA(Audio) Patching implemented<br/>- Ethernet Connection Issues |
| MacBookPro8,2 | ^^ | ^^ | ^^ |
| MacBookPro8,3 | ^^ | ^^ | ^^ |
| MacBookPro9,1 | Mid-2012 | ^^ | <span style="color:green"> Everything is supported</span> |
@@ -74,9 +76,9 @@ The below table will list all supported and unsupported functions of the patcher
| :--- | :--- | :--- | :--- |
| Macmini1,1 | Early 2006 | <span style="color:red"> NO </span> | 32-Bit CPU limitation |
| Macmini2,1 | Mid-2007 | ^^ | 32-Bit Firmware limitation |
| Macmini3,1 | Early 2009 | <span style="color:#30BCD5"> YES </span> | - No GPU Acceleration in Big Sur<br/>- No AppleHDA(Audio) Patching implemented(yet) |
| Macmini3,1 | Early 2009 | <span style="color:#30BCD5"> YES </span> | - No GPU Acceleration in Big Sur<br/>- No AppleHDA(Audio) Patching implemented |
| Macmini4,1 | Mid-2010 | ^^ | ^^ |
| Macmini5,1 | Mid-2011 | ^^ | - No GPU Acceleration in Big Sur<br/>- No AppleHDA(Audio) Patching implemented(yet)<br/>- Ethernet Connection Issues |
| Macmini5,1 | Mid-2011 | ^^ | - No GPU Acceleration in Big Sur<br/>- No AppleHDA(Audio) Patching implemented<br/>- Ethernet Connection Issues |
| Macmini5,2 | ^^ | ^^ | ^^ |
| Macmini5,3 | ^^ | ^^ | ^^ |
| Macmini6,1 | Late 2012 | ^^ | <span style="color:green"> Everything is supported</span> |
@@ -91,11 +93,11 @@ The below table will list all supported and unsupported functions of the patcher
| iMac5,1 | Late 2006 | ^^ | 32-Bit Firmware limitation |
| iMac5,2 | ^^ | ^^ | ^^ |
| iMac6,1 | ^^ | ^^ | ^^ |
| iMac7,1 | Mid-2007 | <span style="color:#30BCD5"> YES </span> | - Requires an SSE4.1 CPU Upgrade<br/>- No GPU Acceleration in Big Sur<br/>- No AppleHDA(Audio) Patching implemented(yet)<br/>- No Wifi Patches implemented (yet) |
| iMac8,1 | Early 2008 | ^^ | - No GPU Acceleration in Big Sur<br/>- No AppleHDA(Audio) Patching implemented(yet)<br/>- No Wifi Patches implemented (yet) |
| iMac9,1 | Early 2009 | ^^ | - No GPU Acceleration in Big Sur<br/>- No AppleHDA(Audio) Patching implemented(yet) |
| iMac10,1 | Late 2009 | ^^ | ^^ |
| iMac11,1 | ^^ | ^^ | - No GPU Acceleration in Big Sur<br/>- No AppleHDA(Audio) Patching implemented(yet)<br/>- Ethernet Connection Issues |
| iMac7,1 | Mid-2007 | <span style="color:#30BCD5"> YES </span> | - Requires an SSE4.1 CPU Upgrade<br/>- No GPU Acceleration in Big Sur<br/>- No AppleHDA(Audio) Patching implemented<br/>- No Wifi Patches implemented |
| iMac8,1 | Early 2008 | ^^ | - No GPU Acceleration in Big Sur<br/>- No AppleHDA(Audio) Patching implemented<br/>- No Wifi Patches implemented |
| iMac9,1 | Early 2009 | ^^ | ^^ |
| iMac10,1 | Late 2009 | ^^ | - No GPU Acceleration in Big Sur<br/>- No AppleHDA(Audio) Patching implemented |
| iMac11,1 | ^^ | ^^ | - No GPU Acceleration in Big Sur<br/>- No AppleHDA(Audio) Patching implemented<br/>- Ethernet Connection Issues |
| iMac11,2 | Mid-2010 | ^^ | ^^ |
| iMac11,3 | ^^ | ^^ | ^^ |
| iMac12,1 | Mid-2011 | ^^ | ^^ |
@@ -112,7 +114,7 @@ The below table will list all supported and unsupported functions of the patcher
| :--- | :--- | :--- | :--- |
| MacPro1,1 | Mid-2006 | <span style="color:red"> NO </span> | 32-Bit Firmware limitation |
| MacPro2,1 | Mid-2007 | ^^ | ^^ |
| MacPro3,1 | Early 2008 | <span style="color:#30BCD5"> YES </span> | - Requires an SSE4.1 CPU Upgrade<br/>- No AppleHDA(Audio) Patching implemented(yet) |
| MacPro3,1 | Early 2008 | <span style="color:#30BCD5"> YES </span> | - Requires an SSE4.1 CPU Upgrade<br/>- No AppleHDA(Audio) Patching implemented |
| MacPro4,1 | Early 2009 | ^^ | <span style="color:green"> Everything is supported as long as GPU is Metal capable </span> |
| MacPro5,1 | Mid-2010 | ^^ | ^^ |

View File

@@ -13,7 +13,7 @@ features:
- title: Built with security in mind
details: Supporting System Integrity Protection(SIP), FileVault 2, .im4m Secure Boot and Vaulting. You're just as secure as a supported Mac
- title: Native OTA updates
details: Install updates the moment the come out just like on a supported Mac, and no more 12GB+ updates.
details: Install updates the moment they come out just like on a supported Mac, and no more 12GB+ updates.
- title: Zero firmware patching
details: No need to patch APFS ROM support, all protocol upgrades are done in memory and never permanent.
footer: Copyright © Dortania 2020-2021

Binary file not shown.

After

Width:  |  Height:  |  Size: 129 KiB

View File

Before

Width:  |  Height:  |  Size: 141 KiB

After

Width:  |  Height:  |  Size: 141 KiB

BIN
images/background-moved.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 374 KiB

BIN
images/graphics-open.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 514 KiB

BIN
images/icns-sl-save.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 23 KiB

BIN
images/icnspack-done.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 505 KiB

BIN
images/icnspack-folder.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 493 KiB

BIN
images/icon-SL.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 232 KiB

BIN
images/mac-icns-drive.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 394 KiB

BIN
images/mountefi.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 99 KiB

BIN
payloads/Icon/External/.VolumeIcon.icns vendored Executable file

Binary file not shown.