当项目进入稳定迭代阶段,很多团队都会把构建流程放进 CI,例如 Jenkins、GitHub Actions 或 GitLab CI。编译 IPA、运行测试、生成构建产物都可以自动完成。但如果需要在发布前做代码混淆或资源处理,图形界面工具就会显得有些不方便。
我在维护一个长期更新的 iOS 项目时遇到过类似问题:每次构建完成后,都需要对 IPA 进行一次混淆处理。如果完全依赖界面操作,就意味着要人工导入 IPA、选择符号、再导出结果。几次之后就会发现,这一步完全可以放进自动化脚本里。
Ipa Guard 的命令行版本正好适合这种场景。它把 IPA 解析、符号混淆、资源处理这些步骤拆成可以调用的命令,同时还能输出符号映射文件,方便排查崩溃问题。下面记录一套实际操作流程。
一、准备待处理的 IPA
CI 构建完成后会生成一个 Release IPA,例如:
bash
build/game.ipa
这就是后续混淆操作的输入文件。
在开始处理前,可以简单检查一下包内结构:
unzip game.ipa
确认 Payload 中包含应用二进制与资源目录即可。之后重新打包,保持原始 IPA 作为备份。
二、导出可混淆符号列表
Ipa Guard 命令行工具的第一步是解析 IPA,提取可修改符号。
执行命令:
ipaguard_cli parse game.ipa -o sym.json
执行完成后会生成一个 sym.json 文件。
这个文件的作用很直接:列出 IPA 中可以被混淆的符号,例如类名、方法名或变量名,并附带相关引用信息。
打开文件后可以看到类似结构:
json
{
"confuse": true,
"name": "_isPreTTS",
"refactorName": "_isPreTTS",
"types": ["oc_method_name"]
}
name 是原始符号名, refactorName 用于填写混淆后的名称。
三、根据项目情况调整符号文件
这一步比较关键,因为它决定哪些符号会被修改。
编辑 sym.json 时需要注意两件事:
1. refactorName 长度要保持一致
某些二进制符号长度变化可能影响结构,因此建议保持长度不变。
例如:
_isPreTTS
可以改为:
_a1b2c3d4
字符数量一致即可。
2. 不适合混淆的符号需要关闭
例如下面这个方法:
makefile
addEventListener:
如果 JS 或 H5 模块中通过字符串调用它,修改后可能导致运行失败。
可以把:
json
"confuse": true
改成:
json
"confuse": false
sym.json 中的 fileReferences 字段可以帮助判断某个符号是否在脚本或资源文件中被引用。
四、使用符号文件执行混淆
完成符号文件修改后,就可以执行 IPA 混淆。
示例命令:
css
ipaguard_cli protect game.ipa -c sym.json --image --js -o confused.ipa --email ipaguard@gmail.com
参数含义:
-c sym.json指定符号配置文件--image修改图片 MD5--js混淆 JS 资源-o confused.ipa输出文件--email登录账号
执行后会生成新的 IPA,例如:
confused.ipa
此时包内的符号和资源已经完成处理。
五、对混淆后的 IPA 进行签名
由于混淆修改了 IPA 内容,原有签名已经失效。
需要重新签名才能安装到设备。
可以使用签名工具,例如 kxsign:
diff
kxsign sign confused.ipa \
-c cert.p12 \
-p certpassword \
-m dev.mobileprovision \
-z test.ipa \
-i
参数说明:
-c证书文件-p证书密码-m描述文件-z输出 IPA-i安装到设备
如果连接了测试手机,命令执行完成后会自动安装。
六、设备测试与崩溃排查
混淆后的版本一定要运行一遍完整流程,例如:
- 登录
- 支付
- 页面加载
- H5 模块调用
如果发生崩溃,可以借助 Ipa Guard 生成的符号映射文件查找原始函数名。
映射文件会记录:
混淆前符号
混淆后符号
这样在 Crash 日志中看到混淆名称时,仍然可以找到对应代码位置。
七、将混淆步骤接入 CI
当流程稳定后,可以写一个简单脚本:
r
build ipa
ipaguard_cli parse
edit sym.json
ipaguard_cli protect
kxsign sign
在 Jenkins 或 GitHub Actions 中执行即可。
这样每次构建完成都会自动生成混淆后的 IPA。
八、发布阶段的签名
测试通过后,签名流程保持一致,只需要换成发布证书:
diff
kxsign sign confused.ipa \
-c dist.p12 \
-p certpassword \
-m dist.mobileprovision \
-z release.ipa
发布证书生成的 IPA 无法直接安装,但可以上传 App Store。
如果构建环境是 Linux 或 Windows,也可以使用上传工具完成提交。
结尾
将 IPA 混淆接入自动化流程后,发布过程会变得更稳定。符号解析、混淆处理、资源修改和签名测试都可以通过脚本完成,而不是依赖人工操作。