Class: FastlaneCore::AltoolTransporterExecutor
- Inherits:
-
TransporterExecutor
- Object
- TransporterExecutor
- FastlaneCore::AltoolTransporterExecutor
- Defined in:
- fastlane_core/lib/fastlane_core/itunes_transporter.rb
Overview
Generates commands and executes the altool.
Constant Summary
Constants inherited from TransporterExecutor
TransporterExecutor::ITMS_PROVIDER_REGEX
Instance Method Summary collapse
- #additional_upload_parameters ⇒ Object
- #build_download_command(username, password, apple_id, destination = "/tmp", provider_short_name = "", jwt = nil) ⇒ Object
- #build_provider_ids_command(username, password, jwt = nil, api_key = nil) ⇒ Object
- #build_upload_command(username, password, source = "/tmp", provider_short_name = "", jwt = nil, platform = nil, api_key = nil) ⇒ Object
- #build_verify_command(username, password, source = "/tmp", provider_short_name = "", **kwargs) ⇒ Object
- #displayable_errors ⇒ Object
- #execute(command, hide_output) {|@all_lines| ... } ⇒ Object
- #handle_error(password) ⇒ Object
- #parse_provider_info(lines) ⇒ Object
Instance Method Details
#additional_upload_parameters ⇒ Object
328 329 330 331 332 333 |
# File 'fastlane_core/lib/fastlane_core/itunes_transporter.rb', line 328 def additional_upload_parameters env_deliver_additional_params = ENV["DELIVER_ALTOOL_ADDITIONAL_UPLOAD_PARAMETERS"] return nil if env_deliver_additional_params.to_s.strip.empty? env_deliver_additional_params.to_s.strip end |
#build_download_command(username, password, apple_id, destination = "/tmp", provider_short_name = "", jwt = nil) ⇒ Object
306 307 308 |
# File 'fastlane_core/lib/fastlane_core/itunes_transporter.rb', line 306 def build_download_command(username, password, apple_id, destination = "/tmp", provider_short_name = "", jwt = nil) raise "This feature has not been implemented yet with altool for Xcode 14" end |
#build_provider_ids_command(username, password, jwt = nil, api_key = nil) ⇒ Object
292 293 294 295 296 297 298 299 300 301 302 303 304 |
# File 'fastlane_core/lib/fastlane_core/itunes_transporter.rb', line 292 def build_provider_ids_command(username, password, jwt = nil, api_key = nil) use_api_key = !api_key.nil? [ ("API_PRIVATE_KEYS_DIR=#{api_key[:key_dir]}" if use_api_key), "xcrun altool", "--list-providers", ("-u #{username.shellescape}" unless use_api_key), ("-p #{password.shellescape}" unless use_api_key), ("--apiKey #{api_key[:key_id]}" if use_api_key), ("--apiIssuer #{api_key[:issuer_id]}" if use_api_key), "--output-format json" ].compact.join(' ') end |
#build_upload_command(username, password, source = "/tmp", provider_short_name = "", jwt = nil, platform = nil, api_key = nil) ⇒ Object
274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 |
# File 'fastlane_core/lib/fastlane_core/itunes_transporter.rb', line 274 def build_upload_command(username, password, source = "/tmp", provider_short_name = "", jwt = nil, platform = nil, api_key = nil) use_api_key = !api_key.nil? [ ("API_PRIVATE_KEYS_DIR=#{api_key[:key_dir]}" if use_api_key), "xcrun altool", "--upload-app", ("-u #{username.shellescape}" unless use_api_key), ("-p #{password.shellescape}" unless use_api_key), ("--apiKey #{api_key[:key_id]}" if use_api_key), ("--apiIssuer #{api_key[:issuer_id]}" if use_api_key), ("--asc-provider #{provider_short_name}" unless use_api_key || provider_short_name.to_s.empty?), platform_option(platform), file_upload_option(source), additional_upload_parameters, "-k 100000" ].compact.join(' ') end |
#build_verify_command(username, password, source = "/tmp", provider_short_name = "", **kwargs) ⇒ Object
310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 |
# File 'fastlane_core/lib/fastlane_core/itunes_transporter.rb', line 310 def build_verify_command(username, password, source = "/tmp", provider_short_name = "", **kwargs) api_key = kwargs[:api_key] platform = kwargs[:platform] use_api_key = !api_key.nil? [ ("API_PRIVATE_KEYS_DIR=#{api_key[:key_dir]}" if use_api_key), "xcrun altool", "--validate-app", ("-u #{username.shellescape}" unless use_api_key), ("-p #{password.shellescape}" unless use_api_key), ("--apiKey #{api_key[:key_id]}" if use_api_key), ("--apiIssuer #{api_key[:issuer_id]}" if use_api_key), ("--asc-provider #{provider_short_name}" unless use_api_key || provider_short_name.to_s.empty?), platform_option(platform), file_upload_option(source) ].compact.join(' ') end |
#displayable_errors ⇒ Object
339 340 341 |
# File 'fastlane_core/lib/fastlane_core/itunes_transporter.rb', line 339 def displayable_errors @errors.map { |error| "[Application Loader Error Output]: #{error}" }.join("\n") end |
#execute(command, hide_output) {|@all_lines| ... } ⇒ Object
218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 |
# File 'fastlane_core/lib/fastlane_core/itunes_transporter.rb', line 218 def execute(command, hide_output) if Helper.test? yield(nil) if block_given? return command end @errors = [] @all_lines = [] if hide_output # Show a one time message instead UI.success("Waiting for App Store Connect transporter to be finished.") UI.success("Application Loader progress... this might take a few minutes...") end begin exit_status = FastlaneCore::FastlanePty.spawn(command) do |command_stdout, command_stdin, pid| command_stdout.each do |line| @all_lines << line parse_line(line, hide_output) # this is where the parsing happens end end rescue => ex # FastlanePty adds exit_status on to StandardError so every error will have a status code exit_status = ex.exit_status @errors << ex.to_s end @errors << "The call to the altool completed with a non-zero exit status: #{exit_status}. This indicates a failure." unless exit_status.zero? unless @errors.empty? || @all_lines.empty? # Print the last lines that appear after the last error from the logs # If error text is not detected, it will be 20 lines # This is key for non-verbose mode # The format of altool's result with error is like below # > *** Error: Error uploading '...'. # > *** Error: ... # > { # > NSLocalizedDescription = "...", # > ... # > } # So this line tries to find the line which has "*** Error:" prefix from bottom of log error_line_index = @all_lines.rindex { |line| ERROR_REGEX.match?(line) } @all_lines[(error_line_index || -20)..-1].each do |line| UI.important("[altool] #{line}") end UI.("Application Loader output above ^") @errors.each { |error| UI.error(error) } end yield(@all_lines) if block_given? exit_status.zero? end |
#handle_error(password) ⇒ Object
335 336 337 |
# File 'fastlane_core/lib/fastlane_core/itunes_transporter.rb', line 335 def handle_error(password) UI.error("Could not download/upload from App Store Connect!") end |
#parse_provider_info(lines) ⇒ Object
343 344 345 346 347 348 349 350 351 352 353 354 |
# File 'fastlane_core/lib/fastlane_core/itunes_transporter.rb', line 343 def parse_provider_info(lines) # This tries parsing the provider id from altool output to detect provider list provider_info = {} json_body = lines[-2] # altool outputs result in second line from last return provider_info if json_body.nil? providers = JSON.parse(json_body)["providers"] return provider_info if providers.nil? providers.each do |provider| provider_info[provider["ProviderName"]] = provider["ProviderShortname"] end provider_info end |