技术问询:Fastlane是否支持移除提交版本及替换版本?
Fastlane对版本移除与替换的支持情况
嘿,这两个需求Fastlane都能轻松满足,我来给你一步步说明:
1. 移除已提交的版本
Fastlane针对不同分发渠道(TestFlight/正式App Store)都有对应的处理方式:
- TestFlight测试版本:用
pilot工具的delete_build命令就能搞定,只需要指定App的Bundle ID和要删除的Build号就行。比如在lane里可以这么写:lane :delete_old_test_build do pilot( action: "delete_build", bundle_id: "com.yourcompany.yourapp", build_number: "123" ) end - App Store待审核/已提交的正式版本:如果版本还在审核队列,先通过
deliver工具的reject命令拒绝审核,之后再去开发者后台手动删除即可(Fastlane目前没有直接删除正式提交版本的命令,但拒绝后删除步骤很简单)。
2. 拒绝现有提交并替换为新二进制(同一lane重复运行实现替换)
这个需求完全可以通过定制你的lane实现,核心思路是先清理旧版本,再上传新版本,或者利用渠道本身的特性覆盖:
- TestFlight场景:
要是想替换同一版本号下的旧Build,只要新Build编号比旧的高,直接用pilot upload上传就行——TestFlight会自动把新Build设为该版本号下的可用测试版本,旧Build会被保留但不会默认分发。如果需要彻底移除旧Build,可以在上传前先执行上面的delete_build步骤。
你的lane可以这么写,实现重复运行就替换旧版本:lane :upload_replace_testflight do # 先删除同一版本号下的旧Build(可选,按需开启) pilot( action: "delete_build", bundle_id: "com.yourcompany.yourapp", version_number: get_version_number(xcodeproj: "YourApp.xcodeproj") ) # 打包并上传新Build build_app pilot( bundle_id: "com.yourcompany.yourapp", skip_submission: false ) end - App Store正式提交场景:
如果版本还在审核中,先通过deliver reject拒绝当前审核,再重新打包上传新版本。注意正式版本的版本号必须更新(比如从1.0.0改成1.0.1),因为Apple不允许同一版本号重复提交。整合后的lane示例:
这样每次运行这个lane,都会先尝试处理旧的待审核版本,再提交新的二进制文件。lane :submit_replace_appstore do # 尝试拒绝当前待审核版本,没有的话忽略错误继续 begin deliver(action: "reject", bundle_id: "com.yourcompany.yourapp") rescue # 无待审核版本时跳过错误 end # 打包并提交新版本 build_app deliver( bundle_id: "com.yourcompany.yourapp", submit_for_review: true ) end
需要提醒的是,Apple开发者政策有一些限制:正式版本一旦通过审核就无法替换,只能发布新版本;TestFlight的Build删除后无法恢复,操作前最好确认清楚。
内容的提问来源于stack exchange,提问作者gerbil
相关产品推荐
相关产品推荐

