解决Mac虚拟机(VirtualBox)无法登陆Xcode的开发账号问题

问题表现形式

登陆时输入正确的账户和密码,界面一直在loading状态,输入错误的密码会提示密码错误。
与此同时,在网页上可以成功登陆苹果开发者网站,说明不是网络或与服务器连接上出现问题。

出现问题的原因

在登陆app atore 或添加Xcode账户的时候,需要验证apple id。苹果在验证时会检查机器的smbios 信息,如果不是 mac 机器,就不让登录,虚拟机也不行。
进入虚拟机后,点击左上角-关于本机 可查看虚拟机固件情况。
如果是未经修饰的虚拟机,下面序列号等信息都为空

解决办法

在VirtualBox的配置文件中有“ExtraData”部分,可以通过修改配置文件的方法,伪造出虚假的smbios信息。

如何获得虚假的smbios信息

可以通过下载Chameleon-Wizard 软件或者Clover Configurator软件进行配置。
配置方法比较傻瓜,选一个想要的型号,就会自动生成。最后保存为一个plist文件,需要的信息都在里面。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
<ExtraDataItem name="GUI/InformationWindowGeometry" value="0,45,1440,800,max"/>
<ExtraDataItem name="GUI/LastCloseAction" value="PowerOff"/>
<ExtraDataItem name="GUI/LastNormalWindowPosition" value="623,199,512,405"/>
<ExtraDataItem name="GUI/LastScaleWindowPosition" value="400,194,640,480"/>
<ExtraDataItem name="VBoxInternal/Devices/efi/0/Config/DmiBoardProduct" value="Mac-06Fxxxx93F0323C5"/>
<ExtraDataItem name="VBoxInternal/Devices/efi/0/Config/DmiBoardSerial" value="C025xxxx0CDGDQPCB"/>
<ExtraDataItem name="VBoxInternal/Devices/efi/0/Config/DmiSystemFamily" value="MacBook Pro"/>
<ExtraDataItem name="VBoxInternal/Devices/efi/0/Config/DmiSystemProduct" value="MacBookPro11,4"/>
<ExtraDataItem name="VBoxInternal/Devices/efi/0/Config/DmiSystemSerial" value="C02PQ4ZBG8WL"/>
<ExtraDataItem name="VBoxInternal/Devices/efi/0/Config/DmiSystemUuid" value="CAFECAFE-xxxx-CAFE-CAFE-DECAFFDECAFF"/>
<ExtraDataItem name="VBoxInternal/Devices/efi/0/Config/DmiOEMVBoxVer" value="string:1"/>
<ExtraDataItem name="VBoxInternal/Devices/efi/0/Config/DmiOEMVBoxRev=" value="string:.23456"/>
<ExtraDataItem name="VBoxInternal/Devices/efi/0/Config/DmiBIOSVersion" value="MBP114.88Z.F000.B00.1906140921"/>
<ExtraDataItem name="VBoxInternal/Devices/efi/0/Config/DmiBIOSReleaseDate=" value="06/14/2019"/>
<ExtraDataItem name="VBoxInternal/Devices/smc/0/Config/DeviceKey" value="ourhardworkbythesewordsguardedpleasedontsteal(c)AppleComputerInc"/>
<ExtraDataItem name="VBoxInternal/Devices/smc/0/Config/GetKeyFromRealSMC" value="1"/>
<ExtraDataItem name="VBoxInternal2/SharedFoldersEnableSymlinksCreate/vagrant" value="1"/>

通过配置命令修改信息

cd至virtualbox目录下
执行 VBoxManage setextradata "OSName" "VBoxInternal/Devices/efi/0/Config/DmiSystemProduct" "MacBookPro11,3" 修改SystemProduct信息
其他信息类似

在虚拟机已经建立后,这种方法不一定能够成功修改,慎用

通过脚本直接新建虚拟机,在脚本里写上配置参数

此方法参考开源项目macos-guest-virtualbox

具体步骤:

  1. 将工程下载或pull到本地
  2. 升级bash到bash4.0 参考Mac更新bash至4-0以上
  3. 安装依赖 bash coreutils wget unzip dmg2img
  4. 按照前面生成的plist信息修改脚本文件
  5. cd 到目录下运行脚本 $ ./macos-guest-virtualbox.sh
  6. 一路enter,选择一下os版本,然后看提示信息一路enter
    最后虚拟机建立好后,可以看到虚拟机的信息已经跟真机类似了,而且跟我们配置的参数一样,后面xcode的账户果然也可以正常登录

其他问题

vmware虚拟机相同问题

同样的,如果vmware出现相同问题,也可以通过修改配置文件的方法解决,具体参考:
https://www.insanelymac.com/forum/topic/292170-how-to-spoof-real-mac-in-vmware/?page=1
https://www.insanelymac.com/forum/topic/309654-run-vanilla-os-x-el-capitan-sierra-high-sierra-or-mojave-in-virtualbox-5xx-on-a-windows-host/