Bootstrap

拯救者R9000P-2021-AMD5800H 黑苹果安装实录

由于开发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,文件结构如下所示

在这里插入图片描述

屏幕截图 2024-07-23 124546
在这里插入图片描述

  • 到这里基本分为了两个路子,一个是自己配置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.efiMac OS 的音频支持

    • OpenCanopy:启动时的GUI和音频支持

    • ResetNvramEntry.efi:允许重置NVRAM

  • 我在最后的Drivers保留了以上五个文件,实际上最重要的只有OpenRuntime.efiOpenHfsPlus.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文件夹中

  • 台式机:

PlatformsCPUECAWACNVRAMUSB
PenrynN/ASSDT-ECN/AN/AN/A
Lynnfield and Clarkdale
SandyBridgeCPU-PM (opens new window) (Run in Post-Install)
Ivy Bridge
HaswellSSDT-PLUG
Broadwell
SkylakeSSDT-EC-USBX
Kaby Lake
Coffee LakeSSDT-AWACSSDT-PMC
Comet LakeN/ASSDT-RHUB
AMD (15/16h)N/AN/AN/A
AMD (17h)SSDT-CPUR for B550 and A520 (opens new window)
  • 高端桌面平台:
PlatformsCPUECRTCPCI
Nehalem and WestmereN/ASSDT-ECN/AN/A
Sandy Bridge-ESSDT-UNC
Ivy Bridge-E
Haswell-ESSDT-PLUGSSDT-EC-USBXSSDT-RTC0-RANGE
Broadwell-E
Skylake-XN/A
  • 笔记本:
PlatformsCPUECBacklightI2C TrackpadAWACUSBIRQ
Clarksfield and ArrandaleN/ASSDT-ECSSDT-PNLFN/AN/AN/AIRQ SSDT
SandyBridgeCPU-PM (opens new window) (Run in Post-Install)
Ivy Bridge
HaswellSSDT-PLUGSSDT-XOSI/SSDT-GPI0 (Run in Post-Install)
Broadwell
SkylakeSSDT-EC-USBXN/A
Kaby Lake
Coffee Lake (8th Gen) and Whiskey LakeSSDT-AWAC
Coffee Lake (9th Gen)
Comet Lake
Ice LakeSSDT-RHUB
  • 续表:
PlatformsNVRAMIMEI
Clarksfield and ArrandaleN/AN/A
Sandy BridgeSSDT-IMEI
Ivy Bridge
HaswellN/A
Broadwell
Skylake
Kaby Lake
Coffee Lake (8th Gen) and Whiskey Lake
Coffee Lake (9th Gen)SSDT-PMC
Comet LakeN/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,由于实机安装的页面无法截图,这里我用虚拟机表示大概过程。

C:\Users\wu_mi\Desktop\macOS%2014-2024-07-23-14-07-53.png
在这里插入图片描述
在这里插入图片描述

  • 在磁盘工具里找到之前分好的系统安装的位置,名称随便取(最好是全英文),格式选择APFS,选择抹掉

  • 抹除成功后,返回刚刚的页面,选择安装macOS Sonoma,一路继续

  • 安装过程中会多次重启,如果先前的NootedRed.kextSecureBootMode没有关闭,重启后一直黑屏,如果发现有这样的问题,需要在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 官网指路

  • Flutter官网更推荐使用VS Code安装SDK,但需要打开新Flutter项目或打开已有Flutter项目才会弹出安装Flutter的提示,我比较喜欢直接安装

  • 下载的安装包直接解压到用户目录下,将flutter的运行目录添加到环境变量中

echo "export PATH=$HOME/flutter/bin:$PATH" >> ~/.zshrc

Xcode安装

  • Xcode可以直接在App Store中获取,安装完成后,会让你勾选想要开发的平台。因为Flutter只需要用到IOS,勾选IOSMac即可

  • 安装完成后要对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 安装

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
$ 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
;