给 iPhone 等平台开发应用,总是需要用到一台苹果电脑的,或者 iMac 或者 rmbp,就算是 mac mini 也行。不过,当开发的项目比较大了,需要的东西多了,比如我吧,虽然做一个小小的输入法,但跑词库跑算法什么的,一趟下来就得一天,搞不好还崩溃重来。每当 Xcode 不争气动不动就白板的时候,我就想——来一台 mac pro 多好。
不过,这个价格有点呵呵。
终于,在 CycleUser 的鼓动和诱惑下,我用他的配方撸了一台黑苹果。
价格一套下来是 8000 rmb,作为对比,我这两年一直用的 rmbp 买的时候是 11000 rmb,这还是算上学生优惠的价格,当然了,买了 apple care。
那么再说说配置,是 64GB ddr4,256 SSD,i7 6700k.
这可是迄今为止我用过的内存最大的电脑了呢!
另外,我的主板是 技嘉 GA-Z170X-UD3 。
值得一提的是,我 ssd 用了 NVMe,所以要做额外的配置才能让 osx 识别出来。
在开始之前,我要先说一下,直到目前为止,不能使用的功能有:
- 麦克风插口无法使用,前后都不行(但播放正常);
- 无法重启,会卡死(但关机正常);
- 主板上那唯一的 USB-C 接口未测试, A口则只能插鼠标用。
好了,接下来,我们就先来准备安装盘。
制作系统盘
你需要一块容量大于 8GB 的 U盘 来制作黑苹果的系统安装盘,我的建议是用一个旧的老 U盘,因为将来你很有可能会用这个 U盘来救急,所以这个U盘一旦做好了,是不应该在用于其他用途的。最好是 USB 2.0,这样你不心疼。我会告诉你反正安装的时候也要插在 USB 2.0 插口上吗?
这里先按照 tonyX86 的教程来走,把启动盘做好。注意先把自己系统语言改为英文,在“系统偏好设置”,的第一行里,“语言与地区”中改,改完会提示你重启,这里不用重启,U盘做好之后改回来就可以了。
这时候你应该已经有了一个能够引导的启动盘,现在我们再来手动给它添加 NVMe 的驱动。
参考大神的帖子:http://www.insanelymac.com/forum/topic/312803-patch-for-using-nvme-under-macos-sierra-is-ready/
我们在 EFI 分区里找到 config.plist 编辑它,记得不要用 Xcode 编辑,用一个文本文档编辑器来编辑即可,找到 <key>KernelAndKextPatches</key> 这个字段,在这个字段里,你应该能找到一个 <key>KextsToPatch</key> 字段,这里边是一个 <array> </array> 数组,那么里边每一个元素是一个 <dict></dict> ,我们就把下面的内容插入到这个 <array> </array> 里即可,注意要在上一个 </dict> 之后,不能把元素嵌套了。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 |
<dict> <key>Comment</key> <string>IONVMeFamily IONameMatch</string> <key>Disabled</key> <false/> <key>Name</key> <string>IONVMeFamily</string> <key>InfoPlistPatch</key> <true/> <key>Find</key> <data>PHN0cmluZz5wY2kxNDRkLGE4MDQ8L3N0cmluZz4=</data> <key>Replace</key> <data>PHN0cmluZz5wY2kxNDRkLGE4MDI8L3N0cmluZz4=</data> </dict> <dict> <key>Comment</key> <string>IONVMeFamily Pike R. Alpha Patch#1</string> <key>Disabled</key> <false/> <key>Name</key> <string>IONVMeFamily</string> <key>Find</key> <data>ibPoAgAAweAMBQAQAACJgw==</data> <key>Replace</key> <data>ibPoAgAAweAJBQAQAACJgw==</data> </dict> <dict> <key>Comment</key> <string>IONVMeFamily Pike R. Alpha Patch#2</string> <key>Disabled</key> <false/> <key>Name</key> <string>IONVMeFamily</string> <key>Find</key> <data>D7aMiIIAAACD+QwPhTIBAA==</data> <key>Replace</key> <data>D7aMiIIAAACD+QkPhTIBAA==</data> </dict> <dict> <key>Comment</key> <string>IONVMeFamily Pike R. Alpha Patch#3</string> <key>Disabled</key> <false/> <key>Name</key> <string>IONVMeFamily</string> <key>Find</key> <data>AMeDpAAAAAAQAABIi0gISA==</data> <key>Replace</key> <data>AMeDpAAAAAACAABIi0gISA==</data> </dict> <dict> <key>Comment</key> <string>IONVMeFamily Pike R. Alpha Patch#4</string> <key>Disabled</key> <false/> <key>Name</key> <string>IONVMeFamily</string> <key>Find</key> <data>SYnGTYX2dGFBwecMSWP/vg==</data> <key>Replace</key> <data>SYnGTYX2dGFBwecJSWP/vg==</data> </dict> <dict> <key>Comment</key> <string>IONVMeFamily Pike R. Alpha Patch#5</string> <key>Disabled</key> <false/> <key>Name</key> <string>IONVMeFamily</string> <key>Find</key> <data>hv8PAABIwegMD7cPgeH/Dw==</data> <key>Replace</key> <data>hv8PAABIwegJD7cPgeH/Dw==</data> </dict> <dict> <key>Comment</key> <string>IONVMeFamily Pike R. Alpha Patch#6_7</string> <key>Disabled</key> <false/> <key>Name</key> <string>IONVMeFamily</string> <key>Find</key> <data>icGB4f8PAABIAdFIgfn/DwAAdzs=</data> <key>Replace</key> <data>icGB4f8BAABIAdFIgfn/AQAAdzs=</data> </dict> <dict> <key>Comment</key> <string>IONVMeFamily Pike R. Alpha Patch#8</string> <key>Disabled</key> <false/> <key>Name</key> <string>IONVMeFamily</string> <key>Find</key> <data>SYHF/w8AAEnB7QxJiwQkSA==</data> <key>Replace</key> <data>SYHF/w8AAEnB7QlJiwQkSA==</data> </dict> <dict> <key>Comment</key> <string>IONVMeFamily Pike R. Alpha Patch#9_10</string> <key>Disabled</key> <false/> <key>Name</key> <string>IONVMeFamily</string> <key>Find</key> <data>BgIAAEyNuAAQAABMiflIgeEA8P//SYmGGgEAAEmJjiIBAABBvAAQAABJKfQ=</data> <key>Replace</key> <data>BgIAAEyNuAACAABMiflIgeEA8P//SYmGGgEAAEmJjiIBAABBvAACAABJKfQ=</data> </dict> <dict> <key>Comment</key> <string>IONVMeFamily Pike R. Alpha Patch#11</string> <key>Disabled</key> <false/> <key>Name</key> <string>IONVMeFamily</string> <key>Find</key> <data>AABJiY4iAQAAugAQAABIKQ==</data> <key>Replace</key> <data>AABJiY4iAQAAugACAABIKQ==</data> </dict> <dict> <key>Comment</key> <string>IONVMeFamily Pike R. Alpha Patch#12</string> <key>Disabled</key> <false/> <key>Name</key> <string>IONVMeFamily</string> <key>Find</key> <data>yAAAAEkp17gAEAAATYskJA==</data> <key>Replace</key> <data>yAAAAEkp17gAAgAATYskJA==</data> </dict> <dict> <key>Comment</key> <string>IONVMeFamily Pike R. Alpha Patch#13</string> <key>Disabled</key> <false/> <key>Name</key> <string>IONVMeFamily</string> <key>Find</key> <data>4b+AQBUGTYnWugAQAABFMQ==</data> <key>Replace</key> <data>4b+AQBUGTYnWugACAABFMQ==</data> </dict> <dict> <key>Comment</key> <string>IONVMeFamily Pike R. Alpha Patch#14</string> <key>Disabled</key> <false/> <key>Name</key> <string>IONVMeFamily</string> <key>Find</key> <data>iWTY+EmBxAAQAABJgccA8A==</data> <key>Replace</key> <data>iWTY+EmBxAACAABJgccA8A==</data> </dict> <dict> <key>Comment</key> <string>IONVMeFamily Pike R. Alpha Patch#15</string> <key>Disabled</key> <false/> <key>Name</key> <string>IONVMeFamily</string> <key>Find</key> <data>Bf8PAABIwegMZvfB/w8PlQ==</data> <key>Replace</key> <data>Bf8PAABIwegJZvfB/w8PlQ==</data> </dict> <dict> <key>Comment</key> <string>IONVMeFamily Pike R. Alpha Patch#16</string> <key>Disabled</key> <false/> <key>Name</key> <string>IONVMeFamily</string> <key>Find</key> <data>weIIQQ+2wcHgDEQJ0EQJwA==</data> <key>Replace</key> <data>weIIQQ+2wcHgCUQJ0EQJwA==</data> </dict> <dict> <key>Comment</key> <string>IONVMeFamily Pike R. Alpha Patch#17</string> <key>Disabled</key> <false/> <key>Name</key> <string>IONVMeFamily</string> <key>Find</key> <data>RYTJD5XAD7bAweAMRAnYRA==</data> <key>Replace</key> <data>RYTJD5XAD7bAweAJRAnYRA==</data> </dict> |
然后,拷贝驱动文件到 EFI -> CLOVER -> kexts -> Other 目录中。
这下你就可以用它来引导启动黑苹果了。
调整主板配置
要调整主板的配置来更好的兼容 osx,如果你设置不好,那么肯定是不能成功引导的(最好用默认的英文,不然你可能找不对对应的开关):
- In BIOS Features
- Fast Boot: Disabled
- Windows 8/10 Fatures: Windows 8/10
- CSM Support: Enabled
- In Peripherals:
- Intel Platform Trust Technology: Disabled
- Initial Display Output: PCIe 1 Slot (Or whatever slot your GFX is in)
- Legacy USB Support: Enabled
- XHCI Hand-off: Enabled
- Port 60/64 Emulation: Disabled
- In Super IO Configuration:
- Serial Port 1: Disabled
- In Chipset:
- VT-d: Disabled
- Internal Graphics: Enabled
- Audio Controller: Enabled
- PCH LAN Controller: Enabled
- IOAPIC 24-119 Entries: Enabled
这里我用的是 CPU 集成显卡,所以 Internal Graphics 要启用,不能关闭,关了就没了。还有不能选择为 auto,选择为 auto 也无法点亮的哦!
这是我遇到的第一个坑
安装驱动
设置好了之后你就可以进入安装界面了,开开心心地安装吧!装好之后会重启,不要拔下 U盘,引导还得靠它,回到四叶草的启动界面后选择为你刚装好的硬盘启动,继续完成 10.12.4 的安装过程。
安装完成后,你就可以把U盘里的 EFI 分区整体复制到硬盘的EFI分区了,你可能需要这个工具来挂载 EFI 分区。
复制过去之后,记得删除硬盘 EFI 分区中 EFI -> CLOVER -> kexts -> Other 目录下的那个驱动文件,还记得文件名吗?叫 IONVMeFamily.kext ,它已经被安装到你的系统中了,就不需要这里再有了。
一切都完成后,就可以开始打驱动了,这里要注意,先确定你的电脑插着网线,或者如果驱动没有,要先调整时间,不然驱动验证不通过是无法打驱动的!
这是我遇到的第二个坑
用事先你根据教程放入U盘备用的 MultiBeast 来安装驱动,不要选择快速开始模式:
- Quick Start
- none 啥都不选
- Drivers
- Audio
- ALC 1150
- 100 / 200 Series Audio
- Misc
- FakeSMC
- FakeSMC
- FakeSMC
- Network
- IntelMausiEthernet v2.2.0
- Audio
- Bootloaders
- 啥都不选
- Customize
- Graphics Configurations
- Intel HD 5xx
- System Definitions
- iMac 17,1
- Graphics Configurations
这样选择 Build -> Install 即可。
安装完成后你就可以拔掉 U盘 启动进系统了!
配置硬件信息
进入系统后,使用 clover configurator,先挂载你硬盘的 EFI 分区,然后用它打开你 EFI 分区里的 config.plist
在左侧选择“SMBIOS”,在右侧点那个魔法棒,选择生成你的系统参数,注意不要选择 Mac Pro 系列,选择 iMac,比如我就是 iMac 17,1,因为这个的 CPU 和我的是一样的。
然后在右侧有两个“shake”按钮,多按几次,生成一个随机的值用来生成你的序列号。
然后点 ok 即可。
配置好后,你还需要添加内存信息,修改为你内存的真实数据(不带星号的字段可以留空),不然内存识别会有问题。都设置完成后关闭退出。
重启后,你的内存和CPU识别应该就也正常了。
最后,值得一提的是,音响插后面要插黑孔,也就是我们平时用的后置音响的那个插孔,输出选择为“线路输出”,插机箱前插口的话,则输出选为内置音箱。虽然有点麻烦,但至少是能用的。如果你使用外置声卡,那就随意了。
另:
网上盛传的两个修复重启问题的驱动(OpenHaltRestart.kext或EvOreboot.kext),都不要使用,不然就祈祷你没有格式化那个启动U盘吧。
Enjoy
至此,黑果顺利安装完成,后续如果有什么其他进展,我会继续更新这篇文章。 :)
祝开发愉快没有bug。
本文由 落格博客 原创撰写:落格博客 » 攒一台用来做开发的 黑苹果 hackintosh
转载请保留出处和原文链接:https://www.logcg.com/archives/2729.html
以前黑蘋果還蠻簡單的,後來越來越麻煩,到了2011年之後還是買白蘋果,省事。
ps. 這網站有內涵,不可多得的好站。
Nice,很赞!
准备入个itx装黑果,一直在爬配置,嘿嘿
tonyx86上的配置很多啊,记得要买典型的不能图新,不然遇到问题很烦人。
怪圈就是按照tonymacx86的方案,还是担心会出现睡眠和音量问题。
嗯……音量我这边没什么问题,板载声卡正常……麦克风无效。
睡眠的话……我7×24小时开机,不需要这个功能哈哈。