fastlane 2.216.0 → 2.217.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (57) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +96 -96
  3. data/deliver/lib/deliver/app_screenshot.rb +7 -0
  4. data/deliver/lib/deliver/runner.rb +2 -1
  5. data/deliver/lib/deliver/upload_metadata.rb +58 -13
  6. data/fastlane/lib/fastlane/actions/docs/upload_to_app_store.md.erb +1 -1
  7. data/fastlane/lib/fastlane/actions/docs/upload_to_play_store.md +6 -2
  8. data/fastlane/lib/fastlane/actions/git_branch.rb +1 -1
  9. data/fastlane/lib/fastlane/actions/install_on_device.rb +1 -1
  10. data/fastlane/lib/fastlane/actions/nexus_upload.rb +1 -0
  11. data/fastlane/lib/fastlane/actions/notarize.rb +17 -2
  12. data/fastlane/lib/fastlane/actions/slather.rb +17 -4
  13. data/fastlane/lib/fastlane/helper/git_helper.rb +3 -0
  14. data/fastlane/lib/fastlane/lane.rb +9 -1
  15. data/fastlane/lib/fastlane/runner.rb +1 -1
  16. data/fastlane/lib/fastlane/version.rb +1 -1
  17. data/fastlane/swift/Deliverfile.swift +1 -1
  18. data/fastlane/swift/DeliverfileProtocol.swift +1 -1
  19. data/fastlane/swift/Fastlane.swift +22 -6
  20. data/fastlane/swift/Gymfile.swift +1 -1
  21. data/fastlane/swift/GymfileProtocol.swift +1 -1
  22. data/fastlane/swift/Matchfile.swift +1 -1
  23. data/fastlane/swift/MatchfileProtocol.swift +5 -1
  24. data/fastlane/swift/Precheckfile.swift +1 -1
  25. data/fastlane/swift/PrecheckfileProtocol.swift +1 -1
  26. data/fastlane/swift/Scanfile.swift +1 -1
  27. data/fastlane/swift/ScanfileProtocol.swift +1 -1
  28. data/fastlane/swift/Screengrabfile.swift +1 -1
  29. data/fastlane/swift/ScreengrabfileProtocol.swift +1 -1
  30. data/fastlane/swift/Snapshotfile.swift +1 -1
  31. data/fastlane/swift/SnapshotfileProtocol.swift +1 -1
  32. data/fastlane/swift/formatting/Brewfile.lock.json +18 -28
  33. data/fastlane_core/lib/fastlane_core/cert_checker.rb +1 -1
  34. data/fastlane_core/lib/fastlane_core/project.rb +4 -0
  35. data/fastlane_core/lib/fastlane_core/queue_worker.rb +1 -1
  36. data/gym/lib/gym/module.rb +13 -2
  37. data/gym/lib/gym/options.rb +1 -1
  38. data/match/lib/match/options.rb +5 -0
  39. data/match/lib/match/runner.rb +11 -5
  40. data/match/lib/match/storage/git_storage.rb +9 -1
  41. data/precheck/lib/precheck/rules/unreachable_urls_rule.rb +1 -1
  42. data/snapshot/lib/assets/SnapshotHelper.swift +13 -9
  43. data/snapshot/lib/snapshot/reports_generator.rb +48 -7
  44. data/spaceship/lib/spaceship/connect_api/api_client.rb +2 -1
  45. data/spaceship/lib/spaceship/connect_api/models/app_screenshot_set.rb +2 -0
  46. data/spaceship/lib/spaceship/connect_api/models/bundle_id.rb +4 -4
  47. data/spaceship/lib/spaceship/connect_api/models/certificate.rb +2 -2
  48. data/spaceship/lib/spaceship/connect_api/models/device.rb +2 -2
  49. data/spaceship/lib/spaceship/connect_api/models/profile.rb +3 -2
  50. data/spaceship/lib/spaceship/connect_api/provisioning/provisioning.rb +14 -8
  51. data/spaceship/lib/spaceship/connect_api/tunes/tunes.rb +0 -3
  52. data/supply/lib/supply/uploader.rb +28 -13
  53. data/trainer/lib/trainer/xcresult.rb +1 -1
  54. metadata +25 -28
  55. data/fastlane/lib/fastlane/.features.rb.swp +0 -0
  56. data/fastlane_core/lib/fastlane_core/.env.rb.swp +0 -0
  57. data/supply/lib/supply/.client.rb.swp +0 -0
@@ -17,4 +17,4 @@ public class Deliverfile: DeliverfileProtocol {
17
17
  // during the `init` process, and you won't see this message
18
18
  }
19
19
 
20
- // Generated with fastlane 2.216.0
20
+ // Generated with fastlane 2.217.0
@@ -264,4 +264,4 @@ public extension DeliverfileProtocol {
264
264
 
265
265
  // Please don't remove the lines below
266
266
  // They are used to detect outdated files
267
- // FastlaneRunnerAPIVersion [0.9.120]
267
+ // FastlaneRunnerAPIVersion [0.9.121]
@@ -5252,7 +5252,7 @@ public func gitAdd(path: OptionalConfigValue<[String]?> = .fastlaneDefault(nil),
5252
5252
  /**
5253
5253
  Returns the name of the current git branch, possibly as managed by CI ENV vars
5254
5254
 
5255
- If no branch could be found, this action will return an empty string. This is a wrapper for the internal action Actions.git_branch
5255
+ If no branch could be found, this action will return an empty string. If `FL_GIT_BRANCH_DONT_USE_ENV_VARS` is `true`, it'll ignore CI ENV vars. This is a wrapper for the internal action Actions.git_branch
5256
5256
  */
5257
5257
  @discardableResult public func gitBranch() -> String {
5258
5258
  let args: [RubyCommand.Argument] = []
@@ -6236,7 +6236,7 @@ public func importCertificate(certificatePath: String,
6236
6236
  - skipWifi: Do not search for devices via WiFi
6237
6237
  - ipa: The IPA file to put on the device
6238
6238
 
6239
- Installs the ipa on the device. If no id is given, the first found iOS device will be used. Works via USB or Wi-Fi. This requires `ios-deploy` to be installed. Please have a look at [ios-deploy](https://github.com/ios-control/ios-deploy). To quickly install it, use `npm -g i ios-deploy`
6239
+ Installs the ipa on the device. If no id is given, the first found iOS device will be used. Works via USB or Wi-Fi. This requires `ios-deploy` to be installed. Please have a look at [ios-deploy](https://github.com/ios-control/ios-deploy). To quickly install it, use `brew install ios-deploy`
6240
6240
  */
6241
6241
  public func installOnDevice(extra: OptionalConfigValue<String?> = .fastlaneDefault(nil),
6242
6242
  deviceId: OptionalConfigValue<String?> = .fastlaneDefault(nil),
@@ -6745,6 +6745,7 @@ public func makeChangelogFromJenkins(fallbackChangelog: String = "",
6745
6745
  - forceForNewDevices: Renew the provisioning profiles if the device count on the developer portal has changed. Ignored for profile types 'appstore' and 'developer_id'
6746
6746
  - includeMacInProfiles: Include Apple Silicon Mac devices in provisioning profiles for iOS/iPadOS apps
6747
6747
  - includeAllCertificates: Include all matching certificates in the provisioning profile. Works only for the 'development' provisioning profile type
6748
+ - certificateId: Select certificate by id. Useful if multiple certificates are stored in one place
6748
6749
  - forceForNewCertificates: Renew the provisioning profiles if the certificate count on the developer portal has changed. Works only for the 'development' provisioning profile type. Requires 'include_all_certificates' option to be 'true'
6749
6750
  - skipConfirmation: Disables confirmation prompts during nuke, answering them with yes
6750
6751
  - safeRemoveCerts: Remove certs from repository during nuke without revoking them on the developer portal
@@ -6802,6 +6803,7 @@ public func match(type: String = matchfile.type,
6802
6803
  forceForNewDevices: OptionalConfigValue<Bool> = .fastlaneDefault(matchfile.forceForNewDevices),
6803
6804
  includeMacInProfiles: OptionalConfigValue<Bool> = .fastlaneDefault(matchfile.includeMacInProfiles),
6804
6805
  includeAllCertificates: OptionalConfigValue<Bool> = .fastlaneDefault(matchfile.includeAllCertificates),
6806
+ certificateId: OptionalConfigValue<String?> = .fastlaneDefault(matchfile.certificateId),
6805
6807
  forceForNewCertificates: OptionalConfigValue<Bool> = .fastlaneDefault(matchfile.forceForNewCertificates),
6806
6808
  skipConfirmation: OptionalConfigValue<Bool> = .fastlaneDefault(matchfile.skipConfirmation),
6807
6809
  safeRemoveCerts: OptionalConfigValue<Bool> = .fastlaneDefault(matchfile.safeRemoveCerts),
@@ -6857,6 +6859,7 @@ public func match(type: String = matchfile.type,
6857
6859
  let forceForNewDevicesArg = forceForNewDevices.asRubyArgument(name: "force_for_new_devices", type: nil)
6858
6860
  let includeMacInProfilesArg = includeMacInProfiles.asRubyArgument(name: "include_mac_in_profiles", type: nil)
6859
6861
  let includeAllCertificatesArg = includeAllCertificates.asRubyArgument(name: "include_all_certificates", type: nil)
6862
+ let certificateIdArg = certificateId.asRubyArgument(name: "certificate_id", type: nil)
6860
6863
  let forceForNewCertificatesArg = forceForNewCertificates.asRubyArgument(name: "force_for_new_certificates", type: nil)
6861
6864
  let skipConfirmationArg = skipConfirmation.asRubyArgument(name: "skip_confirmation", type: nil)
6862
6865
  let safeRemoveCertsArg = safeRemoveCerts.asRubyArgument(name: "safe_remove_certs", type: nil)
@@ -6911,6 +6914,7 @@ public func match(type: String = matchfile.type,
6911
6914
  forceForNewDevicesArg,
6912
6915
  includeMacInProfilesArg,
6913
6916
  includeAllCertificatesArg,
6917
+ certificateIdArg,
6914
6918
  forceForNewCertificatesArg,
6915
6919
  skipConfirmationArg,
6916
6920
  safeRemoveCertsArg,
@@ -6976,6 +6980,7 @@ public func match(type: String = matchfile.type,
6976
6980
  - forceForNewDevices: Renew the provisioning profiles if the device count on the developer portal has changed. Ignored for profile types 'appstore' and 'developer_id'
6977
6981
  - includeMacInProfiles: Include Apple Silicon Mac devices in provisioning profiles for iOS/iPadOS apps
6978
6982
  - includeAllCertificates: Include all matching certificates in the provisioning profile. Works only for the 'development' provisioning profile type
6983
+ - certificateId: Select certificate by id. Useful if multiple certificates are stored in one place
6979
6984
  - forceForNewCertificates: Renew the provisioning profiles if the certificate count on the developer portal has changed. Works only for the 'development' provisioning profile type. Requires 'include_all_certificates' option to be 'true'
6980
6985
  - skipConfirmation: Disables confirmation prompts during nuke, answering them with yes
6981
6986
  - safeRemoveCerts: Remove certs from repository during nuke without revoking them on the developer portal
@@ -7037,6 +7042,7 @@ public func matchNuke(type: String = "development",
7037
7042
  forceForNewDevices: OptionalConfigValue<Bool> = .fastlaneDefault(false),
7038
7043
  includeMacInProfiles: OptionalConfigValue<Bool> = .fastlaneDefault(false),
7039
7044
  includeAllCertificates: OptionalConfigValue<Bool> = .fastlaneDefault(false),
7045
+ certificateId: OptionalConfigValue<String?> = .fastlaneDefault(nil),
7040
7046
  forceForNewCertificates: OptionalConfigValue<Bool> = .fastlaneDefault(false),
7041
7047
  skipConfirmation: OptionalConfigValue<Bool> = .fastlaneDefault(false),
7042
7048
  safeRemoveCerts: OptionalConfigValue<Bool> = .fastlaneDefault(false),
@@ -7092,6 +7098,7 @@ public func matchNuke(type: String = "development",
7092
7098
  let forceForNewDevicesArg = forceForNewDevices.asRubyArgument(name: "force_for_new_devices", type: nil)
7093
7099
  let includeMacInProfilesArg = includeMacInProfiles.asRubyArgument(name: "include_mac_in_profiles", type: nil)
7094
7100
  let includeAllCertificatesArg = includeAllCertificates.asRubyArgument(name: "include_all_certificates", type: nil)
7101
+ let certificateIdArg = certificateId.asRubyArgument(name: "certificate_id", type: nil)
7095
7102
  let forceForNewCertificatesArg = forceForNewCertificates.asRubyArgument(name: "force_for_new_certificates", type: nil)
7096
7103
  let skipConfirmationArg = skipConfirmation.asRubyArgument(name: "skip_confirmation", type: nil)
7097
7104
  let safeRemoveCertsArg = safeRemoveCerts.asRubyArgument(name: "safe_remove_certs", type: nil)
@@ -7146,6 +7153,7 @@ public func matchNuke(type: String = "development",
7146
7153
  forceForNewDevicesArg,
7147
7154
  includeMacInProfilesArg,
7148
7155
  includeAllCertificatesArg,
7156
+ certificateIdArg,
7149
7157
  forceForNewCertificatesArg,
7150
7158
  skipConfirmationArg,
7151
7159
  safeRemoveCertsArg,
@@ -10282,6 +10290,7 @@ public func slackTrainStart(distance: Int = 5,
10282
10290
  - arch: Specify which architecture the binary file is in. Needed for universal binaries
10283
10291
  - sourceFiles: A Dir.glob compatible pattern used to limit the lookup to specific source files. Ignored in gcov mode
10284
10292
  - decimals: The amount of decimals to use for % coverage reporting
10293
+ - ymlfile: Relative path to a file used in place of '.slather.yml'
10285
10294
 
10286
10295
  Slather works with multiple code coverage formats, including Xcode 7 code coverage.
10287
10296
  Slather is available at [https://github.com/SlatherOrg/slather](https://github.com/SlatherOrg/slather).
@@ -10317,7 +10326,8 @@ public func slather(buildDirectory: OptionalConfigValue<String?> = .fastlaneDefa
10317
10326
  binaryFile: OptionalConfigValue<[String]?> = .fastlaneDefault(nil),
10318
10327
  arch: OptionalConfigValue<String?> = .fastlaneDefault(nil),
10319
10328
  sourceFiles: OptionalConfigValue<Bool> = .fastlaneDefault(false),
10320
- decimals: OptionalConfigValue<Bool> = .fastlaneDefault(false))
10329
+ decimals: OptionalConfigValue<Bool> = .fastlaneDefault(false),
10330
+ ymlfile: OptionalConfigValue<String?> = .fastlaneDefault(nil))
10321
10331
  {
10322
10332
  let buildDirectoryArg = buildDirectory.asRubyArgument(name: "build_directory", type: nil)
10323
10333
  let projArg = proj.asRubyArgument(name: "proj", type: nil)
@@ -10351,6 +10361,7 @@ public func slather(buildDirectory: OptionalConfigValue<String?> = .fastlaneDefa
10351
10361
  let archArg = arch.asRubyArgument(name: "arch", type: nil)
10352
10362
  let sourceFilesArg = sourceFiles.asRubyArgument(name: "source_files", type: nil)
10353
10363
  let decimalsArg = decimals.asRubyArgument(name: "decimals", type: nil)
10364
+ let ymlfileArg = ymlfile.asRubyArgument(name: "ymlfile", type: nil)
10354
10365
  let array: [RubyCommand.Argument?] = [buildDirectoryArg,
10355
10366
  projArg,
10356
10367
  workspaceArg,
@@ -10382,7 +10393,8 @@ public func slather(buildDirectory: OptionalConfigValue<String?> = .fastlaneDefa
10382
10393
  binaryFileArg,
10383
10394
  archArg,
10384
10395
  sourceFilesArg,
10385
- decimalsArg]
10396
+ decimalsArg,
10397
+ ymlfileArg]
10386
10398
  let args: [RubyCommand.Argument] = array
10387
10399
  .filter { $0?.value != nil }
10388
10400
  .compactMap { $0 }
@@ -11230,6 +11242,7 @@ public func swiftlint(mode: String = "lint",
11230
11242
  - forceForNewDevices: Renew the provisioning profiles if the device count on the developer portal has changed. Ignored for profile types 'appstore' and 'developer_id'
11231
11243
  - includeMacInProfiles: Include Apple Silicon Mac devices in provisioning profiles for iOS/iPadOS apps
11232
11244
  - includeAllCertificates: Include all matching certificates in the provisioning profile. Works only for the 'development' provisioning profile type
11245
+ - certificateId: Select certificate by id. Useful if multiple certificates are stored in one place
11233
11246
  - forceForNewCertificates: Renew the provisioning profiles if the certificate count on the developer portal has changed. Works only for the 'development' provisioning profile type. Requires 'include_all_certificates' option to be 'true'
11234
11247
  - skipConfirmation: Disables confirmation prompts during nuke, answering them with yes
11235
11248
  - safeRemoveCerts: Remove certs from repository during nuke without revoking them on the developer portal
@@ -11287,6 +11300,7 @@ public func syncCodeSigning(type: String = "development",
11287
11300
  forceForNewDevices: OptionalConfigValue<Bool> = .fastlaneDefault(false),
11288
11301
  includeMacInProfiles: OptionalConfigValue<Bool> = .fastlaneDefault(false),
11289
11302
  includeAllCertificates: OptionalConfigValue<Bool> = .fastlaneDefault(false),
11303
+ certificateId: OptionalConfigValue<String?> = .fastlaneDefault(nil),
11290
11304
  forceForNewCertificates: OptionalConfigValue<Bool> = .fastlaneDefault(false),
11291
11305
  skipConfirmation: OptionalConfigValue<Bool> = .fastlaneDefault(false),
11292
11306
  safeRemoveCerts: OptionalConfigValue<Bool> = .fastlaneDefault(false),
@@ -11342,6 +11356,7 @@ public func syncCodeSigning(type: String = "development",
11342
11356
  let forceForNewDevicesArg = forceForNewDevices.asRubyArgument(name: "force_for_new_devices", type: nil)
11343
11357
  let includeMacInProfilesArg = includeMacInProfiles.asRubyArgument(name: "include_mac_in_profiles", type: nil)
11344
11358
  let includeAllCertificatesArg = includeAllCertificates.asRubyArgument(name: "include_all_certificates", type: nil)
11359
+ let certificateIdArg = certificateId.asRubyArgument(name: "certificate_id", type: nil)
11345
11360
  let forceForNewCertificatesArg = forceForNewCertificates.asRubyArgument(name: "force_for_new_certificates", type: nil)
11346
11361
  let skipConfirmationArg = skipConfirmation.asRubyArgument(name: "skip_confirmation", type: nil)
11347
11362
  let safeRemoveCertsArg = safeRemoveCerts.asRubyArgument(name: "safe_remove_certs", type: nil)
@@ -11396,6 +11411,7 @@ public func syncCodeSigning(type: String = "development",
11396
11411
  forceForNewDevicesArg,
11397
11412
  includeMacInProfilesArg,
11398
11413
  includeAllCertificatesArg,
11414
+ certificateIdArg,
11399
11415
  forceForNewCertificatesArg,
11400
11416
  skipConfirmationArg,
11401
11417
  safeRemoveCertsArg,
@@ -13493,7 +13509,7 @@ public func xcov(workspace: OptionalConfigValue<String?> = .fastlaneDefault(nil)
13493
13509
  coverallsServiceJobId: OptionalConfigValue<String?> = .fastlaneDefault(nil),
13494
13510
  coverallsRepoToken: OptionalConfigValue<String?> = .fastlaneDefault(nil),
13495
13511
  xcconfig: OptionalConfigValue<String?> = .fastlaneDefault(nil),
13496
- ideFoundationPath: String = "/Applications/Xcode-14.3.0.app/Contents/Developer/../Frameworks/IDEFoundation.framework/Versions/A/IDEFoundation",
13512
+ ideFoundationPath: String = "/Applications/Xcode-15.0.0.app/Contents/Developer/../Frameworks/IDEFoundation.framework/Versions/A/IDEFoundation",
13497
13513
  legacySupport: OptionalConfigValue<Bool> = .fastlaneDefault(false))
13498
13514
  {
13499
13515
  let workspaceArg = workspace.asRubyArgument(name: "workspace", type: nil)
@@ -13696,4 +13712,4 @@ public let snapshotfile: Snapshotfile = .init()
13696
13712
 
13697
13713
  // Please don't remove the lines below
13698
13714
  // They are used to detect outdated files
13699
- // FastlaneRunnerAPIVersion [0.9.173]
13715
+ // FastlaneRunnerAPIVersion [0.9.174]
@@ -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.216.0
20
+ // Generated with fastlane 2.217.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.123]
211
+ // FastlaneRunnerAPIVersion [0.9.124]
@@ -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.216.0
20
+ // Generated with fastlane 2.217.0
@@ -125,6 +125,9 @@ public protocol MatchfileProtocol: AnyObject {
125
125
  /// Include all matching certificates in the provisioning profile. Works only for the 'development' provisioning profile type
126
126
  var includeAllCertificates: Bool { get }
127
127
 
128
+ /// Select certificate by id. Useful if multiple certificates are stored in one place
129
+ var certificateId: String? { get }
130
+
128
131
  /// Renew the provisioning profiles if the certificate count on the developer portal has changed. Works only for the 'development' provisioning profile type. Requires 'include_all_certificates' option to be 'true'
129
132
  var forceForNewCertificates: Bool { get }
130
133
 
@@ -207,6 +210,7 @@ public extension MatchfileProtocol {
207
210
  var forceForNewDevices: Bool { return false }
208
211
  var includeMacInProfiles: Bool { return false }
209
212
  var includeAllCertificates: Bool { return false }
213
+ var certificateId: String? { return nil }
210
214
  var forceForNewCertificates: Bool { return false }
211
215
  var skipConfirmation: Bool { return false }
212
216
  var safeRemoveCerts: Bool { return false }
@@ -224,4 +228,4 @@ public extension MatchfileProtocol {
224
228
 
225
229
  // Please don't remove the lines below
226
230
  // They are used to detect outdated files
227
- // FastlaneRunnerAPIVersion [0.9.117]
231
+ // FastlaneRunnerAPIVersion [0.9.118]
@@ -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.216.0
20
+ // Generated with fastlane 2.217.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.116]
55
+ // FastlaneRunnerAPIVersion [0.9.117]
@@ -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.216.0
20
+ // Generated with fastlane 2.217.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.128]
323
+ // FastlaneRunnerAPIVersion [0.9.129]
@@ -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.216.0
20
+ // Generated with fastlane 2.217.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.118]
99
+ // FastlaneRunnerAPIVersion [0.9.119]
@@ -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.216.0
20
+ // Generated with fastlane 2.217.0
@@ -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.112]
207
+ // FastlaneRunnerAPIVersion [0.9.113]
@@ -2,55 +2,45 @@
2
2
  "entries": {
3
3
  "brew": {
4
4
  "swiftformat": {
5
- "version": "0.52.4",
5
+ "version": "0.52.9",
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:211b2c1465afea2476d380c4af2999bdd16dd2d9f62d174f797f83af257706f7",
13
- "sha256": "211b2c1465afea2476d380c4af2999bdd16dd2d9f62d174f797f83af257706f7"
12
+ "url": "https://ghcr.io/v2/homebrew/core/swiftformat/blobs/sha256:52697577d90a9cea86cb2829c5a40a9388e5df727a8ee496ff7dad824e572142",
13
+ "sha256": "52697577d90a9cea86cb2829c5a40a9388e5df727a8ee496ff7dad824e572142"
14
14
  },
15
15
  "arm64_ventura": {
16
16
  "cellar": ":any_skip_relocation",
17
- "url": "https://ghcr.io/v2/homebrew/core/swiftformat/blobs/sha256:e590260ea2cc8857e807f044d2c438445c75837154a3e6ae8be5999b239bcf85",
18
- "sha256": "e590260ea2cc8857e807f044d2c438445c75837154a3e6ae8be5999b239bcf85"
17
+ "url": "https://ghcr.io/v2/homebrew/core/swiftformat/blobs/sha256:2f64a4615f4bc08b5b00fc95ca746c910e66a612d04252a384a150ea4319b3fd",
18
+ "sha256": "2f64a4615f4bc08b5b00fc95ca746c910e66a612d04252a384a150ea4319b3fd"
19
19
  },
20
20
  "arm64_monterey": {
21
21
  "cellar": ":any_skip_relocation",
22
- "url": "https://ghcr.io/v2/homebrew/core/swiftformat/blobs/sha256:fb05650b13b66370e72593f46cc764c46abc956c81aed4c627beeb788dde96f8",
23
- "sha256": "fb05650b13b66370e72593f46cc764c46abc956c81aed4c627beeb788dde96f8"
24
- },
25
- "arm64_big_sur": {
26
- "cellar": ":any_skip_relocation",
27
- "url": "https://ghcr.io/v2/homebrew/core/swiftformat/blobs/sha256:aa49d987ffd2f32284fd422f1038f5a17584655be5cbfc3bb3726752fd00a6c5",
28
- "sha256": "aa49d987ffd2f32284fd422f1038f5a17584655be5cbfc3bb3726752fd00a6c5"
22
+ "url": "https://ghcr.io/v2/homebrew/core/swiftformat/blobs/sha256:74ee2483b087132a623c63ebe85c0650bd4a1f4ab4e12a592ffddfc93db0f9a0",
23
+ "sha256": "74ee2483b087132a623c63ebe85c0650bd4a1f4ab4e12a592ffddfc93db0f9a0"
29
24
  },
30
25
  "sonoma": {
31
26
  "cellar": ":any_skip_relocation",
32
- "url": "https://ghcr.io/v2/homebrew/core/swiftformat/blobs/sha256:85a95d6bedc08f25f232b7d5adbaa99662060a2579cc702685343b3ab9c8b87d",
33
- "sha256": "85a95d6bedc08f25f232b7d5adbaa99662060a2579cc702685343b3ab9c8b87d"
27
+ "url": "https://ghcr.io/v2/homebrew/core/swiftformat/blobs/sha256:2e55e58e59fd79c6adb7340dcc0a33fa6fc611a2375e22d6b7c90101ee1bd439",
28
+ "sha256": "2e55e58e59fd79c6adb7340dcc0a33fa6fc611a2375e22d6b7c90101ee1bd439"
34
29
  },
35
30
  "ventura": {
36
31
  "cellar": ":any_skip_relocation",
37
- "url": "https://ghcr.io/v2/homebrew/core/swiftformat/blobs/sha256:6686712b546ae867ec07561ced1c215eb5d93a4f54852f3348a66e52f249f644",
38
- "sha256": "6686712b546ae867ec07561ced1c215eb5d93a4f54852f3348a66e52f249f644"
32
+ "url": "https://ghcr.io/v2/homebrew/core/swiftformat/blobs/sha256:1ef2d7df464f3d8c3e0ae18c1901e595a52038ea6e55760f719e93df5c80d065",
33
+ "sha256": "1ef2d7df464f3d8c3e0ae18c1901e595a52038ea6e55760f719e93df5c80d065"
39
34
  },
40
35
  "monterey": {
41
36
  "cellar": ":any_skip_relocation",
42
- "url": "https://ghcr.io/v2/homebrew/core/swiftformat/blobs/sha256:ed379b65cc248b290cf833ce2a088bfb280276de94bedee6b4c56e21bec36a72",
43
- "sha256": "ed379b65cc248b290cf833ce2a088bfb280276de94bedee6b4c56e21bec36a72"
44
- },
45
- "big_sur": {
46
- "cellar": ":any_skip_relocation",
47
- "url": "https://ghcr.io/v2/homebrew/core/swiftformat/blobs/sha256:492b417360077a31d5c78cfa173526fb8219430e84d01f24f9402ca1d97a63f0",
48
- "sha256": "492b417360077a31d5c78cfa173526fb8219430e84d01f24f9402ca1d97a63f0"
37
+ "url": "https://ghcr.io/v2/homebrew/core/swiftformat/blobs/sha256:c4752c5c2908bbd592c845ced5910e31e4c5ccbfaf3d294d9a9468b9fd9b0d5d",
38
+ "sha256": "c4752c5c2908bbd592c845ced5910e31e4c5ccbfaf3d294d9a9468b9fd9b0d5d"
49
39
  },
50
40
  "x86_64_linux": {
51
41
  "cellar": "/home/linuxbrew/.linuxbrew/Cellar",
52
- "url": "https://ghcr.io/v2/homebrew/core/swiftformat/blobs/sha256:c6e703b2b48601787c1cd4f68adfea340e7ab0f4d9e2ddb3d15e6f38a9d50502",
53
- "sha256": "c6e703b2b48601787c1cd4f68adfea340e7ab0f4d9e2ddb3d15e6f38a9d50502"
42
+ "url": "https://ghcr.io/v2/homebrew/core/swiftformat/blobs/sha256:4e5d1239be58399f35ddc87bbe123a435f27fbc537e0b4cb52a23b33316e3fa4",
43
+ "sha256": "4e5d1239be58399f35ddc87bbe123a435f27fbc537e0b4cb52a23b33316e3fa4"
54
44
  }
55
45
  }
56
46
  }
@@ -84,12 +74,12 @@
84
74
  "macOS": "12.5"
85
75
  },
86
76
  "ventura": {
87
- "HOMEBREW_VERSION": "4.1.11-38-gaa2a77b",
77
+ "HOMEBREW_VERSION": "4.1.20-17-g8df40f4",
88
78
  "HOMEBREW_PREFIX": "/opt/homebrew",
89
79
  "Homebrew/homebrew-core": "api",
90
80
  "CLT": "",
91
- "Xcode": "14.3",
92
- "macOS": "13.4"
81
+ "Xcode": "15.0",
82
+ "macOS": "13.6"
93
83
  }
94
84
  }
95
85
  }
@@ -116,7 +116,7 @@ module FastlaneCore
116
116
 
117
117
  # Find all installed WWDRCA certificates
118
118
  installed_certs = []
119
- Helper.backticks("security find-certificate -a -c '#{certificate_name}' -p #{wwdr_keychain.shellescape}")
119
+ Helper.backticks("security find-certificate -a -c '#{certificate_name}' -p #{wwdr_keychain.shellescape}", print: false)
120
120
  .lines
121
121
  .each do |line|
122
122
  if line.start_with?('-----BEGIN CERTIFICATE-----')
@@ -307,6 +307,10 @@ module FastlaneCore
307
307
  supported_platforms.include?(:watchOS)
308
308
  end
309
309
 
310
+ def multiplatform?
311
+ supported_platforms.count > 1
312
+ end
313
+
310
314
  def supported_platforms
311
315
  supported_platforms = build_settings(key: "SUPPORTED_PLATFORMS")
312
316
  if supported_platforms.nil?
@@ -6,7 +6,7 @@ module FastlaneCore
6
6
  # Use this when you have all the items that you'll process in advance.
7
7
  # Simply enqueue them to this and call `QueueWorker#start`.
8
8
  class QueueWorker
9
- NUMBER_OF_THREADS = FastlaneCore::Helper.test? ? 1 : [(ENV["DELIVER_NUMBER_OF_THREADS"] || ENV.fetch("FL_NUMBER_OF_THREADS", 10)).to_i, 10].min
9
+ NUMBER_OF_THREADS = FastlaneCore::Helper.test? ? 1 : [ENV["DELIVER_NUMBER_OF_THREADS"], ENV["FL_NUMBER_OF_THREADS"], 10].map(&:to_i).find(&:positive?).clamp(1, ENV.fetch("FL_MAX_NUMBER_OF_THREADS", 10).to_i)
10
10
 
11
11
  # @param concurrency (Numeric) - A number of threads to be created
12
12
  # @param block (Proc) - A task you want to execute with enqueued items
@@ -27,8 +27,8 @@ module Gym
27
27
 
28
28
  def building_for_ios?
29
29
  if Gym.project.mac?
30
- # Can be building for iOS if mac project and catalyst
31
- return building_mac_catalyst_for_ios?
30
+ # Can be building for iOS if mac project and catalyst or multiplatform and set to iOS
31
+ return building_mac_catalyst_for_ios? || building_multiplatform_for_ios?
32
32
  else
33
33
  # Can be iOS project and build for mac if catalyst
34
34
  return false if building_mac_catalyst_for_mac?
@@ -43,6 +43,9 @@ module Gym
43
43
  # Can be a mac project and not build mac if catalyst
44
44
  return building_mac_catalyst_for_mac?
45
45
  else
46
+ # Can be mac project but multiplatform and building for iOS
47
+ return false if building_multiplatform_for_ios?
48
+
46
49
  return Gym.project.mac?
47
50
  end
48
51
  end
@@ -55,6 +58,14 @@ module Gym
55
58
  Gym.project.supports_mac_catalyst? && Gym.config[:catalyst_platform] == "macos"
56
59
  end
57
60
 
61
+ def building_multiplatform_for_ios?
62
+ Gym.project.multiplatform? && Gym.project.ios? && (Gym.config[:sdk] == "iphoneos" || Gym.config[:sdk] == "iphonesimulator")
63
+ end
64
+
65
+ def building_multiplatform_for_mac?
66
+ Gym.project.multiplatform? && Gym.project.mac? && Gym.config[:sdk] == "macosx"
67
+ end
68
+
58
69
  def export_destination_upload?
59
70
  config_path = Gym.cache[:config_path]
60
71
  return false if config_path.nil?
@@ -152,7 +152,7 @@ module Gym
152
152
  optional: true,
153
153
  verify_block: proc do |value|
154
154
  av = %w(ios macos)
155
- UI.user_error!("Unsupported export_method '#{value}', must be: #{av}") unless av.include?(value)
155
+ UI.user_error!("Unsupported catalyst_platform '#{value}', must be: #{av}") unless av.include?(value)
156
156
  end),
157
157
  FastlaneCore::ConfigItem.new(key: :installer_cert_name,
158
158
  env_name: "GYM_INSTALLER_CERT_NAME",
@@ -282,6 +282,11 @@ module Match
282
282
  description: "Include all matching certificates in the provisioning profile. Works only for the 'development' provisioning profile type",
283
283
  type: Boolean,
284
284
  default_value: false),
285
+ FastlaneCore::ConfigItem.new(key: :certificate_id,
286
+ env_name: "MATCH_CERTIFICATE_ID",
287
+ description: "Select certificate by id. Useful if multiple certificates are stored in one place",
288
+ type: String,
289
+ optional: true),
285
290
  FastlaneCore::ConfigItem.new(key: :force_for_new_certificates,
286
291
  env_name: "MATCH_FORCE_FOR_NEW_CERTIFICATES",
287
292
  description: "Renew the provisioning profiles if the certificate count on the developer portal has changed. Works only for the 'development' provisioning profile type. Requires 'include_all_certificates' option to be 'true'",
@@ -148,7 +148,7 @@ module Match
148
148
  self.files_to_commit << cert_path
149
149
  self.files_to_commit << private_key_path
150
150
  else
151
- cert_path = certs.last
151
+ cert_path = select_cert_or_key(paths: certs)
152
152
 
153
153
  # Check validity of certificate
154
154
  if Utils.is_cert_valid?(cert_path)
@@ -172,7 +172,7 @@ module Match
172
172
  # Import the private key
173
173
  # there seems to be no good way to check if it's already installed - so just install it
174
174
  # Key will only be added to the partition list if it isn't already installed
175
- Utils.import(keys.last, params[:keychain_name], password: params[:keychain_password])
175
+ Utils.import(select_cert_or_key(paths: keys), params[:keychain_name], password: params[:keychain_password])
176
176
  end
177
177
  else
178
178
  UI.message("Skipping installation of certificate as it would not work on this operating system.")
@@ -180,7 +180,7 @@ module Match
180
180
 
181
181
  if params[:output_path]
182
182
  FileUtils.cp(cert_path, params[:output_path])
183
- FileUtils.cp(keys.last, params[:output_path])
183
+ FileUtils.cp(select_cert_or_key(paths: keys), params[:output_path])
184
184
  end
185
185
 
186
186
  # Get and print info of certificate
@@ -191,6 +191,12 @@ module Match
191
191
  return File.basename(cert_path).gsub(".cer", "") # Certificate ID
192
192
  end
193
193
 
194
+ # @return [String] Path to certificate or P12 key
195
+ def select_cert_or_key(paths:)
196
+ cert_id_path = ENV['MATCH_CERTIFICATE_ID'] ? paths.find { |path| path.include?(ENV['MATCH_CERTIFICATE_ID']) } : nil
197
+ cert_id_path || paths.last
198
+ end
199
+
194
200
  # rubocop:disable Metrics/PerceivedComplexity
195
201
  # @return [String] The UUID of the provisioning profile so we can verify it with the Apple Developer Portal
196
202
  def fetch_provisioning_profile(params: nil, certificate_id: nil, app_identifier: nil, working_directory: nil)
@@ -331,7 +337,7 @@ module Match
331
337
  portal_profile = all_profiles.detect { |i| i.uuid == uuid }
332
338
 
333
339
  if portal_profile
334
- profile_device_count = portal_profile.fetch_all_devices.count
340
+ profile_device_count = portal_profile.devices.count
335
341
 
336
342
  device_classes =
337
343
  case platform
@@ -412,7 +418,7 @@ module Match
412
418
  # * For portal certificates, we filter out the expired one but includes a new certificate;
413
419
  # * Profile still contains an expired certificate and is valid.
414
420
  # Thus, we need to check the validity of profile certificates too.
415
- profile_certs_count = portal_profile.fetch_all_certificates.select(&:valid?).count
421
+ profile_certs_count = portal_profile.certificates.select(&:valid?).count
416
422
 
417
423
  certificate_types =
418
424
  case platform
@@ -59,12 +59,20 @@ module Match
59
59
  self.clone_branch_directly = clone_branch_directly
60
60
  self.git_basic_authorization = git_basic_authorization
61
61
  self.git_bearer_authorization = git_bearer_authorization
62
- self.git_private_key = git_private_key
62
+ self.git_private_key = convert_private_key_path_to_absolute(git_private_key)
63
63
 
64
64
  self.type = type if type
65
65
  self.platform = platform if platform
66
66
  end
67
67
 
68
+ def convert_private_key_path_to_absolute(git_private_key)
69
+ if !git_private_key.nil? && File.file?(File.expand_path(git_private_key))
70
+ File.expand_path(git_private_key).shellescape.to_s
71
+ else
72
+ git_private_key
73
+ end
74
+ end
75
+
68
76
  def prefixed_working_directory
69
77
  return working_directory
70
78
  end
@@ -33,7 +33,7 @@ module Precheck
33
33
  connection.use(FaradayMiddleware::FollowRedirects)
34
34
  connection.adapter(:net_http)
35
35
  end
36
- return RuleReturn.new(validation_state: Precheck::VALIDATION_STATES[:failed], failure_data: url) unless request.head.status == 200
36
+ return RuleReturn.new(validation_state: Precheck::VALIDATION_STATES[:failed], failure_data: "HTTP #{request.head.status}: #{url}") unless request.head.status == 200
37
37
  rescue StandardError => e
38
38
  UI.verbose("URL #{url} not reachable 😵: #{e.message}")
39
39
  # I can only return :fail here, but I also want to return #{url}
@@ -15,13 +15,12 @@
15
15
  import Foundation
16
16
  import XCTest
17
17
 
18
- var deviceLanguage = ""
19
- var locale = ""
20
-
18
+ @MainActor
21
19
  func setupSnapshot(_ app: XCUIApplication, waitForAnimations: Bool = true) {
22
20
  Snapshot.setupSnapshot(app, waitForAnimations: waitForAnimations)
23
21
  }
24
22
 
23
+ @MainActor
25
24
  func snapshot(_ name: String, waitForLoadingIndicator: Bool) {
26
25
  if waitForLoadingIndicator {
27
26
  Snapshot.snapshot(name)
@@ -33,6 +32,7 @@ func snapshot(_ name: String, waitForLoadingIndicator: Bool) {
33
32
  /// - Parameters:
34
33
  /// - name: The name of the snapshot
35
34
  /// - timeout: Amount of seconds to wait until the network loading indicator disappears. Pass `0` if you don't want to wait.
35
+ @MainActor
36
36
  func snapshot(_ name: String, timeWaitingForIdle timeout: TimeInterval = 20) {
37
37
  Snapshot.snapshot(name, timeWaitingForIdle: timeout)
38
38
  }
@@ -52,6 +52,7 @@ enum SnapshotError: Error, CustomDebugStringConvertible {
52
52
  }
53
53
 
54
54
  @objcMembers
55
+ @MainActor
55
56
  open class Snapshot: NSObject {
56
57
  static var app: XCUIApplication?
57
58
  static var waitForAnimations = true
@@ -59,6 +60,8 @@ open class Snapshot: NSObject {
59
60
  static var screenshotsDirectory: URL? {
60
61
  return cacheDirectory?.appendingPathComponent("screenshots", isDirectory: true)
61
62
  }
63
+ static var deviceLanguage = ""
64
+ static var currentLocale = ""
62
65
 
63
66
  open class func setupSnapshot(_ app: XCUIApplication, waitForAnimations: Bool = true) {
64
67
 
@@ -103,17 +106,17 @@ open class Snapshot: NSObject {
103
106
 
104
107
  do {
105
108
  let trimCharacterSet = CharacterSet.whitespacesAndNewlines
106
- locale = try String(contentsOf: path, encoding: .utf8).trimmingCharacters(in: trimCharacterSet)
109
+ currentLocale = try String(contentsOf: path, encoding: .utf8).trimmingCharacters(in: trimCharacterSet)
107
110
  } catch {
108
111
  NSLog("Couldn't detect/set locale...")
109
112
  }
110
113
 
111
- if locale.isEmpty && !deviceLanguage.isEmpty {
112
- locale = Locale(identifier: deviceLanguage).identifier
114
+ if currentLocale.isEmpty && !deviceLanguage.isEmpty {
115
+ currentLocale = Locale(identifier: deviceLanguage).identifier
113
116
  }
114
117
 
115
- if !locale.isEmpty {
116
- app.launchArguments += ["-AppleLocale", "\"\(locale)\""]
118
+ if !currentLocale.isEmpty {
119
+ app.launchArguments += ["-AppleLocale", "\"\(currentLocale)\""]
117
120
  }
118
121
  }
119
122
 
@@ -281,6 +284,7 @@ private extension XCUIElementQuery {
281
284
  return self.containing(isNetworkLoadingIndicator)
282
285
  }
283
286
 
287
+ @MainActor
284
288
  var deviceStatusBars: XCUIElementQuery {
285
289
  guard let app = Snapshot.app else {
286
290
  fatalError("XCUIApplication is not set. Please call setupSnapshot(app) before snapshot().")
@@ -306,4 +310,4 @@ private extension CGFloat {
306
310
 
307
311
  // Please don't remove the lines below
308
312
  // They are used to detect outdated configuration files
309
- // SnapshotHelperVersion [1.29]
313
+ // SnapshotHelperVersion [1.30]