bithulu's blog

Posted Tue, 25 Jul 2023

Apple Silicon mac上创建 Mac虚拟机用于调试、测试等

创建虚拟机

虽然可以使用swift代码直接创建,但是建议直接使用第三方app实现。 这里使用免费开源的应用 UTM (github上下载是免费的,app store上下载是收费的。) 说明:UTM默认是创建的vm在 sandbox里面的,可以后面再移动位置。 创建Mac VM需要 ipsw ,在这里下载即可: https://ipsw.me/Macmini9,1 (已经存档了下好的macOS12的Universal ipsw)

感受:virtualization framework方式的Mac虚拟机虽然可定制化不高,但是非常流畅靠谱。

特别要注意的是: Apple Virtual Mac目前是不支持Apple Id登录的,至少我的情况是这样的,所有与之有关的功能都不能正常使用,比如 iCloud,App Store , TestFlight等等。

解决app签名问题

光有虚拟机是不行了,把在host上编译的app 拷贝到虚拟机上会报签名错误:(控制台里面可以看到)

Provisioning Profile Validation: profile '...' is not provisioned for this device (<private>)

按下面两个步骤解决签名问题。

注册设备

https://developer.apple.com/account/resources/devices/add

注册界面的device name随便你起,比如: VirtualMac_macOS12_UTM ,后面可以修改。 UDID填写 system report里面的 Provisioning UDID,一定不要搞错了。

  Model Name:    Apple Virtual Machine 1
  Model Identifier:    VirtualMac2,1
  Chip:    Apple M2 Pro (Virtual)
  Total Number of Cores:    4
  Memory:    4 GB
  System Firmware Version:    7459.141.1
  OS Loader Version:    7459.141.1
  Serial Number (system):    ...
  Hardware UUID:    ...
  Provisioning UDID:    ...
  Activation Lock Status:    Disabled

Update ProvisioningProfile

注册设备之后,需要更新Provisioning Profile后,把重新编译的应用copy到目标设备上运行时才会通过签名校验。

点击 Xcode Managed Profile旁边的 info icon,弹出窗口的里面文件图标拖到 Terminal 里面可以看到路径,直接删除该文件Xcode就会自动更新Profile。

其他:

如何拷贝文件到 VirtualMac? VirtualMac开启 FileSharing(就是smb)就行。 文件共享方式需要vm是macOS13。

如何测试x86_64应用? 使用rosetta 就行了:

$ arch -arch x86_64 ... 

xcode也可以直接编译运行到rosetta目标。

编译出来的x86_64 app直接拷贝到 Virtual mac上以rosetta运行。

Category: 开发
Tags: 虚拟机 macOS virtualization