当我使用 upload_to_app_store() 将应用程序上传到 AppStore Connect 时,它也会将一个版本上传到 TestFlight,这会导致 TestFlight 中的默认版本成为最后一个上传到 AppStore 的版本。
因此,在我的工作流程中,当我将应用程序推送到“沙盒”分支时,我仅使用 upload_to_testflight() 上传到 TestFlight,我们在这里做得很好。之后,我将最新的更改从“沙盒”推送到“生产”分支。当我执行最后一步时,除了上传到 AppStore 之外,它还将构建上传到 TestFlight,导致 TestFlight 中的版本连接到生产服务器。我不知道为什么会这样。
这是推送到沙箱时执行的通道:
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
在投入生产时:
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
实际上,这与 fastlane 无关。这就是 App Store Connect 的工作原理。
这个想法是,在通过 TestFlight 对应用程序进行测试后,您将发布相同的二进制文件,而不是上传新的二进制文件(通过不同的分支或任何其他原因)。
如果您强烈希望保留当前流程,那么您得到的最接近的伪解决方案是上传 2 个不同的应用程序(具有不同的捆绑包标识符),例如
com.example.staging
来自您的沙箱分支,以及 com.example
来自您的生产分支。
但是,我建议更改您的流程,而不是围绕系统进行工作。根据生态系统的工作方式(在本例中为 App Store Connect)来调整它们,您就会遇到更少的麻烦:)