本文章记录我探索的一个无需MacOS构建Unity应用ipa的比较简单的免费方案。该方案有以下特点:
- 无需MacOS设备,无需苹果开发者账号,无需Unity Plus,无需任何费用
- 不适合频繁进行构建
- 只能生成无签名的ipa文件,即需要用Sideloadly等方式进行自签名
如果以上你能够接受,那么可以看看接下来的内容。
概述
构建ipa之所以会成为一个问题,主要还是为了实现两个目的:免费和无需Mac。
免费
这个问题了解了ipa的构造后就很容易解决。ipa本质上也就是一个zip压缩包,里面的Payload文件夹就包含了应用程序本身的全部内容,而与Payload同级的大概就是签名相关的一些东西。Xcode中有构建成.app文件(实际上是一个文件夹,但在Mac上看起来就像一个文件)的选项,而这个文件就是应用程序的全部内容,把它移动到Payload文件夹里,再把Payload压缩成zip,这就是一个没有签名信息的ipa了,就可以直接Sideloadly了。
无需Mac
把源代码打包成.app文件的过程几乎必须在MacOS系统上才能完成,所以纯血Windows要打包无非两种选择:虚拟机和云服务。因为我的电脑存储捉急不支持我建虚拟机,所以下文将选择后者,并且其实很方便。
事前准备
我选择的云服务平台是Codemagic,也没什么原因,就是问AI问出来的然后发现确实挺好用的。Codemagic是一个专注于移动端应用CI/CD的平台,自然也包括Unity。它的一大优势就在于它为免费用户提供每月500分钟的免费构建时长,对我的玩具小项目来说是很够用了。
Codemagic的常规操作是拉取仓库里的源代码进行构建,这很正常,CI/CD就是这样的。但对本文来说这种方法行不通,看了Codemagic的官方文档就会发现,这种方法必须要求你有Unity的账户序列号,而免费License是没有序列号的,这就与我们的免费目标相悖了。
好在这个平台的灵活度还是很高的,所以我们采取更直接的做法:在本地设备上导出Unity iOS源工程,让Codemagic直接拉取导出后的工程来打包。
为了实现这一点,需要另外在github(或其他任何代码托管平台)上开一个仓库专门用来存储导出后的iOS源工程,由于导出的内容包含一些比较大的文件,请善用git LFS。免费github账户对LFS倒是也有限制,不过对我来说这个限制也是完全够用了。
这里面还有一些稍微有点麻烦的事情,比如Unity导出iOS工程时会清除目标文件夹下原有的内容,这就意味着你得先把.git等东西移走,导出完再移回来。可以在项目里写一个实现IPreprocessBuildWithReport / IPostprocessBuildWithReport接口的构建脚本来自动化这个过程。
codemagic.yaml
为了让Codemagic知道要如何构建导出的东西,需要在仓库的根目录添加一个codemagic.yaml文件。这个文件的内容是固定的,这里给出一个可以用的版本,可以直接照抄,也可以自己到平台官网上参考具体语法。
1 | workflows: |
构建你的应用
一切准备就绪后,在Codemagic上注册账号,会进入“创建第一个应用”的引导页面,跟着步骤走,填之前创建的仓库的url即可,根据仓库可见性可能需要配置一下SSH密钥。你甚至不需要管任何的环境变量,就是非常简单。

点击Start New Build,Codemagic就会在你的仓库中寻找根目录下有codemagic.yaml的分支,再点一次Start New Build,然后看着Codemagic把脚本一步步执行完,最后收获ipa即可。

尾声
可以看到这种方法其实不仅仅适用于Unity应用,只要你有iOS源工程都是可以用这套流程变成ipa的,不过我也没用过Mac不知道其他的工程长什么样所以就不介绍了。
这么总结下来好像看着还挺简单的,但是我当初探索这套流程真的花了整整一天。网上似乎也没有类似的文章,所以就做个记录吧。