class FastlaneCore::JavaTransporterExecutor

Generates commands and executes the iTMSTransporter by invoking its Java app directly, to avoid the crazy parameter escaping problems in its accompanying shell script.

Public Instance Methods

build_download_command(username, password, apple_id, destination = "/tmp", provider_short_name = "", jwt = nil) click to toggle source
# File fastlane_core/lib/fastlane_core/itunes_transporter.rb, line 294
def build_download_command(username, password, apple_id, destination = "/tmp", provider_short_name = "", jwt = nil)
  use_jwt = !jwt.to_s.empty?
  if !Helper.user_defined_itms_path? && Helper.mac? && Helper.xcode_at_least?(11)
    [
      ("ITMS_TRANSPORTER_PASSWORD=#{password.shellescape}" unless use_jwt),
      'xcrun iTMSTransporter',
      '-m lookupMetadata',
      ("-u #{username.shellescape}" unless use_jwt),
      ("-p @env:ITMS_TRANSPORTER_PASSWORD" unless use_jwt),
      ("-jwt #{jwt}" if use_jwt),
      "-apple_id #{apple_id.shellescape}",
      "-destination #{destination.shellescape}",
      ("-itc_provider #{provider_short_name}" if jwt.nil? && !provider_short_name.to_s.empty?),
      '2>&1' # cause stderr to be written to stdout
    ].compact.join(' ')
  else
    [
      Helper.transporter_java_executable_path.shellescape,
      "-Djava.ext.dirs=#{Helper.transporter_java_ext_dir.shellescape}",
      '-XX:NewSize=2m',
      '-Xms32m',
      '-Xmx1024m',
      '-Xms1024m',
      '-Djava.awt.headless=true',
      '-Dsun.net.http.retryPost=false',
      java_code_option,
      '-m lookupMetadata',
      ("-u #{username.shellescape}" unless use_jwt),
      ("-p #{password.shellescape}" unless use_jwt),
      ("-jwt #{jwt}" if use_jwt),
      "-apple_id #{apple_id.shellescape}",
      "-destination #{destination.shellescape}",
      ("-itc_provider #{provider_short_name}" if jwt.nil? && !provider_short_name.to_s.empty?),
      '2>&1' # cause stderr to be written to stdout
    ].compact.join(' ')
  end
end
build_provider_ids_command(username, password, jwt = nil) click to toggle source
# File fastlane_core/lib/fastlane_core/itunes_transporter.rb, line 332
def build_provider_ids_command(username, password, jwt = nil)
  use_jwt = !jwt.to_s.empty?
  if !Helper.user_defined_itms_path? && Helper.mac? && Helper.xcode_at_least?(11)
    [
      ("ITMS_TRANSPORTER_PASSWORD=#{password.shellescape}" unless use_jwt),
      'xcrun iTMSTransporter',
      '-m provider',
      ("-u #{username.shellescape}" unless use_jwt),
      ("-p @env:ITMS_TRANSPORTER_PASSWORD" unless use_jwt),
      ("-jwt #{jwt}" if use_jwt),
      '2>&1' # cause stderr to be written to stdout
    ].compact.join(' ')
  else
    [
      Helper.transporter_java_executable_path.shellescape,
      "-Djava.ext.dirs=#{Helper.transporter_java_ext_dir.shellescape}",
      '-XX:NewSize=2m',
      '-Xms32m',
      '-Xmx1024m',
      '-Xms1024m',
      '-Djava.awt.headless=true',
      '-Dsun.net.http.retryPost=false',
      java_code_option,
      '-m provider',
      ("-u #{username.shellescape}" unless use_jwt),
      ("-p #{password.shellescape}" unless use_jwt),
      ("-jwt #{jwt}" if use_jwt),
      '2>&1' # cause stderr to be written to stdout
    ].compact.join(' ')
  end
end
build_upload_command(username, password, source = "/tmp", provider_short_name = "", jwt = nil) click to toggle source
# File fastlane_core/lib/fastlane_core/itunes_transporter.rb, line 254
def build_upload_command(username, password, source = "/tmp", provider_short_name = "", jwt = nil)
  use_jwt = !jwt.to_s.empty?
  if !Helper.user_defined_itms_path? && Helper.mac? && Helper.xcode_at_least?(11)
    [
      ("ITMS_TRANSPORTER_PASSWORD=#{password.shellescape}" unless use_jwt),
      'xcrun iTMSTransporter',
      '-m upload',
      ("-u #{username.shellescape}" unless use_jwt),
      ("-p @env:ITMS_TRANSPORTER_PASSWORD" unless use_jwt),
      ("-jwt #{jwt}" if use_jwt),
      "-f #{source.shellescape}",
      additional_upload_parameters, # that's here, because the user might overwrite the -t option
      '-k 100000',
      ("-itc_provider #{provider_short_name}" if jwt.nil? && !provider_short_name.to_s.empty?),
      '2>&1' # cause stderr to be written to stdout
    ].compact.join(' ') # compact gets rid of the possibly nil ENV value
  else
    [
      Helper.transporter_java_executable_path.shellescape,
      "-Djava.ext.dirs=#{Helper.transporter_java_ext_dir.shellescape}",
      '-XX:NewSize=2m',
      '-Xms32m',
      '-Xmx1024m',
      '-Xms1024m',
      '-Djava.awt.headless=true',
      '-Dsun.net.http.retryPost=false',
      java_code_option,
      '-m upload',
      ("-u #{username.shellescape}" unless use_jwt),
      ("-p #{password.shellescape}" unless use_jwt),
      ("-jwt #{jwt}" if use_jwt),
      "-f #{source.shellescape}",
      additional_upload_parameters, # that's here, because the user might overwrite the -t option
      '-k 100000',
      ("-itc_provider #{provider_short_name}" if jwt.nil? && !provider_short_name.to_s.empty?),
      '2>&1' # cause stderr to be written to stdout
    ].compact.join(' ') # compact gets rid of the possibly nil ENV value
  end
end
execute(command, hide_output) click to toggle source
# File fastlane_core/lib/fastlane_core/itunes_transporter.rb, line 380
def execute(command, hide_output)
  # The Java command needs to be run starting in a working directory in the iTMSTransporter
  # file area. The shell script takes care of changing directories over to there, but we'll
  # handle it manually here for this strategy.
  FileUtils.cd(Helper.itms_path) do
    return super(command, hide_output)
  end
end
handle_error(password) click to toggle source
# File fastlane_core/lib/fastlane_core/itunes_transporter.rb, line 372
def handle_error(password)
  unless File.exist?(Helper.transporter_java_jar_path)
    UI.error("The iTMSTransporter Java app was not found at '#{Helper.transporter_java_jar_path}'.")
    UI.error("If you're using Xcode 6, please select the shell script executor by setting the environment variable "\
      "FASTLANE_ITUNES_TRANSPORTER_USE_SHELL_SCRIPT=1")
  end
end
java_code_option() click to toggle source
# File fastlane_core/lib/fastlane_core/itunes_transporter.rb, line 364
def java_code_option
  if Helper.mac? && Helper.xcode_at_least?(9)
    return "-jar #{Helper.transporter_java_jar_path.shellescape}"
  else
    return "-classpath #{Helper.transporter_java_jar_path.shellescape} com.apple.transporter.Application"
  end
end