纯血Windows如何靠白嫖构建Unity应用ipa

  • ~2.70K 字
  1. 1. 概述
    1. 1.1. 免费
    2. 1.2. 无需Mac
  2. 2. 事前准备
  3. 3. codemagic.yaml
  4. 4. 构建你的应用
  5. 5. 尾声

本文章记录我探索的一个无需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
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
workflows:
xcode-lfs-workflow:
name: Xcode LFS 混合构建
instance_type: mac_mini_m2
max_build_duration: 30
scripts:
- name: 验证 LFS 文件
script: |
# 检查最大的二进制库是否已从指针转为真实文件
ls -lh ./Libraries/libiPhone-lib.a

- name: Xcode 编译
script: |
xcodebuild build \
-project "Unity-iPhone.xcodeproj" \
-scheme "Unity-iPhone" \
-configuration Release \
-sdk iphoneos \
CODE_SIGNING_ALLOWED=NO \
CODE_SIGNING_REQUIRED=NO \
CODE_SIGN_IDENTITY="" \
AD_HOC_CODE_SIGNING_ALLOWED=YES

- name: 打包 IPA
script: |
APP_DIR=$(find ~/Library/Developer/Xcode/DerivedData -name "*.app" | grep "Release-iphoneos" | head -n 1)
mkdir -p Payload
cp -r "$APP_DIR" Payload/
zip -r Final_Build.ipa Payload
artifacts:
- "*.ipa"

构建你的应用

一切准备就绪后,在Codemagic上注册账号,会进入“创建第一个应用”的引导页面,跟着步骤走,填之前创建的仓库的url即可,根据仓库可见性可能需要配置一下SSH密钥。你甚至不需要管任何的环境变量,就是非常简单。

codemagic1.jpg

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

codemagic2.jpg

尾声

可以看到这种方法其实不仅仅适用于Unity应用,只要你有iOS源工程都是可以用这套流程变成ipa的,不过我也没用过Mac不知道其他的工程长什么样所以就不介绍了。

这么总结下来好像看着还挺简单的,但是我当初探索这套流程真的花了整整一天。网上似乎也没有类似的文章,所以就做个记录吧。

赞助喵
非常感谢您的喜欢!
赞助喵
分享这一刻
让朋友们也来瞅瞅!