fastlane 2.212.1 → 2.213.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.md +96 -96
- data/deliver/lib/deliver/runner.rb +7 -7
- data/fastlane/lib/fastlane/actions/ensure_git_status_clean.rb +44 -5
- data/fastlane/lib/fastlane/version.rb +1 -1
- data/fastlane/swift/Deliverfile.swift +1 -1
- data/fastlane/swift/DeliverfileProtocol.swift +1 -1
- data/fastlane/swift/Fastlane.swift +28 -4
- data/fastlane/swift/Gymfile.swift +1 -1
- data/fastlane/swift/GymfileProtocol.swift +1 -1
- data/fastlane/swift/Matchfile.swift +1 -1
- data/fastlane/swift/MatchfileProtocol.swift +5 -1
- data/fastlane/swift/Precheckfile.swift +1 -1
- data/fastlane/swift/PrecheckfileProtocol.swift +1 -1
- data/fastlane/swift/Scanfile.swift +1 -1
- data/fastlane/swift/ScanfileProtocol.swift +5 -1
- data/fastlane/swift/Screengrabfile.swift +1 -1
- data/fastlane/swift/ScreengrabfileProtocol.swift +1 -1
- data/fastlane/swift/Snapshotfile.swift +1 -1
- data/fastlane/swift/SnapshotfileProtocol.swift +1 -1
- data/fastlane/swift/formatting/Brewfile.lock.json +17 -17
- data/fastlane_core/lib/fastlane_core/cert_checker.rb +0 -5
- data/fastlane_core/lib/fastlane_core/itunes_transporter.rb +48 -14
- data/match/lib/match/importer.rb +1 -0
- data/match/lib/match/nuke.rb +1 -0
- data/match/lib/match/options.rb +5 -0
- data/match/lib/match/runner.rb +1 -0
- data/match/lib/match/storage/gitlab_secure_files.rb +10 -4
- data/pilot/lib/pilot/build_manager.rb +4 -4
- data/scan/lib/scan/detect_values.rb +8 -1
- data/scan/lib/scan/options.rb +5 -0
- data/snapshot/lib/snapshot/latest_os_version.rb +2 -5
- data/spaceship/lib/spaceship/connect_api/models/app.rb +2 -2
- data/spaceship/lib/spaceship/tunes/tunes_client.rb +1 -1
- metadata +30 -24
@@ -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.
|
215
|
+
// FastlaneRunnerAPIVersion [0.9.113]
|
@@ -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.
|
323
|
+
// FastlaneRunnerAPIVersion [0.9.124]
|
@@ -2,45 +2,45 @@
|
|
2
2
|
"entries": {
|
3
3
|
"brew": {
|
4
4
|
"swiftformat": {
|
5
|
-
"version": "0.
|
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:
|
13
|
-
"sha256": "
|
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:
|
18
|
-
"sha256": "
|
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:
|
23
|
-
"sha256": "
|
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:
|
28
|
-
"sha256": "
|
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:
|
33
|
-
"sha256": "
|
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:
|
38
|
-
"sha256": "
|
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:
|
43
|
-
"sha256": "
|
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.
|
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 = "",
|
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 = "",
|
311
|
-
|
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 = "",
|
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 = "",
|
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,
|
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?(
|
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 "
|
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
|
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
|
-
|
816
|
-
|
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?(
|
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 &&
|
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
|
data/match/lib/match/importer.rb
CHANGED
@@ -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],
|
data/match/lib/match/nuke.rb
CHANGED
@@ -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
|
data/match/lib/match/options.rb
CHANGED
@@ -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,
|
data/match/lib/match/runner.rb
CHANGED
@@ -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 =
|
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
|
-
|
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:
|
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,
|
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],
|
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,
|
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
|
-
|
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
|
data/scan/lib/scan/options.rb
CHANGED
@@ -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
|
-
|
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 =
|
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
|
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.
|
4
|
+
version: 2.213.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
|
-
-
|
8
|
-
-
|
7
|
+
- Danielle Tomlinson
|
8
|
+
- Josh Holtz
|
9
|
+
- Olivier Halligon
|
10
|
+
- Satoshi Namai
|
9
11
|
- Helmut Januschka
|
10
|
-
-
|
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
|
-
-
|
28
|
-
-
|
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-
|
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
|