fastlane: [pilot] The resource 'betaAppReviewSubmissions' does not allow 'DELETE'

New Issue Checklist

Issue Description

While submitting a binary to App Store Connect, running our deploy lane, an error occurs:

The resource 'betaAppReviewSubmissions' does not allow 'DELETE'

Which causes everything to halt.

Command executed
While "moving" an existing item in Beta Testing to Submission "DELETE" command fails.
[β ‹] πŸš€ [β ™] πŸš€ [β Ή] πŸš€ [β Έ] πŸš€ [β Ό] πŸš€ [β ΄] πŸš€ [β ¦] πŸš€ [β §] πŸš€ [β ‡] πŸš€ [⠏] πŸš€ [β ‹] πŸš€ [β ™] πŸš€ [β Ή] πŸš€ [β Έ] πŸš€ [β Ό] πŸš€ [βœ”] πŸš€ 
[01:15:03]: Loading from './fastlane/.env.release'
+-------------------------------------------+---------+---------------------------------+
|                                     Used plugins                                      |
+-------------------------------------------+---------+---------------------------------+
| Plugin                                    | Version | Action                          |
+-------------------------------------------+---------+---------------------------------+
| fastlane-plugin-unzip                     | 1.0.1   | unzip                           |
| fastlane-plugin-redacted-compa            | 0.1.0   | get_github_pr_numbers           |
|                                           |         | get_version_number              |
|                                           |         | create_github_milestone         |
|                                           |         | verify_jira_ticket_status       |
|                                           |         | jira_tickets_from_git           |
|                                           |         |                                 |
| fastlane-plugin-firebase_app_distribution | 0.2.4   | firebase_app_distribution_login |
|                                           |         | firebase_app_distribution       |
| fastlane-plugin-ios_dependency_parser     | 1.0.0   | ios_dependency_parser           |
+-------------------------------------------+---------+---------------------------------+

[01:15:05]: Sending anonymous analytics information
[01:15:05]: Learn more at https://docs.fastlane.tools/#metrics
[01:15:05]: No personal or sensitive data is sent.
[01:15:05]: You can disable this by adding `opt_out_usage` at the top of your Fastfile
tput: No value for $TERM and no -T specified
tput: No value for $TERM and no -T specified
[01:15:05]: ----------------------------------------
[01:15:05]: --- Step: Verifying fastlane version ---
[01:15:05]: ----------------------------------------
[01:15:05]: Your fastlane version 2.177.0 matches the minimum requirement of 1.105.2  βœ…
tput: No value for $TERM and no -T specified
tput: No value for $TERM and no -T specified
[01:15:05]: ------------------------------
[01:15:05]: --- Step: default_platform ---
[01:15:05]: ------------------------------
[01:15:05]: Driving the lane 'ios deploy' πŸš€
tput: No value for $TERM and no -T specified
tput: No value for $TERM and no -T specified
[01:15:05]: -------------------
[01:15:05]: --- Step: is_ci ---
[01:15:05]: -------------------
tput: No value for $TERM and no -T specified
tput: No value for $TERM and no -T specified
[01:15:05]: ---------------------------------------
[01:15:05]: --- Step: app_store_connect_api_key ---
[01:15:05]: ---------------------------------------
tput: No value for $TERM and no -T specified
tput: No value for $TERM and no -T specified
[01:15:06]: ----------------------
[01:15:06]: --- Step: download ---
[01:15:06]: ----------------------
tput: No value for $TERM and no -T specified
tput: No value for $TERM and no -T specified
[01:15:07]: -----------------------------
[01:15:07]: --- Step: setup_circle_ci ---
[01:15:07]: -----------------------------
[01:15:07]: Skipping Log Path setup as FL_OUTPUT_DIR is unset
[01:15:07]: Creating temporary keychain: "fastlane_tmp_keychain".
[01:15:07]: $ security list-keychains -d user
[01:15:07]: β–Έ "/Users/distiller/Library/Keychains/fastlane_tmp_keychain-db"
[01:15:07]: Found keychain '/Users/distiller/Library/Keychains/fastlane_tmp_keychain-db' in list-keychains, adding to search list skipped
[01:15:07]: Enabling match readonly mode.
tput: No value for $TERM and no -T specified
tput: No value for $TERM and no -T specified
[01:15:07]: --------------------------------------------------
[01:15:07]: --- Step: Switch to ios sync_certificates lane ---
[01:15:07]: --------------------------------------------------
[01:15:07]: Cruising over to lane 'ios sync_certificates' πŸš–
tput: No value for $TERM and no -T specified
tput: No value for $TERM and no -T specified
[01:15:07]: -------------------
[01:15:07]: --- Step: match ---
[01:15:07]: -------------------

+--------------------------------+-------------------------------------------------------------------------------------------+
|                                                 Summary for match 2.177.0                                                  |
+--------------------------------+-------------------------------------------------------------------------------------------+
| app_identifier                 | ["com.companyname.projectarino", "com.companyname.notificationserviceextension"]          |
| api_key                        | ********                                                                                  |
| type                           | appstore                                                                                  |
| readonly                       | true                                                                                      |
| generate_apple_certs           | true                                                                                      |
| skip_provisioning_profiles     | false                                                                                     |
| username                       | ***********************                                                                   |
| storage_mode                   | git                                                                                       |
| git_url                        | git@github.com:secret/git/repo/url                                                        |
| git_branch                     | master                                                                                    |
| shallow_clone                  | false                                                                                     |
| clone_branch_directly          | false                                                                                     |
| keychain_name                  | fastlane_tmp_keychain                                                                     |
| force                          | false                                                                                     |
| force_for_new_devices          | false                                                                                     |
| skip_confirmation              | false                                                                                     |
| skip_docs                      | false                                                                                     |
| platform                       | ios                                                                                       |
| derive_catalyst_app_identifier | false                                                                                     |
| fail_on_name_taken             | false                                                                                     |
| skip_certificate_matching      | false                                                                                     |
| skip_set_partition_list        | false                                                                                     |
| verbose                        | false                                                                                     |
+--------------------------------+-------------------------------------------------------------------------------------------+

[01:15:07]: Cloning remote git repo...
[01:15:07]: If cloning the repo takes too long, you can use the `clone_branch_directly` option in match.
[01:15:09]: Checking out branch master...
[01:15:09]: πŸ”“  Successfully decrypted certificates repo
[01:15:09]: Installing certificate...
[01:15:10]: There are no local code signing identities found.
You can run `security find-identity -v -p codesigning fastlane_tmp_keychain` to get this output.
This Stack Overflow thread has more information: https://stackoverflow.com/q/35390072/774.
(Check in Keychain Access for an expired WWDR certificate: https://stackoverflow.com/a/35409835/774 has more info.)
[01:15:10]: Setting key partition list... (this can take a minute if there are a lot of keys installed)
[01:15:10]: security: SecItemCopyMatching: The specified item could not be found in the keychain.
[01:15:10]: Setting key partition list... (this can take a minute if there are a lot of keys installed)

<PROVISIONING PROFILES>
[01:15:10]: All required keys, certificates and provisioning profiles are installed πŸ™Œ
[01:15:10]: Setting Provisioning Profile type to 'app-store'
[01:15:10]: Cruising back to lane 'ios deploy' 🚘
tput: No value for $TERM and no -T specified
tput: No value for $TERM and no -T specified
[01:15:10]: -----------------
[01:15:10]: --- Step: gym ---
[01:15:10]: -----------------
[01:15:11]: Resolving Swift Package Manager dependencies...
<REDACTED GYM OUTPUT>
[01:15:55]: $ set -o pipefail && xcodebuild -workspace ./Project.xcworkspace -scheme SCHEME -configuration Release -destination 'generic/platform=iOS' -archivePath /Users/distiller/Library/Developer/Xcode/Archives/2021-03-17/<REDACTED>\ 2021-03-17\ 01.15.55.xcarchive archive | tee /Users/distiller/Library/Logs/gym/REDACTED.log | xcpretty
<COMPILING SOURCE>
[01:36:54]: β–Έ Linking <REDACTED>
<COMPILING XIB>
[01:39:02]: β–Έ Processing Info.plist
[01:39:02]: β–Έ Copying /Users/distiller/Library/Developer/Xcode/DerivedData/dfbufodpnqqnnwfesbguxqdynefb/Build/Intermediates.noindex/ArchiveIntermediates/App/BuildProductsPath/Release-iphoneos/NotificationServiceExtension.appex
[01:39:02]: β–Έ     skipping copy phase strip, binary is code signed: /Users/distiller/Library/Developer/Xcode/DerivedData/dfbufodpnqqnnwfesbguxqdynefb/Build/Intermediates.noindex/ArchiveIntermediates/App/IntermediateBuildFilesPath/UninstalledProducts/iphoneos/NotificationServiceExtension.appex/NotificationServiceExtension
[01:39:02]: β–Έ Generating 'App.app.dSYM'
[01:39:11]: β–Έ     /var/netboot/workspace/a68a29d8cae284340117191cc0abc9da81a5_550541_24179/tmp/swift_module_cache.uxUxVS/38F4VT292GLJO/googlemac_iPhone_iOSGuard_iosguard_no_breakpad-34VQINNO1FFNQ.pcm: No such file or directory
[01:39:11]: β–Έ     /var/netboot/workspace/a68a29d8cae284340117191cc0abc9da81a5_550541_24179/tmp/swift_module_cache.uxUxVS/38F4VT292GLJO/googlemac_iPhone_recaptcha_recaptcha_error-2FAJP848PPJ5M.pcm: No such file or directory
[01:39:11]: β–Έ     /var/netboot/workspace/a68a29d8cae284340117191cc0abc9da81a5_550541_24179/tmp/swift_module_cache.uxUxVS/38F4VT292GLJO/googlemac_iPhone_recaptcha_twofactor_objc_proto-3DU2DBDTLP9YI.pcm: No such file or directory
[01:39:11]: β–Έ     /var/netboot/workspace/a68a29d8cae284340117191cc0abc9da81a5_550541_24179/tmp/swift_module_cache.uxUxVS/38F4VT292GLJO/FBLPromises-3HC5GVPSKGZUV.pcm: No such file or directory
[01:39:11]: β–Έ     /var/netboot/workspace/a68a29d8cae284340117191cc0abc9da81a5_550541_24179/tmp/swift_module_cache.uxUxVS/38F4VT292GLJO/googlemac_iPhone_recaptcha_recaptcha_action_type-YVJER5KSKNA0.pcm: No such file or directory
[01:39:11]: β–Έ     /var/netboot/workspace/a68a29d8cae284340117191cc0abc9da81a5_550541_24179/tmp/swift_module_cache.uxUxVS/38F4VT292GLJO/googlemac_iPhone_recaptcha_mobile_client_objc_proto-2JVL16YUET3CC.pcm: No such file or directory
[01:39:11]: β–Έ     /var/netboot/workspace/a68a29d8cae284340117191cc0abc9da81a5_550541_24179/tmp/swift_module_cache.uxUxVS/38F4VT292GLJO/third_party_objective_c_gtm_session_fetcher_GTMSessionFetcher_Core-1LH56LXRRJ90J.pcm: No such file or directory
[01:39:11]: β–Έ     /var/netboot/workspace/a68a29d8cae284340117191cc0abc9da81a5_550541_24179/tmp/swift_module_cache.uxUxVS/38F4VT292GLJO/Foundation-OIF36D0ZWUYU.pcm: No such file or directory
[01:39:11]: β–Έ     /var/netboot/workspace/a68a29d8cae284340117191cc0abc9da81a5_550541_24179/tmp/swift_module_cache.uxUxVS/38F4VT292GLJO/Dispatch-2MAX3VAF9W7SL.pcm: No such file or directory
[01:39:11]: β–Έ     /var/netboot/workspace/a68a29d8cae284340117191cc0abc9da81a5_550541_24179/tmp/swift_module_cache.uxUxVS/38F4VT292GLJO/UIKit-3STJALP8S84YZ.pcm: No such file or directory
<REDACTED>
[01:39:38]: β–Έ Touching <REDACTED>.app
[01:39:40]: β–Έ Archive Succeeded
[01:39:40]: Generated plist file with the following values:
<REDACTED>
[01:39:40]: $ /usr/bin/xcrun /Users/distiller/project/Bundler/ruby/2.7.0/gems/fastlane-2.177.0/gym/lib/assets/wrap_xcodebuild/xcbuild-safe.sh -exportArchive -exportOptionsPlist '/var/folders/6y/gy9gggt14379c_k39vwb50lc0000gn/T/gym_config20210317-700-v120nd.plist' -archivePath /Users/distiller/Library/Developer/Xcode/Archives/2021-03-17/<REDACTED>\ 2021-03-17\ 01.15.55.xcarchive -exportPath '/var/folders/6y/gy9gggt14379c_k39vwb50lc0000gn/T/gym_output20210317-700-1awv5qm' 
[01:40:46]: Mapping dSYM(s) using generated BCSymbolMaps
<REDACTED>
[01:41:02]: Compressing 9 dSYM(s)
<REDACTED>
[01:41:10]: Successfully exported and compressed dSYM file
[01:41:10]: Successfully exported and signed the ipa file:
[01:41:10]: /Users/distiller/project/APP.ipa
[01:41:10]: ----------------------------------------------------
[01:41:10]: --- Step: Switch to ios create_release_note lane ---
[01:41:10]: ----------------------------------------------------
[01:41:10]: Cruising over to lane 'ios create_release_note' πŸš–
[01:41:11]: ------------------------
[01:41:11]: --- Step: git_branch ---
[01:41:11]: ------------------------
[01:41:11]: ----------------------------------------
[01:41:11]: --- Step: changelog_from_git_commits ---
[01:41:11]: ----------------------------------------
[01:41:11]: Collecting the last few Git commits...
[01:41:11]: Cruising back to lane 'ios deploy' 🚘
[01:41:11]: -------------------
[01:41:11]: --- Step: pilot ---
[01:41:11]: -------------------
[01:41:11]: Creating authorization token for App Store Connect API
[01:41:17]: Ready to upload new build to TestFlight....
[01:41:21]: Going to upload updated app to App Store Connect
[01:41:21]: This might take a few minutes. Please don't interrupt the script.
[01:43:06]: iTunes Transporter successfully finished its job
[01:43:06]: --------------------------------------------------------------------
[01:43:06]: Successfully uploaded package to App Store Connect. It might take a few minutes until it's visible online.
[01:43:06]: --------------------------------------------------------------------
[01:43:06]: Successfully uploaded the new binary to App Store Connect
[01:43:06]: If you want to skip waiting for the processing to be finished, use the `skip_waiting_for_build_processing` option
[01:43:06]: Note that if `skip_waiting_for_build_processing` is used but a `changelog` is supplied, this process will wait for the build to appear on AppStoreConnect, update the changelog and then skip the remaining of the processing steps.
[01:43:06]: Waiting for processing on... <REDACTED VERSION INFO>
[01:43:06]: Read more information on why this build isn't showing up yet - https://github.com/fastlane/fastlane/issues/14997
[01:43:06]: Waiting for the build to show up in the build list - this may take a few minutes (check your email for processing issues if this continues)
[01:43:37]: Waiting for the build to show up in the build list - this may take a few minutes (check your email for processing issues if this continues)
[01:44:08]: Waiting for the build to show up in the build list - this may take a few minutes (check your email for processing issues if this continues)
[01:44:38]: Waiting for the build to show up in the build list - this may take a few minutes (check your email for processing issues if this continues)
[01:45:09]: Waiting for the build to show up in the build list - this may take a few minutes (check your email for processing issues if this continues)
[01:45:39]: Waiting for the build to show up in the build list - this may take a few minutes (check your email for processing issues if this continues)
[01:46:10]: Waiting for the build to show up in the build list - this may take a few minutes (check your email for processing issues if this continues)
[01:46:40]: Waiting for the build to show up in the build list - this may take a few minutes (check your email for processing issues if this continues)
[01:47:11]: Waiting for the build to show up in the build list - this may take a few minutes (check your email for processing issues if this continues)
[01:47:41]: Waiting for the build to show up in the build list - this may take a few minutes (check your email for processing issues if this continues)
[01:48:12]: Waiting for the build to show up in the build list - this may take a few minutes (check your email for processing issues if this continues)
[01:48:43]: Waiting for the build to show up in the build list - this may take a few minutes (check your email for processing issues if this continues)
[01:49:13]: Waiting for the build to show up in the build list - this may take a few minutes (check your email for processing issues if this continues)
[01:49:44]: Waiting for the build to show up in the build list - this may take a few minutes (check your email for processing issues if this continues)
[01:50:14]: Waiting for the build to show up in the build list - this may take a few minutes (check your email for processing issues if this continues)
[01:50:45]: Waiting for the build to show up in the build list - this may take a few minutes (check your email for processing issues if this continues)
[01:51:16]: Waiting for the build to show up in the build list - this may take a few minutes (check your email for processing issues if this continues)
[01:51:46]: Waiting for the build to show up in the build list - this may take a few minutes (check your email for processing issues if this continues)
[01:52:16]: Waiting for the build to show up in the build list - this may take a few minutes (check your email for processing issues if this continues)
[01:52:47]: Waiting for the build to show up in the build list - this may take a few minutes (check your email for processing issues if this continues)
[01:53:17]: Waiting for App Store Connect to finish processing the new build 
[01:53:49]: Waiting for App Store Connect to finish processing the new build 
[01:54:20]: Waiting for App Store Connect to finish processing the new build 
[01:54:51]: Waiting for App Store Connect to finish processing the new build 
[01:55:22]: Waiting for App Store Connect to finish processing the new build 
[01:55:53]: Waiting for App Store Connect to finish processing the new build 
[01:56:24]: Waiting for App Store Connect to finish processing the new build 
[01:56:54]: Waiting for App Store Connect to finish processing the new build 
[01:57:25]: Waiting for App Store Connect to finish processing the new build 
[01:57:57]: Waiting for App Store Connect to finish processing the new build
[01:58:28]: Waiting for App Store Connect to finish processing the new build 
[01:58:58]: Waiting for App Store Connect to finish processing the new build 
[01:59:29]: Waiting for App Store Connect to finish processing the new build 
[02:00:00]: Waiting for App Store Connect to finish processing the new build 
[02:00:31]: Waiting for App Store Connect to finish processing the new build 
[02:01:03]: Waiting for App Store Connect to finish processing the new build 
[02:01:33]: Waiting for App Store Connect to finish processing the new build 
[02:02:04]: Waiting for App Store Connect to finish processing the new build 
[02:02:36]: Waiting for App Store Connect to finish processing the new build 
[02:03:06]: Waiting for App Store Connect to finish processing the new build 
[02:03:37]: Waiting for App Store Connect to finish processing the new build 
[02:04:09]: Waiting for App Store Connect to finish processing the new build 
[02:04:40]: Waiting for App Store Connect to finish processing the new build 
[02:05:11]: Waiting for App Store Connect to finish processing the new build 
[02:05:42]: Waiting for App Store Connect to finish processing the new build 
[02:06:13]: Waiting for App Store Connect to finish processing the new build 
[02:06:45]: Waiting for App Store Connect to finish processing the new build 
[02:07:16]: Waiting for App Store Connect to finish processing the new build 
[02:07:47]: Waiting for App Store Connect to finish processing the new build 
[02:08:18]: Waiting for App Store Connect to finish processing the new build 
[02:08:49]: Waiting for App Store Connect to finish processing the new build 
[02:09:20]: Waiting for App Store Connect to finish processing the new build 
[02:09:51]: Waiting for App Store Connect to finish processing the new build 
[02:10:22]: Waiting for App Store Connect to finish processing the new build 
[02:10:54]: Waiting for App Store Connect to finish processing the new build 
[02:11:25]: Waiting for App Store Connect to finish processing the new build 
[02:11:56]: Waiting for App Store Connect to finish processing the new build 
[02:12:27]: Waiting for App Store Connect to finish processing the new build 
[02:12:58]: Waiting for App Store Connect to finish processing the new build 
[02:13:29]: Waiting for App Store Connect to finish processing the new build 
[02:14:00]: Waiting for App Store Connect to finish processing the new build 
[02:14:31]: Waiting for App Store Connect to finish processing the new build 
[02:15:02]: Waiting for App Store Connect to finish processing the new build 
[02:15:33]: Waiting for App Store Connect to finish processing the new build 
[02:16:04]: Waiting for App Store Connect to finish processing the new build 
[02:16:35]: Waiting for App Store Connect to finish processing the new build 
[02:17:06]: Waiting for App Store Connect to finish processing the new build 
[02:17:37]: Waiting for App Store Connect to finish processing the new build 
[02:18:08]: Waiting for App Store Connect to finish processing the new build 
[02:18:39]: Waiting for App Store Connect to finish processing the new build 
[02:19:10]: Successfully finished processing the build
[02:19:11]: Successfully set the changelog for build
[02:19:13]: Another build is already in review. Going to remove that build and submit the new one.
[02:19:13]: Deleting beta app review submission for build: WXYZ
[02:19:27]: Error raised while executing lane: deploy, exception: The given operation is not allowed - The resource 'betaAppReviewSubmissions' does not allow 'DELETE'. Allowed operations are: GET_COLLECTION, GET_INSTANCE, CREATE
[02:19:27]: -------------------
[02:19:27]: --- Step: is_ci ---
[02:19:27]: -------------------
[02:19:27]: ------------------------
[02:19:27]: --- Step: git_branch ---
[02:19:27]: ------------------------
[02:19:27]: -------------------
[02:19:27]: --- Step: slack ---
[02:19:27]: -------------------
[02:19:27]: Successfully sent Slack notification

Looking for related GitHub issues on fastlane/fastlane...

➑️  Running xcrun extractLocStrings as part of Fastlane causes crash for duplicated high-codepoint unicode localisable strings
    https://github.com/fastlane/fastlane/issues/15153 [open] 42 πŸ’¬
    a day ago

➑️  failed on flutter project
    https://github.com/fastlane/fastlane/issues/16085 [closed] 2 πŸ’¬
    07 Jun 2020

➑️  Upload to Crashlytics doesn't work cause of invalid byte sequence
    https://github.com/fastlane/fastlane/issues/14176 [closed] 11 πŸ’¬
    10 Sep 2019

and 41 more at: https://github.com/fastlane/fastlane/search?q=invalid%20byte%20sequence%20in%20UTF-8&type=Issues&utf8=βœ“

πŸ”—  You can ⌘ + double-click on links to open them directly in your browser.
+---------------------------+--------------+----------------+
|                 Plugin updates available                  |
+---------------------------+--------------+----------------+
| Plugin                    | Your Version | Latest Version |
+---------------------------+--------------+----------------+
| firebase_app_distribution | 0.2.4        | 0.2.5          |
+---------------------------+--------------+----------------+
[02:19:28]: To update all plugins, just run
[02:19:28]: $ bundle exec fastlane update_plugins


#######################################################################
# fastlane 2.178.0 is available. You are on 2.177.0.
# You should use the latest version.
# Please update using `bundle update fastlane`.
#######################################################################

2.178.0 Improvements
* [spaceship] add testers to other group (#18382) via Eric Wu
* [action] create_xcframework - delete .xcframework if already exists (#18345) via Nemanja Filipovic
* [action] github_api action - 'headers' param improvements (#18347) via Manish Rathi
* [action] app_store_connect_api_key - add validation to session duration. (#18346) via Roger Oba
* [action] add skip_info_plist parameter to increment_build_number to avoid updating Info.plist (#18372) via Maarten Billemont
* [fastlane_core] fix package upload after two-step rescue. (#18373) via Maarten Billemont
* [pilot] do not update app beta details if not needed (#18289) via Albert Casademont
* [fastlane_core][pilot][deliver] Improved transporter logging to pilot (#12259) via Alex Delong
* [Ruby 3.0] fix Ruby 2.7's deprecation warnings (#18021) via Satoshi Namai
* [action] github_api - enhance Github Actions token support (#18044) via David Cacenabes

Please update using `bundle update fastlane`
bundler: failed to load command: fastlane (/Users/distiller/project/Bundler/ruby/2.7.0/bin/fastlane)
ArgumentError: [!] invalid byte sequence in UTF-8
  /Users/distiller/project/Bundler/ruby/2.7.0/gems/terminal-table-1.8.0/lib/terminal-table/cell.rb:51:in `split'
  /Users/distiller/project/Bundler/ruby/2.7.0/gems/terminal-table-1.8.0/lib/terminal-table/cell.rb:51:in `lines'
  /Users/distiller/project/Bundler/ruby/2.7.0/gems/terminal-table-1.8.0/lib/terminal-table/cell.rb:71:in `value_for_column_width_recalc'
  /Users/distiller/project/Bundler/ruby/2.7.0/gems/terminal-table-1.8.0/lib/terminal-table/table.rb:204:in `block (2 levels) in recalc_column_widths'
  /Users/distiller/project/Bundler/ruby/2.7.0/gems/terminal-table-1.8.0/lib/terminal-table/table.rb:203:in `each'
  /Users/distiller/project/Bundler/ruby/2.7.0/gems/terminal-table-1.8.0/lib/terminal-table/table.rb:203:in `block in recalc_column_widths'
  /Users/distiller/project/Bundler/ruby/2.7.0/gems/terminal-table-1.8.0/lib/terminal-table/table.rb:201:in `each'
  /Users/distiller/project/Bundler/ruby/2.7.0/gems/terminal-table-1.8.0/lib/terminal-table/table.rb:201:in `recalc_column_widths'
  /Users/distiller/project/Bundler/ruby/2.7.0/gems/terminal-table-1.8.0/lib/terminal-table/table.rb:339:in `column_widths'
  /Users/distiller/project/Bundler/ruby/2.7.0/gems/terminal-table-1.8.0/lib/terminal-table/table.rb:97:in `column_width'
  /Users/distiller/project/Bundler/ruby/2.7.0/gems/terminal-table-1.8.0/lib/terminal-table/separator.rb:7:in `block in render'
  /Users/distiller/project/Bundler/ruby/2.7.0/gems/terminal-table-1.8.0/lib/terminal-table/separator.rb:6:in `map'
  /Users/distiller/project/Bundler/ruby/2.7.0/gems/terminal-table-1.8.0/lib/terminal-table/separator.rb:6:in `render'
  /Users/distiller/project/Bundler/ruby/2.7.0/gems/terminal-table-1.8.0/lib/terminal-table/table.rb:142:in `block in render'
  /Users/distiller/project/Bundler/ruby/2.7.0/gems/terminal-table-1.8.0/lib/terminal-table/table.rb:142:in `map'
  /Users/distiller/project/Bundler/ruby/2.7.0/gems/terminal-table-1.8.0/lib/terminal-table/table.rb:142:in `render'
  /Users/distiller/project/Bundler/ruby/2.7.0/gems/fastlane-2.177.0/fastlane/lib/fastlane/lane_manager_base.rb:74:in `puts'
  /Users/distiller/project/Bundler/ruby/2.7.0/gems/fastlane-2.177.0/fastlane/lib/fastlane/lane_manager_base.rb:74:in `puts'
  /Users/distiller/project/Bundler/ruby/2.7.0/gems/fastlane-2.177.0/fastlane/lib/fastlane/lane_manager_base.rb:74:in `print_lane_context'
  /Users/distiller/project/Bundler/ruby/2.7.0/gems/fastlane-2.177.0/fastlane/lib/fastlane/lane_manager.rb:57:in `rescue in cruise_lane'
  /Users/distiller/project/Bundler/ruby/2.7.0/gems/fastlane-2.177.0/fastlane/lib/fastlane/lane_manager.rb:46:in `cruise_lane'
  /Users/distiller/project/Bundler/ruby/2.7.0/gems/fastlane-2.177.0/fastlane/lib/fastlane/command_line_handler.rb:36:in `handle'
  /Users/distiller/project/Bundler/ruby/2.7.0/gems/fastlane-2.177.0/fastlane/lib/fastlane/commands_generator.rb:108:in `block (2 levels) in run'
  /Users/distiller/project/Bundler/ruby/2.7.0/gems/commander-fastlane-4.4.6/lib/commander/command.rb:178:in `call'
  /Users/distiller/project/Bundler/ruby/2.7.0/gems/commander-fastlane-4.4.6/lib/commander/command.rb:153:in `run'
  /Users/distiller/project/Bundler/ruby/2.7.0/gems/commander-fastlane-4.4.6/lib/commander/runner.rb:476:in `run_active_command'
  /Users/distiller/project/Bundler/ruby/2.7.0/gems/fastlane-2.177.0/fastlane_core/lib/fastlane_core/ui/fastlane_runner.rb:76:in `run!'
  /Users/distiller/project/Bundler/ruby/2.7.0/gems/commander-fastlane-4.4.6/lib/commander/delegates.rb:15:in `run!'
  /Users/distiller/project/Bundler/ruby/2.7.0/gems/fastlane-2.177.0/fastlane/lib/fastlane/commands_generator.rb:352:in `run'
  /Users/distiller/project/Bundler/ruby/2.7.0/gems/fastlane-2.177.0/fastlane/lib/fastlane/commands_generator.rb:41:in `start'
  /Users/distiller/project/Bundler/ruby/2.7.0/gems/fastlane-2.177.0/fastlane/lib/fastlane/cli_tools_distributor.rb:122:in `take_off'
  /Users/distiller/project/Bundler/ruby/2.7.0/gems/fastlane-2.177.0/bin/fastlane:23:in `<top (required)>'
  /Users/distiller/project/Bundler/ruby/2.7.0/bin/fastlane:23:in `load'
  /Users/distiller/project/Bundler/ruby/2.7.0/bin/fastlane:23:in `<top (required)>'

Exited with code exit status 1

Environment

NB: Private info removed.

🚫 fastlane environment 🚫

Stack

Key Value
OS 10.15.7
Ruby 2.7.2
Bundler? true
Git git version 2.26.2
Installation Source ~/Desktop/WORK/PROJECTS/<PROJECT>/Bundler/ruby/2.7.0/bin/fastlane
Host Mac OS X 10.15.7 (19H114)
Ruby Lib Dir ~/.rbenv/versions/2.7.2/lib
OpenSSL Version OpenSSL 1.1.1i 8 Dec 2020
Is contained false
Is homebrew false
Is installed via Fabric.app false
Xcode Path /Applications/Xcode_12_1.app/Contents/Developer/
Xcode Version 12.1

System Locale

Error
No Locale with UTF8 found 🚫

fastlane files:

`./fastlane/Fastfile`
default_platform :ios

PROJECT_ROOT  = File.expand_path(File.dirname(__FILE__), '..').freeze
FASTLANE_ROOT = File.join(PROJECT_ROOT, 'fastlane').freeze

platform :ios do
  # Hooks

  before_all do |lane, options|
    next unless is_ci

    app_store_connect_api_key
    update_assets if [:test, :deploy].include?(lane)
    if [:deploy].include?(lane)
      setup_circle_ci
      sync_certificates
    end
  end

  after_all do |lane, options|
    next unless is_ci

    if lane == :test
      run_danger
      sh 'curl -s https://codecov.io/bash | bash'
      if sha1 = ENV['CIRCLE_SHA1']
        github_api(
          http_method: 'POST',
          body: {
            state: 'success',
            target_url: circleci_artifacts_url(path: 'fastlane/test_output/build_products.zip'),
            description: 'Simulator binary is available.',
            context: 'fastlane/artifacts',
          },
          path: "repos/#{ENV['GITHUB_REPOSITORY_NAME']}/statuses/#{sha1}",
        )
      end
    end
  end

  error do |lane, exception, options|
    UI.error("Error raised while executing lane: #{lane}, exception: #{exception}")

    next unless is_ci

    run_danger if lane == :test

    next unless git_branch == 'master' || !ENV['CIRCLE_TAG'].to_s.empty?

    payload = {}
    payload['Job'] = ENV['CIRCLE_BUILD_URL'] if ENV['CIRCLE_BUILD_URL']
    payload['Workflow'] = "https://circleci.com/workflow-run/#{ENV['CIRCLE_WORKFLOW_ID']}" if ENV['CIRCLE_WORKFLOW_ID']
    payload['PR'] = ENV['CIRCLE_PULL_REQUEST'] if ENV['CIRCLE_PULL_REQUEST'] && !ENV['CIRCLE_PULL_REQUEST'].empty?
    payload['Author'] = ENV['CIRCLE_USERNAME'] if ENV['CIRCLE_USERNAME'] && !ENV['CIRCLE_USERNAME'].empty?
    payload['Environment'] = lane_context[SharedValues::ENVIRONMENT] if lane_context[SharedValues::ENVIRONMENT]
    payload['Exception'] = exception
    slack_options = {
      success: false,
      payload: payload,
      default_payloads: [:lane, :git_branch],
    }
    slack_options[:pretext] = ENV['ERROR_NOTIF_PRETEXT'] if ENV['ERROR_NOTIF_PRETEXT']
    slack(slack_options)
  end

  # Lanes

  desc 'Submit the app for review'
  lane :submit do
    version = prompt(
      text: 'Which version?',
      ci_input: ENV['CIRCLE_TAG'],
    )
    build_number = prompt(
      text: 'Which build number?',
      ci_input: get_project_build_number,
    )
    dsym_check_count = 0
    loop do
      build_details = build_details(version: version, build_number: build_number)
      break if build_details.dsym_url

      dsym_check_count += 1
      UI.user_error!("Could not find any dSYM for #{version} (#{build_number})") if dsym_check_count >= 20
      UI.message('Waiting for dSYM file to appear...')
      sleep(30)
    end
    deliver(
      force: is_ci,
      submit_for_review: true,
      app_version: version,
      build_number: build_number,
      skip_binary_upload: true,
      phased_release: true,
      submission_information: {
        add_id_info_uses_idfa: true,
        add_id_info_serves_ads: false,
        add_id_info_tracks_action: true,
        add_id_info_tracks_install: true,
        add_id_info_limits_tracking: true,
      },
      precheck_include_in_app_purchases: false,
    )
  end

  desc 'Release the app'
  lane :release do
    authorize_connect_api(use_legacy: true)
    require 'spaceship'
    version = Spaceship::ConnectAPI::App
              .find(ENV['DELIVER_APP_IDENTIFIER'])
              .get_pending_release_app_store_version

    version_text = "#{version.version_string} (#{version.build.version})"
    next unless is_ci || prompt(text: "Release #{version_text}?", boolean: true)

    version.create_app_store_version_release_request
    slack(
      channel: ENV['DBL_RELEASE_NOTIF_CHANNEL'],
      default_payloads: [],
      pretext: "iOS `#{version_text}` phased release started!",
    )
  end

  desc 'Rollout the app to all users'
  lane :rollout do
    authorize_connect_api(use_legacy: true)
    require 'spaceship'
    version = Spaceship::ConnectAPI::App
              .find(ENV['DELIVER_APP_IDENTIFIER'])
              .get_live_app_store_version

    version_text = "#{version.version_string} (#{version.build.version})"
    next unless is_ci || prompt(text: "Release #{version_text} to all users?", boolean: true)
  end

  desc 'Set GitHub release note'
  lane :set_github_release_note do
    version = prompt(
      text: 'Which version do you want to set GitHub release note?',
      ci_input: ENV['CIRCLE_TAG'],
    )
    build_number = app_store_build_number(
      live: false,
      version: version,
    )
    build_details = build_details(
      version: version,
      build_number: build_number,
    )
    compressed_size = build_details.size_in_bytes

    description = []
    description << "Build number: #{build_number}"
    description << "Workflow: https://circleci.com/workflow-run/#{ENV['CIRCLE_WORKFLOW_ID']}" if ENV['CIRCLE_WORKFLOW_ID']
    if compressed_size.nil?
      UI.error('Failed to fetch compressed ipa size. Skipping.')
    else
      # Follow Apple Store Connect calculation and avoid 1,024
      compressed_size_in_mb = (compressed_size / 1000.0 / 1000.0).round(2)
      description << "Compressed ipa size: #{compressed_size_in_mb}MB"
    end
    description << create_release_note(version: version)

    repo_name = ENV['DBL_GITHUB_REPOSITORY_NAME']
    release = get_github_release(
      url: repo_name,
      version: version,
    )
    if release.nil?
      set_github_release(
        repository_name: repo_name,
        tag_name: version,
        name: '',
        description: description.join("\n"),
      )
      next
    end
    github_api(
      http_method: 'PATCH',
      body: { body: description.join("\n") },
      path: "repos/#{repo_name}/releases/#{release['id']}",
    )
  end

  desc 'Post submission log to BigQuery'
  lane :post_submission_log_to_bigquery do
    version = prompt(
      text: 'Which version do you want to send submission log for?',
      ci_input: ENV['CIRCLE_TAG'],
    )
    build_number = app_store_build_number(
      live: false,
      version: version,
    )
    build_details = build_details(
      version: version,
      build_number: build_number,
    )
    data = [
      {
        binary_size: build_details.size_in_bytes,
        binary_sizes: build_details.sizes_in_bytes.to_json,
        platform: 'ios',
        app_display_version: version,
        app_build_version: build_number,
        uploaded_at: Time.at(build_details.upload_date / 1000),
      },
    ]
    post_to_bigquery(dataset_id: 'mobile', table_id: 'submission_log', data: data)
  end

  desc 'Run tests'
  lane :test do
    scan(
      scheme: 'UnitTests',
      skip_slack: true,
    )
  end

  desc 'Build the app and upload to TestFlight / Firebase'
  lane :deploy do
    export_options = {}
    if ENV['GYM_EXPORT_METHOD'] != 'app-store'
      # Disable re-compile since it takes relatively long
      export_options[:compileBitcode] = false
    end
    gym(export_options: export_options)
    notes = create_release_note(
      version: get_info_plist_value(
        path: File.join(PROJECT_ROOT, 'Double/Double/Info.plist'),
        key: 'CFBundleShortVersionString',
      ),
    )
    case ENV['DBL_IPA_DEPLOYMENT_DESTINATION']
    when 'TestFlight'
      beta_app_review_info = {
        contact_email: ENV['BETA_CONTACT_EMAIL'],
        contact_first_name: ENV['BETA_CONTACT_FIRST_NAME'],
        contact_last_name: ENV['BETA_CONTACT_LAST_NAME'],
        contact_phone: ENV['BETA_CONTACT_PHONE'],
        demo_account_name: ENV['BETA_DEMO_ACCOUNT_NAME'],
        demo_account_password: ENV['BETA_DEMO_ACCOUNT_PASSWORD'],
      }
      pilot(beta_app_review_info: beta_app_review_info, changelog: notes)
    when 'Beta'
      firebase_app_distribution(release_notes: notes)
    else
      UI.user_error!('Unsupported deployment destination')
    end
  end

  desc 'Update build number'
  lane :update_build_number do
    number = prompt(
      text: 'Please enter build number:',
      ci_input: (ENV['CIRCLE_BUILD_NUM'].to_i + 6000).to_s,
    )
    increment_build_number(
      build_number: number,
      xcodeproj: File.join(PROJECT_ROOT, 'Double/Double.xcodeproj'),
    )
  end

  desc 'Update version number'
  lane :update_version_number do
    version = prompt(
      text: 'Please enter version number:',
      ci_input: ENV['CIRCLE_TAG'] || get_dbl_version_number,
    )
    (['APP'] + ENV['APP_EXTENSION_NAMES'].split(',')).each do |target_name|
      update_plist(
        plist_path: File.join(PROJECT_ROOT, "Double/#{target_name.strip}/Info.plist"),
        block: lambda { |plist|
          plist['CFBundleShortVersionString'] = version
        },
      )
    end
  end

  desc 'Download dsyms from App Store Connect and upload to Crashlytics'
  lane :sync_dsyms do
    authorize_connect_api(use_legacy: true)
    require 'spaceship'
    min_version = Spaceship::ConnectAPI
                  .get_app_store_versions(
                    app_id: Spaceship::ConnectAPI::App.find(ENV['DOWNLOAD_DSYMS_APP_IDENTIFIER']).id,
                    limit: 2,
                  )
                  .to_models
                  .min_by { |v| Gem::Version.new(v.version_string) }

    download_dsyms(min_version: min_version.version_string)
    upload_symbols_to_crashlytics(
      gsp_path: File.join(PROJECT_ROOT, 'Double/Double/Supporting Files/Firebase/GoogleService-Info.plist'),
      dsym_worker_threads: `sysctl -n hw.ncpu`.to_i,
    )
  end

  desc 'Sync certificates or renew as needed'
  lane :sync_certificates do
    base_identifier = ENV['APP_IDENTIFIER']
    app_identifier = [base_identifier] + ENV['APP_EXTENSION_NAMES'].split(',').map do |name|
      base_identifier + ".#{name.strip.downcase}"
    end
    match(app_identifier: app_identifier)
  end

  desc 'Post outdated dependencies on Slack'
  lane :post_outdated_dependencies do
    parse_pod_dependencies
    pods = lane_context[SharedValues::POD_ANALYZER_RESULTS]
    texts = pods.map { |p| "`#{p.pod_name}`, current: `#{p.current_version}`, latest: `#{p.latest}`" }
    slack(
      channel: ENV['OUTDATED_NOTIF_CHANNEL'],
      success: false,
      pretext: "Outdated dependencies: `#{texts.count}`",
      message: texts.join("\n"),
      default_payloads: [],
    )
  end

  # Private

  <REDACTED INTERNAL PRIVATE LANES>

  private_lane :authorize_connect_api do |params|
    require 'spaceship'
    if lane_context[SharedValues::APP_STORE_CONNECT_API_KEY] && !params[:use_legacy]
      Spaceship::ConnectAPI.token = Spaceship::ConnectAPI::Token.create(lane_context[SharedValues::APP_STORE_CONNECT_API_KEY])
    else
      Spaceship::ConnectAPI.login(use_portal: false)
    end
  end
end

No Appfile found

fastlane gems

Gem Version Update-Status
fastlane 2.177.0 🚫 Update available

Loaded fastlane plugins:

Plugin Version Update-Status
fastlane-plugin-unzip 1.0.1 βœ… Up-To-Date
fastlane-plugin-INTERNAL-CAN-IGNORE-THIS 0.1.0 πŸ’₯ Check failed
fastlane-plugin-INTERNAL-UPDATE-NOT-NEEDED 0.2.4 🚫 Update available
fastlane-plugin-ios_dependency_parser 1.0.0 βœ… Up-To-Date
Loaded gems
Gem Version
did_you_mean 1.4.0
bundler 2.1.4
uri 0.10.0
rake 13.0.3
CFPropertyList 3.0.3
concurrent-ruby 1.1.8
i18n 1.8.9
minitest 5.14.3
thread_safe 0.3.6
tzinfo 1.2.9
activesupport 5.2.4.5
public_suffix 4.0.6
addressable 2.7.0
httpclient 2.8.3
json 2.5.1
algoliasearch 1.27.5
artifactory 3.0.15
ast 2.4.1
atomos 0.1.3
attr_extras 4.6.0
aws-eventstream 1.1.1
aws-partitions 1.431.1
aws-sigv4 1.2.3
jmespath 1.4.0
aws-sdk-core 3.112.1
aws-sdk-kms 1.42.0
aws-sdk-s3 1.90.0
descendants_tracker 0.0.4
ice_nine 0.11.2
axiom-types 0.1.1
babosa 1.0.4
claide 1.0.3
colored2 3.1.2
cork 0.3.0
nap 1.1.0
open4 1.3.4
claide-plugins 0.9.2
fuzzy_match 2.0.4
netrc 0.11.0
ffi 1.14.2
ethon 0.12.0
typhoeus 1.4.0
cocoapods-core 1.10.1
cocoapods-deintegrate 1.0.4
cocoapods-downloader 1.4.0
cocoapods-plugins 1.0.0
cocoapods-search 1.0.0
cocoapods-trunk 1.5.0
cocoapods-try 1.2.0
escape 0.0.4
fourflusher 2.3.1
gh_inspector 1.1.3
molinillo 0.6.6
ruby-macho 1.4.0
nanaimo 0.3.0
xcodeproj 1.19.0
cocoapods 1.10.1
cocoapods-check 1.1.0
coercible 1.0.0
colored 1.2
highline 1.7.10
commander-fastlane 4.4.6
faraday-net_http 1.0.1
multipart-post 2.0.0
ruby2_keywords 0.0.4
faraday 1.3.0
faraday-http-cache 2.2.0
rchardet 1.8.0
git 1.7.0
rexml 3.2.4
kramdown 2.3.0
kramdown-parser-gfm 1.1.0
no_proxy_fix 0.1.2
sawyer 0.8.2
octokit 4.20.0
unicode-display_width 1.7.0
terminal-table 1.8.0
danger 8.2.1
danger-plugin-api 1.0.0
danger-iblinter 0.0.5
parallel 1.20.1
parser 3.0.0.0
rainbow 3.0.0
regexp_parser 2.0.3
rubocop-ast 1.3.0
ruby-progressbar 1.10.1
rubocop 1.7.0
danger-rubocop 0.9.3
thor 0.20.3
danger-swiftlint 0.24.5
danger-xcode_summary 0.5.2
declarative 0.0.20
declarative-option 0.1.0
digest-crc 0.6.3
unf_ext 0.0.7.7
unf 0.1.4
domain_name 0.5.20190701
dotenv 2.7.6
emoji_regex 3.2.2
equalizer 0.0.11
events 0.9.8
excon 0.79.0
http-cookie 1.0.3
faraday-cookie_jar 0.0.7
faraday_middleware 1.0.0
fastimage 2.2.3
jwt 2.2.2
memoist 0.16.2
multi_json 1.15.0
os 1.1.1
signet 0.15.0
googleauth 0.16.0
mini_mime 1.0.2
uber 0.1.0
representable 3.0.4
retriable 3.1.2
google-api-client 0.38.0
webrick 1.7.0
google-apis-core 0.3.0
google-apis-iamcredentials_v1 0.2.0
google-apis-storage_v1 0.3.0
google-cloud-env 1.5.0
google-cloud-errors 1.0.1
google-cloud-core 1.5.0
google-cloud-storage 1.30.0
mini_magick 4.11.0
naturally 2.2.1
plist 3.6.0
rubyzip 2.3.0
security 0.1.3
simctl 1.6.8
slack-notifier 2.3.2
terminal-notifier 2.0.0
tty-screen 0.8.1
tty-cursor 0.7.1
tty-spinner 0.9.3
word_wrap 1.0.0
rouge 2.0.7
xcpretty 0.3.0
xcpretty-travis-formatter 1.0.1
google-cloud-bigquery 1.21.2
oauth 0.5.4
jira-ruby 1.5.0
virtus 1.0.5
pr_log 0.2.0
xcpretty-json-formatter 0.1.1

generated on: 2021-03-17

About this issue

  • Original URL
  • State: closed
  • Created 3 years ago
  • Reactions: 16
  • Comments: 42 (2 by maintainers)

Commits related to this issue

Most upvoted comments

I don’t understand why this issue is closed ? I think we should re-open it. The problem is still here.

@jonathanlu813 yes it would be nice if no error was thrown when reject_build_waiting_for_review is false. We work around it with this code:

begin
  upload_to_testflight(app_identifier: ENV["ITC_APP_IDENTIFIER"],
                       ipa: "#{rc_build_artifacts_path}/#{ENV["SCHEME"]}.ipa",
                       distribute_external: true,
                       changelog: "Explore!",
                       groups: "External Testers",
                       reject_build_waiting_for_review: false)
rescue Exception => e
  if e.message.include? "Another build is in review"
    UI.important("Another build is already in external beta review. Skipping external beta review submission")
  else
    raise
  end
end

This is also an issue for us after switching from logging in with username/password to the App Store Connect API key.

There hasn’t been any activity on this issue recently. Due to the high number of incoming GitHub notifications, we have to clean some of the old issues, as many of them have already been resolved with the latest updates.

Please make sure to update to the latest fastlane version and check if that solves the issue. Let us know if that works for you by adding a comment πŸ‘

Friendly reminder: contributions are always welcome! Check out CONTRIBUTING.md for more information on how to help with fastlane and feel free to tackle this issue yourself πŸ’ͺ

This issue will be auto-closed if there is no reply within 1 month.

Oh! Ummm… we don’t but I can reach out to the team to see what we can do! Brb 😁

I can confirm I can reproduce that as well when the reject_build_waiting_for_review flag is set and a beta build is already under review

This issue still exists. The delete API for betaAppReviewSubmissions seems to not exist (anymore?). My workaround for this is to expire the builds in WAITING_FOR_REVIEW before submitting new build for review.

But, it is not just that. The filter condition on which build to remove from submission/expire should also be updated to ensure that only the build hindering the new build is removed.

waiting_for_review_build = app.get_builds(
  filter: { "betaAppReviewSubmission.betaReviewState" => "WAITING_FOR_REVIEW,IN_REVIEW",
            "expired" => false,
            "preReleaseVersion.version" => build.pre_release_version.version },
  includes: "betaAppReviewSubmission,preReleaseVersion"
).first
waiting_for_review_build&.expire!

TestFlight allows multiple builds in review as long their version names are different.

Screenshot 2023-07-18 at 2 25 18 PM

Still facing same issue uploading build to testflight and is in review.

@danl3v Thanks for the workaround! Just tried an works perfectly.

I have a feeling that the problem can be easily solved by changing one line in spaceship/lib/spaceship/connect_api/testflight/testflight.rb:120

test_flight_request_client.delete("betaAppReviewSubmissions/#{beta_app_review_submission_id}", params) to test_flight_request_client.delete("reviewSubmissionItems/#{beta_app_review_submission_id}", params)

I’m also facing this error. I think the App Store Connect API might not support this operation.

Still experiencing this issue in fastlane (2.196.0, 2.191.0, 2.186.0, 2.184.1, 2.181.0, 2.180.1, 2.174.0).

I’m still getting this issue too.