default_platform(:ios) platform :ios do desc "Load the App Store Connect API token" lane :load_asc_api_token do app_store_connect_api_key( key_id: ENV["IOS_ASC_KEY_ID"], issuer_id: ENV["IOS_ASC_ISSUER_ID"], key_content: ENV["IOS_ASC_KEY"], is_key_content_base64: true, in_house: false ) end desc "Deploy a new version to closed testing (testflight)" lane :deploy_testing do build_name = ENV["BUILD_NAME"] build_number = ENV["BUILD_NUMBER"] load_asc_api_token api_key = lane_context[SharedValues::APP_STORE_CONNECT_API_KEY] sync_code_signing( api_key: api_key, type: "appstore", readonly: true, ) sh( "flutter", "build", "ipa", "--debug", "--build-name=#{build_name}", "--build-number=#{build_number}", ) # sign the app (whithout rebuilding it) build_app( skip_build_archive: true, archive_path: "../build/ios/archive/Runner.xcarchive" ) upload_to_testflight( skip_waiting_for_build_processing: true, ) end desc "Deploy a new version as a full release" lane :deploy_release do build_name = ENV["BUILD_NAME"] build_number = ENV["BUILD_NUMBER"] load_asc_api_token api_key = lane_context[SharedValues::APP_STORE_CONNECT_API_KEY] sync_code_signing( api_key: api_key, type: "appstore", readonly: true, ) # replace secrets by real values, the stupid way sh( "sed", "-i", "", "s/IOS_GOOGLE_MAPS_API_KEY/#{ENV["IOS_GOOGLE_MAPS_API_KEY"]}/g", "../Runner/AppDelegate.swift" ) sh( "flutter", "build", "ipa", "--release", "--build-name=#{build_name}", "--build-number=#{build_number}", ) # sign the app (whithout rebuilding it) build_app( skip_build_archive: true, archive_path: "../build/ios/archive/Runner.xcarchive" ) upload_to_app_store( skip_screenshots: true, skip_metadata: true, precheck_include_in_app_purchases: false, submit_for_review: true, automatic_release: true, # automatically release the app after review ) end end