最近 Xcode9 发布,之前的自动化打包也随之失效了,在咒骂了 Xcode 工具链如何垃圾反人类很多次之后,还是硬着头皮摸索出了解决方案。问题还是要解决的。
最终选择现成的 iOS 打包工具,这个工具最好简单易用,方便部署,于是在网上找了一圈之后,我选择了 Fastlane。
Fastlane
Fastlane 是一个开源免费的自动化打包工具集合,能帮你处理 iOS、Android 的打包、签名等等繁杂的任务。并且方便集成到 Jenkins 这种持续集成平台。
Fastlane 包含很多小工具,比如Sigh 可以帮你管理iOSmobileprovision文件,sert可以帮你管理iOS的签名证书,gym可以帮你进行iOS的自动化打包。这些小工具可以组合使用,以满足不同需求。
Gym
为什么使用 Gym?
使用 Gym 之前:
xcodebuild clean archive -archivePath build/MyApp \
-scheme MyApp
xcodebuild -exportArchive \
-exportFormat ipa \
-archivePath "build/MyApp.xcarchive" \
-exportPath "build/MyApp.ipa" \
-exportProvisioningProfile "ProvisioningProfileName"
使用 Gym:
fastlane gym
Gym 可以非常方便地处理 iOS 的打包细节,它可以生成 xcarchive、生成 ipa 文件、以及生成符号表。
安装 Fastlane/Gym
首先,Fastlane 使用 ruby 开发,所以需要先设置好 ruby 源。Mac 电脑上面的 ruby 默认的源是:https://rubygems.org/,由于政策原因,这个源基本上无法使用,所以需要添加替代的源。好在国内有现成的:https://gems.ruby-china.org/。
# 删除默认的 ruby 源
gem sources --remove https://rubygems.org/
# 添加国内的替代品
gem sources --add https://gems.ruby-china.org/
然后就可以安装 Fastlane 了:
sudo gem install fastlane
安装完毕之后,就可以使用 Gym 了:
cd path/to/xcproject
fastlane gym
如果没有任何参数,Gym 会在当前目录寻找 Xcode 工程,如果找到,它就会开始自动打包。
Gymfile
可以给 Gym 提供一些参数,这些参数放在一个名叫 Gymfile 的文本文件里面。 可以通过一个命令创建初始 Gymfile:
fastlane gym init
下面是一个实际使用的Gymfile:
scheme "Unity-iPhone"
configuration "Release"
output_name "ff"
clean true
include_symbols false
include_bitcode false
skip_build_archive false
# 常用可选值:app-store ad-hoc development
export_method: "development"
# 这个 provisioningProfiles 是 Xcode9 中引入的新概念,每个 bundleId 都必须对应于一个 Provisioning Identity
export_options(
provisioningProfiles: {
"com.aa.bb.ccc" => "iPhone Developer: xxxxx xx (ABCDEFGHIJ12)",
"com.aa.bb.ccc2" => "iPhone Developer: yyyyy yy (KJDHKJFSDHA34)"
}
)
iOS 打包的一些基础设定
首先,iOS 的打包,常用的分为三种类型:
- development 这个表示打一个测试包
- ad-hoc 这个表示打一个测试包,可以用于 TestFlight、可以测试沙盒账号
- app-store 这个是正式包
这三种类型,必须在 Gymfile 中的 export_method 中明确指定,并且打包用的 mobileProvision 文件也必须和这个选项一一对应,否则打包一定失败。
其次,如果是 Xcode9,那么必须在 Gymfile 中设定好 provisioningProfiles。这个里面的的值表示某 bundleId 用哪个 mobileProvision 文件打包,这个 mobileProvision 也必须和 export_method 严格对应,否则打包一定失败。
转载请注明出处:
This work is licensed under a MIT License.