# Prevent Fastlane from overwriting README.md
skip_docs

default_platform(:ios)

def suppress_output
  original_stdout, original_stderr = $stdout.clone, $stderr.clone
  $stderr.reopen File.new('/dev/null', 'w')
  $stdout.reopen File.new('/dev/null', 'w')
  yield
ensure
  $stdout.reopen original_stdout
  $stderr.reopen original_stderr
end

# This should be run after running
# flutter build ios --release --no-codesign
# to build the app using the Flutter toolchain. This lane is meant to only
# rebuild the app by:
# 1- Signing using the publishing credentials; and
# 2- xcodebuild with archive option
platform :ios do
  desc 'Push a new release to TestFlight'
  lane :build_and_deploy_testflight do
    # Doesn't do anything when not on Travis.
    setup_travis

    # Relative to this file.
    raw_version = File.read('../../../../version')
    puts "Building and deploying version #{raw_version}..."

    update_app_identifier(
      plist_path: 'Runner/Info.plist',
      # Let the checked-in bundle ID be different so users don't collide on
      # provisioning profile creation when building locally.
      app_identifier: 'io.flutter.demo.gallery'
    )

    increment_version_number(
      # Only major, minor, patch digits and dots.
      version_number: /\d+\.\d+\.\d+/.match(raw_version)[0]
    )

    puts 'Retrieving signing certificates and profiles...'
    # Stop fastlane from echoing back PUBLISHING_MATCH_CERTIFICATE_REPO var.
    suppress_output {
      # Retrieves all the necessary certs and provisioning profiles.
      sync_code_signing(
        git_url: ENV['PUBLISHING_MATCH_CERTIFICATE_REPO'],
        type: 'appstore',
        readonly: true
      )
    }
    puts 'Certificates and profiles installed'

    # Modify the Xcode project to use the new team and profile.
    # It will put the git state to dirty but Travis will be wiped after
    # then run session.
    disable_automatic_code_signing
    update_project_provisioning(
      xcodeproj: 'Runner.xcodeproj',
      target_filter: 'Runner',
      build_configuration: 'Release',
      profile: ENV['sigh_io.flutter.demo.gallery_appstore_profile-path'],
    )

    # Build and archive the app again.
    build_ios_app(
      workspace: 'Runner.xcworkspace',
      scheme: 'Runner',
      export_method: 'app-store',
      # Verify that the right signing identity is used for publishing.
      codesigning_identity: 'iPhone Distribution: Store Ladd (S8QB4VV633)',
    )

    upload_to_testflight
  end
end
