问题
升级 Xcode9 以后,原有的 fastlane 打包和分发脚本不能正常使用。
1、gym export_options 变化
Xcode9 中的 Export 操作需要指定更多的信息,对应的 fastlane 中的 gym action 也同样需要把更多的信息指明,原有最简单的脚本,可能已不能正常工作:
// 在 Xcode9 中可能不能正常工作
gym(scheme: "MyApp", workspace: "MyApp.xcworkspace")
你需要更多的配置信息:
// 指定 export plist 文件路径
gym({
workspace: "MyApp.xcworkspace"
scheme: "MyApp",
configuration: 'Release',
export_xcargs: "-allowProvisioningUpdates",
export_options: './exportOptions_appStore.plist'
})
// 或者直接将相关信息追加到参数里面
gym({
scheme: "appScheme"
configuration: "Debug",
export_method: "development",
export_xcargs: "-allowProvisioningUpdates",
export_options: {
provisioningProfiles: {
"com.example.appId" => "app_dev",
"com.example.appId.NotificationServiceExtension" => "app_notification_dev"
}
}
})
- 上传 iTunes 失败
需要更新 fastlane 版本到 2.56.0 以上,在之后的版本适配了 Xcode9 的上传问题。
3、fastlane 版本无法更新
如果你使用了 plugin,在运行 bundle install 后发现 fastlane 版本又回退到了某个版本,此时你需要执行:
bundle update fastlane
在执行上面命令时,我遇到一个 git 读写权限的问题,直接加上管理员权限即可:
sudo bundle update fastlane
之后你会发现你的 Gemfile.lock 文件也有更新,需要将这个文件提交进你的代码仓库。
说明:
如果你使用了 plugin ,在你的的 Gemfile 中没有指定使用的 fastlane(以及其它插件) 版本,bundler 会默认使用你上一次使用的版本,这个版本信息记录在 Gemfile.lock 文件中。
你在执行 bundle install
会直接使用 Gemfile.lock 文件中的版本。
如果你执行 bundle update
操作,则此时会更新相应 ruby 应用到最新或者指定版本,相应的 Gemfile.lock 文件也会更新,此时将 Gemfile.lock 文件提交进你的代码仓库,就保存了最近能正常使用的 ruby 应用版本信息。
想了解更多,这篇Bundler 的作用及原理文章介绍的很详细。