fastlane 2.212.1 → 2.213.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (35) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +96 -96
  3. data/deliver/lib/deliver/runner.rb +7 -7
  4. data/fastlane/lib/fastlane/actions/ensure_git_status_clean.rb +44 -5
  5. data/fastlane/lib/fastlane/version.rb +1 -1
  6. data/fastlane/swift/Deliverfile.swift +1 -1
  7. data/fastlane/swift/DeliverfileProtocol.swift +1 -1
  8. data/fastlane/swift/Fastlane.swift +28 -4
  9. data/fastlane/swift/Gymfile.swift +1 -1
  10. data/fastlane/swift/GymfileProtocol.swift +1 -1
  11. data/fastlane/swift/Matchfile.swift +1 -1
  12. data/fastlane/swift/MatchfileProtocol.swift +5 -1
  13. data/fastlane/swift/Precheckfile.swift +1 -1
  14. data/fastlane/swift/PrecheckfileProtocol.swift +1 -1
  15. data/fastlane/swift/Scanfile.swift +1 -1
  16. data/fastlane/swift/ScanfileProtocol.swift +5 -1
  17. data/fastlane/swift/Screengrabfile.swift +1 -1
  18. data/fastlane/swift/ScreengrabfileProtocol.swift +1 -1
  19. data/fastlane/swift/Snapshotfile.swift +1 -1
  20. data/fastlane/swift/SnapshotfileProtocol.swift +1 -1
  21. data/fastlane/swift/formatting/Brewfile.lock.json +17 -17
  22. data/fastlane_core/lib/fastlane_core/cert_checker.rb +0 -5
  23. data/fastlane_core/lib/fastlane_core/itunes_transporter.rb +48 -14
  24. data/match/lib/match/importer.rb +1 -0
  25. data/match/lib/match/nuke.rb +1 -0
  26. data/match/lib/match/options.rb +5 -0
  27. data/match/lib/match/runner.rb +1 -0
  28. data/match/lib/match/storage/gitlab_secure_files.rb +10 -4
  29. data/pilot/lib/pilot/build_manager.rb +4 -4
  30. data/scan/lib/scan/detect_values.rb +8 -1
  31. data/scan/lib/scan/options.rb +5 -0
  32. data/snapshot/lib/snapshot/latest_os_version.rb +2 -5
  33. data/spaceship/lib/spaceship/connect_api/models/app.rb +2 -2
  34. data/spaceship/lib/spaceship/tunes/tunes_client.rb +1 -1
  35. metadata +30 -24
@@ -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.117]
211
+ // FastlaneRunnerAPIVersion [0.9.119]
@@ -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.212.1
20
+ // Generated with fastlane 2.213.0
@@ -95,6 +95,9 @@ public protocol MatchfileProtocol: AnyObject {
95
95
  /// GitLab Project Path (i.e. 'gitlab-org/gitlab')
96
96
  var gitlabProject: String? { get }
97
97
 
98
+ /// GitLab Host (i.e. 'https://gitlab.com')
99
+ var gitlabHost: String { get }
100
+
98
101
  /// Keychain the items should be imported to
99
102
  var keychainName: String { get }
100
103
 
@@ -185,6 +188,7 @@ public extension MatchfileProtocol {
185
188
  var s3Bucket: String? { return nil }
186
189
  var s3ObjectPrefix: String? { return nil }
187
190
  var gitlabProject: String? { return nil }
191
+ var gitlabHost: String { return "https://gitlab.com" }
188
192
  var keychainName: String { return "login.keychain" }
189
193
  var keychainPassword: String? { return nil }
190
194
  var force: Bool { return false }
@@ -208,4 +212,4 @@ public extension MatchfileProtocol {
208
212
 
209
213
  // Please don't remove the lines below
210
214
  // They are used to detect outdated files
211
- // FastlaneRunnerAPIVersion [0.9.111]
215
+ // FastlaneRunnerAPIVersion [0.9.113]
@@ -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.212.1
20
+ // Generated with fastlane 2.213.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.110]
55
+ // FastlaneRunnerAPIVersion [0.9.112]
@@ -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.212.1
20
+ // Generated with fastlane 2.213.0
@@ -206,6 +206,9 @@ public protocol ScanfileProtocol: AnyObject {
206
206
  /// Use only if you're a pro, use the other options instead
207
207
  var destination: String? { get }
208
208
 
209
+ /// Adds arch=x86_64 to the xcodebuild 'destination' argument to run simulator in a Rosetta mode
210
+ var runRosettaSimulator: Bool { get }
211
+
209
212
  /// Platform to build when using a Catalyst enabled app. Valid values are: ios, macos
210
213
  var catalystPlatform: String? { get }
211
214
 
@@ -303,6 +306,7 @@ public extension ScanfileProtocol {
303
306
  var slackOnlyOnFailure: Bool { return false }
304
307
  var slackDefaultPayloads: [String]? { return nil }
305
308
  var destination: String? { return nil }
309
+ var runRosettaSimulator: Bool { return false }
306
310
  var catalystPlatform: String? { return nil }
307
311
  var customReportFileName: String? { return nil }
308
312
  var xcodebuildCommand: String { return "env NSUnbufferedIO=YES xcodebuild" }
@@ -316,4 +320,4 @@ public extension ScanfileProtocol {
316
320
 
317
321
  // Please don't remove the lines below
318
322
  // They are used to detect outdated files
319
- // FastlaneRunnerAPIVersion [0.9.122]
323
+ // FastlaneRunnerAPIVersion [0.9.124]
@@ -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.212.1
20
+ // Generated with fastlane 2.213.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.112]
99
+ // FastlaneRunnerAPIVersion [0.9.114]
@@ -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.212.1
20
+ // Generated with fastlane 2.213.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.106]
207
+ // FastlaneRunnerAPIVersion [0.9.108]
@@ -2,45 +2,45 @@
2
2
  "entries": {
3
3
  "brew": {
4
4
  "swiftformat": {
5
- "version": "0.50.9",
5
+ "version": "0.51.9",
6
6
  "bottle": {
7
7
  "rebuild": 0,
8
8
  "root_url": "https://ghcr.io/v2/homebrew/core",
9
9
  "files": {
10
10
  "arm64_ventura": {
11
11
  "cellar": ":any_skip_relocation",
12
- "url": "https://ghcr.io/v2/homebrew/core/swiftformat/blobs/sha256:fd2f9e108c5485c1f2d0d89ef202fcafa50c09fbf64566430223e40648d1aee4",
13
- "sha256": "fd2f9e108c5485c1f2d0d89ef202fcafa50c09fbf64566430223e40648d1aee4"
12
+ "url": "https://ghcr.io/v2/homebrew/core/swiftformat/blobs/sha256:bbb01c5c7fcde4f8b17945c2c8386b099848c9cd4fda8bcfd032c2420d5d1b65",
13
+ "sha256": "bbb01c5c7fcde4f8b17945c2c8386b099848c9cd4fda8bcfd032c2420d5d1b65"
14
14
  },
15
15
  "arm64_monterey": {
16
16
  "cellar": ":any_skip_relocation",
17
- "url": "https://ghcr.io/v2/homebrew/core/swiftformat/blobs/sha256:98ab8dbd40435f845b59d8d040d7795ead5e4faac82eb1eb8e660f658f59aa51",
18
- "sha256": "98ab8dbd40435f845b59d8d040d7795ead5e4faac82eb1eb8e660f658f59aa51"
17
+ "url": "https://ghcr.io/v2/homebrew/core/swiftformat/blobs/sha256:f04596d4567e86f46e0740ea3e9d1e2e19fa1cdf137a70287342b6ce937ddf8d",
18
+ "sha256": "f04596d4567e86f46e0740ea3e9d1e2e19fa1cdf137a70287342b6ce937ddf8d"
19
19
  },
20
20
  "arm64_big_sur": {
21
21
  "cellar": ":any_skip_relocation",
22
- "url": "https://ghcr.io/v2/homebrew/core/swiftformat/blobs/sha256:6e7cb8b7c30422f4277513ab362f95b7010a02ab4d08ae2be9b159d97ad97833",
23
- "sha256": "6e7cb8b7c30422f4277513ab362f95b7010a02ab4d08ae2be9b159d97ad97833"
22
+ "url": "https://ghcr.io/v2/homebrew/core/swiftformat/blobs/sha256:d8b6f0f30662dd4c2e1eb64d614fe2765ad664e2ac10a346004f94ed6ed6cdf2",
23
+ "sha256": "d8b6f0f30662dd4c2e1eb64d614fe2765ad664e2ac10a346004f94ed6ed6cdf2"
24
24
  },
25
25
  "ventura": {
26
26
  "cellar": ":any_skip_relocation",
27
- "url": "https://ghcr.io/v2/homebrew/core/swiftformat/blobs/sha256:deaa35f99636e9d2e5df80d8f638291eebaf53750ec3a0b2c6ccca7ebe75f5b8",
28
- "sha256": "deaa35f99636e9d2e5df80d8f638291eebaf53750ec3a0b2c6ccca7ebe75f5b8"
27
+ "url": "https://ghcr.io/v2/homebrew/core/swiftformat/blobs/sha256:dc2be8c829dc26595577f8b5daa071324f341c4f144cc46bf0a47520d44fc76e",
28
+ "sha256": "dc2be8c829dc26595577f8b5daa071324f341c4f144cc46bf0a47520d44fc76e"
29
29
  },
30
30
  "monterey": {
31
31
  "cellar": ":any_skip_relocation",
32
- "url": "https://ghcr.io/v2/homebrew/core/swiftformat/blobs/sha256:e1ff4c783890b9b372b37f086b728a58783ce8f20f9db2cd34c89cd7e5baad8c",
33
- "sha256": "e1ff4c783890b9b372b37f086b728a58783ce8f20f9db2cd34c89cd7e5baad8c"
32
+ "url": "https://ghcr.io/v2/homebrew/core/swiftformat/blobs/sha256:a88b992a2316fa06dd13944c6bb16d00522de0cc21aae17ede07e65d700c6800",
33
+ "sha256": "a88b992a2316fa06dd13944c6bb16d00522de0cc21aae17ede07e65d700c6800"
34
34
  },
35
35
  "big_sur": {
36
36
  "cellar": ":any_skip_relocation",
37
- "url": "https://ghcr.io/v2/homebrew/core/swiftformat/blobs/sha256:d2b8e64088220c937d50a6fad24daa490f04372cd5258dce7922fc9f6fcefbaa",
38
- "sha256": "d2b8e64088220c937d50a6fad24daa490f04372cd5258dce7922fc9f6fcefbaa"
37
+ "url": "https://ghcr.io/v2/homebrew/core/swiftformat/blobs/sha256:ba2cf56b5845bb33265a3e32737c5defa6e310987f785e1dfe6e7dc114a12555",
38
+ "sha256": "ba2cf56b5845bb33265a3e32737c5defa6e310987f785e1dfe6e7dc114a12555"
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:293240d2b38f2ad02e4221c55895812774e78825bf9cd3e9b39a50c4c602e8d8",
43
- "sha256": "293240d2b38f2ad02e4221c55895812774e78825bf9cd3e9b39a50c4c602e8d8"
42
+ "url": "https://ghcr.io/v2/homebrew/core/swiftformat/blobs/sha256:d1f82ed96ee9f8f239e9396bff00a0feac937fe12840d05fb6d5c01fe9161f03",
43
+ "sha256": "d1f82ed96ee9f8f239e9396bff00a0feac937fe12840d05fb6d5c01fe9161f03"
44
44
  }
45
45
  }
46
46
  }
@@ -74,12 +74,12 @@
74
74
  "macOS": "12.5"
75
75
  },
76
76
  "ventura": {
77
- "HOMEBREW_VERSION": "4.0.3-103-gd7029e9",
77
+ "HOMEBREW_VERSION": "4.0.18-59-gf7b3225",
78
78
  "HOMEBREW_PREFIX": "/opt/homebrew",
79
79
  "Homebrew/homebrew-core": "api",
80
80
  "CLT": "",
81
81
  "Xcode": "14.1",
82
- "macOS": "13.1"
82
+ "macOS": "13.2.1"
83
83
  }
84
84
  }
85
85
  }
@@ -6,11 +6,6 @@ require_relative 'helper'
6
6
 
7
7
  # WWDR Intermediate Certificates in https://www.apple.com/certificateauthority/
8
8
  WWDRCA_CERTIFICATES = [
9
- {
10
- alias: 'G1',
11
- sha256: 'ce057691d730f89ca25e916f7335f4c8a15713dcd273a658c024023f8eb809c2',
12
- url: 'https://developer.apple.com/certificationauthority/AppleWWDRCA.cer'
13
- },
14
9
  {
15
10
  alias: 'G2',
16
11
  sha256: '9ed4b3b88c6a339cf1387895bda9ca6ea31a6b5ce9edf7511845923b0c8ac94c',
@@ -47,7 +47,7 @@ module FastlaneCore
47
47
  not_implemented(__method__)
48
48
  end
49
49
 
50
- def build_verify_command(username, password, source = "/tmp", provider_short_name = "", jwt = nil)
50
+ def build_verify_command(username, password, source = "/tmp", provider_short_name = "", **kwargs)
51
51
  not_implemented(__method__)
52
52
  end
53
53
 
@@ -307,8 +307,22 @@ module FastlaneCore
307
307
  raise "This feature has not been implemented yet with altool for Xcode 14"
308
308
  end
309
309
 
310
- def build_verify_command(username, password, source = "/tmp", provider_short_name = "", jwt = nil)
311
- raise "This feature has not been implemented yet with altool for Xcode 14"
310
+ def build_verify_command(username, password, source = "/tmp", provider_short_name = "", **kwargs)
311
+ api_key = kwargs[:api_key]
312
+ platform = kwargs[:platform]
313
+ use_api_key = !api_key.nil?
314
+ [
315
+ ("API_PRIVATE_KEYS_DIR=#{api_key[:key_dir]}" if use_api_key),
316
+ "xcrun altool",
317
+ "--validate-app",
318
+ ("-u #{username.shellescape}" unless use_api_key),
319
+ ("-p #{password.shellescape}" unless use_api_key),
320
+ ("--apiKey #{api_key[:key_id]}" if use_api_key),
321
+ ("--apiIssuer #{api_key[:issuer_id]}" if use_api_key),
322
+ ("--asc-provider #{provider_short_name}" unless use_api_key || provider_short_name.to_s.empty?),
323
+ platform_option(platform),
324
+ file_upload_option(source)
325
+ ].compact.join(' ')
312
326
  end
313
327
 
314
328
  def additional_upload_parameters
@@ -409,7 +423,8 @@ module FastlaneCore
409
423
  ].compact.join(' ')
410
424
  end
411
425
 
412
- def build_verify_command(username, password, source = "/tmp", provider_short_name = "", jwt = nil)
426
+ def build_verify_command(username, password, source = "/tmp", provider_short_name = "", **kwargs)
427
+ jwt = kwargs[:jwt]
413
428
  use_jwt = !jwt.to_s.empty?
414
429
  [
415
430
  '"' + Helper.transporter_path + '"',
@@ -504,7 +519,8 @@ module FastlaneCore
504
519
  end
505
520
  end
506
521
 
507
- def build_verify_command(username, password, source = "/tmp", provider_short_name = "", jwt = nil)
522
+ def build_verify_command(username, password, source = "/tmp", provider_short_name = "", **kwargs)
523
+ jwt = kwargs[:jwt]
508
524
  use_jwt = !jwt.to_s.empty?
509
525
  if !Helper.user_defined_itms_path? && Helper.mac? && Helper.xcode_at_least?(11)
510
526
  [
@@ -660,7 +676,7 @@ module FastlaneCore
660
676
  # see: https://github.com/fastlane/fastlane/issues/1524#issuecomment-196370628
661
677
  # for more information about how to use the iTMSTransporter to list your provider
662
678
  # short names
663
- def initialize(user = nil, password = nil, use_shell_script = false, provider_short_name = nil, jwt = nil, upload: false, api_key: nil)
679
+ def initialize(user = nil, password = nil, use_shell_script = false, provider_short_name = nil, jwt = nil, altool_compatible_command: false, api_key: nil)
664
680
  # Xcode 6.x doesn't have the same iTMSTransporter Java setup as later Xcode versions, so
665
681
  # we can't default to using the newer direct Java invocation strategy for those versions.
666
682
  use_shell_script ||= Helper.is_mac? && Helper.xcode_version.start_with?('6.')
@@ -675,7 +691,7 @@ module FastlaneCore
675
691
  @jwt = jwt
676
692
  @api_key = api_key
677
693
 
678
- if should_use_altool?(upload, use_shell_script)
694
+ if should_use_altool?(altool_compatible_command, use_shell_script)
679
695
  UI.verbose("Using altool as transporter.")
680
696
  @transporter_executor = AltoolTransporterExecutor.new
681
697
  else
@@ -800,10 +816,20 @@ module FastlaneCore
800
816
  # @return (Bool) True if everything worked fine
801
817
  # @raise [Deliver::TransporterTransferError] when something went wrong
802
818
  # when transferring
803
- def verify(app_id = nil, dir = nil, package_path: nil)
804
- raise "Either a combination of app id and directory or a package_path are required" if (app_id.nil? || dir.nil?) && package_path.nil?
819
+ def verify(app_id = nil, dir = nil, package_path: nil, asset_path: nil, platform: nil)
820
+ raise "app_id and dir are required or package_path or asset_path is required" if (app_id.nil? || dir.nil?) && package_path.nil? && asset_path.nil?
821
+
822
+ force_itmsp = FastlaneCore::Env.truthy?("ITMSTRANSPORTER_FORCE_ITMS_PACKAGE_UPLOAD")
823
+ can_use_asset_path = Helper.is_mac? && asset_path
805
824
 
806
- actual_dir = if package_path
825
+ actual_dir = if can_use_asset_path && !force_itmsp
826
+ # The asset gets deleted upon completion so copying to a temp directory
827
+ # (with randomized filename, for multibyte-mixed filename upload fails)
828
+ new_file_name = "#{SecureRandom.uuid}#{File.extname(asset_path)}"
829
+ tmp_asset_path = File.join(Dir.tmpdir, new_file_name)
830
+ FileUtils.cp(asset_path, tmp_asset_path)
831
+ tmp_asset_path
832
+ elsif package_path
807
833
  package_path
808
834
  else
809
835
  File.join(dir, "#{app_id}.itmsp")
@@ -812,8 +838,16 @@ module FastlaneCore
812
838
  password_placeholder = @jwt.nil? ? 'YourPassword' : nil
813
839
  jwt_placeholder = @jwt.nil? ? nil : 'YourJWT'
814
840
 
815
- command = @transporter_executor.build_verify_command(@user, @password, actual_dir, @provider_short_name, @jwt)
816
- UI.verbose(@transporter_executor.build_verify_command(@user, password_placeholder, actual_dir, @provider_short_name, jwt_placeholder))
841
+ # Handle AppStore Connect API
842
+ use_api_key = !@api_key.nil?
843
+
844
+ # Masking credentials for verbose outputs
845
+ api_key_placeholder = use_api_key ? { key_id: "YourKeyID", issuer_id: "YourIssuerID", key_dir: "YourTmpP8KeyDir" } : nil
846
+
847
+ api_key = api_key_with_p8_file_path(@api_key) if use_api_key
848
+
849
+ command = @transporter_executor.build_verify_command(@user, @password, actual_dir, @provider_short_name, jwt: @jwt, platform: platform, api_key: api_key)
850
+ UI.verbose(@transporter_executor.build_verify_command(@user, password_placeholder, actual_dir, @provider_short_name, jwt: jwt_placeholder, platform: platform, api_key: api_key_placeholder))
817
851
 
818
852
  begin
819
853
  result = @transporter_executor.execute(command, ItunesTransporter.hide_transporter_output?)
@@ -883,9 +917,9 @@ module FastlaneCore
883
917
  end
884
918
 
885
919
  # Returns whether altool should be used or ItunesTransporter should be used
886
- def should_use_altool?(upload, use_shell_script)
920
+ def should_use_altool?(altool_compatible_command, use_shell_script)
887
921
  # Xcode 14 no longer supports iTMSTransporter. Use altool instead
888
- !use_shell_script && upload && !Helper.user_defined_itms_path? && Helper.mac? && Helper.xcode_at_least?(14)
922
+ !use_shell_script && altool_compatible_command && !Helper.user_defined_itms_path? && Helper.mac? && Helper.xcode_at_least?(14)
889
923
  end
890
924
 
891
925
  # Returns the password to be used with the transporter
@@ -38,6 +38,7 @@ module Match
38
38
  s3_secret_access_key: params[:s3_secret_access_key],
39
39
  s3_object_prefix: params[:s3_object_prefix],
40
40
  gitlab_project: params[:gitlab_project],
41
+ gitlab_host: params[:gitlab_host],
41
42
  readonly: params[:readonly],
42
43
  username: params[:username],
43
44
  team_id: params[:team_id],
@@ -56,6 +56,7 @@ module Match
56
56
  s3_bucket: params[:s3_bucket].to_s,
57
57
  s3_object_prefix: params[:s3_object_prefix].to_s,
58
58
  gitlab_project: params[:gitlab_project],
59
+ gitlab_host: params[:gitlab_host],
59
60
  team_id: params[:team_id] || Spaceship::ConnectAPI.client.portal_team_id
60
61
  })
61
62
  self.storage.download
@@ -228,6 +228,11 @@ module Match
228
228
  env_name: "MATCH_GITLAB_PROJECT",
229
229
  description: "GitLab Project Path (i.e. 'gitlab-org/gitlab')",
230
230
  optional: true),
231
+ FastlaneCore::ConfigItem.new(key: :gitlab_host,
232
+ env_name: "MATCH_GITLAB_HOST",
233
+ default_value: 'https://gitlab.com',
234
+ description: "GitLab Host (i.e. 'https://gitlab.com')",
235
+ optional: true),
231
236
 
232
237
  # Keychain
233
238
  FastlaneCore::ConfigItem.new(key: :keychain_name,
@@ -55,6 +55,7 @@ module Match
55
55
  s3_bucket: params[:s3_bucket],
56
56
  s3_object_prefix: params[:s3_object_prefix],
57
57
  gitlab_project: params[:gitlab_project],
58
+ gitlab_host: params[:gitlab_host],
58
59
  readonly: params[:readonly],
59
60
  username: params[:readonly] ? nil : params[:username], # only pass username if not readonly
60
61
  team_id: params[:team_id],
@@ -22,9 +22,10 @@ module Match
22
22
  attr_reader :team_name
23
23
  attr_reader :api_key_path
24
24
  attr_reader :api_key
25
+ attr_reader :api_v4_url
25
26
 
26
27
  def self.configure(params)
27
- api_v4_url = params[:api_v4_url] || ENV['CI_API_V4_URL'] || 'https://gitlab.com/api/v4'
28
+ api_v4_url = ENV['CI_API_V4_URL'] || "#{params[:gitlab_host]}/api/v4"
28
29
  project_id = params[:gitlab_project] || ENV['GITLAB_PROJECT'] || ENV['CI_PROJECT_ID']
29
30
  job_token = params[:job_token] || ENV['CI_JOB_TOKEN']
30
31
  private_token = params[:private_token] || ENV['PRIVATE_TOKEN']
@@ -72,9 +73,9 @@ module Match
72
73
  @private_token = private_token
73
74
  @api_v4_url = api_v4_url
74
75
  @project_id = project_id
75
- @gitlab_client = GitLab::Client.new(job_token: job_token, private_token: private_token, project_id: project_id, api_v4_url: api_v4_url)
76
+ @gitlab_client = GitLab::Client.new(job_token: @job_token, private_token: @private_token, project_id: @project_id, api_v4_url: @api_v4_url)
76
77
 
77
- UI.message("Initializing match for GitLab project #{@project_id}")
78
+ UI.message("Initializing match for GitLab project #{@project_id} on #{@gitlab_host}")
78
79
  end
79
80
 
80
81
  # To make debugging easier, we have a custom exception here
@@ -174,8 +175,13 @@ module Match
174
175
  # that should be generated
175
176
  def generate_matchfile_content(template: nil)
176
177
  project = UI.input("What is your GitLab Project (i.e. gitlab-org/gitlab): ")
178
+ host = UI.input("What is your GitLab Host (i.e. https://gitlab.example.com, skip to default to https://gitlab.com): ")
177
179
 
178
- return "gitlab_project(\"#{project}\")"
180
+ content = "gitlab_project(\"#{project}\")"
181
+
182
+ content += "\ngitlab_host(\"#{host}\")" if host
183
+
184
+ return content
179
185
  end
180
186
  end
181
187
  end
@@ -157,7 +157,7 @@ module Pilot
157
157
  end
158
158
  end
159
159
  platform = Spaceship::ConnectAPI::Platform.map(fetch_app_platform)
160
- build ||= Spaceship::ConnectAPI::Build.all(app_id: app.id, version: app_version, build_number: build_number, sort: "-uploadedDate", platform: platform, limit: 1).first
160
+ build ||= Spaceship::ConnectAPI::Build.all(app_id: app.id, version: app_version, build_number: build_number, sort: "-uploadedDate", platform: platform, limit: Spaceship::ConnectAPI::Platform::ALL.size).first
161
161
  end
162
162
 
163
163
  # Verify the build has all the includes that we need
@@ -401,13 +401,13 @@ module Pilot
401
401
 
402
402
  unless api_token.nil?
403
403
  api_token.refresh! if api_token.expired?
404
- return FastlaneCore::ItunesTransporter.new(nil, nil, false, nil, api_token.text, upload: true, api_key: api_key)
404
+ return FastlaneCore::ItunesTransporter.new(nil, nil, false, nil, api_token.text, altool_compatible_command: true, api_key: api_key)
405
405
  end
406
406
 
407
407
  # Otherwise use username and password
408
408
  tunes_client = Spaceship::ConnectAPI.client ? Spaceship::ConnectAPI.client.tunes_client : nil
409
409
 
410
- generic_transporter = FastlaneCore::ItunesTransporter.new(options[:username], nil, false, options[:itc_provider], upload: true, api_key: api_key)
410
+ generic_transporter = FastlaneCore::ItunesTransporter.new(options[:username], nil, false, options[:itc_provider], altool_compatible_command: true, api_key: api_key)
411
411
  return generic_transporter if options[:itc_provider] || tunes_client.nil?
412
412
  return generic_transporter unless tunes_client.teams.count > 1
413
413
 
@@ -416,7 +416,7 @@ module Pilot
416
416
  name = team['name']
417
417
  provider_id = generic_transporter.provider_ids[name]
418
418
  UI.verbose("Inferred provider id #{provider_id} for team #{name}.")
419
- return FastlaneCore::ItunesTransporter.new(options[:username], nil, false, provider_id, upload: true, api_key: api_key)
419
+ return FastlaneCore::ItunesTransporter.new(options[:username], nil, false, provider_id, altool_compatible_command: true, api_key: api_key)
420
420
  rescue => ex
421
421
  STDERR.puts(ex.to_s)
422
422
  UI.verbose("Couldn't infer a provider short name for team with id #{tunes_client.team_id} automatically: #{ex}. Proceeding without provider short name.")
@@ -226,7 +226,14 @@ module Scan
226
226
  if Scan.building_mac_catalyst_for_mac?
227
227
  Scan.config[:destination] = ["platform=macOS,variant=Mac Catalyst"]
228
228
  elsif Scan.devices && Scan.devices.count > 0
229
- Scan.config[:destination] = Scan.devices.map { |d| "platform=#{d.os_type} Simulator,id=#{d.udid}" }
229
+ # Explicitly run simulator in Rosetta (needed for Xcode 14.3 and up)
230
+ # Fixes https://github.com/fastlane/fastlane/issues/21194
231
+ arch = ""
232
+ if Scan.config[:run_rosetta_simulator]
233
+ arch = ",arch=x86_64"
234
+ end
235
+
236
+ Scan.config[:destination] = Scan.devices.map { |d| "platform=#{d.os_type} Simulator,id=#{d.udid}" + arch }
230
237
  elsif Scan.project && Scan.project.mac_app?
231
238
  Scan.config[:destination] = min_xcode8? ? ["platform=macOS"] : ["platform=OS X"]
232
239
  end
@@ -480,6 +480,11 @@ module Scan
480
480
  description: "Use only if you're a pro, use the other options instead",
481
481
  is_string: false,
482
482
  optional: true),
483
+ FastlaneCore::ConfigItem.new(key: :run_rosetta_simulator,
484
+ env_name: "SCAN_RUN_ROSETTA_SIMULATOR",
485
+ description: "Adds arch=x86_64 to the xcodebuild 'destination' argument to run simulator in a Rosetta mode",
486
+ type: Boolean,
487
+ default_value: false),
483
488
  FastlaneCore::ConfigItem.new(key: :catalyst_platform,
484
489
  env_name: "SCAN_CATALYST_PLATFORM",
485
490
  description: "Platform to build when using a Catalyst enabled app. Valid values are: ios, macos",
@@ -16,12 +16,9 @@ module Snapshot
16
16
  def self.version_for_os(os)
17
17
  # We do all this, because we would get all kind of crap output generated by xcodebuild
18
18
  # so we need to ignore stderror
19
- output = ''
20
- Open3.popen3('xcodebuild -version -sdk') do |stdin, stdout, stderr, wait_thr|
21
- output = stdout.read
22
- end
19
+ stdout, _stderr, _status = Open3.capture3('xcodebuild -version -sdk')
23
20
 
24
- matched = output.match(/#{os} ([\d\.]+) \(.*/)
21
+ matched = stdout.match(/#{os} ([\d\.]+) \(.*/)
25
22
  if matched.nil?
26
23
  FastlaneCore::UI.user_error!("Could not determine installed #{os} SDK version. Try running the _xcodebuild_ command manually to ensure it works.")
27
24
  elsif matched.length > 1
@@ -54,12 +54,12 @@ module Spaceship
54
54
  "contentRightsDeclaration" => "content_rights_declaration",
55
55
 
56
56
  "appStoreVersions" => "app_store_versions",
57
+ # This attribute is already deprecated. It will be removed in a future release.
57
58
  "prices" => "prices"
58
59
  })
59
60
 
60
61
  ESSENTIAL_INCLUDES = [
61
- "appStoreVersions",
62
- "prices"
62
+ "appStoreVersions"
63
63
  ].join(",")
64
64
 
65
65
  def self.type
@@ -272,7 +272,7 @@ module Spaceship
272
272
  # if it needs to
273
273
  #
274
274
  # https://github.com/fastlane/fastlane/pull/20480
275
- r = request(:get, "https://appstoreconnect.apple.com/iris/v1/apps?include=appStoreVersions,prices")
275
+ r = request(:get, "https://appstoreconnect.apple.com/iris/v1/apps?include=appStoreVersions")
276
276
  response = Spaceship::ConnectAPI::Response.new(
277
277
  body: r.body,
278
278
  status: r.status,
metadata CHANGED
@@ -1,39 +1,39 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: fastlane
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.212.1
4
+ version: 2.213.0
5
5
  platform: ruby
6
6
  authors:
7
- - Roger Oba
8
- - Manish Rathi
7
+ - Danielle Tomlinson
8
+ - Josh Holtz
9
+ - Olivier Halligon
10
+ - Satoshi Namai
9
11
  - Helmut Januschka
10
- - Stefan Natchev
12
+ - Max Ott
13
+ - Felix Krause
14
+ - Daniel Jankowski
11
15
  - Joshua Liebowitz
12
- - Kohki Miki
13
- - Jimmy Dee
14
- - Jorge Revuelta H
15
- - Andrew McBurney
16
- - Satoshi Namai
17
- - Josh Holtz
18
16
  - Fumiya Nakamura
19
- - Danielle Tomlinson
20
- - Łukasz Grabowski
21
- - Luka Mirosevic
22
- - Felix Krause
23
- - Jérôme Lacoste
24
- - Max Ott
25
- - Manu Wallner
26
17
  - Aaron Brager
27
- - Maksym Grebenets
28
- - Daniel Jankowski
29
- - Olivier Halligon
30
- - Iulian Onofrei
18
+ - Kohki Miki
19
+ - Luka Mirosevic
31
20
  - Matthew Ellis
21
+ - Roger Oba
22
+ - Stefan Natchev
23
+ - Iulian Onofrei
24
+ - Maksym Grebenets
32
25
  - Jan Piotrowski
26
+ - Jérôme Lacoste
27
+ - Manish Rathi
28
+ - Łukasz Grabowski
29
+ - Manu Wallner
30
+ - Andrew McBurney
31
+ - Jimmy Dee
32
+ - Jorge Revuelta H
33
33
  autorequire:
34
34
  bindir: bin
35
35
  cert_chain: []
36
- date: 2023-02-24 00:00:00.000000000 Z
36
+ date: 2023-05-24 00:00:00.000000000 Z
37
37
  dependencies:
38
38
  - !ruby/object:Gem::Dependency
39
39
  name: xcodeproj
@@ -173,16 +173,22 @@ dependencies:
173
173
  name: multipart-post
174
174
  requirement: !ruby/object:Gem::Requirement
175
175
  requirements:
176
- - - "~>"
176
+ - - ">="
177
177
  - !ruby/object:Gem::Version
178
178
  version: 2.0.0
179
+ - - "<"
180
+ - !ruby/object:Gem::Version
181
+ version: 3.0.0
179
182
  type: :runtime
180
183
  prerelease: false
181
184
  version_requirements: !ruby/object:Gem::Requirement
182
185
  requirements:
183
- - - "~>"
186
+ - - ">="
184
187
  - !ruby/object:Gem::Version
185
188
  version: 2.0.0
189
+ - - "<"
190
+ - !ruby/object:Gem::Version
191
+ version: 3.0.0
186
192
  - !ruby/object:Gem::Dependency
187
193
  name: word_wrap
188
194
  requirement: !ruby/object:Gem::Requirement