使用 altool 上传 ipa 至 TestFlight
接上一篇,Jenkins 构建完成后,使用 altool 将 ipa 上传至 TestFlight。
altool
Xcode 11 之后已不再提供 Application Loader
,改用 xcrun altool
上传 ipa。
altool 是 Application Loader
的命令行工具,可以用来验证和上传 app 文件至 App Store。
可以在这里找到它:
1 | /Applications/Xcode.app/Contents/Applications/Application\ Loader.app/Contents/Frameworks/ITunesSoftwareService.framework/Versions/A/Support/altool |
添加 shell
在 xcodebuild -exportArchive
步骤完成后,我们能得到一个打包好的 ipa 文件,注意导出使用的 ExportOptions.plist
里 method
是 app-store
。
1 | <key>method</key> |
接下来 Add build step -> Execute Shell
添加一个新的 shell 脚本。
1 | --upload-app 上传 --validate-app 验证 |
altool 可以 --validate-app
验证和 --upload-app
上传,-f
指向 ipa 地址,-u
-p
分别是 Apple ID 用户名和密码。这里密码需要注意一下,如果 Apple ID 开启了双重认证,需要给该 ID 生成一个 APP-SPECIFIC PASSWORD
。
如果未开启双重认证,那么密码就是 Apple ID 的密码。
@keychain
在 shell 脚本中使用明文密码是不理智的,我们可以使用 Keychain 来保存密码。
在 Keychain Access 新增 item。接下来 -p @keychain:APP_SPECIFIC
指定 item name 就好了。注意 Account Name
需要和 -u username
一致。
等待一段时间,如下提示就没什么问题了:
1 | No errors validating archive at path_to_app.ipa |
反过来如果有错误,也会有很详细的提示。
也可以使用 --output-format xml
获得更详细的输出。
一个小提示
每次 TestFlight 发布测试都会询问你的 app 有没有使用加密技术,勾选完后才能测试。这时可以在 Info.plist
添加 ITSAppUsesNonExemptEncryption
为 false
就可以了。
1 | <key>ITSAppUsesNonExemptEncryption</key><false/> |
下次打包上传,接收到 App Store Connect 邮件 has completed processing 就能自动发布测试了(internal testing)。
参考
Apple help - Upload your app binary files with altool
Stack Overflow - ITSAppUsesNonExemptEncryption export compliance while internal testing?