Windows上的Unity iOS:使用VMWare从Windows机器上的Unity编辑器中部署到iPhone

这是在Windows计算机上开发Unity iOS应用程序的帮助。 使用VMWare,可以在本地虚拟机上运行Shell脚本,以自动完成通过USB将Unity应用程序从编辑器部署到iPhone的整个过程。 该过程是单击等待的过程,每个构建大约需要5分钟。 本文提出了一些组件来管理自动化。

注意 :这是“穷人”的方法,如果您一开始只能购买Macbook,从长远来看可能会浪费您的资源。 另外,在完全提交之前,请通读并做您自己的研究,因为可能存在一些硬件要求。

免责声明 :在非Apple硬件上运行任何macOS均违反Apple EULA。 请确认风险,并自行承担责任。

系统总览

Shell脚本在Windows和VM macOS都具有读/写访问权限的目录中监视非常简单的时间戳文件。 每当Unity Editor将项目组合到文件夹中时,C#后处理脚本都会在文件中设置标志。 然后在VM中,shell脚本将检测该标志,构建/部署项目并折叠该标志。

因此,只要脚本在VM上运行,用户就可以在Unity Editor中按下“构建”按钮,并免提等待,直到iPhone自动打开应用程序。

设置共享文件夹

共享文件夹是VMWare用来访问主机文件系统的功能。 该文件夹将容纳并启用Unity Editor和Shell脚本之间的通信。

  • 使用共享文件夹
    https://www.vmware.com/support/ws5/doc/ws_running_shared_folders.html

设置xcodebuild

要通过shell脚本构建XCode项目,有一个名为xcodebuild的命令行工具。 这应该与XCode应用捆绑在一起。

设置ios部署

xcodebuild没有可以部署到设备上的功能,但是还有另一个名为ios-deploy工具可以这样做。 此外,iPhone还需要通过USB连接到计算机并路由到VM。

  • ios部署
    https://github.com/ios-control/ios-deploy
  • 连接USB设备
    https://www.vmware.com/support/ws55/doc/ws_devices_usb_connect.html

设置Unity C#后处理脚本

构建完成后,将调用带有[PostProcessBuild]属性标记的静态方法。 对于时间戳文件的格式,脚本可以是这样的:

每当用户单击“生成”按钮时,Unity编辑器都会将项目编译为XCode项目,然后此脚本将更新时间戳。

构建路径必须设置为共享文件夹内部。

设置Shell脚本

这是整个脚本,随后是一些重要内容的深入介绍。

该脚本可以设置为登录项,以便它自动开始运行。 可以通过关闭终端窗口来中止该过程。

在脚本中可以更改的共享文件夹名为__transfer_ ,以及项目名称( MyProject )和应用程序名称( foo.app )。 这些名称必须与Unity Editor中的构建设置匹配。

默认情况下,诸如cdcp类的命令无法在“共享文件夹”(“无此文件或目录”)内部访问。 因此,该脚本会在执行任何其他命令之前先将其安装在本地驱动器中:

  mkdir -p  
sudo mount -t vmhgfs .host:/

同样,无论安装如何,XCode都不能在共享文件夹中构建。 因此,该脚本通过将项目复制到桌面并在桌面上构建来解决该问题。

Unity项目的文件名具有特定格式,因此可以对诸如项目/目标名称的某些参数进行硬编码。 此命令将开始构建,打印出所有日志并将产品保存在build目录中:

  cd  
xcodebuild -project Unity-iPhone.xcodeproj \
-target Unity-iPhone \
-配置调试版本

最后,脚本将通过USB将构建部署到连接的iPhone:

  cd  / build / debug-iphoneos 
ios-deploy --uninstall-非交互式--debug --bundle foo.app

只要Windows和iPhone连接到同一WiFi,Unity的远程探查器功能就可以工作。 用户还可以使用ios-deploy打印到终端的运行时日志。

完成所有设置后,用户可以在Unity完成在共享文件夹中的项目编写后,在Unity Editor中按下“构建”按钮,并观察shell脚本对此的反应。 然后,脚本将开始构建并部署到连接的iPhone。 一旦应用程序关闭或在设备上崩溃,该脚本将返回主循环。

结论

因此,这是在Windows上运行Unity iOS应用程序的自动构建和部署系统的概念和示例代码。