fastlane: [!] undefined method `any?' for nil:NilClass (NoMethodError)

Since the Apple API update i have not been able to upload screenshots. Nothing changed in my fastfile but i keep getting this error. Im not sure how to fix this:

/usr/local/lib/ruby/gems/2.4.0/gems/fastlane-2.156.0/deliver/lib/deliver/upload_screenshots.rb:138:in block in upload_screenshots': [!] undefined method any?’ for nil:NilClass (NoMethodError) from /usr/local/lib/ruby/gems/2.4.0/gems/fastlane-2.156.0/deliver/lib/deliver/app_screenshot_iterator.rb:94:in block in iterate_over_screenshots_per_display_type' from /usr/local/lib/ruby/gems/2.4.0/gems/fastlane-2.156.0/deliver/lib/deliver/app_screenshot_iterator.rb:93:in each’ from /usr/local/lib/ruby/gems/2.4.0/gems/fastlane-2.156.0/deliver/lib/deliver/app_screenshot_iterator.rb:93:in with_index' from /usr/local/lib/ruby/gems/2.4.0/gems/fastlane-2.156.0/deliver/lib/deliver/app_screenshot_iterator.rb:93:in iterate_over_screenshots_per_display_type’ from /usr/local/lib/ruby/gems/2.4.0/gems/fastlane-2.156.0/deliver/lib/deliver/app_screenshot_iterator.rb:88:in block in iterate_over_screenshots_per_language' from /usr/local/lib/ruby/gems/2.4.0/gems/fastlane-2.156.0/deliver/lib/deliver/app_screenshot_iterator.rb:84:in each’ from /usr/local/lib/ruby/gems/2.4.0/gems/fastlane-2.156.0/deliver/lib/deliver/app_screenshot_iterator.rb:84:in iterate_over_screenshots_per_language' from /usr/local/lib/ruby/gems/2.4.0/gems/fastlane-2.156.0/deliver/lib/deliver/app_screenshot_iterator.rb:74:in block in each_local_screenshot’ from /usr/local/lib/ruby/gems/2.4.0/gems/fastlane-2.156.0/deliver/lib/deliver/app_screenshot_iterator.rb:73:in each' from /usr/local/lib/ruby/gems/2.4.0/gems/fastlane-2.156.0/deliver/lib/deliver/app_screenshot_iterator.rb:73:in each_local_screenshot’ from /usr/local/lib/ruby/gems/2.4.0/gems/fastlane-2.156.0/deliver/lib/deliver/upload_screenshots.rb:131:in upload_screenshots' from /usr/local/lib/ruby/gems/2.4.0/gems/fastlane-2.156.0/deliver/lib/deliver/upload_screenshots.rb:60:in upload’ from /usr/local/lib/ruby/gems/2.4.0/gems/fastlane-2.156.0/deliver/lib/deliver/runner.rb:123:in upload_metadata' from /usr/local/lib/ruby/gems/2.4.0/gems/fastlane-2.156.0/deliver/lib/deliver/runner.rb:42:in run’ from /usr/local/lib/ruby/gems/2.4.0/gems/fastlane-2.156.0/fastlane/lib/fastlane/actions/upload_to_app_store.rb:17:in run' from /usr/local/lib/ruby/gems/2.4.0/gems/fastlane-2.156.0/fastlane/lib/fastlane/runner.rb:263:in block (2 levels) in execute_action’ from /usr/local/lib/ruby/gems/2.4.0/gems/fastlane-2.156.0/fastlane/lib/fastlane/actions/actions_helper.rb:50:in execute_action' from /usr/local/lib/ruby/gems/2.4.0/gems/fastlane-2.156.0/fastlane/lib/fastlane/runner.rb:255:in block in execute_action’ from /usr/local/lib/ruby/gems/2.4.0/gems/fastlane-2.156.0/fastlane/lib/fastlane/runner.rb:229:in chdir' from /usr/local/lib/ruby/gems/2.4.0/gems/fastlane-2.156.0/fastlane/lib/fastlane/runner.rb:229:in execute_action’ from /usr/local/lib/ruby/gems/2.4.0/gems/fastlane-2.156.0/fastlane/lib/fastlane/runner.rb:157:in trigger_action_by_name' from /usr/local/lib/ruby/gems/2.4.0/gems/fastlane-2.156.0/fastlane/lib/fastlane/fast_file.rb:159:in method_missing’ from Fastfile:349:in block (2 levels) in parsing_binding' from /usr/local/lib/ruby/gems/2.4.0/gems/fastlane-2.156.0/fastlane/lib/fastlane/lane.rb:33:in call’ from /usr/local/lib/ruby/gems/2.4.0/gems/fastlane-2.156.0/fastlane/lib/fastlane/runner.rb:204:in try_switch_to_lane' from /usr/local/lib/ruby/gems/2.4.0/gems/fastlane-2.156.0/fastlane/lib/fastlane/runner.rb:146:in trigger_action_by_name’ from /usr/local/lib/ruby/gems/2.4.0/gems/fastlane-2.156.0/fastlane/lib/fastlane/fast_file.rb:159:in method_missing' from Fastfile:342:in block (3 levels) in parsing_binding’ from Fastfile:339:in each' from Fastfile:339:in block (2 levels) in parsing_binding’ from /usr/local/lib/ruby/gems/2.4.0/gems/fastlane-2.156.0/fastlane/lib/fastlane/lane.rb:33:in call' from /usr/local/lib/ruby/gems/2.4.0/gems/fastlane-2.156.0/fastlane/lib/fastlane/runner.rb:49:in block in execute’ from /usr/local/lib/ruby/gems/2.4.0/gems/fastlane-2.156.0/fastlane/lib/fastlane/runner.rb:45:in chdir' from /usr/local/lib/ruby/gems/2.4.0/gems/fastlane-2.156.0/fastlane/lib/fastlane/runner.rb:45:in execute’ from /usr/local/lib/ruby/gems/2.4.0/gems/fastlane-2.156.0/fastlane/lib/fastlane/lane_manager.rb:47:in cruise_lane' from /usr/local/lib/ruby/gems/2.4.0/gems/fastlane-2.156.0/fastlane/lib/fastlane/command_line_handler.rb:36:in handle’ from /usr/local/lib/ruby/gems/2.4.0/gems/fastlane-2.156.0/fastlane/lib/fastlane/commands_generator.rb:108:in block (2 levels) in run' from /usr/local/lib/ruby/gems/2.4.0/gems/commander-fastlane-4.4.6/lib/commander/command.rb:178:in call’ from /usr/local/lib/ruby/gems/2.4.0/gems/commander-fastlane-4.4.6/lib/commander/command.rb:153:in run' from /usr/local/lib/ruby/gems/2.4.0/gems/commander-fastlane-4.4.6/lib/commander/runner.rb:476:in run_active_command’ from /usr/local/lib/ruby/gems/2.4.0/gems/fastlane-2.156.0/fastlane_core/lib/fastlane_core/ui/fastlane_runner.rb:76:in run!' from /usr/local/lib/ruby/gems/2.4.0/gems/commander-fastlane-4.4.6/lib/commander/delegates.rb:15:in run!’ from /usr/local/lib/ruby/gems/2.4.0/gems/fastlane-2.156.0/fastlane/lib/fastlane/commands_generator.rb:352:in run' from /usr/local/lib/ruby/gems/2.4.0/gems/fastlane-2.156.0/fastlane/lib/fastlane/commands_generator.rb:41:in start’ from /usr/local/lib/ruby/gems/2.4.0/gems/fastlane-2.156.0/fastlane/lib/fastlane/cli_tools_distributor.rb:119:in take_off' from /usr/local/lib/ruby/gems/2.4.0/gems/fastlane-2.156.0/bin/fastlane:23:in <top (required)>’ from /usr/local/bin/fastlane:23:in load' from /usr/local/bin/fastlane:23:in <main>’

Could anybody point me in the right direction on how to fix this? We have several .ENV files, for now im only trying to update with one, all points to metadata folders.

Screenshot 2020-08-12 at 15 09 51

And the folder contains screenshots:

Screenshot 2020-08-12 at 15 10 19

The upload screenshot function looks like this:

####### ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Upload screenshots ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ########

desc “Upload all screenshots” lane :upload_all_screenshots do files = Dir[“env/.env.*”] files.each { |envfile| Dotenv.overload(envfile) upload_screenshots } end

desc “->upload screenshots” private_lane :upload_screenshots do

deliver(
  force: true,
  skip_screenshots: false,
  skip_binary_upload: true,
  overwrite_screenshots: true,
  app_identifier: ENV["APP_IDENTIFIER"],
  skip_metadata: false
)
move_env_to_done

end

Hope anybody can help, so i dont need to upload 250 apps screenshot localized in 5 languages to all screensizes by hand 😃

### Thank you fastlane bot:

🚫 fastlane environment 🚫

Stack

Key Value
OS 10.15.6
Ruby 2.4.2
Bundler? false
Git git version 2.7.1
Installation Source /usr/local/bin/fastlane
Host Mac OS X 10.15.6 (19G73)
Ruby Lib Dir /usr/local/Cellar/ruby/2.4.2_1/lib
OpenSSL Version OpenSSL 1.0.2l 25 May 2017
Is contained false
Is homebrew false
Is installed via Fabric.app false
Xcode Path /Applications/Xcode.app/Contents/Developer/
Xcode Version 11.6

System Locale

Error
No Locale with UTF8 found 🚫

fastlane files:

`./fastlane/Fastfile`


# Customise this file, documentation can be found here:
# https://github.com/fastlane/fastlane/tree/master/fastlane/docs
# All available actions: https://docs.fastlane.tools/actions
# can also be listed using the `fastlane actions` command

# Change the syntax highlighting to Ruby
# All lines starting with a # are ignored when running `fastlane`

# If you want to automatically update fastlane if a new version is available:
# update_fastlane

# This is the minimum version number required.
# Update this, if you use features of a newer version
# git clone https://username@github.com/username/repository.git

fastlane_version "2.54.0"

  #######----------------------------------------- Fastlane -----------------------------------########

#require 'env/'
require('dotenv')#.config(path: 'env/')
#Dotenv.
#require('dotenv')
#Dotenv.load('env/')

path_to_envfiles = "env/"
default_platform :ios

progress_file_path = "Parameters/Progress.txt"


# Bliver kørt først
platform :ios do
  before_all do|lane, options|

    UI.header "Disse er envfiler bliver kørt:"

    files = Dir["env/.env.*"]
    files.each { |envfile|
      Dotenv.overload(envfile)

        UI.command_output "#{ENV["SCHEME"]}"

    }

    sh "ruby ./assets/GenerateManual.rb"

    File.open(progress_file_path, 'w') {}
    progressvalue = "first"
    open(progress_file_path, 'a') { |file| file.puts progressvalue }

    # puts("before_all" + lane_context[SharedValues::ENVIRONMENT])
    #
    #   if lane_context[SharedValues::ENVIRONMENT]!=nil
    #     puts("before_all er ikke nil")
    #   Dotenv.overload("env/.env." + lane_context[SharedValues::ENVIRONMENT])
    # else
    #   puts("before_all er nil")
    #   Dotenv.overload(path_to_envfiles)
    #   lane_context[SharedValues::ENVIRONMENT] = path_to_envfiles
    # end

    #clear_derived_data
    set_environment_variables options
    #cocoapods
    # ENV["SLACK_URL"] = "https://hooks.slack.com/services/..."
  end

  before_each do |lane, options|


    unless ENV["SCHEME"] == nil

      progressvalue = "running #{lane_context[SharedValues::LANE_NAME]} for " + ENV["SCHEME"]
      open(progress_file_path, 'a') { |file| file.puts progressvalue }

    end

    #puts("before_each" + lane_context[SharedValues::ENVIRONMENT])
    #  if lane_context[SharedValues::ENVIRONMENT]!=nil
    #    puts("before_each er ikke nil")
    #    Dotenv.overload("env/.env." + lane_context[SharedValues::ENVIRONMENT])
    #   else
    #     puts("before_each er nil")
    #     Dotenv.overload(path_to_envfiles)
    #     lane_context[SharedValues::ENVIRONMENT] = path_to_envfiles
    # end
    #puts("before_each" + lane_context[SharedValues::ENVIRONMENT])
  end

    #######----------------------------------------- Test -----------------------------------########

  desc "Til test"
  lane :test_plist_all do
    files = Dir["env/.env.*"]
    files.each { |envfile|
      Dotenv.overload(envfile)
      test_plist
      puts "cd .. && fastlane get_metadata --env " + envfile.gsub('env/.env.', '')

    }

  end

  desc "->Build and upload app + metadata (not screenshots) to iTunesConnect"
  private_lane :test_plist do
    puts("test_plist")
    puts(ENV["PLIST_PATH"])

    plist = get_info_plist_value(path: ENV["PLIST_PATH"], key: "CFBundleShortVersionString")
    puts(plist)
    watch_plist = get_info_plist_value(path: ENV["PLIST_WATCH_PATH"], key: "CFBundleDisplayName")
    puts(watch_plist)
    watch_extension_plist = get_info_plist_value(path: ENV["PLIST_WATCH_EXTENSION_PATH"], key: "CFBundleDisplayName")
    puts(watch_extension_plist)
    settings_plist = get_info_plist_value(path: ENV["PLIST_SETTINGS_PATH"], key: "api_login_url")
    puts(settings_plist)


  end

  desc "Til test"
  lane :get_all_env do


    files = Dir["env/.env.*"]
    files.each { |envfile|
      Dotenv.overload(envfile)
        puts( "#{ENV["SCHEME"]}")
    }

    #puts(envfile)
    ##files = files.map { |x| x.gsub('', '') }
    #path_to_envfiles = envfile
    #lane_context[SharedValues::ENVIRONMENT] = envfile
    #update_versionnumber

    #lane_context[SharedValues::ENVIRONMENT] = envfile.gsub('env/.env.', '')

  end

  #######----------------------------------- create new 'app' on AppStore ------------------------------########

  desc "create new 'app' in itunes connect and downloads metadata and screenshots afterwards"
  lane :create_appstore_all do

    files = Dir["env/.env.*"]
    files.each { |envfile|
      Dotenv.overload(envfile)

      create_appstore

    }

    get_metadata_all
    get_screenshots_all
    update_app_description_all
    update_metadata_all
    copy_default_screenshots_all
    make_provisioning_profiles_all
  end

  desc "->create new app in itunes connect and downloads metadata and screenshots afterwards"
  private_lane :create_appstore do
    produce(
      app_identifier: ENV["APP_IDENTIFIER"],
      sku: ENV["APP_IDENTIFIER"],
      app_name: ENV["APPSTORE_NAME"],
      language: 'Danish',
      app_version: '1.0'

      # Optional
      # App services can be enabled during app creation
      #  enable_services: {
      #company_name: 'Wichtel Akademie München GmbH'
      #    app_group: "on"               # Valid values: "on", "off"
      #    apple_pay: "on"               # Valid values: "on", "off"
      #    associated_domains: "on"      # Valid values: "on", "off"
      #    data_protection: "complete"   # Valid values: "complete", "unlessopen", "untilfirstauth"
      #    game_center: "on"             # Valid values: "on", "off"
      #    health_kit: "on"              # Valid values: "on", "off"
      #    home_kit: "on"                # Valid values: "on", "off"
      #    wireless_accessory: "on"      # Valid values: "on", "off"
      #    icloud: "cloudkit"            # Valid values: "legacy", "cloudkit"
      #    in_app_purchase: "on"         # Valid values: "on", "off"
      #    inter_app_audio: "on"         # Valid values: "on", "off"
      #    passbook: "on"                # Valid values: "on", "off"
      #    push_notification: "on"       # Valid values: "on", "off"
      #    siri_kit: "on"                # Valid values: "on", "off"
      #    vpn_configuration: "on"       # Valid values: "on", "off"
      # }
    )
    move_env_to_done
  end

  #######----------------------------------------- appstore_upload ----------------------------------------########

  desc "Build and upload all apps + metadata (not screenshots) to iTunesConnect"
  lane :appstore_upload_all do

    files = Dir["env/.env.*"]
    files.each { |envfile|
      Dotenv.overload(envfile)
      appstore_upload
    }
  end

  desc "->Build and upload app + metadata (not screenshots) to iTunesConnect"
  private_lane :appstore_upload do

    update_versionnumber

    gym

    deliver(
      force: true,
      skip_screenshots: false,
      skip_binary_upload: false,
      overwrite_screenshots: true,
      app_identifier: ENV["APP_IDENTIFIER"],
      ipa: "fastlane/ipa/" + ENV["SCHEME"] + ".ipa",
      skip_metadata: true,
    )

    deliver(
      force: true,
      skip_screenshots: true,
      skip_binary_upload: true,
      overwrite_screenshots: false,
      app_identifier: ENV["APP_IDENTIFIER"],
      skip_metadata: false,
    )

    remove_ipa_file
    move_env_to_done
  end

  #######----------------------------------------- testflight_upload -----------------------------------########

  desc "Upload multible new Builds to TestFlight"
  lane :testflight_upload_all do

    files = Dir["env/.env.*"]
    files.each { |envfile|
      Dotenv.overload(envfile)

      testflight_upload

    }

  end

  desc "->Upload a new Build to TestFlight"
  private_lane :testflight_upload do

    update_versionnumber
    gym

    pilot(
      skip_submission: true,
      skip_waiting_for_build_processing: true,
      app_identifier: ENV["APP_IDENTIFIER"],
      ipa: "fastlane/ipa/" + ENV["SCHEME"] + ".ipa",
    )

    remove_ipa_file
    move_env_to_done

  end

  ####### ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Upload ipa ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ########

  desc "Upload all ipa"
  lane :upload_ipa_all do
    files = Dir["env/.env.*"]
    files.each { |envfile|
      Dotenv.overload(envfile)
      upload_ipa
    }
  end

   desc "->upload ipa"
  private_lane :upload_ipa do

    update_versionnumber

    gym

    deliver(
      force: true,
      skip_screenshots: true,
      skip_binary_upload: false,
      overwrite_screenshots: false,
      app_identifier: ENV["APP_IDENTIFIER"],
      skip_metadata: true
    )
    move_env_to_done
  end

  ####### ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Upload metadata ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ########


  desc "Upload all metadata"
  lane :upload_all_metadata do
    files = Dir["env/.env.*"]
    files.each { |envfile|
      Dotenv.overload(envfile)
      upload_metadata
    }
  end

   desc "->upload metadata"
  private_lane :upload_metadata do

    deliver(
      force: true,
      skip_screenshots: true,
      skip_binary_upload: true,
      overwrite_screenshots: false,
      app_identifier: ENV["APP_IDENTIFIER"],
      skip_metadata: false
    )
    move_env_to_done
  end

  ####### ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Upload screenshots ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ########

  desc "Upload all screenshots"
  lane :upload_all_screenshots do
    files = Dir["env/.env.*"]
    files.each { |envfile|
puts("MORTEN DEBUG " + envfile)
      Dotenv.overload(envfile)
      upload_screenshots
    }
  end

   desc "->upload screenshots"
  private_lane :upload_screenshots do

    deliver(
      force: true,
      skip_screenshots: false,
      skip_binary_upload: true,
      overwrite_screenshots: true,
      app_identifier: ENV["APP_IDENTIFIER"],
      skip_metadata: false
    )
    move_env_to_done
  end

  ####### ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Add Test Devices ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ########

  desc "Add test devices"
  lane :add_all_test_devices do
    files = Dir["env/.env.*"]
    files.each { |envfile|
      Dotenv.overload(envfile)
      add_all_testdevices
    }
  end

  private_lane :add_all_testdevices do

	register_devices(
  	devices: {
    	"Test Device 1" => "xxxxxxxxx",
    	"Test Device 2" => "xxxxxxxxx",
	"Test Device 3" => "xxxxxxxxx",
	"Test Device 4" => "xxxxxxxxx",
	"Test Device 5" => "xxxxxxxxx",
	"Test Device 5" => "xxxxxxxxx"
  	}
)
    move_env_to_done
  end

   #######----------------------------------------- send_to_review -----------------------------------########

  desc "Send all apps to review"
  lane :send_to_review_all do

    files = Dir["env/.env.*"]
    files.each { |envfile|
      Dotenv.overload(envfile)
      send_to_review
	puts "waiting 5 minuts until sending the next to review"
	sleep(300)
    }
  end

  desc "->Send app to appstore"
  private_lane :send_to_review do

    ENV["DELIVER_FORCE_OVERWRITE"] = "1"

    deliver(
      app_identifier: ENV["APP_IDENTIFIER"],
      force: true,
      skip_screenshots: true,
      skip_app_version_update: true,
      skip_metadata: true,
      skip_binary_upload: true,
      submit_for_review: true,
      automatic_release: true,
      reset_ratings: true
    )
    move_env_to_done
  end

  ####### ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Download data ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ########


  desc "Download both current metadata and screenshots from AppStore, for all apps, to the metadata/<customer>/ folder"
  lane :get_metadata_and_screenshots_all do

    files = Dir["env/.env.*"]
    files.each { |envfile|
      Dotenv.overload(envfile)

      get_metadata
      get_screenshots
      move_env_to_done
    }

  end

  desc "Download current metadata from AppStore, for all apps, to the metadata/<customer>/ folder"
  lane :get_metadata_all do

    files = Dir["env/.env.*"]
    files.each { |envfile|
      Dotenv.overload(envfile)

      get_metadata
      move_env_to_done
    }
  end

  desc "->Download current metadata from AppStore to the metadata/<customer>/ folder"
  private_lane :get_metadata do
    ENV["DELIVER_FORCE_OVERWRITE"] = "1" #denne sørger for at der ikke bliver sagt nej til at overskrive. Hvis denne ikke er her bliver der ikke hentet noget.
    sh "fastlane deliver download_metadata --app_identifier #{ENV['APP_IDENTIFIER']} --metadata_path #{ENV['METADATA_PATH']}"

  end

  desc "Download current screenshots from AppStore, for all apps, to the metadata/<customer>/screenshots/ folder"
  lane :get_screenshots_all do

    files = Dir["env/.env.*"]
    files.each { |envfile|
      Dotenv.overload(envfile)

      get_screenshots
      move_env_to_done
    }

  end

  desc "->Download current screenshots from AppStore to the metadata/<customer>/screenshots/ folder"
  private_lane :get_screenshots do
    ENV["DELIVER_FORCE_OVERWRITE"] = "1" #denne sørger for at der ikke bliver sagt nej til at overskrive. Hvis denne ikke er her bliver der ikke hentet noget.
    sh "fastlane deliver download_screenshots --app_identifier #{ENV['APP_IDENTIFIER']} --screenshots_path #{ENV['SCREENSHOTS_PATH']}"
  end

  desc "Generate a html preview from local metadata for all apps"
  lane :get_summary_all do

    files = Dir["env/.env.*"]
    files.each { |envfile|
      Dotenv.overload(envfile)

      get_summary

    }

  end

  desc "->Generate a html preview from local metadata"
  private_lane :get_summary do
    ENV["DELIVER_FORCE_OVERWRITE"] = "1" #denne sørger for at der ikke bliver sagt nej til at overskrive. Hvis denne ikke er her bliver der ikke hentet noget.
      sh "cd .. && fastlane deliver generate_summary" # html_path #{ENV['METADATA_PATH']}"
  #  deliver(
  #    generate_summary
  #    #app_identifier: ENV["APP_IDENTIFIER"]
  #  )
  move_env_to_done
  end

  ####### ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Update metadata on disc ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ########


	  #######-----------------------------------------copy_default_screenshots -----------------------------------########

  desc "Copies default screenshots from the /Parameters/DefaultScreenShots folder to the Metadata folder for all apps."
  lane :copy_default_screenshots_all do

    files = Dir["env/.env.*"]
    files.each { |envfile|
      Dotenv.overload(envfile)
      copy_default_screenshots
    }

  end

  desc "->Copies default screenshots from the /Parameters/DefaultScreenShots folder to the Metadata folder"
  private_lane :copy_default_screenshots do
    path = ENV["METADATA_PATH"] + "/da/"
    if Dir.exist?(path)
      img_dir = Dir["Parameters/DefaultScreenShots/da"]
      FileUtils.cp_r(img_dir, ENV["SCREENSHOTS_PATH"])
    end
    path = ENV["METADATA_PATH"] + "/fr-FR/"
    if Dir.exist?(path)
      img_dir = Dir["Parameters/DefaultScreenShots/fr-FR"]
      FileUtils.cp_r(img_dir, ENV["SCREENSHOTS_PATH"])
    end
    path = ENV["METADATA_PATH"] + "/en-US/"
    if Dir.exist?(path)
      img_dir = Dir["Parameters/DefaultScreenShots/en-GB"]
      FileUtils.cp_r(img_dir, ENV["SCREENSHOTS_PATH"])
    end
    path = ENV["METADATA_PATH"] + "/en-GB/"
    if Dir.exist?(path)
      img_dir = Dir["Parameters/DefaultScreenShots/en-GB"]
      FileUtils.cp_r(img_dir, ENV["SCREENSHOTS_PATH"])
    end
    path = ENV["METADATA_PATH"] + "/de-DE/"
    if Dir.exist?(path)
      img_dir = Dir["Parameters/DefaultScreenShots/de-DE"]
      FileUtils.cp_r(img_dir, ENV["SCREENSHOTS_PATH"])
    end
    path = ENV["METADATA_PATH"] + "/no/"
    if Dir.exist?(path)
      img_dir = Dir["Parameters/DefaultScreenShots/no"]
      FileUtils.cp_r(img_dir, ENV["SCREENSHOTS_PATH"])
    end
    path = ENV["METADATA_PATH"] + "/ja/"
    if Dir.exist?(path)
      img_dir = Dir["Parameters/DefaultScreenShots/ja"]
      FileUtils.cp_r(img_dir, ENV["SCREENSHOTS_PATH"])
    end
    move_env_to_done
  end


	  #######----------------------------------------- update_metadata -----------------------------------########

  desc "Update name.txt, marketing_url.txt, support_url.txt and keywords.txt for all apps. The metadata is defined in the env file"
  lane :update_metadata_all do
    files = Dir["env/.env.*"]
    files.each { |envfile|
      Dotenv.overload(envfile)
      update_metadata
    }
  end

  desc "->Update name.txt, marketing_url.txt, support_url.txt and keywords.txt. The metadata is defined in the env file"
  private_lane :update_metadata do
    path = ENV["METADATA_PATH"] + "/da/"
    if Dir.exist?(path)
      IO.write(path + "keywords.txt", ENV["APPSTORE_KEYWORDS_DK"])
      IO.write(path + "marketing_url.txt", "https://nemborn.com")
      IO.write(path + "support_url.txt", "https://nemborn.com")
      IO.write(path + "name.txt", ENV["APPSTORE_NAME"])
    end
    path = ENV["METADATA_PATH"] + "/fr-FR/"
    if Dir.exist?(path)
      IO.write(path + "keywords.txt", ENV["APPSTORE_KEYWORDS_FR"])
      IO.write(path + "marketing_url.txt", "https://nemborn.com")
      IO.write(path + "support_url.txt", "https://nemborn.com")
      IO.write(path + "name.txt", ENV["APPSTORE_NAME"])
    end
    path = ENV["METADATA_PATH"] + "/en-US/"
    if Dir.exist?(path)
      IO.write(path + "keywords.txt", ENV["APPSTORE_KEYWORDS_ENG"])
      IO.write(path + "marketing_url.txt", "https://nemborn.com")
      IO.write(path + "support_url.txt", "https://nemborn.com")
      IO.write(path + "name.txt", ENV["APPSTORE_NAME"])
    end
    path = ENV["METADATA_PATH"] + "/en-GB/"
    if Dir.exist?(path)
      IO.write(path + "keywords.txt", ENV["APPSTORE_KEYWORDS_ENG"])
      IO.write(path + "marketing_url.txt", "https://nemborn.com")
      IO.write(path + "support_url.txt", "https://nemborn.com")
      IO.write(path + "name.txt", ENV["APPSTORE_NAME"])
    end
    path = ENV["METADATA_PATH"] + "/de-DE/"
    if Dir.exist?(path)
      IO.write(path + "keywords.txt", ENV["APPSTORE_KEYWORDS_GER"])
      IO.write(path + "marketing_url.txt", "https://nemborn.com")
      IO.write(path + "support_url.txt", "https://nemborn.com")
      IO.write(path + "name.txt", ENV["APPSTORE_NAME"])
    end
    path = ENV["METADATA_PATH"] + "/no/"
    if Dir.exist?(path)
      IO.write(path + "keywords.txt", ENV["APPSTORE_KEYWORDS_NO"])
      IO.write(path + "marketing_url.txt", "https://nemborn.com")
      IO.write(path + "support_url.txt", "https://nemborn.com")
      IO.write(path + "name.txt", ENV["APPSTORE_NAME"])
    end
    path = ENV["METADATA_PATH"] + "/ja/"
    if Dir.exist?(path)
      IO.write(path + "keywords.txt", ENV["APPSTORE_KEYWORDS_ENG"])
      IO.write(path + "marketing_url.txt", "https://nemborn.com")
      IO.write(path + "support_url.txt", "https://nemborn.com")
      IO.write(path + "name.txt", ENV["APPSTORE_NAME"])
    end
    if Dir.exist?(ENV["METADATA_PATH"])
      IO.write(ENV["METADATA_PATH"] + "/copyright.txt", "#{Time.now.year} Test A/S")
    end

    move_env_to_done
  end


	  #######----------------------------------------- update_app_description -----------------------------------########


  desc "Update description for all apps. The description is defined in the 'Parameters/description_<language>.txt' file"

  lane :update_app_description_all do
    files = Dir["env/.env.*"]
    files.each { |envfile|
      Dotenv.overload(envfile)
      update_app_description
    }
  end

  desc "->Update description. The description is defined in the 'Parameters/description_<language>.txt' file"
  private_lane :update_app_description do
    path = ENV["METADATA_PATH"] + "/da/description.txt"
    if File.exist?(path)
      File.open(path, 'w') {} #tømmer tidligere indhold
      File.foreach('Parameters/description_danish.txt') { |f|
        name = f.gsub("##APPSTORE_NAME##",ENV["APPSTORE_NAME"])
        cus = name.gsub("##CUSTOMER_NAME##",ENV["CUSTOMER_NAME"])
        open(path, 'a') { |file|
          file.puts cus
        }
      }
    end
    path = ENV["METADATA_PATH"] + "/fr-FR/description.txt"
    if File.exist?(path)
      File.open(path, 'w') {} #tømmer tidligere indhold
      File.foreach('Parameters/description_french.txt') { |f|
        name = f.gsub("##APPSTORE_NAME##",ENV["APPSTORE_NAME"])
        cus = name.gsub("##CUSTOMER_NAME##",ENV["CUSTOMER_NAME"])
        open(path, 'a') { |file|
          file.puts cus
        }
      }
    end
    path = ENV["METADATA_PATH"] + "/en-US/description.txt"
    if File.exist?(path)
      File.open(path, 'w') {} #tømmer tidligere indhold
      File.foreach('Parameters/description_english.txt')  { |f|
        name = f.gsub("##APPSTORE_NAME##",ENV["APPSTORE_NAME"])
        cus = name.gsub("##CUSTOMER_NAME##",ENV["CUSTOMER_NAME"])
        open(path, 'a') { |file|
          file.puts cus
        }
      }
    end
    path = ENV["METADATA_PATH"] + "/en-GB/description.txt"
    if File.exist?(path)
      File.open(path, 'w') {} #tømmer tidligere indhold
      File.foreach('Parameters/description_english.txt')  { |f|
        name = f.gsub("##APPSTORE_NAME##",ENV["APPSTORE_NAME"])
        cus = name.gsub("##CUSTOMER_NAME##",ENV["CUSTOMER_NAME"])
        open(path, 'a') { |file|
          file.puts cus
        }
      }
    end
    path = ENV["METADATA_PATH"] + "/de-DE/description.txt"
    if File.exist?(path)
      File.open(path, 'w') {} #tømmer tidligere indhold
      File.foreach('Parameters/description_german.txt') { |f|
        name = f.gsub("##APPSTORE_NAME##",ENV["APPSTORE_NAME"])
        cus = name.gsub("##CUSTOMER_NAME##",ENV["CUSTOMER_NAME"])
        open(path, 'a') { |file|
          file.puts cus
        }
      }
    end
    path = ENV["METADATA_PATH"] + "/no/description.txt"
    if File.exist?(path)
      File.open(path, 'w') {} #tømmer tidligere indhold
      File.foreach('Parameters/description_norwegian.txt') { |f|
        name = f.gsub("##APPSTORE_NAME##",ENV["APPSTORE_NAME"])
        cus = name.gsub("##CUSTOMER_NAME##",ENV["CUSTOMER_NAME"])
        open(path, 'a') { |file|
          file.puts cus
        }
      }
    end
    path = ENV["METADATA_PATH"] + "/ja/description.txt"
    if File.exist?(path)
      File.open(path, 'w') {} #tømmer tidligere indhold
      File.foreach('Parameters/description_japanese.txt')  { |f|
        name = f.gsub("##APPSTORE_NAME##",ENV["APPSTORE_NAME"])
        cus = name.gsub("##CUSTOMER_NAME##",ENV["CUSTOMER_NAME"])
        open(path, 'a') { |file|
          file.puts cus
        }
      }
    end
    path = ENV["METADATA_PATH"] + "/no/description.txt"
    if File.exist?(path)
      File.open(path, 'w') {} #tømmer tidligere indhold
      File.foreach('Parameters/description_no.txt')  { |f|
        name = f.gsub("##APPSTORE_NAME##",ENV["APPSTORE_NAME"])
        cus = name.gsub("##CUSTOMER_NAME##",ENV["CUSTOMER_NAME"])
        open(path, 'a') { |file|
          file.puts cus
        }
      }
    end
    move_env_to_done
  end

	  #######----------------------------------------- update_releasenotes -----------------------------------########


  desc "Update releasenotes for all apps. The release-notes are defined in the 'Parameters/release_notes_<language>.txt' file"

  lane :update_releasenotes_all do
    puts("\n\n-----------------------------Release notes--------------------\n\n")
    file = File.open("Parameters/release_notes_danish.txt", "rb")
    puts("Danish releasenotes:-------- \n\n\t\t" + file.read.gsub(/\n/,"\n\t\t") + "\n")
    file = File.open("Parameters/release_notes_english.txt", "rb")
    puts("English releasenotes:-------- \n\n\t\t" + file.read.gsub(/\n/,"\n\t\t") + "\n")
    file = File.open('Parameters/release_notes_french.txt', "rb")
    puts("French releasenotes:-------- \n\n\t\t" + file.read.gsub(/\n/,"\n\t\t") + "\n")
    file = File.open('Parameters/release_notes_german.txt', "rb")
    puts("German releasenotes:-------- \n\n\t\t" + file.read.gsub(/\n/,"\n\t\t") + "\n")
    file = File.open('Parameters/release_notes_norwegian.txt', "rb")
    puts("norwegian releasenotes:-------- \n\n\t\t" + file.read.gsub(/\n/,"\n\t\t") + "\n")
    file = File.open('Parameters/release_notes_japanese.txt', "rb")
    puts("Japanese releasenotes:------- \n\n\t\t" + file.read.gsub(/\n/,"\n\t\t") + "\n")
    puts("\n\n-----------------------------Release notes--------------------\n\n")

    files = Dir["env/.env.*"]
    files.each { |envfile|
      Dotenv.overload(envfile)
      update_releasenotes
    }

  end

  desc "->Update releasenotes. The releasenotes is defined in the 'ReleaseNotes/release_notes_<language>.txt' file"
  private_lane :update_releasenotes do
    path = ENV["METADATA_PATH"] + "/da/release_notes.txt"
    if File.exist?(path)
      File.open('Parameters/release_notes_danish.txt') do |f|
        IO.write(path, f.read)
      end
    end
    path = ENV["METADATA_PATH"] + "/fr-FR/release_notes.txt"
    if File.exist?(path)
      File.open('Parameters/release_notes_french.txt') do |f|
        IO.write(path, f.read)
      end
    end
    path = ENV["METADATA_PATH"] + "/en-US/release_notes.txt"
    if File.exist?(path)
      File.open('Parameters/release_notes_english.txt') do |f|
        IO.write(path, f.read)
      end
    end
    path = ENV["METADATA_PATH"] + "/en-GB/release_notes.txt"
    if File.exist?(path)
      File.open('Parameters/release_notes_english.txt') do |f|
        IO.write(path, f.read)
      end
    end
    path = ENV["METADATA_PATH"] + "/de-DE/release_notes.txt"
    if File.exist?(path)
      File.open('Parameters/release_notes_german.txt') do |f|
        IO.write(path, f.read)
      end
    end
    path = ENV["METADATA_PATH"] + "/no/release_notes.txt"
    if File.exist?(path)
      File.open('Parameters/release_notes_norwegian.txt') do |f|
        IO.write(path, f.read)
      end
    end
    path = ENV["METADATA_PATH"] + "/ja/release_notes.txt"
    if File.exist?(path)
      File.open('Parameters/release_notes_japanese.txt') do |f|
        IO.write(path, f.read)
      end
    end
    move_env_to_done
  end

  desc "Update all release notes, metadata, description"
  lane :update_all_type_of_metadata do

    files = Dir["env/.env.*"]
    files.each { |envfile|
      Dotenv.overload(envfile)
      update_releasenotes
	update_app_description
	update_metadata
    }
  end



    #######----------------------------------------- update_versionnumber -----------------------------------########

    desc "Update_versionnumber læser versions-nr fra Parameters/version_number.txt filen"
    desc "Hvis dette er det samme, som i versions-nummeret p-listen opdateres build-nummeret i p-listen"
    desc "Hvis dette er højere end versions-nummeret p-listen opdateresversions-nummeret i p-listen til det nye versions-nummer"

    lane :update_versionnumber do
      puts("Update_versionnumber")
      puts(ENV["PLIST_PATH"])
      appType = ENV["TYPE"]

      version_number_plist = get_info_plist_value(path: ENV["PLIST_PATH"], key: "CFBundleShortVersionString") #læser versionsnr fra plist
      build_number_plist = get_info_plist_value(path: ENV["PLIST_PATH"], key: "CFBundleVersion") #læser buildnr fra plist
      version_number_file = File.foreach('Parameters/version_number.txt').first # læser første linje i Parameters/version_number.txt aka defineret versionsnumber
      #build_number_plist = latest_testflight_build_number(version: version_number_file, app_identifier: ENV["APP_IDENTIFIER"]) # ind kommenter for at sætte build-nummeret til det nyeste fra testflight
      unless version_number_file == "\n" # Checker om der står noget i Parameters/version_number.txt filen
        version_number_file = version_number_file.gsub(/\n/,"")
        clean_version_number_plist = version_number_plist.gsub(".","")
        clean_version_number_file =  version_number_file.gsub(".","")
        if clean_version_number_plist == clean_version_number_file # Hvis versionnummer i Parameters/version_number.txt og plist er de samme lægges der bare 1 til build-nummeret.
          new_build_number_plist = build_number_plist.to_i + 1
          set_info_plist_value(path: ENV["PLIST_PATH"], key: "CFBundleVersion", value: "#{new_build_number_plist}") # Skriver nyt Build-number i plisten
          if appType["parent"]
            puts("########################################################")
            set_info_plist_value(path: ENV["PLIST_WATCH_PATH"], key: "CFBundleVersion", value: "#{new_build_number_plist}") # Build-number sættes til 1 i plisten
            set_info_plist_value(path: ENV["PLIST_WATCH_EXTENSION_PATH"], key: "CFBundleVersion", value: "#{new_build_number_plist}") # Build-number sættes til 1 i plisten

          end
          puts("Build-number opdateret til: #{new_build_number_plist}")
        elsif clean_version_number_plist.to_i < clean_version_number_file.to_i # Hvis versions-nummeret i Parameters/version_number.txt filen er højere end versions-nummeret i plisten
          set_info_plist_value(path: ENV["PLIST_PATH"], key: "CFBundleShortVersionString", value: version_number_file) # Skriver nyt versions-nummer i plisten
          set_info_plist_value(path: ENV["PLIST_PATH"], key: "CFBundleVersion", value: "1") # Build-number sættes til 1 i plisten
          if appType["parent"]
            puts("########################################################")
            set_info_plist_value(path: ENV["PLIST_WATCH_PATH"], key: "CFBundleShortVersionString", value: version_number_file) # Skriver nyt versions-nummer i plisten
            set_info_plist_value(path: ENV["PLIST_WATCH_PATH"], key: "CFBundleVersion", value: "1") # Build-number sættes til 1 i plisten
            set_info_plist_value(path: ENV["PLIST_WATCH_EXTENSION_PATH"], key: "CFBundleShortVersionString", value: version_number_file) # Skriver nyt versions-nummer i plisten
            set_info_plist_value(path: ENV["PLIST_WATCH_EXTENSION_PATH"], key: "CFBundleVersion", value: "1") # Build-number sættes til 1 i plisten

          end
          puts("Version-nummeret opdateret til: #{version_number_file} i plisten")
          puts("Build-nummeret sat til 1 i plisten")
        else
          puts("Versions-nummeret i din pliste er højere end versions-nummeret i din Parameters/version_number.txt fil")
        end
      else
        puts("Der er ikke angivet et vertionsnummer i Parameters/version_number.txt")
      end
    end

  ####### ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ANDET ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ########

  #######----------------------------------------- ProvisioningProfiles -----------------------------------########

  desc "Make provisionProfiles for all apps. Distribution and develop. The name is defined in the envFile The certificate is saved in ~/Certificates/ and ~/Certificates/Test/ (These folders have to exist)"
  lane :make_provisioning_profiles_all do
    files = Dir["env/.env.*"]
    files.each { |envfile|
      Dotenv.overload(envfile)
      make_provisioning_profiles
      #sh "cd .. && fastlane get_metadata --env " + envfile.gsub('env/.env.', '')
    }
  end

  desc "->Make provisionProfiles. The certificate is saved in ~/Certificates/Test"
  private_lane :make_provisioning_profiles do

    sigh(
      force: true,
      app_identifier: ENV["APP_IDENTIFIER"],
      output_path: "~/Certificates/",
      filename: ENV["PROVISIONING_PROFILE_NAME"] + ".mobileprovision",
      provisioning_name: ENV["PROVISIONING_PROFILE_NAME"]
    )

    sigh(
      force: true,
      app_identifier: ENV["APP_IDENTIFIER"],
      output_path: "~/Certificates/Test/",
      development: true,
      filename: ENV["PROVISIONING_PROFILE_NAME"] + " TEST.mobileprovision",
      provisioning_name: ENV["PROVISIONING_PROFILE_NAME"] + " TEST"
    )
    move_env_to_done

  end

    #######----------------------------------------- TestFlight testing -----------------------------------########

    desc "Invite testers to test multiple apps on TestFlight. Testers are defined in ./assets/testflight_testers.csv"
    lane :testflight_add_default_testers_all do

      files = Dir["env/.env.*"]
      files.each { |envfile|
        Dotenv.overload(envfile)
        testflight_add_default_testers
      }
    end

    desc "->Invite testers to test apps on TestFlight"
    private_lane :testflight_add_default_testers do

      sh "fastlane pilot import -c ./assets/testflight_testers.csv -a #{ENV['APP_IDENTIFIER']}"
move_env_to_done
    end


    desc "Invite user to test multiple apps on TestFlight !!!Remember to change apple_id"
    lane :testflight_add_tester_all do

      files = Dir["env/.env.*"]
      files.each { |envfile|
        Dotenv.overload(envfile)

        testflight_add_tester

      }

    end

    desc "->Invite user to test app on TestFlight !!!Remember to change apple_id"
    private_lane :testflight_add_tester do

move_env_to_done
    end

  ##------------------------------------------------ Helpers ----------------------------------------##

desc "->If folder named env/done. The envFile is moved after use"
  private_lane :move_env_to_done do

    if File.exist?("env/.env.#{ENV["ENVNAME"]}") && Dir.exist?("env/done")
    File.rename "env/.env.#{ENV["ENVNAME"]}", "env/done/.env.#{ENV["ENVNAME"]}"
    end
  end

  desc "->Delete ipa file and dSYM file"
  private_lane :remove_ipa_file do

    if File.exist?("ipa/#{ENV["SCHEME"]}.ipa")
      File.delete("ipa/#{ENV["SCHEME"]}.app.dSYM.zip")
      File.delete("ipa/#{ENV["SCHEME"]}.ipa")
    end
  end


  desc "->Set the common environment variables for all lanes run"
  private_lane :set_environment_variables do |options|

    appleId = ENV["APPLE_ID"] || options[:apple_id]
    ENV["PILOT_USERNAME"] = appleId
    ENV["SIGH_USERNAME"] = appleId
    ENV["PEM_USERNAME"] = appleId
    ENV["CERT_USERNAME"] = appleId
    ENV["PRODUCE_USERNAME"] = appleId
    ENV["DELIVER_ITMSTRANSPORTER_ADDITIONAL_UPLOAD_PARAMETERS"] = "-t DAV"
    ENV["FASTLANE_ITC_TEAM_ID"] = ENV["ITC_TEAM"] || ''
    ENV["FASTLANE_APPLE_APPLICATION_SPECIFIC_PASSWORD"]= "xxxxxxxxx"
  end


desc "->Runs after each lane is called"
  after_each do |lane, options|
    unless ENV["SCHEME"] == nil
      progressvalue = "ended #{lane_context[SharedValues::LANE_NAME]} for " + ENV["SCHEME"]
      lines = File.read(progress_file_path)
      lines = lines.strip.split("\n")
      lines.pop
      File.open(progress_file_path, "w+") do |f|
        f.puts(lines)
      end
      open(progress_file_path, 'a') { |file| file.puts progressvalue }
    end
  end

desc "->Runs after all is done"
  after_all do |lane|
    # This block is called, only if the executed lane was successful

    unless ENV["SCHEME"] == nil
      progressvalue = "#{lane_context[SharedValues::LANE_NAME]} Alldone"
      open(progress_file_path, 'a') { |file| file.puts progressvalue }
    end

    notification(
      subtitle: "#{lane_context[SharedValues::LANE_NAME]} gik godt" ,
      message: "Hurra"
    )

  end

desc "->executed id error"
  error do |lane, exception|

    unless ENV["SCHEME"] == nil
      progressvalue = "#{lane_context[SharedValues::LANE_NAME]} Error with " + ENV["SCHEME"] + "\nError:\n#{exception.message}"
      open(progress_file_path, 'a') { |file| file.puts progressvalue }

    end

    notification(
      subtitle: "#{lane_context[SharedValues::LANE_NAME]} Error with " + ENV["SCHEME"] ,
      message: exception.message
    )

  end

end



# More information about multiple platforms in fastlane: https://github.com/fastlane/fastlane/blob/master/fastlane/docs/Platforms.md
# All available actions: https://docs.fastlane.tools/actions

# fastlane reports which actions are used. No personal data is recorded.
# Learn more at https://github.com/fastlane/fastlane#metrics

`./fastlane/Appfile`
apple_id ENV["APPLE_ID"] 			# Your Apple email address
team_id ENV["APPLE_DEV_TEAM_ID"] 		# Developer Portal Team ID
itc_team_id ENV["APP_STORE_CONNECT_TEAM_ID"] 	# iTunes Connect Team ID







fastlane gems

Gem Version Update-Status
fastlane 2.156.0 ✅ Up-To-Date

Loaded fastlane plugins:

No plugins Loaded

Loaded gems
Gem Version
did_you_mean 1.1.0
slack-notifier 2.3.2
atomos 0.1.3
CFPropertyList 2.3.5
claide 1.0.2
colored2 3.1.2
nanaimo 0.2.6
xcodeproj 1.15.0
rouge 2.0.7
xcpretty 0.3.0
terminal-notifier 2.0.0
unicode-display_width 1.3.0
terminal-table 1.8.0
plist 3.3.0
public_suffix 2.0.5
addressable 2.5.2
multipart-post 2.0.0
word_wrap 1.0.0
tty-screen 0.6.3
tty-cursor 0.5.0
tty-spinner 0.8.0
babosa 1.0.3
colored 1.2
highline 1.7.8
commander-fastlane 4.4.6
excon 0.71.1
faraday 1.0.1
unf_ext 0.0.7.4
unf 0.1.4
domain_name 0.5.20170404
http-cookie 1.0.3
faraday-cookie_jar 0.0.6
faraday_middleware 1.0.0
fastimage 2.1.0
gh_inspector 1.1.3
json 2.0.4
mini_magick 4.9.5
rubyzip 2.3.0
security 0.1.3
xcpretty-travis-formatter 1.0.0
dotenv 2.2.1
bundler 1.16.0
naturally 2.1.0
simctl 1.6.3
jwt 2.1.0
uber 0.1.0
declarative 0.0.10
declarative-option 0.1.0
representable 3.0.4
retriable 3.1.1
mini_mime 1.0.2
multi_json 1.12.2
signet 0.14.0
memoist 0.16.0
os 0.9.6
googleauth 0.13.1
httpclient 2.8.3
google-api-client 0.38.0
google-cloud-env 1.3.3
google-cloud-core 1.2.7
digest-crc 0.4.1
google-cloud-storage 1.25.1
emoji_regex 0.1.1
jmespath 1.4.0
aws-partitions 1.286.0
aws-eventstream 1.0.3
aws-sigv4 1.1.1
aws-sdk-core 3.92.0
aws-sdk-kms 1.30.0
aws-sdk-s3 1.61.1
openssl 2.0.5
io-console 0.4.6
psych 2.2.2

generated on: 2020-08-12

About this issue

  • Original URL
  • State: closed
  • Created 4 years ago
  • Reactions: 3
  • Comments: 18 (1 by maintainers)

Most upvoted comments

I am experiencing the same issue. Let me know if you figure it out

I’m also getting the same issue.

I’m also getting the same issue.

FYI: I got this error due to creating an API Key with the Developer role. When I created a new key with role Admin, it went well!

I think the issue is when you create a new app that doesnt have screenshots. It seems to work if you modify line 138 of deliver/lib/deliver/upload_screenshots.rb to duplicate = app_screenshot_set.app_screenshots ? app_screenshot_set.app_screenshots.any? { |s| s.source_file_checksum == checksum } : nil

turns out I’d miscopied an env variable- everything is working smoothly for me. thanks for your work and follow up @rogerluan 🥇

@assembleMHN you mentioned an apple API update. How and where were you able to find out that they updated their API?

Hi from the fact that Fastlane broke when Apple updated the app store connect APIS and from the countless stories that was posted on Fastlanes github page, this beeing one of them: https://github.com/fastlane/fastlane/pull/16626