fastlane 2.212.1 → 2.213.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
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