使用Fastlane的upload_to_app_store上传时同步至TestFlight的问题
问题与解决方案
问题描述
使用Fastlane的upload_to_app_store()将应用上传至App Store Connect时,对应的构建版本会自动同步到TestFlight,导致TestFlight的默认测试版本被替换为上传至App Store的生产环境版本。
当前工作流:
- 推送代码至
sandbox分支时,通过upload_to_testflight()仅上传构建到TestFlight,此流程运行正常; - 将
sandbox分支的最新变更合并推送至production分支、执行上线流程时,上传App Store的同时,构建版本会同步到TestFlight,导致TestFlight的测试版本关联了生产服务器环境。
对应分支的Fastlane Lane配置
sandbox分支执行的Lane:
desc "Push a new beta build to TestFlight" lane :deploy_testflight do set_full_version() setup_ci if is_ci cocoapods(clean_install: is_ci) match( type: "appstore", readonly: is_ci, ) build_app( workspace: "Runner.xcworkspace", scheme: "Runner", archive_path: "../build/ios/Runner.xcarchive", output_directory: "../build/ios/Runner", ) upload_to_testflight( api_key_path: "./app_store_connect.json", ipa: '../build/ios/Runner/Runner.ipa', skip_waiting_for_build_processing: true, ) end
production分支执行的Lane:
desc "Push a new release build to App Store" lane :deploy_appstore do set_full_version() setup_ci if is_ci cocoapods(clean_install: is_ci) match( type: "appstore", readonly: is_ci, ) build_app( workspace: "Runner.xcworkspace", scheme: "Runner", archive_path: "../build/ios/Runner.xcarchive", output_directory: "../build/ios/Runner", ) upload_to_app_store( force: true, reject_if_possible: true, skip_metadata: false, skip_screenshots: true, languages: ['en-US'], release_notes: { "default" => "Updates", "en-US" => "Updates", }, submit_for_review: true, automatic_release: true, precheck_include_in_app_purchases: false, submission_information: { add_id_info_limits_tracking: true, add_id_info_serves_ads: false, add_id_info_tracks_action: true, add_id_info_tracks_install: true, add_id_info_uses_idfa: true, content_rights_has_rights: true, content_rights_contains_third_party_content: true, export_compliance_platform: 'ios', export_compliance_compliance_required: false, export_compliance_encryption_updated: false, export_compliance_app_type: '', export_compliance_uses_encryption: false, export_compliance_is_exempt: false, export_compliance_contains_third_party_cryptography: false, export_compliance_contains_proprietary_cryptography: false, export_compliance_available_on_french_store: false }, api_key_path: "./app_store_connect.json", ipa: '../build/ios/Runner/Runner.ipa', ) end
原因分析
这是App Store Connect的默认平台行为:所有上传至App Store的构建版本,都会自动同步到TestFlight的构建库中。Fastlane的upload_to_app_store()本质是调用App Store Connect的官方API,因此会遵循这一规则,导致生产构建同步到TestFlight并成为默认版本。
解决方案
方案1:修改Fastlane配置,跳过TestFlight同步
在upload_to_app_store的参数中添加skip_testflight: true,该参数会让Fastlane在上传App Store时,跳过将构建同步到TestFlight的步骤。修改后的upload_to_app_store配置如下:
upload_to_app_store( force: true, reject_if_possible: true, skip_metadata: false, skip_screenshots: true, languages: ['en-US'], release_notes: { "default" => "Updates", "en-US" => "Updates", }, submit_for_review: true, automatic_release: true, precheck_include_in_app_purchases: false, submission_information: { add_id_info_limits_tracking: true, add_id_info_serves_ads: false, add_id_info_tracks_action: true, add_id_info_tracks_install: true, add_id_info_uses_idfa: true, content_rights_has_rights: true, content_rights_contains_third_party_content: true, export_compliance_platform: 'ios', export_compliance_compliance_required: false, export_compliance_encryption_updated: false, export_compliance_app_type: '', export_compliance_uses_encryption: false, export_compliance_is_exempt: false, export_compliance_contains_third_party_cryptography: false, export_compliance_contains_proprietary_cryptography: false, export_compliance_available_on_french_store: false }, api_key_path: "./app_store_connect.json", ipa: '../build/ios/Runner/Runner.ipa', skip_testflight: true # 添加此参数 )
方案2:手动设置TestFlight默认版本
如果不想修改Fastlane配置,可以在生产构建上传完成后,登录App Store Connect,进入TestFlight页面,找到之前的sandbox分支构建版本,手动将其设置为默认测试版本,覆盖自动同步的生产构建。
内容的提问来源于stack exchange,提问作者Gonzalo
相关产品推荐
相关产品推荐

