default_platform(:ios) # Credentials: App Store Connect API key via `pass`. # The api_key block uses the key inline — no session/2FA needed. platform :ios do EXPORT_OPTIONS = { method: "app-store", signingStyle: "manual", manageAppVersionAndBuildNumber: false, provisioningProfiles: { "com.alexandrevazquez.mealmood" => "com.alexandrevazquez.mealmood AppStore", "com.alexandrevazquez.mealmood.widget" => "com.alexandrevazquez.mealmood.widget AppStore" } } def asc_api_key app_store_connect_api_key( key_id: `pass show appstore/api-key-id`.strip, issuer_id: `pass show appstore/issuer-id`.strip, key_content: `pass show appstore/api-key-p8`.strip, in_house: false ) end desc "Push a new beta build to TestFlight" lane :beta do increment_build_number(xcodeproj: "MealMood.xcodeproj") build_app( scheme: "MealMood", export_method: "app-store", sdk: "iphoneos26.5", export_options: EXPORT_OPTIONS ) upload_to_testflight( api_key: asc_api_key, skip_waiting_for_build_processing: true ) end desc "Upload metadata + localized screenshots for an existing TestFlight build (no rebuild, no submit)" lane :publish do |options| version = options[:version] || "1.2.0" build = options[:build] || "55" upload_to_app_store( api_key: asc_api_key, app_version: version, build_number: build, skip_binary_upload: true, skip_metadata: false, skip_screenshots: false, overwrite_screenshots: true, submit_for_review: false, automatic_release: false, precheck_include_in_app_purchases: false, force: true, run_precheck_before_submit: false ) end desc "Push a new release build to the App Store" lane :release do increment_build_number(xcodeproj: "MealMood.xcodeproj") build_app( scheme: "MealMood", sdk: "iphoneos26.5", export_options: EXPORT_OPTIONS ) upload_to_app_store( api_key: asc_api_key, automatic_release: true, force: true ) end end