class Sigh::DownloadAll

Public Instance Methods

download_all(download_xcode_profiles: false) click to toggle source

Download all valid provisioning profiles

# File sigh/lib/sigh/download_all.rb, line 11
def download_all(download_xcode_profiles: false)
  if (api_token = Spaceship::ConnectAPI::Token.from(hash: Sigh.config[:api_key], filepath: Sigh.config[:api_key_path]))
    UI.message("Creating authorization token for App Store Connect API")
    Spaceship::ConnectAPI.token = api_token
  elsif !Spaceship::ConnectAPI.token.nil?
    UI.message("Using existing authorization token for App Store Connect API")
  else
    # Team selection passed though FASTLANE_ITC_TEAM_ID and FASTLANE_ITC_TEAM_NAME environment variables
    # Prompts select team if multiple teams and none specified
    UI.message("Starting login with user '#{Sigh.config[:username]}'")
    Spaceship::ConnectAPI.login(Sigh.config[:username], nil, use_portal: true, use_tunes: false)
    UI.message("Successfully logged in")
  end

  if download_xcode_profiles
    UI.deprecated("The App Store Connect API does not support querying for Xcode managed profiles: --download_code_profiles is deprecated")
  end

  case Sigh.config[:platform].to_s
  when 'ios'
    profile_types = [
      Spaceship::ConnectAPI::Profile::ProfileType::IOS_APP_STORE,
      Spaceship::ConnectAPI::Profile::ProfileType::IOS_APP_INHOUSE,
      Spaceship::ConnectAPI::Profile::ProfileType::IOS_APP_ADHOC,
      Spaceship::ConnectAPI::Profile::ProfileType::IOS_APP_DEVELOPMENT
    ]
  when 'macos'
    profile_types = [
      Spaceship::ConnectAPI::Profile::ProfileType::MAC_APP_STORE,
      Spaceship::ConnectAPI::Profile::ProfileType::MAC_APP_DEVELOPMENT,
      Spaceship::ConnectAPI::Profile::ProfileType::MAC_APP_DIRECT
    ]
  when 'catalyst'
    profile_types = [
      Spaceship::ConnectAPI::Profile::ProfileType::MAC_CATALYST_APP_STORE,
      Spaceship::ConnectAPI::Profile::ProfileType::MAC_CATALYST_APP_DEVELOPMENT,
      Spaceship::ConnectAPI::Profile::ProfileType::MAC_CATALYST_APP_DIRECT
    ]
  when 'tvos'
    profile_types = [
      Spaceship::ConnectAPI::Profile::ProfileType::TVOS_APP_STORE,
      Spaceship::ConnectAPI::Profile::ProfileType::TVOS_APP_INHOUSE,
      Spaceship::ConnectAPI::Profile::ProfileType::TVOS_APP_ADHOC,
      Spaceship::ConnectAPI::Profile::ProfileType::TVOS_APP_DEVELOPMENT
    ]
  end

  # Filtering on 'profileType' seems to be undocumented as of 2020-07-30
  # but works on both web session and official API
  profiles = Spaceship::ConnectAPI::Profile.all(filter: { profileType: profile_types.join(",") }, includes: "bundleId")
  download_profiles(profiles)
end
download_profile(profile) click to toggle source

@param profile [ProvisioningProfile] A profile we plan to download and store

# File sigh/lib/sigh/download_all.rb, line 83
def download_profile(profile)
  FileUtils.mkdir_p(Sigh.config[:output_path])

  type_name = pretty_type(profile.profile_type)
  profile_name = "#{type_name}_#{profile.uuid}_#{profile.bundle_id.identifier}"

  if Sigh.config[:platform].to_s == 'tvos'
    profile_name += "_tvos"
  end

  if ['macos', 'catalyst'].include?(Sigh.config[:platform].to_s)
    profile_name += '.provisionprofile'
  else
    profile_name += '.mobileprovision'
  end

  output_path = File.join(Sigh.config[:output_path], profile_name)
  File.open(output_path, "wb") do |f|
    content = Base64.decode64(profile.profile_content)
    f.write(content)
  end

  Manager.install_profile(output_path) unless Sigh.config[:skip_install]
end
download_profiles(profiles) click to toggle source

@param profiles [Array] Array of all the provisioning profiles we want to download

# File sigh/lib/sigh/download_all.rb, line 65
def download_profiles(profiles)
  UI.important("No profiles available for download") if profiles.empty?

  profiles.each do |profile|
    if profile.valid?
      UI.message("Downloading profile '#{profile.name}'...")
      download_profile(profile)
    else
      UI.important("Skipping invalid/expired profile '#{profile.name}'")
    end
  end
end
pretty_type(profile_type) click to toggle source
# File sigh/lib/sigh/download_all.rb, line 78
def pretty_type(profile_type)
  return Sigh.profile_pretty_type(profile_type)
end