fastlane 2.219.0 → 2.221.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (94) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +86 -86
  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/submit_for_review.rb +2 -2
  10. data/deliver/lib/deliver/upload_metadata.rb +43 -28
  11. data/deliver/lib/deliver/upload_screenshots.rb +15 -8
  12. data/fastlane/lib/fastlane/actions/app_store_connect_api_key.rb +2 -1
  13. data/fastlane/lib/fastlane/actions/appetize.rb +4 -0
  14. data/fastlane/lib/fastlane/actions/docs/sync_code_signing.md +6 -2
  15. data/fastlane/lib/fastlane/actions/git_add.rb +17 -2
  16. data/fastlane/lib/fastlane/actions/mailgun.rb +30 -8
  17. data/fastlane/lib/fastlane/actions/onesignal.rb +14 -2
  18. data/fastlane/lib/fastlane/actions/spm.rb +7 -0
  19. data/fastlane/lib/fastlane/actions/update_project_provisioning.rb +2 -1
  20. data/fastlane/lib/fastlane/actions/upload_symbols_to_sentry.rb +4 -2
  21. data/fastlane/lib/fastlane/commands_generator.rb +9 -0
  22. data/fastlane/lib/fastlane/console.rb +24 -0
  23. data/fastlane/lib/fastlane/helper/sh_helper.rb +1 -1
  24. data/fastlane/lib/fastlane/lane_manager_base.rb +16 -8
  25. data/fastlane/lib/fastlane/plugins/plugin_fetcher.rb +2 -1
  26. data/fastlane/lib/fastlane/plugins/plugin_info_collector.rb +2 -1
  27. data/fastlane/lib/fastlane/plugins/plugin_manager.rb +2 -1
  28. data/fastlane/lib/fastlane/runner.rb +2 -2
  29. data/fastlane/lib/fastlane/version.rb +2 -1
  30. data/fastlane/swift/Deliverfile.swift +1 -1
  31. data/fastlane/swift/DeliverfileProtocol.swift +9 -1
  32. data/fastlane/swift/Fastlane.swift +48 -11
  33. data/fastlane/swift/Gymfile.swift +1 -1
  34. data/fastlane/swift/GymfileProtocol.swift +1 -1
  35. data/fastlane/swift/LaneFileProtocol.swift +1 -1
  36. data/fastlane/swift/Matchfile.swift +1 -1
  37. data/fastlane/swift/MatchfileProtocol.swift +1 -1
  38. data/fastlane/swift/OptionalConfigValue.swift +2 -2
  39. data/fastlane/swift/Precheckfile.swift +1 -1
  40. data/fastlane/swift/PrecheckfileProtocol.swift +1 -1
  41. data/fastlane/swift/Scanfile.swift +1 -1
  42. data/fastlane/swift/ScanfileProtocol.swift +1 -1
  43. data/fastlane/swift/Screengrabfile.swift +1 -1
  44. data/fastlane/swift/ScreengrabfileProtocol.swift +1 -1
  45. data/fastlane/swift/Snapshotfile.swift +1 -1
  46. data/fastlane/swift/SnapshotfileProtocol.swift +3 -3
  47. data/fastlane/swift/formatting/Brewfile.lock.json +19 -19
  48. data/fastlane_core/lib/fastlane_core/cert_checker.rb +11 -8
  49. data/fastlane_core/lib/fastlane_core/device_manager.rb +1 -1
  50. data/fastlane_core/lib/fastlane_core/helper.rb +0 -15
  51. data/fastlane_core/lib/fastlane_core/print_table.rb +16 -0
  52. data/fastlane_core/lib/fastlane_core/project.rb +5 -0
  53. data/fastlane_core/lib/fastlane_core/ui/fastlane_runner.rb +0 -4
  54. data/fastlane_core/lib/fastlane_core/ui/help_formatter.rb +1 -5
  55. data/fastlane_core/lib/fastlane_core/ui/implementations/shell.rb +2 -0
  56. data/frameit/lib/frameit/device_types.rb +4 -0
  57. data/frameit/lib/frameit/editor.rb +20 -0
  58. data/gym/lib/gym/detect_values.rb +2 -0
  59. data/gym/lib/gym/module.rb +2 -2
  60. data/match/lib/assets/READMETemplate.md +3 -5
  61. data/match/lib/match/encryption/encryption.rb +154 -0
  62. data/match/lib/match/encryption/openssl.rb +7 -38
  63. data/match/lib/match/encryption.rb +1 -0
  64. data/match/lib/match/runner.rb +44 -6
  65. data/match/lib/match/storage/git_storage.rb +4 -3
  66. data/match/lib/match/storage/interface.rb +9 -5
  67. data/pilot/lib/pilot/build_manager.rb +14 -6
  68. data/pilot/lib/pilot/manager.rb +2 -2
  69. data/pilot/lib/pilot/options.rb +1 -1
  70. data/snapshot/lib/snapshot/options.rb +2 -2
  71. data/snapshot/lib/snapshot/setup.rb +1 -1
  72. data/spaceship/lib/spaceship/connect_api/api_client.rb +2 -2
  73. data/spaceship/lib/spaceship/connect_api/models/app.rb +28 -33
  74. data/spaceship/lib/spaceship/connect_api/models/app_info.rb +17 -0
  75. data/spaceship/lib/spaceship/connect_api/models/app_store_version.rb +44 -9
  76. data/spaceship/lib/spaceship/connect_api/models/beta_tester.rb +30 -2
  77. data/spaceship/lib/spaceship/connect_api/models/certificate.rb +2 -2
  78. data/spaceship/lib/spaceship/connect_api/models/device.rb +11 -6
  79. data/spaceship/lib/spaceship/connect_api/models/profile.rb +8 -1
  80. data/spaceship/lib/spaceship/connect_api/provisioning/client.rb +1 -1
  81. data/spaceship/lib/spaceship/connect_api/provisioning/provisioning.rb +31 -22
  82. data/spaceship/lib/spaceship/connect_api/testflight/client.rb +1 -1
  83. data/spaceship/lib/spaceship/connect_api/testflight/testflight.rb +47 -43
  84. data/spaceship/lib/spaceship/connect_api/token.rb +9 -3
  85. data/spaceship/lib/spaceship/connect_api/tunes/client.rb +1 -1
  86. data/spaceship/lib/spaceship/connect_api/tunes/tunes.rb +96 -90
  87. data/spaceship/lib/spaceship/connect_api/users/client.rb +1 -1
  88. data/spaceship/lib/spaceship/connect_api/users/users.rb +15 -11
  89. data/spaceship/lib/spaceship/connect_api.rb +5 -2
  90. data/spaceship/lib/spaceship/portal/certificate.rb +2 -2
  91. data/spaceship/lib/spaceship/portal/provisioning_profile.rb +8 -1
  92. data/spaceship/lib/spaceship/stats_middleware.rb +2 -2
  93. data/trainer/lib/trainer/xcresult.rb +6 -10
  94. metadata +50 -33
@@ -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
 
@@ -189,7 +190,7 @@ public func appStoreBuildNumber(apiKeyPath: OptionalConfigValue<String?> = .fast
189
190
 
190
191
  - parameters:
191
192
  - keyId: The key ID
192
- - issuerId: The issuer ID
193
+ - issuerId: The issuer ID. It can be nil if the key is individual API key
193
194
  - keyFilepath: The path to the key p8 file
194
195
  - keyContent: The content of the key p8 file
195
196
  - isKeyContentBase64: Whether :key_content is Base64 encoded or not
@@ -200,7 +201,7 @@ public func appStoreBuildNumber(apiKeyPath: OptionalConfigValue<String?> = .fast
200
201
  Load the App Store Connect API token to use in other fastlane tools and actions
201
202
  */
202
203
  public func appStoreConnectApiKey(keyId: String,
203
- issuerId: String,
204
+ issuerId: OptionalConfigValue<String?> = .fastlaneDefault(nil),
204
205
  keyFilepath: OptionalConfigValue<String?> = .fastlaneDefault(nil),
205
206
  keyContent: OptionalConfigValue<String?> = .fastlaneDefault(nil),
206
207
  isKeyContentBase64: OptionalConfigValue<Bool> = .fastlaneDefault(false),
@@ -209,7 +210,7 @@ public func appStoreConnectApiKey(keyId: String,
209
210
  setSpaceshipToken: OptionalConfigValue<Bool> = .fastlaneDefault(true))
210
211
  {
211
212
  let keyIdArg = RubyCommand.Argument(name: "key_id", value: keyId, type: nil)
212
- let issuerIdArg = RubyCommand.Argument(name: "issuer_id", value: issuerId, type: nil)
213
+ let issuerIdArg = issuerId.asRubyArgument(name: "issuer_id", type: nil)
213
214
  let keyFilepathArg = keyFilepath.asRubyArgument(name: "key_filepath", type: nil)
214
215
  let keyContentArg = keyContent.asRubyArgument(name: "key_content", type: nil)
215
216
  let isKeyContentBase64Arg = isKeyContentBase64.asRubyArgument(name: "is_key_content_base64", type: nil)
@@ -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
@@ -10913,6 +10938,7 @@ public func splunkmint(dsym: OptionalConfigValue<String?> = .fastlaneDefault(nil
10913
10938
  - xcprettyOutput: Specifies the output type for xcpretty. eg. 'test', or 'simple'
10914
10939
  - xcprettyArgs: Pass in xcpretty additional command line arguments (e.g. '--test --no-color' or '--tap --no-utf'), requires xcpretty_output to be specified also
10915
10940
  - verbose: Increase verbosity of informational output
10941
+ - veryVerbose: Increase verbosity to include debug output
10916
10942
  - simulator: Specifies the simulator to pass for Swift Compiler (one of: iphonesimulator, macosx)
10917
10943
  - simulatorArch: Specifies the architecture of the simulator to pass for Swift Compiler (one of: x86_64, arm64). Requires the simulator option to be specified also, otherwise, it's ignored
10918
10944
  */
@@ -10928,6 +10954,7 @@ public func spm(command: String = "build",
10928
10954
  xcprettyOutput: OptionalConfigValue<String?> = .fastlaneDefault(nil),
10929
10955
  xcprettyArgs: OptionalConfigValue<String?> = .fastlaneDefault(nil),
10930
10956
  verbose: OptionalConfigValue<Bool> = .fastlaneDefault(false),
10957
+ veryVerbose: OptionalConfigValue<Bool> = .fastlaneDefault(false),
10931
10958
  simulator: OptionalConfigValue<String?> = .fastlaneDefault(nil),
10932
10959
  simulatorArch: String = "arm64")
10933
10960
  {
@@ -10943,6 +10970,7 @@ public func spm(command: String = "build",
10943
10970
  let xcprettyOutputArg = xcprettyOutput.asRubyArgument(name: "xcpretty_output", type: nil)
10944
10971
  let xcprettyArgsArg = xcprettyArgs.asRubyArgument(name: "xcpretty_args", type: nil)
10945
10972
  let verboseArg = verbose.asRubyArgument(name: "verbose", type: nil)
10973
+ let veryVerboseArg = veryVerbose.asRubyArgument(name: "very_verbose", type: nil)
10946
10974
  let simulatorArg = simulator.asRubyArgument(name: "simulator", type: nil)
10947
10975
  let simulatorArchArg = RubyCommand.Argument(name: "simulator_arch", value: simulatorArch, type: nil)
10948
10976
  let array: [RubyCommand.Argument?] = [commandArg,
@@ -10957,6 +10985,7 @@ public func spm(command: String = "build",
10957
10985
  xcprettyOutputArg,
10958
10986
  xcprettyArgsArg,
10959
10987
  verboseArg,
10988
+ veryVerboseArg,
10960
10989
  simulatorArg,
10961
10990
  simulatorArchArg]
10962
10991
  let args: [RubyCommand.Argument] = array
@@ -12499,10 +12528,12 @@ public func uploadSymbolsToSentry(apiHost: String = "https://app.getsentry.com/a
12499
12528
  - skipAppVersionUpdate: Don’t create or update the app version that is being prepared for submission
12500
12529
  - force: Skip verification of HTML preview file
12501
12530
  - overwriteScreenshots: Clear all previously uploaded screenshots before uploading the new ones
12531
+ - 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
12532
  - 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
12533
  - submitForReview: Submit the new version for Review after uploading everything
12504
12534
  - verifyOnly: Verifies archive with App Store Connect without uploading
12505
12535
  - rejectIfPossible: Rejects the previously submitted build if it's in a state where it's possible
12536
+ - 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
12537
  - automaticRelease: Should the app be automatically released once it's approved? (Cannot be used together with `auto_release_date`)
12507
12538
  - autoReleaseDate: Date in milliseconds for automatically releasing on pending approval (Cannot be used together with `automatic_release`)
12508
12539
  - phasedRelease: Enable the phased release feature of iTC
@@ -12571,10 +12602,12 @@ public func uploadToAppStore(apiKeyPath: OptionalConfigValue<String?> = .fastlan
12571
12602
  skipAppVersionUpdate: OptionalConfigValue<Bool> = .fastlaneDefault(false),
12572
12603
  force: OptionalConfigValue<Bool> = .fastlaneDefault(false),
12573
12604
  overwriteScreenshots: OptionalConfigValue<Bool> = .fastlaneDefault(false),
12605
+ screenshotProcessingTimeout: Int = 3600,
12574
12606
  syncScreenshots: OptionalConfigValue<Bool> = .fastlaneDefault(false),
12575
12607
  submitForReview: OptionalConfigValue<Bool> = .fastlaneDefault(false),
12576
12608
  verifyOnly: OptionalConfigValue<Bool> = .fastlaneDefault(false),
12577
12609
  rejectIfPossible: OptionalConfigValue<Bool> = .fastlaneDefault(false),
12610
+ versionCheckWaitRetryLimit: Int = 7,
12578
12611
  automaticRelease: OptionalConfigValue<Bool?> = .fastlaneDefault(nil),
12579
12612
  autoReleaseDate: OptionalConfigValue<Int?> = .fastlaneDefault(nil),
12580
12613
  phasedRelease: OptionalConfigValue<Bool> = .fastlaneDefault(false),
@@ -12636,10 +12669,12 @@ public func uploadToAppStore(apiKeyPath: OptionalConfigValue<String?> = .fastlan
12636
12669
  let skipAppVersionUpdateArg = skipAppVersionUpdate.asRubyArgument(name: "skip_app_version_update", type: nil)
12637
12670
  let forceArg = force.asRubyArgument(name: "force", type: nil)
12638
12671
  let overwriteScreenshotsArg = overwriteScreenshots.asRubyArgument(name: "overwrite_screenshots", type: nil)
12672
+ let screenshotProcessingTimeoutArg = RubyCommand.Argument(name: "screenshot_processing_timeout", value: screenshotProcessingTimeout, type: nil)
12639
12673
  let syncScreenshotsArg = syncScreenshots.asRubyArgument(name: "sync_screenshots", type: nil)
12640
12674
  let submitForReviewArg = submitForReview.asRubyArgument(name: "submit_for_review", type: nil)
12641
12675
  let verifyOnlyArg = verifyOnly.asRubyArgument(name: "verify_only", type: nil)
12642
12676
  let rejectIfPossibleArg = rejectIfPossible.asRubyArgument(name: "reject_if_possible", type: nil)
12677
+ let versionCheckWaitRetryLimitArg = RubyCommand.Argument(name: "version_check_wait_retry_limit", value: versionCheckWaitRetryLimit, type: nil)
12643
12678
  let automaticReleaseArg = automaticRelease.asRubyArgument(name: "automatic_release", type: nil)
12644
12679
  let autoReleaseDateArg = autoReleaseDate.asRubyArgument(name: "auto_release_date", type: nil)
12645
12680
  let phasedReleaseArg = phasedRelease.asRubyArgument(name: "phased_release", type: nil)
@@ -12700,10 +12735,12 @@ public func uploadToAppStore(apiKeyPath: OptionalConfigValue<String?> = .fastlan
12700
12735
  skipAppVersionUpdateArg,
12701
12736
  forceArg,
12702
12737
  overwriteScreenshotsArg,
12738
+ screenshotProcessingTimeoutArg,
12703
12739
  syncScreenshotsArg,
12704
12740
  submitForReviewArg,
12705
12741
  verifyOnlyArg,
12706
12742
  rejectIfPossibleArg,
12743
+ versionCheckWaitRetryLimitArg,
12707
12744
  automaticReleaseArg,
12708
12745
  autoReleaseDateArg,
12709
12746
  phasedReleaseArg,
@@ -13561,7 +13598,7 @@ public func xcov(workspace: OptionalConfigValue<String?> = .fastlaneDefault(nil)
13561
13598
  coverallsServiceJobId: OptionalConfigValue<String?> = .fastlaneDefault(nil),
13562
13599
  coverallsRepoToken: OptionalConfigValue<String?> = .fastlaneDefault(nil),
13563
13600
  xcconfig: OptionalConfigValue<String?> = .fastlaneDefault(nil),
13564
- ideFoundationPath: String = "/Applications/Xcode-15.1.0.app/Contents/Developer/../Frameworks/IDEFoundation.framework/Versions/A/IDEFoundation",
13601
+ ideFoundationPath: String = "/Applications/Xcode_15.0.1.app/Contents/Developer/../Frameworks/IDEFoundation.framework/Versions/A/IDEFoundation",
13565
13602
  legacySupport: OptionalConfigValue<Bool> = .fastlaneDefault(false))
13566
13603
  {
13567
13604
  let workspaceArg = workspace.asRubyArgument(name: "workspace", type: nil)
@@ -13764,4 +13801,4 @@ public let snapshotfile: Snapshotfile = .init()
13764
13801
 
13765
13802
  // Please don't remove the lines below
13766
13803
  // They are used to detect outdated files
13767
- // FastlaneRunnerAPIVersion [0.9.176]
13804
+ // FastlaneRunnerAPIVersion [0.9.178]
@@ -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.219.0
20
+ // Generated with fastlane 2.221.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.126]
211
+ // FastlaneRunnerAPIVersion [0.9.128]
@@ -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.219.0
20
+ // Generated with fastlane 2.221.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.120]
231
+ // FastlaneRunnerAPIVersion [0.9.122]
@@ -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.219.0
20
+ // Generated with fastlane 2.221.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.119]
55
+ // FastlaneRunnerAPIVersion [0.9.121]
@@ -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.219.0
20
+ // Generated with fastlane 2.221.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.131]
323
+ // FastlaneRunnerAPIVersion [0.9.133]
@@ -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.219.0
20
+ // Generated with fastlane 2.221.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.121]
99
+ // FastlaneRunnerAPIVersion [0.9.123]
@@ -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.219.0
20
+ // Generated with fastlane 2.221.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.115]
207
+ // FastlaneRunnerAPIVersion [0.9.117]
@@ -2,45 +2,45 @@
2
2
  "entries": {
3
3
  "brew": {
4
4
  "swiftformat": {
5
- "version": "0.52.11",
5
+ "version": "0.53.10",
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:07a24ab550f0a4b26168b77c14b3b184e97552eb9071723af1103b1ff8d38bfd",
13
+ "sha256": "07a24ab550f0a4b26168b77c14b3b184e97552eb9071723af1103b1ff8d38bfd"
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:2781c7eb35cfe585ae8a5f41395694e67af26c5725d25d08530a4f6adb191842",
18
+ "sha256": "2781c7eb35cfe585ae8a5f41395694e67af26c5725d25d08530a4f6adb191842"
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:be39b5733c7a181931682200f3fbece32146b84b7098fec1d9f4d22d248a91e9",
23
+ "sha256": "be39b5733c7a181931682200f3fbece32146b84b7098fec1d9f4d22d248a91e9"
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:a080392954a019c55552ca7c6ab56033e8ab6aa1a598a0015b80ee12c62a4414",
28
+ "sha256": "a080392954a019c55552ca7c6ab56033e8ab6aa1a598a0015b80ee12c62a4414"
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:7a5cc00008a574bcc3f94c8048fe058a4211a1f2952b65051a723212c07d8ce5",
33
+ "sha256": "7a5cc00008a574bcc3f94c8048fe058a4211a1f2952b65051a723212c07d8ce5"
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:60b9451e66902de3233febbf20cfa3df39304fb329eb478a8cab277874da7869",
38
+ "sha256": "60b9451e66902de3233febbf20cfa3df39304fb329eb478a8cab277874da7869"
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:d4bacdce7d4de2ca8e026577a94e87828038d25c28235a96f740fee46c317798",
43
+ "sha256": "d4bacdce7d4de2ca8e026577a94e87828038d25c28235a96f740fee46c317798"
44
44
  }
45
45
  }
46
46
  }
@@ -82,12 +82,12 @@
82
82
  "macOS": "13.6"
83
83
  },
84
84
  "sonoma": {
85
- "HOMEBREW_VERSION": "4.2.2-18-gdcd267b",
85
+ "HOMEBREW_VERSION": "4.3.2",
86
86
  "HOMEBREW_PREFIX": "/opt/homebrew",
87
87
  "Homebrew/homebrew-core": "api",
88
- "CLT": "15.0.0.0.1.1694021235",
89
- "Xcode": "15.1",
90
- "macOS": "14.2.1"
88
+ "CLT": "15.3.0.0.1.1708646388",
89
+ "Xcode": "15.0.1",
90
+ "macOS": "14.5"
91
91
  }
92
92
  }
93
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