# This file contains the fastlane.tools configuration # You can find the documentation at https://docs.fastlane.tools # # For a list of all available actions, check out # # https://docs.fastlane.tools/actions # # For a list of all available plugins, check out # # https://docs.fastlane.tools/plugins/available-plugins # # Uncomment the line if you want fastlane to automatically update itself # update_fastlane default_platform(:ios) platform :ios do before_all do FIREBASE_APP_DISTRIBUTION_APP_STAGING = "1:64659984801:ios:a9c4640d2a1960a5f43be0" FIREBASE_APP_DISTRIBUTION_GROUPS_QA = "ios-qa" FIREBASE_SERVICE_ACCOUNT_FILE = ENV['CI_EVALUATION_FIREBASE_SERVICE_ACCOUNT_FILE'] KEYCHAIN_NAME = "temp_keychain" PROVISIONING_PROFILE_FILE = ENV['CI_EVALUATION_PROVISIONING_PROFILE_FILE'] CERTIFICATE_PASSWORD = ENV['CI_EVALUATION_CERTIFICATE_PASSWORD'].strip PROVISIONING_PROFILE_FILE = "#{ENV['HOME']}/Library/MobileDevice/Provisioning Profiles/profile.mobileprovision" IOS_CERT_FILE = ENV['CI_EVALUATION_IOS_CERT_FILE'] APP_IDENTIFIER = ENV['CI_EVALUATION_APP_IDENTIFIER'] APP_STORE_API_KEY_FILE = ENV['CI_EVALUATION_APP_STORE_API_KEY_FILE'] APP_STORE_API_KEY_ID = ENV['CI_EVALUATION_APP_STORE_API_KEY_ID'] APP_STORE_API_KEY_ISSUER_ID = ENV['CI_EVALUATION_APP_STORE_API_KEY_ISSUER_ID'] end desc "Description of what the lane does" lane :deployInternalFirebase do ipa_name = "Internal.ipa" buildReleaseIPA(ipa_name: ipa_name, method: "ad-hoc") firebase_app_distribution( service_credentials_file: FIREBASE_SERVICE_ACCOUNT_FILE, app: FIREBASE_APP_DISTRIBUTION_APP_STAGING, groups: FIREBASE_APP_DISTRIBUTION_GROUPS_QA, ipa_path: "builds/#{ipa_name}", ) cleanupKeyChain() end desc "Description of what the lane does" lane :deployToTestFlight do setupCodeSigning() ipa_name = "Release.ipa" buildReleaseIPA(ipa_name: ipa_name, method: "app-store") app_store_connect_api_key( key_id: APP_STORE_API_KEY_ID, issuer_id: APP_STORE_API_KEY_ISSUER_ID, key_filepath: APP_STORE_API_KEY_FILE, is_key_content_base64: false, in_house: false # optional but may be required if using match/sigh ) upload_to_testflight( skip_submission: true, ipa: "./builds/#{ipa_name}", skip_waiting_for_build_processing: true, ) cleanupKeyChain() end lane :buildReleaseIPA do |options| ipa_name = options[:ipa_name] method = options[:method] if ipa_name.nil? ipa_name = "InternalBuild.ipa" end if method.nil? method = "ad-hoc" end setupCodeSigning() build_app( scheme: "InitProject", export_method: method, output_directory: "./builds", output_name: ipa_name ) end lane :setupCodeSigning do password = (0...50).map { ('a'..'z').to_a[rand(26)] }.join cleanupKeyChain() create_keychain( name: KEYCHAIN_NAME, default_keychain: false, unlock: true, timeout: 360000, lock_when_sleeps: false, add_to_search_list: true, password: password ) import_certificate( certificate_path: IOS_CERT_FILE, keychain_name: KEYCHAIN_NAME, keychain_password: password, certificate_password: CERTIFICATE_PASSWORD, log_output: true ) update_app_identifier( plist_path: "InitProject/Info.plist", app_identifier: APP_IDENTIFIER ) update_project_provisioning( xcodeproj: "InitProject.xcodeproj", target_filter: "InitProject", profile: PROVISIONING_PROFILE_FILE, build_configuration: "Release" ) update_project_team( # Set the right team on your project teamid: CredentialsManager::AppfileConfig.try_fetch_value(:team_id) ) unlock_keychain( path: KEYCHAIN_NAME, password: password ) end lane :cleanupKeyChain do begin delete_keychain(name: KEYCHAIN_NAME) if File.exist? File.expand_path("/Users/runner/Library/Keychains/#{KEYCHAIN_NAME}-db") rescue => ex UI.important('Could not delete keychain!') end end after_all do cleanupKeyChain() end end