由于开发
Flutter
需要用到IOS
端进行测试,而我手上的电脑只有一台拯救者R9000P
,于是便萌生了在主机上安装黑苹果的想法。Vmware
对黑苹果系统的支持只到了OS 12.x
,往后版本的系统安装成功后会直接报八国语言的错误,这个途径我尝试了很多遍都没办法解决,遂决定直接在硬盘上安装。作为对白苹果的模拟,黑苹果在电脑上的表现说实话并不是很好,我在搜集资料的过程中经常会看到吐槽蓝牙、网卡、电池休眠唤醒等等的问题。但作为
Flutter
测试/开发的系统而言,黑苹果没有任何问题。
电脑配置
-
处理器:
AMD Ryzen 7 5800H with Radeon Graphics
3.20 GHz -
显卡:
NVIDIA GeForce RTX 3060 Laptop
-
网卡:
Intel(R) Wi-Fi 6 AX200 160MHz
-
硬盘:
-
KINGSTON SKC3000S1024G
:我后加的固态硬盘,大小为1T
,本次黑苹果的安装的位置 -
SKHynix_HFS512GDE9X084N
:拯救者自带的512G
硬盘,Windows
所在地
-
前期准备
需要的软件
-
DiskGenius:用于成功安装后建立
EFI
分区 -
EasyUEFI:用于为安装好的系统增加
EFI
引导 -
BalenaEtcher:用于
ISO
的刻录(官网访问可能需要科学上网) -
OpenCore:用于黑苹果安装过程的引导
-
ProperTree:用于
Windows
下对OpenCore
配置文件的编辑 -
OpenCore Configurator:用于
Mac OS
下对OpenCore
配置文件的编辑和其它有用的功能
系统镜像
-
我在别的社区里买了一个已经配置好的镜像文件,在刻录时会自动为我分好
EFI
分区,如果你想使用和我相同的文件,可以用积分购买 -
如果你自己有了准备好的镜像文件,在烧录镜像完成后记得创建EFI分区,并把引导文件拖进去
资源网站
主要步骤
刻录U盘
- 打开
BalenaEtcher
,选择从文件烧录,选中准备好的镜像文件。这里软件自动识别了我插入的U盘,点击现在烧录
-
整个烧录过程包括烧录和验证过程,如果你嫌麻烦,验证过程可以直接跳过
-
烧录完成后的结构应该如图所示
EFI
中即是别人已经配置好的OpenCore
的设置。这个设置并不适用于拯救者R9000P
。现在我们打开在github
仓库里拿到的OpenCore
。这篇文章在写作时OpenCore
的最新版本是1.0.0
,文件结构如下所示
-
到这里基本分为了两个路子,一个是自己配置EFI,一个是使用别人已经配置好的EFI。网上安装黑苹果的机器众多,如果别人的机器配置与你相同,并且你找到了别人分享的
EFI
,那就再好不过。我自己尝试配置失败了很多次后,在github
上找到了R9000P 2021
的别人已经配置好的EFI
,经过修改后成功启动了。 -
我最后成功启动的
EFI
在这里:Github指路 -
如果在看这个教程的你并不是和我相同的机器,且想自己配置
EFI
,那请接着往下看。如果你是和我相同或类似的机器,可以点击目录的超链接跳过这部分。
[可选] 配置EFI
- OpenCore-Install-Guide中提供了
OpenCore
的安装指导,写得非常详细,英语不错的同学可以直接查看这个
配置Drivers
-
打开
OC/Drivers
,可以看到这里有相当多的efi
文件,主要的文件作用如下:-
OpenRuntime.efi
:核心文件,用于启动OpenCore
-
OpenHfsPlus.efi
:开源驱动,用于驱动HFS Plus Driver
,与HfsPlus.efi
相对应,后者为苹果官方的,启动较快。实际上后者在我的电脑上成功使用了,所以我在最后的Drivers
中保留了HfsPlus.efi
-
AudioDxe.efi
:Mac OS
的音频支持 -
OpenCanopy
:启动时的GUI
和音频支持 -
ResetNvramEntry.efi
:允许重置NVRAM
-
-
我在最后的
Drivers
保留了以上五个文件,实际上最重要的只有OpenRuntime.efi
和OpenHfsPlus.efi
,其它的全部删除(当然如果你的电脑需要自然可以按需添加)
配置Kexts
-
Kexts
包含黑苹果系统中最主要的驱动,我们在这里下载必需的驱动:-
Lilu.kext:所有额外驱动的基础,有了它其它驱动才能正常工作
-
AppleALC.kext:一个开源的内核扩展,为非官方的声卡提供支持的
Codec
,无需修改任何系统文件,即可启用原生的macOS HD
音频,AppleALCU
可用于具有纯数字音频的系统。 -
VirtualSMC:高级的
Apple SMC
核心模拟。 需要 Lilu 作为依赖以正常工作 -
WhateverGreen:提供黑苹果的
GPU
支持
-
-
其余的
Kexts
按需配置,在上面提到过的网站中会对剩下的驱动作详细的介绍,可以点击Gathering files | OpenCore Install Guide来查看,里面提供了更多Kexts
的直达下载地址 -
我最后配置完的
Kexts
文件夹如下所示
配置ACPI
-
这就是为什么我最后选择了找别人配置好的
EFI
的原因,这里需要根据自己的电脑找到相应的SSDT
,当然可以选择自己编译或使用别人已经编译好的文件。在OpenCore
文件夹下的Docs
中提供了一部分可用的文件,我们需要根据下表将对应的文件放入ACPI
文件夹中 -
台式机:
Platforms | CPU | EC | AWAC | NVRAM | USB |
---|---|---|---|---|---|
Penryn | N/A | SSDT-EC | N/A | N/A | N/A |
Lynnfield and Clarkdale | |||||
SandyBridge | CPU-PM (opens new window) (Run in Post-Install) | ||||
Ivy Bridge | |||||
Haswell | SSDT-PLUG | ||||
Broadwell | |||||
Skylake | SSDT-EC-USBX | ||||
Kaby Lake | |||||
Coffee Lake | SSDT-AWAC | SSDT-PMC | |||
Comet Lake | N/A | SSDT-RHUB | |||
AMD (15/16h) | N/A | N/A | N/A | ||
AMD (17h) | SSDT-CPUR for B550 and A520 (opens new window) |
- 高端桌面平台:
Platforms | CPU | EC | RTC | PCI |
---|---|---|---|---|
Nehalem and Westmere | N/A | SSDT-EC | N/A | N/A |
Sandy Bridge-E | SSDT-UNC | |||
Ivy Bridge-E | ||||
Haswell-E | SSDT-PLUG | SSDT-EC-USBX | SSDT-RTC0-RANGE | |
Broadwell-E | ||||
Skylake-X | N/A |
- 笔记本:
Platforms | CPU | EC | Backlight | I2C Trackpad | AWAC | USB | IRQ |
---|---|---|---|---|---|---|---|
Clarksfield and Arrandale | N/A | SSDT-EC | SSDT-PNLF | N/A | N/A | N/A | IRQ SSDT |
SandyBridge | CPU-PM (opens new window) (Run in Post-Install) | ||||||
Ivy Bridge | |||||||
Haswell | SSDT-PLUG | SSDT-XOSI/SSDT-GPI0 (Run in Post-Install) | |||||
Broadwell | |||||||
Skylake | SSDT-EC-USBX | N/A | |||||
Kaby Lake | |||||||
Coffee Lake (8th Gen) and Whiskey Lake | SSDT-AWAC | ||||||
Coffee Lake (9th Gen) | |||||||
Comet Lake | |||||||
Ice Lake | SSDT-RHUB |
- 续表:
Platforms | NVRAM | IMEI |
---|---|---|
Clarksfield and Arrandale | N/A | N/A |
Sandy Bridge | SSDT-IMEI | |
Ivy Bridge | ||
Haswell | N/A | |
Broadwell | ||
Skylake | ||
Kaby Lake | ||
Coffee Lake (8th Gen) and Whiskey Lake | ||
Coffee Lake (9th Gen) | SSDT-PMC | |
Comet Lake | N/A | |
Ice Lake |
- 我最后的
ACPI
文件夹如下所示:
配置config.plist
- 将
Docs
下的Simple.plist
复制到X64/EFI/OC/
下,改名为config.plist
。我们用ProperTree
打开这个文件,点击File/OC clean snapshot
,在出现的弹窗中点击选择,对我们已经作的更改进行保存。我们每次对以上的文件夹中的内容进行更改,都要如此进行保存。
-
config.plist
各个选项的配置我不过多介绍,在上面提到的教程中Config
一栏有针对不同平台的配置介绍 -
AMD
需要使用NootedRed.kext
作为核显驱动,而在安装时这个驱动不能使用,所以在最后的config.plist
中,我还进行了一点小修改:-
找到
NootedRed.kext
,设为False
-
找到
SecureBootMode
,设为Disabled
。如果设为Default
在安装完成后会无法重启 -
找到
ScanPolicy
:设为0
-
找到
Vault
:设为Optional
-
最后
- 将这个
EFI
文件夹放在U盘
的EFI
分区下。如果你不知道如何建立EFI
分区,可以查看目录转到系统安装完成后的EFI
建立部分,二者原理类似。
硬盘分区
- 我们要为安装的黑苹果分配硬盘空间
- 在资源管理器中右键此电脑,点击管理
- 在磁盘管理中找到我们希望系统安装在的硬盘,右键想要进行压缩的分区,输入压缩空间量的大小,最后分区被分出来的大小就是我们输入的大小。我想为最后的系统分配
200G
的空间,所以输入20480
。
-
压缩后我们可以看到分区旁边多了一个未分配的分区,右键这个分区,点击新建简单卷,一路下一步,在选择分区的文件系统时选择
FAT32
或者exFAT
。这一步的目的是为了安装时MacOS
能识别到这个分区。 -
好了,现在一切准备就绪,重启电脑。
系统安装
- 拯救者在重启时按下
F12
能改变启动顺序,其它电脑请自行百度。我们在启动顺序页面选中我们的U盘
,进入OpenCore
引导页面后,选择Install MacOS Sonoma 14
,由于实机安装的页面无法截图,这里我用虚拟机表示大概过程。
-
在磁盘工具里找到之前分好的系统安装的位置,名称随便取(最好是全英文),格式选择
APFS
,选择抹掉 -
抹除成功后,返回刚刚的页面,选择安装macOS Sonoma,一路继续
-
安装过程中会多次重启,如果先前的
NootedRed.kext
和SecureBootMode
没有关闭,重启后一直黑屏,如果发现有这样的问题,需要在Windows
下将这两个关闭
安装完成后
-
安装后的系统使用的是U盘进行引导,我们还需要将
EFI
文件夹转移到硬盘的EFI
分区中 -
使用先前提到过的方法,在磁盘管理中再空出大概
500MB
的空间,分区格式选为exFAT
或者FAT32
,作为EFI
分区, -
回到
Windows
,打开Diskgenius
,找到建立ESP/MSR分区,确定,将U盘中的EFI
文件夹移动到这个分区里
- 打开
EasyUEFI
,选择管理EFI启动项
- 在中间列表选择添加
- 选择Linux或其它操作系统,选中刚刚分好的
EFI
分区,点击浏览文件
找到OpenCore.efi
,一路确定,将Mac OS
启动项上升至第一个
- 至此,完成双系统
EFI
的设置
其它
-
在装机过程中禁掉的
NootedRed.kext
记得安装完成后使其变为True
,不然没有驱动的系统会很卡,且无法正常显示 -
如果配置完所有的东西后,无法进入系统,卡在跑代码界面,多是驱动不兼容,或
config.plist
需要额外配置,耐心些在网上多搜索,一定会有答案 -
驱动的适配非常重要,要注意最新驱动兼容的系统
Flutter 开发环境配置
Flutter安装
-
Flutter
官网更推荐使用VS Code
安装SDK
,但需要打开新Flutter
项目或打开已有Flutter
项目才会弹出安装Flutter
的提示,我比较喜欢直接安装 -
下载的安装包直接解压到用户目录下,将
flutter
的运行目录添加到环境变量中
echo "export PATH=$HOME/flutter/bin:$PATH" >> ~/.zshrc
Xcode安装
-
Xcode
可以直接在App Store
中获取,安装完成后,会让你勾选想要开发的平台。因为Flutter
只需要用到IOS
,勾选IOS
和Mac
即可 -
安装完成后要对
Xcode
进行配置
sudo sh -c 'xcode-select -s /Applications/Xcode.app/Contents/Developer && xcodebuild -runFirstLaunch'
- (如果需要)还可以签署
Xcode
许可协议
sudo xcodebuild -license
- 如果错过了模拟器的安装,或者想通过命令行下载,可以运行以下命令:
xcodebuild -downloadPlatform iOS
- 还要安装
CLI for xcode
xcode-select --install
- 可以通过以下命令启动模拟器:
open -a Simulator
- 想检查可用的模拟器或设备,可以通过以下命令实现:
flutter devices
flutter emulators
Homebrew 安装
-
Homebrew
是macOS
下相当常用的工具,有了它我们十分方便地安装软件 -
我们可以使用清华大学的镜像站使得安装更为快速:homebrew | 镜像站使用帮助 | 清华大学开源软件镜像站 | Tsinghua Open Source Mirror
-
在终端中输入:
export HOMEBREW_INSTALL_FROM_API=1
export HOMEBREW_API_DOMAIN="https://mirrors.tuna.tsinghua.edu.cn/homebrew-bottles/api"
export HOMEBREW_BOTTLE_DOMAIN="https://mirrors.tuna.tsinghua.edu.cn/homebrew-bottles"
export HOMEBREW_BREW_GIT_REMOTE="https://mirrors.tuna.tsinghua.edu.cn/git/homebrew/brew.git"
export HOMEBREW_CORE_GIT_REMOTE="https://mirrors.tuna.tsinghua.edu.cn/git/homebrew/homebrew-core.git"
- 运行安装脚本:
git clone --depth=1 https://mirrors.tuna.tsinghua.edu.cn/git/homebrew/install.git brew-install
/bin/bash brew-install/install.sh
rm -rf brew-install
- 替换仓库上游:
echo 'export HOMEBREW_BOTTLE_DOMAIN="https://mirrors.tuna.tsinghua.edu.cn/homebrew-bottles"' >> ~/.zprofile
export HOMEBREW_BOTTLE_DOMAIN="https://mirrors.tuna.tsinghua.edu.cn/homebrew-bottles"
export HOMEBREW_CORE_GIT_REMOTE="https://mirrors.tuna.tsinghua.edu.cn/git/homebrew/homebrew-core.git"
for tap in core cask{,-fonts,-versions} command-not-found services; do
brew tap --custom-remote --force-auto-update "homebrew/${tap}" "https://mirrors.tuna.tsinghua.edu.cn/git/homebrew/homebrew-${tap}.git"
done
brew update
Cocoapods 安装
-
macOS
自带的ruby
版本要落后于最新的ruby
版本,如果直接安装会报错 -
我们可以用
Homebrew
先安装较新版的ruby
brew install ruby
# 添加镜像源并移除默认源
gem sources --add https://mirrors.tuna.tsinghua.edu.cn/rubygems/ --remove https://rubygems.org/
# 列出已有源
gem sources -l
# 应该只有镜像源一个
- 安装
cocoapods
sudo gem install -n /usr/local/bin cocoapods
- 使用
pod
命令看看是否安装成功,顺便看看是否可以更新到最新版本
pod setup
pod
的源也需要替换:CocoaPods 镜像使用帮助
$ cd ~/.cocoapods/repos
$ pod repo remove master
$ git clone https://mirrors.tuna.tsinghua.edu.cn/git/CocoaPods/Specs.git master
- 找到
podFile
,在第一行加上
source 'https://mirrors.tuna.tsinghua.edu.cn/git/CocoaPods/Specs.git'
SOCKS 5 代理客户端
- 由于手上的代理只有
Socks 5
一种,且苹果网络中的代理设置比较麻烦,我想要直接打开软件可以用的代理 - 搜寻过后决定使用
Proxifier
,作为一个多端的软件打开即用,非常方便 - 官网指路:Proxifier
- 下载后输入激活码:
- V2:
P427L-9Y552-5433E-8DSR3-58Z68
- V3:
3CWNN-WYTP4-SD83W-ASDFR-84KEA