fastlane 2.218.0 → 2.220.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (83) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +88 -88
  3. data/bin/console +11 -0
  4. data/bin/match_file +60 -0
  5. data/deliver/lib/deliver/download_screenshots.rb +2 -1
  6. data/deliver/lib/deliver/generate_summary.rb +1 -1
  7. data/deliver/lib/deliver/options.rb +14 -0
  8. data/deliver/lib/deliver/runner.rb +4 -4
  9. data/deliver/lib/deliver/upload_metadata.rb +43 -28
  10. data/deliver/lib/deliver/upload_screenshots.rb +15 -8
  11. data/fastlane/lib/fastlane/actions/appetize.rb +4 -0
  12. data/fastlane/lib/fastlane/actions/docs/sync_code_signing.md +6 -2
  13. data/fastlane/lib/fastlane/actions/git_add.rb +17 -2
  14. data/fastlane/lib/fastlane/actions/mailgun.rb +30 -8
  15. data/fastlane/lib/fastlane/actions/onesignal.rb +14 -2
  16. data/fastlane/lib/fastlane/actions/update_project_provisioning.rb +2 -1
  17. data/fastlane/lib/fastlane/actions/upload_symbols_to_sentry.rb +4 -2
  18. data/fastlane/lib/fastlane/commands_generator.rb +9 -0
  19. data/fastlane/lib/fastlane/console.rb +24 -0
  20. data/fastlane/lib/fastlane/helper/sh_helper.rb +1 -1
  21. data/fastlane/lib/fastlane/plugins/plugin_fetcher.rb +2 -1
  22. data/fastlane/lib/fastlane/plugins/plugin_info_collector.rb +2 -1
  23. data/fastlane/lib/fastlane/plugins/plugin_manager.rb +2 -1
  24. data/fastlane/lib/fastlane/version.rb +2 -1
  25. data/fastlane/swift/Deliverfile.swift +1 -1
  26. data/fastlane/swift/DeliverfileProtocol.swift +9 -1
  27. data/fastlane/swift/Fastlane.swift +41 -8
  28. data/fastlane/swift/Gymfile.swift +1 -1
  29. data/fastlane/swift/GymfileProtocol.swift +1 -1
  30. data/fastlane/swift/LaneFileProtocol.swift +1 -1
  31. data/fastlane/swift/Matchfile.swift +1 -1
  32. data/fastlane/swift/MatchfileProtocol.swift +1 -1
  33. data/fastlane/swift/OptionalConfigValue.swift +2 -2
  34. data/fastlane/swift/Precheckfile.swift +1 -1
  35. data/fastlane/swift/PrecheckfileProtocol.swift +1 -1
  36. data/fastlane/swift/Scanfile.swift +1 -1
  37. data/fastlane/swift/ScanfileProtocol.swift +1 -1
  38. data/fastlane/swift/Screengrabfile.swift +1 -1
  39. data/fastlane/swift/ScreengrabfileProtocol.swift +1 -1
  40. data/fastlane/swift/Snapshotfile.swift +1 -1
  41. data/fastlane/swift/SnapshotfileProtocol.swift +3 -3
  42. data/fastlane/swift/formatting/Brewfile.lock.json +23 -15
  43. data/fastlane_core/lib/fastlane_core/cert_checker.rb +11 -8
  44. data/fastlane_core/lib/fastlane_core/device_manager.rb +1 -1
  45. data/fastlane_core/lib/fastlane_core/helper.rb +0 -15
  46. data/fastlane_core/lib/fastlane_core/print_table.rb +16 -0
  47. data/fastlane_core/lib/fastlane_core/project.rb +5 -0
  48. data/fastlane_core/lib/fastlane_core/ui/fastlane_runner.rb +0 -4
  49. data/fastlane_core/lib/fastlane_core/ui/help_formatter.rb +1 -5
  50. data/frameit/lib/frameit/device_types.rb +4 -0
  51. data/frameit/lib/frameit/editor.rb +20 -0
  52. data/gym/lib/gym/detect_values.rb +2 -0
  53. data/gym/lib/gym/module.rb +2 -2
  54. data/match/lib/assets/READMETemplate.md +3 -5
  55. data/match/lib/match/encryption/encryption.rb +154 -0
  56. data/match/lib/match/encryption/openssl.rb +7 -38
  57. data/match/lib/match/encryption.rb +1 -0
  58. data/match/lib/match/portal_cache.rb +2 -2
  59. data/match/lib/match/profile_includes.rb +2 -2
  60. data/match/lib/match/runner.rb +63 -21
  61. data/match/lib/match/storage/git_storage.rb +4 -3
  62. data/match/lib/match/storage/interface.rb +9 -5
  63. data/pilot/lib/pilot/build_manager.rb +5 -2
  64. data/pilot/lib/pilot/manager.rb +2 -2
  65. data/pilot/lib/pilot/options.rb +1 -1
  66. data/scan/lib/scan/detect_values.rb +1 -1
  67. data/sigh/lib/sigh/options.rb +8 -8
  68. data/sigh/lib/sigh/runner.rb +1 -1
  69. data/snapshot/lib/snapshot/options.rb +2 -2
  70. data/snapshot/lib/snapshot/setup.rb +1 -1
  71. data/spaceship/lib/spaceship/connect_api/api_client.rb +1 -1
  72. data/spaceship/lib/spaceship/connect_api/models/app_info.rb +17 -0
  73. data/spaceship/lib/spaceship/connect_api/models/app_store_version.rb +44 -9
  74. data/spaceship/lib/spaceship/connect_api/models/beta_tester.rb +30 -2
  75. data/spaceship/lib/spaceship/connect_api/models/certificate.rb +2 -2
  76. data/spaceship/lib/spaceship/connect_api/models/device.rb +11 -6
  77. data/spaceship/lib/spaceship/connect_api/models/profile.rb +8 -1
  78. data/spaceship/lib/spaceship/connect_api/token.rb +2 -1
  79. data/spaceship/lib/spaceship/connect_api.rb +5 -2
  80. data/spaceship/lib/spaceship/portal/certificate.rb +2 -2
  81. data/spaceship/lib/spaceship/portal/provisioning_profile.rb +8 -1
  82. data/trainer/lib/trainer/xcresult.rb +6 -10
  83. metadata +64 -27
@@ -2,6 +2,7 @@
2
2
  // Copyright (c) 2024 FastlaneTools
3
3
 
4
4
  import Foundation
5
+
5
6
  /**
6
7
  Run ADB Actions
7
8
 
@@ -661,10 +662,12 @@ public func appledoc(input: [String],
661
662
  - skipAppVersionUpdate: Don’t create or update the app version that is being prepared for submission
662
663
  - force: Skip verification of HTML preview file
663
664
  - overwriteScreenshots: Clear all previously uploaded screenshots before uploading the new ones
665
+ - screenshotProcessingTimeout: Timeout in seconds to wait before considering screenshot processing as failed, used to handle cases where uploads to the App Store are stuck in processing
664
666
  - syncScreenshots: Sync screenshots with local ones. This is currently beta option so set true to 'FASTLANE_ENABLE_BETA_DELIVER_SYNC_SCREENSHOTS' environment variable as well
665
667
  - submitForReview: Submit the new version for Review after uploading everything
666
668
  - verifyOnly: Verifies archive with App Store Connect without uploading
667
669
  - rejectIfPossible: Rejects the previously submitted build if it's in a state where it's possible
670
+ - versionCheckWaitRetryLimit: After submitting a new version, App Store Connect takes some time to recognize the new version and we must wait until it's available before attempting to upload metadata for it. There is a mechanism that will check if it's available and retry with an exponential backoff if it's not available yet. This option specifies how many times we should retry before giving up. Setting this to a value below 5 is not recommended and will likely cause failures. Increase this parameter when Apple servers seem to be degraded or slow
668
671
  - automaticRelease: Should the app be automatically released once it's approved? (Cannot be used together with `auto_release_date`)
669
672
  - autoReleaseDate: Date in milliseconds for automatically releasing on pending approval (Cannot be used together with `automatic_release`)
670
673
  - phasedRelease: Enable the phased release feature of iTC
@@ -733,10 +736,12 @@ public func appstore(apiKeyPath: OptionalConfigValue<String?> = .fastlaneDefault
733
736
  skipAppVersionUpdate: OptionalConfigValue<Bool> = .fastlaneDefault(false),
734
737
  force: OptionalConfigValue<Bool> = .fastlaneDefault(false),
735
738
  overwriteScreenshots: OptionalConfigValue<Bool> = .fastlaneDefault(false),
739
+ screenshotProcessingTimeout: Int = 3600,
736
740
  syncScreenshots: OptionalConfigValue<Bool> = .fastlaneDefault(false),
737
741
  submitForReview: OptionalConfigValue<Bool> = .fastlaneDefault(false),
738
742
  verifyOnly: OptionalConfigValue<Bool> = .fastlaneDefault(false),
739
743
  rejectIfPossible: OptionalConfigValue<Bool> = .fastlaneDefault(false),
744
+ versionCheckWaitRetryLimit: Int = 7,
740
745
  automaticRelease: OptionalConfigValue<Bool?> = .fastlaneDefault(nil),
741
746
  autoReleaseDate: OptionalConfigValue<Int?> = .fastlaneDefault(nil),
742
747
  phasedRelease: OptionalConfigValue<Bool> = .fastlaneDefault(false),
@@ -798,10 +803,12 @@ public func appstore(apiKeyPath: OptionalConfigValue<String?> = .fastlaneDefault
798
803
  let skipAppVersionUpdateArg = skipAppVersionUpdate.asRubyArgument(name: "skip_app_version_update", type: nil)
799
804
  let forceArg = force.asRubyArgument(name: "force", type: nil)
800
805
  let overwriteScreenshotsArg = overwriteScreenshots.asRubyArgument(name: "overwrite_screenshots", type: nil)
806
+ let screenshotProcessingTimeoutArg = RubyCommand.Argument(name: "screenshot_processing_timeout", value: screenshotProcessingTimeout, type: nil)
801
807
  let syncScreenshotsArg = syncScreenshots.asRubyArgument(name: "sync_screenshots", type: nil)
802
808
  let submitForReviewArg = submitForReview.asRubyArgument(name: "submit_for_review", type: nil)
803
809
  let verifyOnlyArg = verifyOnly.asRubyArgument(name: "verify_only", type: nil)
804
810
  let rejectIfPossibleArg = rejectIfPossible.asRubyArgument(name: "reject_if_possible", type: nil)
811
+ let versionCheckWaitRetryLimitArg = RubyCommand.Argument(name: "version_check_wait_retry_limit", value: versionCheckWaitRetryLimit, type: nil)
805
812
  let automaticReleaseArg = automaticRelease.asRubyArgument(name: "automatic_release", type: nil)
806
813
  let autoReleaseDateArg = autoReleaseDate.asRubyArgument(name: "auto_release_date", type: nil)
807
814
  let phasedReleaseArg = phasedRelease.asRubyArgument(name: "phased_release", type: nil)
@@ -862,10 +869,12 @@ public func appstore(apiKeyPath: OptionalConfigValue<String?> = .fastlaneDefault
862
869
  skipAppVersionUpdateArg,
863
870
  forceArg,
864
871
  overwriteScreenshotsArg,
872
+ screenshotProcessingTimeoutArg,
865
873
  syncScreenshotsArg,
866
874
  submitForReviewArg,
867
875
  verifyOnlyArg,
868
876
  rejectIfPossibleArg,
877
+ versionCheckWaitRetryLimitArg,
869
878
  automaticReleaseArg,
870
879
  autoReleaseDateArg,
871
880
  phasedReleaseArg,
@@ -2108,8 +2117,8 @@ public func captureAndroidScreenshots(androidHome: OptionalConfigValue<String?>
2108
2117
  Generate new localized screenshots on multiple devices (via _snapshot_)
2109
2118
 
2110
2119
  - parameters:
2111
- - workspace: Path the workspace file
2112
- - project: Path the project file
2120
+ - workspace: Path to the workspace file
2121
+ - project: Path to the project file
2113
2122
  - xcargs: Pass additional arguments to xcodebuild for the test phase. Be sure to quote the setting names and values e.g. OTHER_LDFLAGS="-ObjC -lstdc++"
2114
2123
  - xcconfig: Use an extra XCCONFIG file to build your app
2115
2124
  - devices: A list of devices you want to take the screenshots from
@@ -2317,8 +2326,8 @@ public func captureIosScreenshots(workspace: OptionalConfigValue<String?> = .fas
2317
2326
  Alias for the `capture_ios_screenshots` action
2318
2327
 
2319
2328
  - parameters:
2320
- - workspace: Path the workspace file
2321
- - project: Path the project file
2329
+ - workspace: Path to the workspace file
2330
+ - project: Path to the project file
2322
2331
  - xcargs: Pass additional arguments to xcodebuild for the test phase. Be sure to quote the setting names and values e.g. OTHER_LDFLAGS="-ObjC -lstdc++"
2323
2332
  - xcconfig: Use an extra XCCONFIG file to build your app
2324
2333
  - devices: A list of devices you want to take the screenshots from
@@ -3693,10 +3702,12 @@ public func deleteKeychain(name: OptionalConfigValue<String?> = .fastlaneDefault
3693
3702
  - skipAppVersionUpdate: Don’t create or update the app version that is being prepared for submission
3694
3703
  - force: Skip verification of HTML preview file
3695
3704
  - overwriteScreenshots: Clear all previously uploaded screenshots before uploading the new ones
3705
+ - screenshotProcessingTimeout: Timeout in seconds to wait before considering screenshot processing as failed, used to handle cases where uploads to the App Store are stuck in processing
3696
3706
  - syncScreenshots: Sync screenshots with local ones. This is currently beta option so set true to 'FASTLANE_ENABLE_BETA_DELIVER_SYNC_SCREENSHOTS' environment variable as well
3697
3707
  - submitForReview: Submit the new version for Review after uploading everything
3698
3708
  - verifyOnly: Verifies archive with App Store Connect without uploading
3699
3709
  - rejectIfPossible: Rejects the previously submitted build if it's in a state where it's possible
3710
+ - versionCheckWaitRetryLimit: After submitting a new version, App Store Connect takes some time to recognize the new version and we must wait until it's available before attempting to upload metadata for it. There is a mechanism that will check if it's available and retry with an exponential backoff if it's not available yet. This option specifies how many times we should retry before giving up. Setting this to a value below 5 is not recommended and will likely cause failures. Increase this parameter when Apple servers seem to be degraded or slow
3700
3711
  - automaticRelease: Should the app be automatically released once it's approved? (Cannot be used together with `auto_release_date`)
3701
3712
  - autoReleaseDate: Date in milliseconds for automatically releasing on pending approval (Cannot be used together with `automatic_release`)
3702
3713
  - phasedRelease: Enable the phased release feature of iTC
@@ -3765,10 +3776,12 @@ public func deliver(apiKeyPath: OptionalConfigValue<String?> = .fastlaneDefault(
3765
3776
  skipAppVersionUpdate: OptionalConfigValue<Bool> = .fastlaneDefault(deliverfile.skipAppVersionUpdate),
3766
3777
  force: OptionalConfigValue<Bool> = .fastlaneDefault(deliverfile.force),
3767
3778
  overwriteScreenshots: OptionalConfigValue<Bool> = .fastlaneDefault(deliverfile.overwriteScreenshots),
3779
+ screenshotProcessingTimeout: Int = deliverfile.screenshotProcessingTimeout,
3768
3780
  syncScreenshots: OptionalConfigValue<Bool> = .fastlaneDefault(deliverfile.syncScreenshots),
3769
3781
  submitForReview: OptionalConfigValue<Bool> = .fastlaneDefault(deliverfile.submitForReview),
3770
3782
  verifyOnly: OptionalConfigValue<Bool> = .fastlaneDefault(deliverfile.verifyOnly),
3771
3783
  rejectIfPossible: OptionalConfigValue<Bool> = .fastlaneDefault(deliverfile.rejectIfPossible),
3784
+ versionCheckWaitRetryLimit: Int = deliverfile.versionCheckWaitRetryLimit,
3772
3785
  automaticRelease: OptionalConfigValue<Bool?> = .fastlaneDefault(deliverfile.automaticRelease),
3773
3786
  autoReleaseDate: OptionalConfigValue<Int?> = .fastlaneDefault(deliverfile.autoReleaseDate),
3774
3787
  phasedRelease: OptionalConfigValue<Bool> = .fastlaneDefault(deliverfile.phasedRelease),
@@ -3830,10 +3843,12 @@ public func deliver(apiKeyPath: OptionalConfigValue<String?> = .fastlaneDefault(
3830
3843
  let skipAppVersionUpdateArg = skipAppVersionUpdate.asRubyArgument(name: "skip_app_version_update", type: nil)
3831
3844
  let forceArg = force.asRubyArgument(name: "force", type: nil)
3832
3845
  let overwriteScreenshotsArg = overwriteScreenshots.asRubyArgument(name: "overwrite_screenshots", type: nil)
3846
+ let screenshotProcessingTimeoutArg = RubyCommand.Argument(name: "screenshot_processing_timeout", value: screenshotProcessingTimeout, type: nil)
3833
3847
  let syncScreenshotsArg = syncScreenshots.asRubyArgument(name: "sync_screenshots", type: nil)
3834
3848
  let submitForReviewArg = submitForReview.asRubyArgument(name: "submit_for_review", type: nil)
3835
3849
  let verifyOnlyArg = verifyOnly.asRubyArgument(name: "verify_only", type: nil)
3836
3850
  let rejectIfPossibleArg = rejectIfPossible.asRubyArgument(name: "reject_if_possible", type: nil)
3851
+ let versionCheckWaitRetryLimitArg = RubyCommand.Argument(name: "version_check_wait_retry_limit", value: versionCheckWaitRetryLimit, type: nil)
3837
3852
  let automaticReleaseArg = automaticRelease.asRubyArgument(name: "automatic_release", type: nil)
3838
3853
  let autoReleaseDateArg = autoReleaseDate.asRubyArgument(name: "auto_release_date", type: nil)
3839
3854
  let phasedReleaseArg = phasedRelease.asRubyArgument(name: "phased_release", type: nil)
@@ -3894,10 +3909,12 @@ public func deliver(apiKeyPath: OptionalConfigValue<String?> = .fastlaneDefault(
3894
3909
  skipAppVersionUpdateArg,
3895
3910
  forceArg,
3896
3911
  overwriteScreenshotsArg,
3912
+ screenshotProcessingTimeoutArg,
3897
3913
  syncScreenshotsArg,
3898
3914
  submitForReviewArg,
3899
3915
  verifyOnlyArg,
3900
3916
  rejectIfPossibleArg,
3917
+ versionCheckWaitRetryLimitArg,
3901
3918
  automaticReleaseArg,
3902
3919
  autoReleaseDateArg,
3903
3920
  phasedReleaseArg,
@@ -5246,17 +5263,21 @@ public func getPushCertificate(platform: String = "ios",
5246
5263
  - parameters:
5247
5264
  - path: The file(s) and path(s) you want to add
5248
5265
  - shellEscape: Shell escapes paths (set to false if using wildcards or manually escaping spaces in :path)
5266
+ - force: Allow adding otherwise ignored files
5249
5267
  - pathspec: **DEPRECATED!** Use `--path` instead - The pathspec you want to add files from
5250
5268
  */
5251
5269
  public func gitAdd(path: OptionalConfigValue<[String]?> = .fastlaneDefault(nil),
5252
5270
  shellEscape: OptionalConfigValue<Bool> = .fastlaneDefault(true),
5271
+ force: OptionalConfigValue<Bool> = .fastlaneDefault(false),
5253
5272
  pathspec: OptionalConfigValue<String?> = .fastlaneDefault(nil))
5254
5273
  {
5255
5274
  let pathArg = path.asRubyArgument(name: "path", type: nil)
5256
5275
  let shellEscapeArg = shellEscape.asRubyArgument(name: "shell_escape", type: nil)
5276
+ let forceArg = force.asRubyArgument(name: "force", type: nil)
5257
5277
  let pathspecArg = pathspec.asRubyArgument(name: "pathspec", type: nil)
5258
5278
  let array: [RubyCommand.Argument?] = [pathArg,
5259
5279
  shellEscapeArg,
5280
+ forceArg,
5260
5281
  pathspecArg]
5261
5282
  let args: [RubyCommand.Argument] = array
5262
5283
  .filter { $0?.value != nil }
@@ -7552,6 +7573,7 @@ public func oclint(oclintPath: String = "oclint",
7552
7573
  - appName: OneSignal App Name. This is required when creating an app (in other words, when `:app_id` is not set, and optional when updating an app
7553
7574
  - androidToken: ANDROID GCM KEY
7554
7575
  - androidGcmSenderId: GCM SENDER ID
7576
+ - fcmJson: FCM Service Account JSON File (in .json format)
7555
7577
  - apnsP12: APNS P12 File (in .p12 format)
7556
7578
  - apnsP12Password: APNS P12 password
7557
7579
  - apnsEnv: APNS environment
@@ -7564,6 +7586,7 @@ public func onesignal(appId: OptionalConfigValue<String?> = .fastlaneDefault(nil
7564
7586
  appName: OptionalConfigValue<String?> = .fastlaneDefault(nil),
7565
7587
  androidToken: OptionalConfigValue<String?> = .fastlaneDefault(nil),
7566
7588
  androidGcmSenderId: OptionalConfigValue<String?> = .fastlaneDefault(nil),
7589
+ fcmJson: OptionalConfigValue<String?> = .fastlaneDefault(nil),
7567
7590
  apnsP12: OptionalConfigValue<String?> = .fastlaneDefault(nil),
7568
7591
  apnsP12Password: OptionalConfigValue<String?> = .fastlaneDefault(nil),
7569
7592
  apnsEnv: String = "production",
@@ -7574,6 +7597,7 @@ public func onesignal(appId: OptionalConfigValue<String?> = .fastlaneDefault(nil
7574
7597
  let appNameArg = appName.asRubyArgument(name: "app_name", type: nil)
7575
7598
  let androidTokenArg = androidToken.asRubyArgument(name: "android_token", type: nil)
7576
7599
  let androidGcmSenderIdArg = androidGcmSenderId.asRubyArgument(name: "android_gcm_sender_id", type: nil)
7600
+ let fcmJsonArg = fcmJson.asRubyArgument(name: "fcm_json", type: nil)
7577
7601
  let apnsP12Arg = apnsP12.asRubyArgument(name: "apns_p12", type: nil)
7578
7602
  let apnsP12PasswordArg = apnsP12Password.asRubyArgument(name: "apns_p12_password", type: nil)
7579
7603
  let apnsEnvArg = RubyCommand.Argument(name: "apns_env", value: apnsEnv, type: nil)
@@ -7583,6 +7607,7 @@ public func onesignal(appId: OptionalConfigValue<String?> = .fastlaneDefault(nil
7583
7607
  appNameArg,
7584
7608
  androidTokenArg,
7585
7609
  androidGcmSenderIdArg,
7610
+ fcmJsonArg,
7586
7611
  apnsP12Arg,
7587
7612
  apnsP12PasswordArg,
7588
7613
  apnsEnvArg,
@@ -10438,8 +10463,8 @@ public func slather(buildDirectory: OptionalConfigValue<String?> = .fastlaneDefa
10438
10463
  Alias for the `capture_ios_screenshots` action
10439
10464
 
10440
10465
  - parameters:
10441
- - workspace: Path the workspace file
10442
- - project: Path the project file
10466
+ - workspace: Path to the workspace file
10467
+ - project: Path to the project file
10443
10468
  - xcargs: Pass additional arguments to xcodebuild for the test phase. Be sure to quote the setting names and values e.g. OTHER_LDFLAGS="-ObjC -lstdc++"
10444
10469
  - xcconfig: Use an extra XCCONFIG file to build your app
10445
10470
  - devices: A list of devices you want to take the screenshots from
@@ -12499,10 +12524,12 @@ public func uploadSymbolsToSentry(apiHost: String = "https://app.getsentry.com/a
12499
12524
  - skipAppVersionUpdate: Don’t create or update the app version that is being prepared for submission
12500
12525
  - force: Skip verification of HTML preview file
12501
12526
  - overwriteScreenshots: Clear all previously uploaded screenshots before uploading the new ones
12527
+ - screenshotProcessingTimeout: Timeout in seconds to wait before considering screenshot processing as failed, used to handle cases where uploads to the App Store are stuck in processing
12502
12528
  - syncScreenshots: Sync screenshots with local ones. This is currently beta option so set true to 'FASTLANE_ENABLE_BETA_DELIVER_SYNC_SCREENSHOTS' environment variable as well
12503
12529
  - submitForReview: Submit the new version for Review after uploading everything
12504
12530
  - verifyOnly: Verifies archive with App Store Connect without uploading
12505
12531
  - rejectIfPossible: Rejects the previously submitted build if it's in a state where it's possible
12532
+ - versionCheckWaitRetryLimit: After submitting a new version, App Store Connect takes some time to recognize the new version and we must wait until it's available before attempting to upload metadata for it. There is a mechanism that will check if it's available and retry with an exponential backoff if it's not available yet. This option specifies how many times we should retry before giving up. Setting this to a value below 5 is not recommended and will likely cause failures. Increase this parameter when Apple servers seem to be degraded or slow
12506
12533
  - automaticRelease: Should the app be automatically released once it's approved? (Cannot be used together with `auto_release_date`)
12507
12534
  - autoReleaseDate: Date in milliseconds for automatically releasing on pending approval (Cannot be used together with `automatic_release`)
12508
12535
  - phasedRelease: Enable the phased release feature of iTC
@@ -12571,10 +12598,12 @@ public func uploadToAppStore(apiKeyPath: OptionalConfigValue<String?> = .fastlan
12571
12598
  skipAppVersionUpdate: OptionalConfigValue<Bool> = .fastlaneDefault(false),
12572
12599
  force: OptionalConfigValue<Bool> = .fastlaneDefault(false),
12573
12600
  overwriteScreenshots: OptionalConfigValue<Bool> = .fastlaneDefault(false),
12601
+ screenshotProcessingTimeout: Int = 3600,
12574
12602
  syncScreenshots: OptionalConfigValue<Bool> = .fastlaneDefault(false),
12575
12603
  submitForReview: OptionalConfigValue<Bool> = .fastlaneDefault(false),
12576
12604
  verifyOnly: OptionalConfigValue<Bool> = .fastlaneDefault(false),
12577
12605
  rejectIfPossible: OptionalConfigValue<Bool> = .fastlaneDefault(false),
12606
+ versionCheckWaitRetryLimit: Int = 7,
12578
12607
  automaticRelease: OptionalConfigValue<Bool?> = .fastlaneDefault(nil),
12579
12608
  autoReleaseDate: OptionalConfigValue<Int?> = .fastlaneDefault(nil),
12580
12609
  phasedRelease: OptionalConfigValue<Bool> = .fastlaneDefault(false),
@@ -12636,10 +12665,12 @@ public func uploadToAppStore(apiKeyPath: OptionalConfigValue<String?> = .fastlan
12636
12665
  let skipAppVersionUpdateArg = skipAppVersionUpdate.asRubyArgument(name: "skip_app_version_update", type: nil)
12637
12666
  let forceArg = force.asRubyArgument(name: "force", type: nil)
12638
12667
  let overwriteScreenshotsArg = overwriteScreenshots.asRubyArgument(name: "overwrite_screenshots", type: nil)
12668
+ let screenshotProcessingTimeoutArg = RubyCommand.Argument(name: "screenshot_processing_timeout", value: screenshotProcessingTimeout, type: nil)
12639
12669
  let syncScreenshotsArg = syncScreenshots.asRubyArgument(name: "sync_screenshots", type: nil)
12640
12670
  let submitForReviewArg = submitForReview.asRubyArgument(name: "submit_for_review", type: nil)
12641
12671
  let verifyOnlyArg = verifyOnly.asRubyArgument(name: "verify_only", type: nil)
12642
12672
  let rejectIfPossibleArg = rejectIfPossible.asRubyArgument(name: "reject_if_possible", type: nil)
12673
+ let versionCheckWaitRetryLimitArg = RubyCommand.Argument(name: "version_check_wait_retry_limit", value: versionCheckWaitRetryLimit, type: nil)
12643
12674
  let automaticReleaseArg = automaticRelease.asRubyArgument(name: "automatic_release", type: nil)
12644
12675
  let autoReleaseDateArg = autoReleaseDate.asRubyArgument(name: "auto_release_date", type: nil)
12645
12676
  let phasedReleaseArg = phasedRelease.asRubyArgument(name: "phased_release", type: nil)
@@ -12700,10 +12731,12 @@ public func uploadToAppStore(apiKeyPath: OptionalConfigValue<String?> = .fastlan
12700
12731
  skipAppVersionUpdateArg,
12701
12732
  forceArg,
12702
12733
  overwriteScreenshotsArg,
12734
+ screenshotProcessingTimeoutArg,
12703
12735
  syncScreenshotsArg,
12704
12736
  submitForReviewArg,
12705
12737
  verifyOnlyArg,
12706
12738
  rejectIfPossibleArg,
12739
+ versionCheckWaitRetryLimitArg,
12707
12740
  automaticReleaseArg,
12708
12741
  autoReleaseDateArg,
12709
12742
  phasedReleaseArg,
@@ -13561,7 +13594,7 @@ public func xcov(workspace: OptionalConfigValue<String?> = .fastlaneDefault(nil)
13561
13594
  coverallsServiceJobId: OptionalConfigValue<String?> = .fastlaneDefault(nil),
13562
13595
  coverallsRepoToken: OptionalConfigValue<String?> = .fastlaneDefault(nil),
13563
13596
  xcconfig: OptionalConfigValue<String?> = .fastlaneDefault(nil),
13564
- ideFoundationPath: String = "/Applications/Xcode-15.1.0.app/Contents/Developer/../Frameworks/IDEFoundation.framework/Versions/A/IDEFoundation",
13597
+ ideFoundationPath: String = "/Applications/Xcode-15.3.0.app/Contents/Developer/../Frameworks/IDEFoundation.framework/Versions/A/IDEFoundation",
13565
13598
  legacySupport: OptionalConfigValue<Bool> = .fastlaneDefault(false))
13566
13599
  {
13567
13600
  let workspaceArg = workspace.asRubyArgument(name: "workspace", type: nil)
@@ -13764,4 +13797,4 @@ public let snapshotfile: Snapshotfile = .init()
13764
13797
 
13765
13798
  // Please don't remove the lines below
13766
13799
  // They are used to detect outdated files
13767
- // FastlaneRunnerAPIVersion [0.9.175]
13800
+ // FastlaneRunnerAPIVersion [0.9.177]
@@ -17,4 +17,4 @@ public class Gymfile: GymfileProtocol {
17
17
  // during the `init` process, and you won't see this message
18
18
  }
19
19
 
20
- // Generated with fastlane 2.218.0
20
+ // Generated with fastlane 2.220.0
@@ -208,4 +208,4 @@ public extension GymfileProtocol {
208
208
 
209
209
  // Please don't remove the lines below
210
210
  // They are used to detect outdated files
211
- // FastlaneRunnerAPIVersion [0.9.125]
211
+ // FastlaneRunnerAPIVersion [0.9.127]
@@ -68,7 +68,7 @@ open class LaneFile: NSObject, LaneFileProtocol {
68
68
 
69
69
  public static var lanes: [String: String] {
70
70
  var laneToMethodName: [String: String] = [:]
71
- laneFunctionNames.forEach { name in
71
+ for name in laneFunctionNames {
72
72
  let lowercasedName = name.lowercased()
73
73
  if lowercasedName.hasSuffix("lane") {
74
74
  laneToMethodName[lowercasedName] = name
@@ -17,4 +17,4 @@ public class Matchfile: MatchfileProtocol {
17
17
  // during the `init` process, and you won't see this message
18
18
  }
19
19
 
20
- // Generated with fastlane 2.218.0
20
+ // Generated with fastlane 2.220.0
@@ -228,4 +228,4 @@ public extension MatchfileProtocol {
228
228
 
229
229
  // Please don't remove the lines below
230
230
  // They are used to detect outdated files
231
- // FastlaneRunnerAPIVersion [0.9.119]
231
+ // FastlaneRunnerAPIVersion [0.9.121]
@@ -93,8 +93,8 @@ extension OptionalConfigValue: ExpressibleByDictionaryLiteral where T == [String
93
93
 
94
94
  public init(dictionaryLiteral elements: (Key, Value)...) {
95
95
  var dict: [Key: Value] = [:]
96
- elements.forEach {
97
- dict[$0.0] = $0.1
96
+ for element in elements {
97
+ dict[element.0] = element.1
98
98
  }
99
99
  self = .userDefined(dict)
100
100
  }
@@ -17,4 +17,4 @@ public class Precheckfile: PrecheckfileProtocol {
17
17
  // during the `init` process, and you won't see this message
18
18
  }
19
19
 
20
- // Generated with fastlane 2.218.0
20
+ // Generated with fastlane 2.220.0
@@ -52,4 +52,4 @@ public extension PrecheckfileProtocol {
52
52
 
53
53
  // Please don't remove the lines below
54
54
  // They are used to detect outdated files
55
- // FastlaneRunnerAPIVersion [0.9.118]
55
+ // FastlaneRunnerAPIVersion [0.9.120]
@@ -17,4 +17,4 @@ public class Scanfile: ScanfileProtocol {
17
17
  // during the `init` process, and you won't see this message
18
18
  }
19
19
 
20
- // Generated with fastlane 2.218.0
20
+ // Generated with fastlane 2.220.0
@@ -320,4 +320,4 @@ public extension ScanfileProtocol {
320
320
 
321
321
  // Please don't remove the lines below
322
322
  // They are used to detect outdated files
323
- // FastlaneRunnerAPIVersion [0.9.130]
323
+ // FastlaneRunnerAPIVersion [0.9.132]
@@ -17,4 +17,4 @@ public class Screengrabfile: ScreengrabfileProtocol {
17
17
  // during the `init` process, and you won't see this message
18
18
  }
19
19
 
20
- // Generated with fastlane 2.218.0
20
+ // Generated with fastlane 2.220.0
@@ -96,4 +96,4 @@ public extension ScreengrabfileProtocol {
96
96
 
97
97
  // Please don't remove the lines below
98
98
  // They are used to detect outdated files
99
- // FastlaneRunnerAPIVersion [0.9.120]
99
+ // FastlaneRunnerAPIVersion [0.9.122]
@@ -17,4 +17,4 @@ public class Snapshotfile: SnapshotfileProtocol {
17
17
  // during the `init` process, and you won't see this message
18
18
  }
19
19
 
20
- // Generated with fastlane 2.218.0
20
+ // Generated with fastlane 2.220.0
@@ -2,10 +2,10 @@
2
2
  // Copyright (c) 2024 FastlaneTools
3
3
 
4
4
  public protocol SnapshotfileProtocol: AnyObject {
5
- /// Path the workspace file
5
+ /// Path to the workspace file
6
6
  var workspace: String? { get }
7
7
 
8
- /// Path the project file
8
+ /// Path to the project file
9
9
  var project: String? { get }
10
10
 
11
11
  /// Pass additional arguments to xcodebuild for the test phase. Be sure to quote the setting names and values e.g. OTHER_LDFLAGS="-ObjC -lstdc++"
@@ -204,4 +204,4 @@ public extension SnapshotfileProtocol {
204
204
 
205
205
  // Please don't remove the lines below
206
206
  // They are used to detect outdated files
207
- // FastlaneRunnerAPIVersion [0.9.114]
207
+ // FastlaneRunnerAPIVersion [0.9.116]
@@ -2,45 +2,45 @@
2
2
  "entries": {
3
3
  "brew": {
4
4
  "swiftformat": {
5
- "version": "0.52.11",
5
+ "version": "0.53.5",
6
6
  "bottle": {
7
7
  "rebuild": 0,
8
8
  "root_url": "https://ghcr.io/v2/homebrew/core",
9
9
  "files": {
10
10
  "arm64_sonoma": {
11
11
  "cellar": ":any_skip_relocation",
12
- "url": "https://ghcr.io/v2/homebrew/core/swiftformat/blobs/sha256:b1dabab20931536f6cb157767e6e732ecbabb093ffaaae7325f9971f3c6b6db5",
13
- "sha256": "b1dabab20931536f6cb157767e6e732ecbabb093ffaaae7325f9971f3c6b6db5"
12
+ "url": "https://ghcr.io/v2/homebrew/core/swiftformat/blobs/sha256:04e089d4b1ae1217dd6c8133b3c661add56d7c4f4f24ee67becd3cf8f54e6e80",
13
+ "sha256": "04e089d4b1ae1217dd6c8133b3c661add56d7c4f4f24ee67becd3cf8f54e6e80"
14
14
  },
15
15
  "arm64_ventura": {
16
16
  "cellar": ":any_skip_relocation",
17
- "url": "https://ghcr.io/v2/homebrew/core/swiftformat/blobs/sha256:2674f87602a4a6d6af2f6ee822f7e36eb09c65e4bc31448d79d8955981645b1c",
18
- "sha256": "2674f87602a4a6d6af2f6ee822f7e36eb09c65e4bc31448d79d8955981645b1c"
17
+ "url": "https://ghcr.io/v2/homebrew/core/swiftformat/blobs/sha256:19a6ce102e7df1cdee150dee619025aa3b2a4980070bee4f8cdd6976c0936d46",
18
+ "sha256": "19a6ce102e7df1cdee150dee619025aa3b2a4980070bee4f8cdd6976c0936d46"
19
19
  },
20
20
  "arm64_monterey": {
21
21
  "cellar": ":any_skip_relocation",
22
- "url": "https://ghcr.io/v2/homebrew/core/swiftformat/blobs/sha256:1581f87673144bd34caa286b236e0c9d9cae42c20f5ff353ec7d139d03b63fd3",
23
- "sha256": "1581f87673144bd34caa286b236e0c9d9cae42c20f5ff353ec7d139d03b63fd3"
22
+ "url": "https://ghcr.io/v2/homebrew/core/swiftformat/blobs/sha256:745ba037da0e1fe62f2f22faa45a17655b89d8870bacd9db32597ce1fd779509",
23
+ "sha256": "745ba037da0e1fe62f2f22faa45a17655b89d8870bacd9db32597ce1fd779509"
24
24
  },
25
25
  "sonoma": {
26
26
  "cellar": ":any_skip_relocation",
27
- "url": "https://ghcr.io/v2/homebrew/core/swiftformat/blobs/sha256:d10f7a49255b390e1f8f174947427ae12b3d60477071b6922f0ae59579bebf16",
28
- "sha256": "d10f7a49255b390e1f8f174947427ae12b3d60477071b6922f0ae59579bebf16"
27
+ "url": "https://ghcr.io/v2/homebrew/core/swiftformat/blobs/sha256:6830f0bd5d06dca19d2bcd614e6d0c87e7a3d703d33bce90d0448a83310dddcc",
28
+ "sha256": "6830f0bd5d06dca19d2bcd614e6d0c87e7a3d703d33bce90d0448a83310dddcc"
29
29
  },
30
30
  "ventura": {
31
31
  "cellar": ":any_skip_relocation",
32
- "url": "https://ghcr.io/v2/homebrew/core/swiftformat/blobs/sha256:8505abd9424d6bc0b992302fcb319aea05119eb2397ccc6777c09e6932364c74",
33
- "sha256": "8505abd9424d6bc0b992302fcb319aea05119eb2397ccc6777c09e6932364c74"
32
+ "url": "https://ghcr.io/v2/homebrew/core/swiftformat/blobs/sha256:dacbfeca6cbe99fc73448f08c0289f135e807bc220ac1dcb61952410f1b43535",
33
+ "sha256": "dacbfeca6cbe99fc73448f08c0289f135e807bc220ac1dcb61952410f1b43535"
34
34
  },
35
35
  "monterey": {
36
36
  "cellar": ":any_skip_relocation",
37
- "url": "https://ghcr.io/v2/homebrew/core/swiftformat/blobs/sha256:c13826f376fd6dbf5afb4d9a435f39abb10b795473c8f25b9db986c731d627ee",
38
- "sha256": "c13826f376fd6dbf5afb4d9a435f39abb10b795473c8f25b9db986c731d627ee"
37
+ "url": "https://ghcr.io/v2/homebrew/core/swiftformat/blobs/sha256:a5e30f5378aca201ca8bc7a350ebac28b3202366be1b37cf254f77c27761753a",
38
+ "sha256": "a5e30f5378aca201ca8bc7a350ebac28b3202366be1b37cf254f77c27761753a"
39
39
  },
40
40
  "x86_64_linux": {
41
41
  "cellar": "/home/linuxbrew/.linuxbrew/Cellar",
42
- "url": "https://ghcr.io/v2/homebrew/core/swiftformat/blobs/sha256:c9400f4f4641d817facf5621eed3d2fe078361c83c80d34b91763185068ea740",
43
- "sha256": "c9400f4f4641d817facf5621eed3d2fe078361c83c80d34b91763185068ea740"
42
+ "url": "https://ghcr.io/v2/homebrew/core/swiftformat/blobs/sha256:909ae79dbe735c9377355e202d07a58aeff1af1707ba7a3c843cf7c3b10f68a9",
43
+ "sha256": "909ae79dbe735c9377355e202d07a58aeff1af1707ba7a3c843cf7c3b10f68a9"
44
44
  }
45
45
  }
46
46
  }
@@ -80,6 +80,14 @@
80
80
  "CLT": "15.0.0.0.1.1694021235",
81
81
  "Xcode": "15.1",
82
82
  "macOS": "13.6"
83
+ },
84
+ "sonoma": {
85
+ "HOMEBREW_VERSION": "4.2.16-71-g044e48b",
86
+ "HOMEBREW_PREFIX": "/opt/homebrew",
87
+ "Homebrew/homebrew-core": "api",
88
+ "CLT": "15.0.0.0.1.1694021235",
89
+ "Xcode": "15.3",
90
+ "macOS": "14.2.1"
83
91
  }
84
92
  }
85
93
  }
@@ -39,6 +39,7 @@ module FastlaneCore
39
39
  def self.installed?(path, in_keychain: nil)
40
40
  UI.user_error!("Could not find file '#{path}'") unless File.exist?(path)
41
41
 
42
+ in_keychain &&= FastlaneCore::Helper.keychain_path(in_keychain)
42
43
  ids = installed_identities(in_keychain: in_keychain)
43
44
  ids += installed_installers(in_keychain: in_keychain)
44
45
  finger_print = sha1_fingerprint(path)
@@ -52,7 +53,7 @@ module FastlaneCore
52
53
  end
53
54
 
54
55
  def self.installed_identities(in_keychain: nil)
55
- install_missing_wwdr_certificates
56
+ install_missing_wwdr_certificates(in_keychain: in_keychain)
56
57
 
57
58
  available = list_available_identities(in_keychain: in_keychain)
58
59
  # Match for this text against word boundaries to avoid edge cases around multiples of 10 identities!
@@ -111,12 +112,13 @@ module FastlaneCore
111
112
  `#{commands.join(' ')}`
112
113
  end
113
114
 
114
- def self.installed_wwdr_certificates
115
+ def self.installed_wwdr_certificates(keychain: nil)
115
116
  certificate_name = "Apple Worldwide Developer Relations"
117
+ keychain ||= wwdr_keychain # backwards compatibility
116
118
 
117
119
  # Find all installed WWDRCA certificates
118
120
  installed_certs = []
119
- Helper.backticks("security find-certificate -a -c '#{certificate_name}' -p #{wwdr_keychain.shellescape}", print: false)
121
+ Helper.backticks("security find-certificate -a -c '#{certificate_name}' -p #{keychain.shellescape}", print: false)
120
122
  .lines
121
123
  .each do |line|
122
124
  if line.start_with?('-----BEGIN CERTIFICATE-----')
@@ -135,20 +137,21 @@ module FastlaneCore
135
137
  .compact
136
138
  end
137
139
 
138
- def self.install_missing_wwdr_certificates
140
+ def self.install_missing_wwdr_certificates(in_keychain: nil)
139
141
  # Install all Worldwide Developer Relations Intermediate Certificates listed here: https://www.apple.com/certificateauthority/
140
- missing = WWDRCA_CERTIFICATES.map { |c| c[:alias] } - installed_wwdr_certificates
142
+ keychain = in_keychain || wwdr_keychain
143
+ missing = WWDRCA_CERTIFICATES.map { |c| c[:alias] } - installed_wwdr_certificates(keychain: keychain)
141
144
  missing.each do |cert_alias|
142
- install_wwdr_certificate(cert_alias)
145
+ install_wwdr_certificate(cert_alias, keychain: keychain)
143
146
  end
144
147
  missing.count
145
148
  end
146
149
 
147
- def self.install_wwdr_certificate(cert_alias)
150
+ def self.install_wwdr_certificate(cert_alias, keychain: nil)
148
151
  url = WWDRCA_CERTIFICATES.find { |c| c[:alias] == cert_alias }.fetch(:url)
149
152
  file = Tempfile.new([File.basename(url, ".cer"), ".cer"])
150
153
  filename = file.path
151
- keychain = wwdr_keychain
154
+ keychain ||= wwdr_keychain # backwards compatibility
152
155
  keychain = "-k #{keychain.shellescape}" unless keychain.empty?
153
156
 
154
157
  # Attempts to fix an issue installing WWDR cert tends to fail on CIs
@@ -13,7 +13,7 @@ module FastlaneCore
13
13
 
14
14
  def runtime_build_os_versions
15
15
  @runtime_build_os_versions ||= begin
16
- output, status = Open3.capture2('xcrun simctl list runtimes -j')
16
+ output, status = Open3.capture2('xcrun simctl list -j runtimes')
17
17
  raise status unless status.success?
18
18
  json = JSON.parse(output)
19
19
  json['runtimes'].map { |h| [h['buildversion'], h['version']] }.to_h
@@ -482,20 +482,5 @@ module FastlaneCore
482
482
  UI.error("Your entries do not match. Please try again")
483
483
  end
484
484
  end
485
-
486
- # URI.open added by `require 'open-uri'` is not available in Ruby 2.4. This helper lets you open a URI
487
- # by choosing appropriate interface to do so depending on Ruby version. This helper is subject to be removed
488
- # when fastlane drops Ruby 2.4 support.
489
- def self.open_uri(*rest, &block)
490
- require 'open-uri'
491
-
492
- if Gem::Version.new(RUBY_VERSION) < Gem::Version.new('2.5')
493
- dup = rest.dup
494
- uri = dup.shift
495
- URI.parse(uri).open(*dup, &block)
496
- else
497
- URI.open(*rest, &block)
498
- end
499
- end
500
485
  end
501
486
  end
@@ -1,6 +1,22 @@
1
1
  require_relative 'configuration/configuration'
2
2
  require_relative 'helper'
3
3
 
4
+ # Monkey patch Terminal::Table until this is merged
5
+ # https://github.com/tj/terminal-table/pull/131
6
+ # solves https://github.com/fastlane/fastlane/issues/21852
7
+ # loads Terminal::Table first to be able to monkey patch it.
8
+ require 'terminal-table'
9
+ module Terminal
10
+ class Table
11
+ class Cell
12
+ def lines
13
+ # @value.to_s.split(/\n/)
14
+ @value.to_s.encode("utf-8", invalid: :replace).split(/\n/)
15
+ end
16
+ end
17
+ end
18
+ end
19
+
4
20
  module FastlaneCore
5
21
  class PrintTable
6
22
  class << self
@@ -307,6 +307,10 @@ module FastlaneCore
307
307
  supported_platforms.include?(:watchOS)
308
308
  end
309
309
 
310
+ def visionos?
311
+ supported_platforms.include?(:visionOS)
312
+ end
313
+
310
314
  def multiplatform?
311
315
  supported_platforms.count > 1
312
316
  end
@@ -323,6 +327,7 @@ module FastlaneCore
323
327
  when "iphonesimulator", "iphoneos" then :iOS
324
328
  when "watchsimulator", "watchos" then :watchOS
325
329
  when "appletvsimulator", "appletvos" then :tvOS
330
+ when "xros", "xrsimulator" then :visionOS
326
331
  end
327
332
  end.uniq.compact
328
333
  end
@@ -243,10 +243,6 @@ module Commander
243
243
  ui.error(e.to_s)
244
244
  ui.error("")
245
245
  ui.error("SSL errors can be caused by various components on your local machine.")
246
- if Gem::Version.new(RUBY_VERSION) < Gem::Version.new('2.1')
247
- ui.error("Apple has recently changed their servers to require TLS 1.2, which may")
248
- ui.error("not be available to your system installed Ruby (#{RUBY_VERSION})")
249
- end
250
246
  ui.error("")
251
247
  ui.error("The best solution is to use the self-contained fastlane version.")
252
248
  ui.error("Which ships with a bundled OpenSSL,ruby and all gems - so you don't depend on system libraries")
@@ -6,11 +6,7 @@ module FastlaneCore
6
6
  # fastlane only customizes the global command help
7
7
  return super unless name == :help
8
8
 
9
- if Gem::Version.new(RUBY_VERSION) < Gem::Version.new('2.6')
10
- ERB.new(File.read(File.join(File.dirname(__FILE__), "help.erb")), nil, '-')
11
- else
12
- ERB.new(File.read(File.join(File.dirname(__FILE__), "help.erb")), trim_mode: '-')
13
- end
9
+ ERB.new(File.read(File.join(File.dirname(__FILE__), "help.erb")), trim_mode: '-')
14
10
  end
15
11
  end
16
12
  end