「这是我参与2022首次更文挑战的第5天,活动详情查看:2022首次更文挑战」。
前言
Fastlane是iOS和Android开发者的一个工具,可以自动完成一些乏味的任务,比如生成截图、处理配置文件和发布应用。
1. fastlane 安装
Fastlane 是用 Ruby 语言编写的一个命令行工具,可以自动化几乎所有 iOS 开发所需要的操作,例如自动打包和签名 APP,自动上传到 App Store 等等。
虽然官方文档推荐使用 Bundle 来安装,但是为了简便,笔者这里使用 Mac 自身的环境来安装的
1.1 安装 Xcode 命令工具
xcode-select --install
会弹出个弹窗提示安装 xcode-selct 命令工具,点击安装。。。
如果已经安装,会提示
xcode-select: error: command line tools are already installed, use "Software Update" to install updates
1.2 安装 fastlane
sudo gem install fastlane -NV 或是 brew cask install fastlane 我这里使用gem安装的
如果出现以下错误
ERROR: While executing gem ... (Errno::EPERM)
Operation not permitted - /usr/bin/rougify
输入以下命令
sudo gem install -n /usr/local/bin fastlane
安装成功后可以查看版本 fastlane --version
2. Action 与 Lane
fastlane 为我们提供了一百多个 Action(Action: 可以理解成是 fastlane 自动化流程中的最小执行单元。),它们是 iOS 项目开发中所有自动化操作的基础。常用的 Action 有:
-
scan 用于自动测试 App
-
cert 用于自动生成和管理 iOS App 签名的证书
-
sign 用于自动生成、更新、下载和修复 Provisioning Profile
-
match 为整个团队自动管理和同步证书和 Provisioning Profile
-
gym 用于自动构建和打包 App
-
snapsheot 用于自动在不同设备上截屏
-
pliot 用于自动吧 App 部署到 TestFlight 并管理测试用户
-
deliver 用于自动把 App 上传到 App Store
-
pem 用于自动生成和更新推送消息的 Profile
这里的 Action 根据项目需要,在开发自动化操作通过合适的参数来调用 fastlane 所提供的 Action。在 fastlane 中,我们把这个自动化操作或任务叫做 Lane。实际上,iOS 开发中的所有自动化操作,主要通过 Lane 来封装和配置的。
3. 初始化 fastlane
cd 到你的项目目录,执行 fastlane init,即会创建一个 fastlane 的文件夹,文件夹包含 Fastfile, 还有 Appfile,以及执行过程所生成的一些中间文件(如截图、日志与报告等)(笔者这里选择的是以下选择 4 选项,因此不包含 App Store 配置的元数据、截图等等。)。
如果这个过程出现 bundle update 卡住的场景,可以参考 Fastlane bundle update卡住解决方案,笔者这里卡住后,重新初始化一次就可以了。
初始化过程中会让选择你想要的目的,我这里选择了4 (手动配置选项), 目的仅仅是打包出ipa,后面可自行根据需求完善修改,一般我们选择的都是3,自动打包到App Store。
如果选择的是3,这个过程中会让输入 AppID 的账号和密码,会检查你的 BundleID 是否是开发者关联以及是否允许创建 App 到 App Store Connect,这些我们可以输入账号去添加。
4. fastlane 配置
iOS 自动打包过程中,主要分为两步:
-
自动化配置证书及描述文件,开发对应开发证书、发布对应发布证书配置。
-
lane 自动化打包 ipa 并且自动发布到 App Store、蒲公英、Jenkins 服务器等等。
4.1 统一管理 Certificates 和 Prefiles
首先需要创建 Github 私有 Repo,存放 .p12 及描述文件
部分操作步骤及lane命令来自 拉钩视频 - 林永坚老师的视频
,有兴趣的可以自行查看
GitHub 私有 Repo 是免费的,有详细的修改历史,我们可以在 Github 创建 私有 Repo 来存储私钥和证书。
在 GitHub New repository 创建一个管理你项目签名的私有仓库,在 Settings -> Developer settings -> Personal access tokens 添加 Github Access Token
因为这个 Token 关闭当前页面后就无法获取,因此,最好把这个 Token 保存下来。
- 有了这个 Token 后,我们需要生成一个 BASE64 字符串提供给 fastlane 使用,命令如下
$> echo -n your_github_username:your_personal_access_token | base64
your_github_username - GitHub 用户名
your_personal_access_token - 刚刚生成的 token
- 接着在 Shell 里把 BASE64 赋值给环境变量
$> export MATCH_GIT_BASIC_AUTHORIZATION=<YOUR BASE64 KEY>
- 为了提高安全性,还可以配置环境变量 MATCH_PASSWORD 来加密私钥、证书 和 Provisioning Profile 文件。但是要注意:一定要记住这个秘密,因为使用这些文件的机器都需要使用该密码。
$> export MATCH_PASSWORD=<YOUR MATCH PASSWORD>
笔者这里直接上传 .p12 及 描述文件到私有仓库,因此下面可以直接执行下载的 lane,去下载 p12 和描述文件。
执行 fastlane download_profiles 命令
lane :download_profiles do
keychain_name = "TemporaryKeychain"
keychain_password = "TemporaryKeychainPassword"
create_keychain(
name: keychain_name,
password: keychain_password,
default_keychain: false,
timeout: 3600,
unlock: true,
)
match(
type: "appstore",
keychain_name: keychain_name,
keychain_password: keychain_password,
storage_mode: "git",
git_url: "你的证书私有仓库地址",
app_identifier: "你的BundleID",
team_id: "证书对应的团队ID"
)
end
这里有个要注意的点,type: "enterprise" 需要输入你对应证书的用户名账号,因为笔者的企业证书是分发出来的,并没有持有人账号。因此无法继续。
另外试了一下线上App Store证书,type: "appstore" 类型,可以看到,如果你拥有是该账户持有人或者具备管理权限,可以成功下载证书到 Keychain
4.2 lane 简便的自动化打包命令
如果不需要自动选择证书,那么就忽略 4.1 证书配置的操作,和之相比,多了一步手动选择发布证书及 BundleID 的操作
Xcode 项目一般默认的是 Debug 和 Release 两个环境,为此,我们可以设定两个 lane 来对应打包测试包、发布包
非完全自动化打包,需要主动去选择发布证书及对应的 BundleID
执行 fastlane ipa-debug 命令,可以看到,我们很容易就打包出个 ipa 安装包(笔者测试用的企业证书,因此选择的是 enterprise 模式。因为线上应用还没上架,后面会补充App Store 自动化流程),但是,有个前提,需要手动去选择你自己的发布证书,这样我们就不算完全是自动化打包
这里可以自己自动上传 ipa 包至蒲公英 -- 使用 Fastlane 上传 App 到蒲公英
4.3 自动化打包与签名
在我们执行成功 fastlane download_profiles 命令后,可以看到,我们的 keyChain 多了证书和描述文件。
需要执行打包命令
lane :ipa_debug do #函数名称,执行打包的时候使用
unlock_keychain(
path: "TemporaryKeychain-db",
password: "TemporaryKeychainPassword")
update_code_signing_settings(
use_automatic_signing: false,
path: "GBYPhotoManage.xcodeproj",
code_sign_identity: "iPhone Distribution",
bundle_identifier: "BundleID",
profile_name: "match AppStore BundleID")
gym(
clean:true,
scheme:"GBYPhotoManage", #项目名称
export_method:"app-store",#打包的类型
configuration:"Debug",#模式
workspace: "GBYPhotoManage.xcworkspace",
xcargs: "-allowProvisioningUpdates",
output_name:"ios-uat",#输出的包名
output_directory:"~/Desktop/ipa_file"#输出的位置
)
update_code_signing_settings(
use_automatic_signing: true,
path: "GBYPhotoManage.xcodeproj")
end
第一步 解锁 Keychain
第二步 更新签名信息 里面 BundleID 那一块,需要输入和你证书对应的 BundleID
第三步 打包 ipa 操作
第四步 恢复自动签名
可以看到已经成功构建出能上传 App Store 的 ipa 包,后续的自动发布到 App Store 待补充。
总结
笔者本意是配置企业应用证书自动打包的,但是没有持有人或者管理权限账号,因此只能以 App Store 线上应用来举例,想来都是一样的操作。时间有限,有不足的见谅,后续会继续补充。