fastlane 2.237.0 → 2.238.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.
- checksums.yaml +4 -4
- data/README.md +111 -104
- data/deliver/lib/deliver/options.rb +1 -1
- data/fastlane/lib/fastlane/actions/deploygate.rb +3 -2
- data/fastlane/lib/fastlane/actions/docs/upload_to_app_store.md.erb +4 -2
- data/fastlane/lib/fastlane/actions/hockey.rb +3 -2
- data/fastlane/lib/fastlane/actions/installr.rb +3 -2
- data/fastlane/lib/fastlane/actions/mailgun.rb +1 -0
- data/fastlane/lib/fastlane/actions/notarize.rb +3 -18
- data/fastlane/lib/fastlane/actions/register_devices.rb +21 -5
- data/fastlane/lib/fastlane/actions/setup_ci.rb +7 -2
- data/fastlane/lib/fastlane/actions/spm.rb +6 -0
- data/fastlane/lib/fastlane/actions/testfairy.rb +5 -3
- data/fastlane/lib/fastlane/actions/tryouts.rb +3 -2
- data/fastlane/lib/fastlane/actions/update_project_team.rb +17 -9
- data/fastlane/lib/fastlane/actions/upload_symbols_to_crashlytics.rb +33 -7
- data/fastlane/lib/fastlane/version.rb +1 -1
- data/fastlane/swift/Deliverfile.swift +1 -1
- data/fastlane/swift/DeliverfileProtocol.swift +2 -2
- data/fastlane/swift/Fastlane.swift +29 -19
- data/fastlane/swift/FastlaneSwiftRunner/FastlaneSwiftRunner.xcodeproj/project.pbxproj +1 -1
- 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 +1 -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 +1 -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_core/lib/fastlane_core/analytics/analytics_event_builder.rb +31 -5
- data/fastlane_core/lib/fastlane_core/analytics/analytics_ingester_client.rb +24 -12
- data/fastlane_core/lib/fastlane_core/analytics/analytics_session.rb +22 -12
- data/fastlane_core/lib/fastlane_core/cert_checker.rb +22 -9
- data/fastlane_core/lib/fastlane_core/helper.rb +4 -3
- data/fastlane_core/lib/fastlane_core/ipa_upload_package_builder.rb +6 -2
- data/fastlane_core/lib/fastlane_core/pkg_upload_package_builder.rb +1 -1
- data/fastlane_core/lib/fastlane_core/print_table.rb +0 -16
- data/fastlane_core/lib/fastlane_core/queue_worker.rb +10 -1
- data/fastlane_core/lib/fastlane_core/video_utils.rb +4 -2
- data/gym/lib/gym/module.rb +20 -2
- data/pilot/lib/pilot/build_manager.rb +2 -2
- data/pilot/lib/pilot/options.rb +2 -2
- data/pilot/lib/pilot/tester_manager.rb +2 -2
- data/precheck/lib/precheck/rules/copyright_date_rule.rb +1 -1
- data/precheck/lib/precheck/rules/unreachable_urls_rule.rb +2 -2
- data/snapshot/lib/snapshot/simulator_launchers/simulator_launcher_base.rb +4 -1
- data/spaceship/lib/spaceship/client.rb +0 -1
- data/spaceship/lib/spaceship/connect_api/file_uploader.rb +1 -1
- data/spaceship/lib/spaceship/connect_api/models/age_rating_declaration.rb +6 -0
- data/spaceship/lib/spaceship/connect_api/models/beta_group.rb +5 -0
- data/spaceship/lib/spaceship/helper/plist_middleware.rb +37 -8
- metadata +71 -29
|
@@ -8,10 +8,8 @@ module Fastlane
|
|
|
8
8
|
project_path = params[:path]
|
|
9
9
|
selected_targets = params[:targets]
|
|
10
10
|
|
|
11
|
-
UI.user_error!("Could not find path to xcodeproj '#{project_path}'. Pass the path to your project (not workspace)!") unless File.exist?(project_path)
|
|
12
|
-
|
|
13
11
|
# Load .xcodeproj
|
|
14
|
-
project =
|
|
12
|
+
project = Fastlane::Helper::XcodeprojHelper.get_project!(project_path)
|
|
15
13
|
|
|
16
14
|
# Fetch target
|
|
17
15
|
targets = project.native_targets
|
|
@@ -25,10 +23,20 @@ module Fastlane
|
|
|
25
23
|
|
|
26
24
|
# Set teamid in target
|
|
27
25
|
targets.each do |target|
|
|
28
|
-
UI.message("Updating development team (#{params[:teamid]}) for target `#{target.name}` in the project '#{project_path}'")
|
|
29
|
-
# Update the build settings
|
|
30
26
|
target.build_configurations.each do |configuration|
|
|
31
|
-
|
|
27
|
+
# Iterate over any keys that start with DEVELOPMENT_TEAM
|
|
28
|
+
# This will also set keys that have filtering like [sdk=iphoneos*]
|
|
29
|
+
keys = configuration.build_settings.keys.select { |key| key.to_s.start_with?("DEVELOPMENT_TEAM") }
|
|
30
|
+
keys.each do |key|
|
|
31
|
+
configuration.build_settings[key] = params[:teamid]
|
|
32
|
+
UI.message("Updated build setting '#{key}' to '#{params[:teamid]}' for configuration '#{configuration.name}'")
|
|
33
|
+
end
|
|
34
|
+
|
|
35
|
+
# Explicitly set the key with value if keys don't exist
|
|
36
|
+
unless keys.include?('DEVELOPMENT_TEAM')
|
|
37
|
+
configuration.build_settings['DEVELOPMENT_TEAM'] = params[:teamid]
|
|
38
|
+
UI.message("Added build setting 'DEVELOPMENT_TEAM' with value '#{params[:teamid]}' for configuration '#{configuration.name}'")
|
|
39
|
+
end
|
|
32
40
|
end
|
|
33
41
|
|
|
34
42
|
project.save
|
|
@@ -42,7 +50,7 @@ module Fastlane
|
|
|
42
50
|
end
|
|
43
51
|
|
|
44
52
|
def self.details
|
|
45
|
-
"This action updates the Developer Team ID of your Xcode project."
|
|
53
|
+
"This action updates (or adds) the Developer Team ID of your Xcode project."
|
|
46
54
|
end
|
|
47
55
|
|
|
48
56
|
def self.available_options
|
|
@@ -69,8 +77,8 @@ module Fastlane
|
|
|
69
77
|
]
|
|
70
78
|
end
|
|
71
79
|
|
|
72
|
-
def self.
|
|
73
|
-
"lgaches"
|
|
80
|
+
def self.authors
|
|
81
|
+
["lgaches", "iBotPeaches"]
|
|
74
82
|
end
|
|
75
83
|
|
|
76
84
|
def self.is_supported?(platform)
|
|
@@ -36,20 +36,29 @@ module Fastlane
|
|
|
36
36
|
end
|
|
37
37
|
|
|
38
38
|
worker = FastlaneCore::QueueWorker.new(max_worker_threads) do |dsym_path|
|
|
39
|
-
handle_dsym(params, dsym_path
|
|
39
|
+
handle_dsym(params, dsym_path)
|
|
40
40
|
end
|
|
41
41
|
worker.batch_enqueue(dsym_paths)
|
|
42
|
-
worker.start
|
|
43
|
-
|
|
42
|
+
results = worker.start
|
|
43
|
+
|
|
44
|
+
if results.all?
|
|
45
|
+
UI.success("Successfully uploaded dSYM files to Crashlytics 💯")
|
|
46
|
+
elsif results.any?
|
|
47
|
+
UI.success("Successfully uploaded some dSYM files to Crashlytics 💯")
|
|
48
|
+
UI.important("Some dSYM files failed to upload, see the errors above")
|
|
49
|
+
else
|
|
50
|
+
UI.user_error!("Service failed to upload any dSYM files to Crashlytics")
|
|
51
|
+
end
|
|
44
52
|
end
|
|
45
53
|
|
|
46
54
|
# @param current_path this is a path to either a dSYM or a zipped dSYM
|
|
47
55
|
# this might also be either nested or not, we're flexible
|
|
48
|
-
def self.handle_dsym(params, current_path
|
|
56
|
+
def self.handle_dsym(params, current_path)
|
|
49
57
|
if current_path.end_with?(".dSYM", ".zip")
|
|
50
|
-
upload_dsym(params, current_path)
|
|
58
|
+
return upload_dsym(params, current_path)
|
|
51
59
|
else
|
|
52
60
|
UI.error("Don't know how to handle '#{current_path}'")
|
|
61
|
+
return false
|
|
53
62
|
end
|
|
54
63
|
end
|
|
55
64
|
|
|
@@ -69,12 +78,21 @@ module Fastlane
|
|
|
69
78
|
end
|
|
70
79
|
command << "-p #{params[:platform] == 'appletvos' ? 'tvos' : params[:platform]}"
|
|
71
80
|
command << File.expand_path(path).shellescape
|
|
81
|
+
|
|
72
82
|
begin
|
|
73
83
|
command_to_execute = command.join(" ")
|
|
74
84
|
UI.verbose("upload_dsym using command: #{command_to_execute}")
|
|
75
85
|
Actions.sh(command_to_execute, log: params[:debug])
|
|
86
|
+
return true
|
|
76
87
|
rescue => ex
|
|
77
|
-
|
|
88
|
+
# If it fails - emit the warning, then continue (or crash) depending on "fail_on_error"
|
|
89
|
+
UI.error(ex.to_s)
|
|
90
|
+
|
|
91
|
+
if params[:fail_on_error] == true
|
|
92
|
+
raise
|
|
93
|
+
end
|
|
94
|
+
|
|
95
|
+
return false
|
|
78
96
|
end
|
|
79
97
|
end
|
|
80
98
|
|
|
@@ -118,7 +136,10 @@ module Fastlane
|
|
|
118
136
|
end
|
|
119
137
|
|
|
120
138
|
def self.details
|
|
121
|
-
|
|
139
|
+
[
|
|
140
|
+
"This action allows you to upload symbolication files to Crashlytics. It's extra useful if you use it to download the latest dSYM files from Apple when you use Bitcode. This action will not fail the build if one of the uploads failed by default.",
|
|
141
|
+
"The reason for that is that sometimes some of dSYM files are invalid, and we don't want them to fail the complete build. However, fail_on_build parameter can be used to prevent this behavior."
|
|
142
|
+
].join("\n")
|
|
122
143
|
end
|
|
123
144
|
|
|
124
145
|
def self.available_options
|
|
@@ -195,6 +216,11 @@ module Fastlane
|
|
|
195
216
|
min_threads = 1
|
|
196
217
|
UI.user_error!("Too few threads (#{value}) minimum number of threads: #{min_threads}") unless value >= min_threads
|
|
197
218
|
end),
|
|
219
|
+
FastlaneCore::ConfigItem.new(key: :fail_on_error,
|
|
220
|
+
env_name: "FL_UPLOAD_SYMBOLS_TO_CRASHLYTICS_FAIL_ON_ERROR",
|
|
221
|
+
description: "Should the action fail when an upload fails?",
|
|
222
|
+
type: Boolean,
|
|
223
|
+
default_value: false),
|
|
198
224
|
FastlaneCore::ConfigItem.new(key: :debug,
|
|
199
225
|
env_name: "FL_UPLOAD_SYMBOLS_TO_CRASHLYTICS_DEBUG",
|
|
200
226
|
description: "Enable debug mode for upload-symbols",
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
module Fastlane
|
|
2
|
-
VERSION = '2.
|
|
2
|
+
VERSION = '2.238.0'.freeze
|
|
3
3
|
SUMMARY = "The easiest way to build and release mobile apps.".freeze
|
|
4
4
|
DESCRIPTION = "The easiest way to automate beta deployments and releases for your iOS and Android apps".freeze
|
|
5
5
|
MINIMUM_XCODE_RELEASE = "7.0".freeze
|
|
@@ -125,7 +125,7 @@ public protocol DeliverfileProtocol: AnyObject {
|
|
|
125
125
|
/// The name of your Developer Portal team if you're in multiple teams
|
|
126
126
|
var devPortalTeamName: String? { get }
|
|
127
127
|
|
|
128
|
-
/// The provider short name to be used with the iTMSTransporter to identify your team. This value will override the automatically detected provider short name. To get provider short name run `
|
|
128
|
+
/// The provider short name to be used with the iTMSTransporter to identify your team. This value will override the automatically detected provider short name. To get provider short name run `xcrun iTMSTransporter -m provider -u 'USERNAME' -p 'PASSWORD' -account_type itunes_connect -v off`. The short names of providers should be listed in the second column
|
|
129
129
|
var itcProvider: String? { get }
|
|
130
130
|
|
|
131
131
|
/// The provider public ID to be used with altool (--provider-public-id). This value will override the automatically detected provider value for altool uploads. Required after Xcode 26 when your account is associated with multiple providers and using username/app-password authentication
|
|
@@ -532,4 +532,4 @@ public extension DeliverfileProtocol {
|
|
|
532
532
|
|
|
533
533
|
// Please don't remove the lines below
|
|
534
534
|
// They are used to detect outdated files
|
|
535
|
-
// FastlaneRunnerAPIVersion [0.9.
|
|
535
|
+
// FastlaneRunnerAPIVersion [0.9.152]
|
|
@@ -684,7 +684,7 @@ public func appledoc(input: [String],
|
|
|
684
684
|
- teamName: The name of your App Store Connect team if you're in multiple teams
|
|
685
685
|
- devPortalTeamId: The short ID of your Developer Portal team, if you're in multiple teams. Different from your iTC team ID!
|
|
686
686
|
- devPortalTeamName: The name of your Developer Portal team if you're in multiple teams
|
|
687
|
-
- itcProvider: The provider short name to be used with the iTMSTransporter to identify your team. This value will override the automatically detected provider short name. To get provider short name run `
|
|
687
|
+
- itcProvider: The provider short name to be used with the iTMSTransporter to identify your team. This value will override the automatically detected provider short name. To get provider short name run `xcrun iTMSTransporter -m provider -u 'USERNAME' -p 'PASSWORD' -account_type itunes_connect -v off`. The short names of providers should be listed in the second column
|
|
688
688
|
- providerPublicId: The provider public ID to be used with altool (--provider-public-id). This value will override the automatically detected provider value for altool uploads. Required after Xcode 26 when your account is associated with multiple providers and using username/app-password authentication
|
|
689
689
|
- runPrecheckBeforeSubmit: Run precheck before submitting to app review
|
|
690
690
|
- precheckDefaultRuleLevel: The default precheck rule level unless otherwise configured
|
|
@@ -3847,7 +3847,7 @@ public func deleteKeychain(name: OptionalConfigValue<String?> = .fastlaneDefault
|
|
|
3847
3847
|
- teamName: The name of your App Store Connect team if you're in multiple teams
|
|
3848
3848
|
- devPortalTeamId: The short ID of your Developer Portal team, if you're in multiple teams. Different from your iTC team ID!
|
|
3849
3849
|
- devPortalTeamName: The name of your Developer Portal team if you're in multiple teams
|
|
3850
|
-
- itcProvider: The provider short name to be used with the iTMSTransporter to identify your team. This value will override the automatically detected provider short name. To get provider short name run `
|
|
3850
|
+
- itcProvider: The provider short name to be used with the iTMSTransporter to identify your team. This value will override the automatically detected provider short name. To get provider short name run `xcrun iTMSTransporter -m provider -u 'USERNAME' -p 'PASSWORD' -account_type itunes_connect -v off`. The short names of providers should be listed in the second column
|
|
3851
3851
|
- providerPublicId: The provider public ID to be used with altool (--provider-public-id). This value will override the automatically detected provider value for altool uploads. Required after Xcode 26 when your account is associated with multiple providers and using username/app-password authentication
|
|
3852
3852
|
- runPrecheckBeforeSubmit: Run precheck before submitting to app review
|
|
3853
3853
|
- precheckDefaultRuleLevel: The default precheck rule level unless otherwise configured
|
|
@@ -7493,7 +7493,6 @@ public func nexusUpload(file: String,
|
|
|
7493
7493
|
- parameters:
|
|
7494
7494
|
- package: Path to package to notarize, e.g. .app bundle or disk image
|
|
7495
7495
|
- skipStapling: Do not staple the notarization ticket to the artifact; useful for single file executables and ZIP archives
|
|
7496
|
-
- bundleId: Bundle identifier to uniquely identify the package
|
|
7497
7496
|
- username: Apple ID username
|
|
7498
7497
|
- ascProvider: Provider short name for accounts associated with multiple providers
|
|
7499
7498
|
- printLog: Whether to print notarization log file, listing issues on failure and warnings on success
|
|
@@ -7503,7 +7502,6 @@ public func nexusUpload(file: String,
|
|
|
7503
7502
|
*/
|
|
7504
7503
|
public func notarize(package: String,
|
|
7505
7504
|
skipStapling: OptionalConfigValue<Bool> = .fastlaneDefault(false),
|
|
7506
|
-
bundleId: OptionalConfigValue<String?> = .fastlaneDefault(nil),
|
|
7507
7505
|
username: OptionalConfigValue<String?> = .fastlaneDefault(nil),
|
|
7508
7506
|
ascProvider: OptionalConfigValue<String?> = .fastlaneDefault(nil),
|
|
7509
7507
|
printLog: OptionalConfigValue<Bool> = .fastlaneDefault(false),
|
|
@@ -7513,7 +7511,6 @@ public func notarize(package: String,
|
|
|
7513
7511
|
{
|
|
7514
7512
|
let packageArg = RubyCommand.Argument(name: "package", value: package, type: nil)
|
|
7515
7513
|
let skipStaplingArg = skipStapling.asRubyArgument(name: "skip_stapling", type: nil)
|
|
7516
|
-
let bundleIdArg = bundleId.asRubyArgument(name: "bundle_id", type: nil)
|
|
7517
7514
|
let usernameArg = username.asRubyArgument(name: "username", type: nil)
|
|
7518
7515
|
let ascProviderArg = ascProvider.asRubyArgument(name: "asc_provider", type: nil)
|
|
7519
7516
|
let printLogArg = printLog.asRubyArgument(name: "print_log", type: nil)
|
|
@@ -7522,7 +7519,6 @@ public func notarize(package: String,
|
|
|
7522
7519
|
let apiKeyArg = apiKey.asRubyArgument(name: "api_key", type: nil)
|
|
7523
7520
|
let array: [RubyCommand.Argument?] = [packageArg,
|
|
7524
7521
|
skipStaplingArg,
|
|
7525
|
-
bundleIdArg,
|
|
7526
7522
|
usernameArg,
|
|
7527
7523
|
ascProviderArg,
|
|
7528
7524
|
printLogArg,
|
|
@@ -7903,11 +7899,11 @@ public func pem(platform: String = "ios",
|
|
|
7903
7899
|
- lastName: The tester's last name
|
|
7904
7900
|
- email: The tester's email
|
|
7905
7901
|
- testersFilePath: Path to a CSV file of testers
|
|
7906
|
-
- groups: Associate tester to one group or more by group name / group id. E.g. `-g "Team 1","
|
|
7902
|
+
- groups: Associate tester to one group or more by group name / group id. E.g. `-g "Team 1","a06cf5b5-95a9-4beb-88c6-f22bd6b3f7a2"` This is required when `distribute_external` option is set to true or when we want to add a tester to one or more external testing groups
|
|
7907
7903
|
- teamId: The ID of your App Store Connect team if you're in multiple teams
|
|
7908
7904
|
- teamName: The name of your App Store Connect team if you're in multiple teams
|
|
7909
7905
|
- devPortalTeamId: The short ID of your team in the developer portal, if you're in multiple teams. Different from your iTC team ID!
|
|
7910
|
-
- itcProvider: The provider short name to be used with the iTMSTransporter to identify your team. This value will override the automatically detected provider short name. To get provider short name run `
|
|
7906
|
+
- itcProvider: The provider short name to be used with the iTMSTransporter to identify your team. This value will override the automatically detected provider short name. To get provider short name run `xcrun iTMSTransporter -m provider -u 'USERNAME' -p 'PASSWORD' -account_type itunes_connect -v off`. The short names of providers should be listed in the second column
|
|
7911
7907
|
- providerPublicId: The provider public ID to be used with altool (--provider-public-id). This value will override the automatically detected provider value for altool uploads. Required after Xcode 26 when your account is associated with multiple providers and using username/app-password authentication
|
|
7912
7908
|
- waitProcessingInterval: Interval in seconds to wait for App Store Connect processing
|
|
7913
7909
|
- waitProcessingTimeoutDuration: Timeout duration in seconds to wait for App Store Connect processing. If set, after exceeding timeout duration, this will `force stop` to wait for App Store Connect processing and exit with exception
|
|
@@ -8690,6 +8686,7 @@ public func recreateSchemes(project: String) {
|
|
|
8690
8686
|
This will register iOS/Mac devices with the Developer Portal so that you can include them in your provisioning profiles.
|
|
8691
8687
|
This is an optimistic action, in that it will only ever add new devices to the member center, and never remove devices. If a device which has already been registered within the member center is not passed to this action, it will be left alone in the member center and continue to work.
|
|
8692
8688
|
The action will connect to the Apple Developer Portal using the username you specified in your `Appfile` with `apple_id`, but you can override it using the `username` option, or by setting the env variable `ENV['DELIVER_USER']`.
|
|
8689
|
+
When using `devices_file`, blank lines and lines starting with `#` are ignored, so you can group devices, add notes, or comment out a device row without removing it.
|
|
8693
8690
|
*/
|
|
8694
8691
|
public func registerDevices(devices: OptionalConfigValue<[String: Any]?> = .fastlaneDefault(nil),
|
|
8695
8692
|
devicesFile: OptionalConfigValue<String?> = .fastlaneDefault(nil),
|
|
@@ -10076,6 +10073,7 @@ public func setPodKey(useBundleExec: OptionalConfigValue<Bool> = .fastlaneDefaul
|
|
|
10076
10073
|
- provider: CI provider. If none is set, the provider is detected automatically
|
|
10077
10074
|
- timeout: Set a custom timeout in seconds for keychain. Set `0` if you want to specify 'no time-out'
|
|
10078
10075
|
- keychainName: Set a custom keychain name
|
|
10076
|
+
- setDefaultKeychain: Set the temporary keychain as the system default
|
|
10079
10077
|
|
|
10080
10078
|
- Creates a new temporary keychain for use with match|
|
|
10081
10079
|
- Switches match to `readonly` mode to not create new profiles/cert on CI|
|
|
@@ -10086,16 +10084,19 @@ public func setPodKey(useBundleExec: OptionalConfigValue<Bool> = .fastlaneDefaul
|
|
|
10086
10084
|
public func setupCi(force: OptionalConfigValue<Bool> = .fastlaneDefault(false),
|
|
10087
10085
|
provider: OptionalConfigValue<String?> = .fastlaneDefault(nil),
|
|
10088
10086
|
timeout: Int = 3600,
|
|
10089
|
-
keychainName: String = "fastlane_tmp_keychain"
|
|
10087
|
+
keychainName: String = "fastlane_tmp_keychain",
|
|
10088
|
+
setDefaultKeychain: OptionalConfigValue<Bool> = .fastlaneDefault(true))
|
|
10090
10089
|
{
|
|
10091
10090
|
let forceArg = force.asRubyArgument(name: "force", type: nil)
|
|
10092
10091
|
let providerArg = provider.asRubyArgument(name: "provider", type: nil)
|
|
10093
10092
|
let timeoutArg = RubyCommand.Argument(name: "timeout", value: timeout, type: nil)
|
|
10094
10093
|
let keychainNameArg = RubyCommand.Argument(name: "keychain_name", value: keychainName, type: nil)
|
|
10094
|
+
let setDefaultKeychainArg = setDefaultKeychain.asRubyArgument(name: "set_default_keychain", type: nil)
|
|
10095
10095
|
let array: [RubyCommand.Argument?] = [forceArg,
|
|
10096
10096
|
providerArg,
|
|
10097
10097
|
timeoutArg,
|
|
10098
|
-
keychainNameArg
|
|
10098
|
+
keychainNameArg,
|
|
10099
|
+
setDefaultKeychainArg]
|
|
10099
10100
|
let args: [RubyCommand.Argument] = array
|
|
10100
10101
|
.filter { $0?.value != nil }
|
|
10101
10102
|
.compactMap { $0 }
|
|
@@ -11104,6 +11105,7 @@ public func splunkmint(dsym: OptionalConfigValue<String?> = .fastlaneDefault(nil
|
|
|
11104
11105
|
- disableSandbox: Disable using the sandbox when executing subprocesses
|
|
11105
11106
|
- xcprettyOutput: Specifies the output type for xcpretty. eg. 'test', or 'simple'
|
|
11106
11107
|
- xcprettyArgs: Pass in xcpretty additional command line arguments (e.g. '--test --no-color' or '--tap --no-utf'), requires xcpretty_output to be specified also
|
|
11108
|
+
- skipUpdate: Skip updating dependencies from their remote during a resolution
|
|
11107
11109
|
- verbose: Increase verbosity of informational output
|
|
11108
11110
|
- veryVerbose: Increase verbosity to include debug output
|
|
11109
11111
|
- simulator: Specifies the simulator to pass for Swift Compiler (one of: iphonesimulator, macosx)
|
|
@@ -11120,6 +11122,7 @@ public func spm(command: String = "build",
|
|
|
11120
11122
|
disableSandbox: OptionalConfigValue<Bool> = .fastlaneDefault(false),
|
|
11121
11123
|
xcprettyOutput: OptionalConfigValue<String?> = .fastlaneDefault(nil),
|
|
11122
11124
|
xcprettyArgs: OptionalConfigValue<String?> = .fastlaneDefault(nil),
|
|
11125
|
+
skipUpdate: OptionalConfigValue<Bool> = .fastlaneDefault(false),
|
|
11123
11126
|
verbose: OptionalConfigValue<Bool> = .fastlaneDefault(false),
|
|
11124
11127
|
veryVerbose: OptionalConfigValue<Bool> = .fastlaneDefault(false),
|
|
11125
11128
|
simulator: OptionalConfigValue<String?> = .fastlaneDefault(nil),
|
|
@@ -11136,6 +11139,7 @@ public func spm(command: String = "build",
|
|
|
11136
11139
|
let disableSandboxArg = disableSandbox.asRubyArgument(name: "disable_sandbox", type: nil)
|
|
11137
11140
|
let xcprettyOutputArg = xcprettyOutput.asRubyArgument(name: "xcpretty_output", type: nil)
|
|
11138
11141
|
let xcprettyArgsArg = xcprettyArgs.asRubyArgument(name: "xcpretty_args", type: nil)
|
|
11142
|
+
let skipUpdateArg = skipUpdate.asRubyArgument(name: "skip_update", type: nil)
|
|
11139
11143
|
let verboseArg = verbose.asRubyArgument(name: "verbose", type: nil)
|
|
11140
11144
|
let veryVerboseArg = veryVerbose.asRubyArgument(name: "very_verbose", type: nil)
|
|
11141
11145
|
let simulatorArg = simulator.asRubyArgument(name: "simulator", type: nil)
|
|
@@ -11151,6 +11155,7 @@ public func spm(command: String = "build",
|
|
|
11151
11155
|
disableSandboxArg,
|
|
11152
11156
|
xcprettyOutputArg,
|
|
11153
11157
|
xcprettyArgsArg,
|
|
11158
|
+
skipUpdateArg,
|
|
11154
11159
|
verboseArg,
|
|
11155
11160
|
veryVerboseArg,
|
|
11156
11161
|
simulatorArg,
|
|
@@ -11838,11 +11843,11 @@ public func testfairy(apiKey: String,
|
|
|
11838
11843
|
- lastName: The tester's last name
|
|
11839
11844
|
- email: The tester's email
|
|
11840
11845
|
- testersFilePath: Path to a CSV file of testers
|
|
11841
|
-
- groups: Associate tester to one group or more by group name / group id. E.g. `-g "Team 1","
|
|
11846
|
+
- groups: Associate tester to one group or more by group name / group id. E.g. `-g "Team 1","a06cf5b5-95a9-4beb-88c6-f22bd6b3f7a2"` This is required when `distribute_external` option is set to true or when we want to add a tester to one or more external testing groups
|
|
11842
11847
|
- teamId: The ID of your App Store Connect team if you're in multiple teams
|
|
11843
11848
|
- teamName: The name of your App Store Connect team if you're in multiple teams
|
|
11844
11849
|
- devPortalTeamId: The short ID of your team in the developer portal, if you're in multiple teams. Different from your iTC team ID!
|
|
11845
|
-
- itcProvider: The provider short name to be used with the iTMSTransporter to identify your team. This value will override the automatically detected provider short name. To get provider short name run `
|
|
11850
|
+
- itcProvider: The provider short name to be used with the iTMSTransporter to identify your team. This value will override the automatically detected provider short name. To get provider short name run `xcrun iTMSTransporter -m provider -u 'USERNAME' -p 'PASSWORD' -account_type itunes_connect -v off`. The short names of providers should be listed in the second column
|
|
11846
11851
|
- providerPublicId: The provider public ID to be used with altool (--provider-public-id). This value will override the automatically detected provider value for altool uploads. Required after Xcode 26 when your account is associated with multiple providers and using username/app-password authentication
|
|
11847
11852
|
- waitProcessingInterval: Interval in seconds to wait for App Store Connect processing
|
|
11848
11853
|
- waitProcessingTimeoutDuration: Timeout duration in seconds to wait for App Store Connect processing. If set, after exceeding timeout duration, this will `force stop` to wait for App Store Connect processing and exit with exception
|
|
@@ -12538,7 +12543,7 @@ public func updateProjectProvisioning(xcodeproj: OptionalConfigValue<String?> =
|
|
|
12538
12543
|
- targets: Name of the targets you want to update
|
|
12539
12544
|
- teamid: The Team ID you want to use
|
|
12540
12545
|
|
|
12541
|
-
This action updates the Developer Team ID of your Xcode project.
|
|
12546
|
+
This action updates (or adds) the Developer Team ID of your Xcode project.
|
|
12542
12547
|
*/
|
|
12543
12548
|
public func updateProjectTeam(path: String,
|
|
12544
12549
|
targets: OptionalConfigValue<[String]?> = .fastlaneDefault(nil),
|
|
@@ -12687,9 +12692,11 @@ public func uploadAppPrivacyDetailsToAppStore(username: String,
|
|
|
12687
12692
|
- binaryPath: The path to the upload-symbols file of the Fabric app
|
|
12688
12693
|
- platform: The platform of the app (ios, appletvos, mac)
|
|
12689
12694
|
- dsymWorkerThreads: The number of threads to use for simultaneous dSYM upload
|
|
12695
|
+
- failOnError: Should the action fail when an upload fails?
|
|
12690
12696
|
- debug: Enable debug mode for upload-symbols
|
|
12691
12697
|
|
|
12692
|
-
This action allows you to upload symbolication files to Crashlytics. It's extra useful if you use it to download the latest dSYM files from Apple when you use Bitcode. This action will not fail the build if one of the uploads failed
|
|
12698
|
+
This action allows you to upload symbolication files to Crashlytics. It's extra useful if you use it to download the latest dSYM files from Apple when you use Bitcode. This action will not fail the build if one of the uploads failed by default.
|
|
12699
|
+
The reason for that is that sometimes some of dSYM files are invalid, and we don't want them to fail the complete build. However, fail_on_build parameter can be used to prevent this behavior.
|
|
12693
12700
|
*/
|
|
12694
12701
|
public func uploadSymbolsToCrashlytics(dsymPath: String = "./spec/fixtures/dSYM/Themoji2.dSYM",
|
|
12695
12702
|
dsymPaths: OptionalConfigValue<[String]?> = .fastlaneDefault(nil),
|
|
@@ -12699,6 +12706,7 @@ public func uploadSymbolsToCrashlytics(dsymPath: String = "./spec/fixtures/dSYM/
|
|
|
12699
12706
|
binaryPath: OptionalConfigValue<String?> = .fastlaneDefault(nil),
|
|
12700
12707
|
platform: String = "ios",
|
|
12701
12708
|
dsymWorkerThreads: Int = 1,
|
|
12709
|
+
failOnError: OptionalConfigValue<Bool> = .fastlaneDefault(false),
|
|
12702
12710
|
debug: OptionalConfigValue<Bool> = .fastlaneDefault(false))
|
|
12703
12711
|
{
|
|
12704
12712
|
let dsymPathArg = RubyCommand.Argument(name: "dsym_path", value: dsymPath, type: nil)
|
|
@@ -12709,6 +12717,7 @@ public func uploadSymbolsToCrashlytics(dsymPath: String = "./spec/fixtures/dSYM/
|
|
|
12709
12717
|
let binaryPathArg = binaryPath.asRubyArgument(name: "binary_path", type: nil)
|
|
12710
12718
|
let platformArg = RubyCommand.Argument(name: "platform", value: platform, type: nil)
|
|
12711
12719
|
let dsymWorkerThreadsArg = RubyCommand.Argument(name: "dsym_worker_threads", value: dsymWorkerThreads, type: nil)
|
|
12720
|
+
let failOnErrorArg = failOnError.asRubyArgument(name: "fail_on_error", type: nil)
|
|
12712
12721
|
let debugArg = debug.asRubyArgument(name: "debug", type: nil)
|
|
12713
12722
|
let array: [RubyCommand.Argument?] = [dsymPathArg,
|
|
12714
12723
|
dsymPathsArg,
|
|
@@ -12718,6 +12727,7 @@ public func uploadSymbolsToCrashlytics(dsymPath: String = "./spec/fixtures/dSYM/
|
|
|
12718
12727
|
binaryPathArg,
|
|
12719
12728
|
platformArg,
|
|
12720
12729
|
dsymWorkerThreadsArg,
|
|
12730
|
+
failOnErrorArg,
|
|
12721
12731
|
debugArg]
|
|
12722
12732
|
let args: [RubyCommand.Argument] = array
|
|
12723
12733
|
.filter { $0?.value != nil }
|
|
@@ -12816,7 +12826,7 @@ public func uploadSymbolsToSentry(apiHost: String = "https://app.getsentry.com/a
|
|
|
12816
12826
|
- teamName: The name of your App Store Connect team if you're in multiple teams
|
|
12817
12827
|
- devPortalTeamId: The short ID of your Developer Portal team, if you're in multiple teams. Different from your iTC team ID!
|
|
12818
12828
|
- devPortalTeamName: The name of your Developer Portal team if you're in multiple teams
|
|
12819
|
-
- itcProvider: The provider short name to be used with the iTMSTransporter to identify your team. This value will override the automatically detected provider short name. To get provider short name run `
|
|
12829
|
+
- itcProvider: The provider short name to be used with the iTMSTransporter to identify your team. This value will override the automatically detected provider short name. To get provider short name run `xcrun iTMSTransporter -m provider -u 'USERNAME' -p 'PASSWORD' -account_type itunes_connect -v off`. The short names of providers should be listed in the second column
|
|
12820
12830
|
- providerPublicId: The provider public ID to be used with altool (--provider-public-id). This value will override the automatically detected provider value for altool uploads. Required after Xcode 26 when your account is associated with multiple providers and using username/app-password authentication
|
|
12821
12831
|
- runPrecheckBeforeSubmit: Run precheck before submitting to app review
|
|
12822
12832
|
- precheckDefaultRuleLevel: The default precheck rule level unless otherwise configured
|
|
@@ -13354,11 +13364,11 @@ public func uploadToPlayStoreInternalAppSharing(packageName: String,
|
|
|
13354
13364
|
- lastName: The tester's last name
|
|
13355
13365
|
- email: The tester's email
|
|
13356
13366
|
- testersFilePath: Path to a CSV file of testers
|
|
13357
|
-
- groups: Associate tester to one group or more by group name / group id. E.g. `-g "Team 1","
|
|
13367
|
+
- groups: Associate tester to one group or more by group name / group id. E.g. `-g "Team 1","a06cf5b5-95a9-4beb-88c6-f22bd6b3f7a2"` This is required when `distribute_external` option is set to true or when we want to add a tester to one or more external testing groups
|
|
13358
13368
|
- teamId: The ID of your App Store Connect team if you're in multiple teams
|
|
13359
13369
|
- teamName: The name of your App Store Connect team if you're in multiple teams
|
|
13360
13370
|
- devPortalTeamId: The short ID of your team in the developer portal, if you're in multiple teams. Different from your iTC team ID!
|
|
13361
|
-
- itcProvider: The provider short name to be used with the iTMSTransporter to identify your team. This value will override the automatically detected provider short name. To get provider short name run `
|
|
13371
|
+
- itcProvider: The provider short name to be used with the iTMSTransporter to identify your team. This value will override the automatically detected provider short name. To get provider short name run `xcrun iTMSTransporter -m provider -u 'USERNAME' -p 'PASSWORD' -account_type itunes_connect -v off`. The short names of providers should be listed in the second column
|
|
13362
13372
|
- providerPublicId: The provider public ID to be used with altool (--provider-public-id). This value will override the automatically detected provider value for altool uploads. Required after Xcode 26 when your account is associated with multiple providers and using username/app-password authentication
|
|
13363
13373
|
- waitProcessingInterval: Interval in seconds to wait for App Store Connect processing
|
|
13364
13374
|
- waitProcessingTimeoutDuration: Timeout duration in seconds to wait for App Store Connect processing. If set, after exceeding timeout duration, this will `force stop` to wait for App Store Connect processing and exit with exception
|
|
@@ -13922,7 +13932,7 @@ public func xcov(workspace: OptionalConfigValue<String?> = .fastlaneDefault(nil)
|
|
|
13922
13932
|
coverallsServiceJobId: OptionalConfigValue<String?> = .fastlaneDefault(nil),
|
|
13923
13933
|
coverallsRepoToken: OptionalConfigValue<String?> = .fastlaneDefault(nil),
|
|
13924
13934
|
xcconfig: OptionalConfigValue<String?> = .fastlaneDefault(nil),
|
|
13925
|
-
ideFoundationPath: String = "/Applications/Xcode_26.
|
|
13935
|
+
ideFoundationPath: String = "/Applications/Xcode_26.6.app/Contents/Developer/../Frameworks/IDEFoundation.framework/Versions/A/IDEFoundation",
|
|
13926
13936
|
legacySupport: OptionalConfigValue<Bool> = .fastlaneDefault(false))
|
|
13927
13937
|
{
|
|
13928
13938
|
let workspaceArg = workspace.asRubyArgument(name: "workspace", type: nil)
|
|
@@ -14133,4 +14143,4 @@ public let snapshotfile: Snapshotfile = .init()
|
|
|
14133
14143
|
|
|
14134
14144
|
// Please don't remove the lines below
|
|
14135
14145
|
// They are used to detect outdated files
|
|
14136
|
-
// FastlaneRunnerAPIVersion [0.9.
|
|
14146
|
+
// FastlaneRunnerAPIVersion [0.9.205]
|
|
@@ -46,7 +46,7 @@
|
|
|
46
46
|
C0459CAB27261886002CDFB9 /* CopyFiles */ = {
|
|
47
47
|
isa = PBXCopyFilesBuildPhase;
|
|
48
48
|
buildActionMask = 2147483647;
|
|
49
|
-
dstPath =
|
|
49
|
+
dstPath = $SRCROOT/../..;
|
|
50
50
|
dstSubfolderSpec = 0;
|
|
51
51
|
files = (
|
|
52
52
|
C0459CAC27261897002CDFB9 /* FastlaneRunner in CopyFiles */,
|
|
@@ -1,23 +1,49 @@
|
|
|
1
|
+
require_relative '../helper'
|
|
2
|
+
|
|
1
3
|
module FastlaneCore
|
|
2
4
|
class AnalyticsEventBuilder
|
|
3
5
|
attr_accessor :action_name
|
|
4
6
|
|
|
5
7
|
# fastlane_client_language valid options are :ruby or :swift
|
|
6
|
-
def initialize(p_hash: nil, session_id: nil, action_name: nil, fastlane_client_language: :ruby)
|
|
8
|
+
def initialize(p_hash: nil, session_id: nil, action_name: nil, fastlane_client_language: :ruby, build_tool_version: nil)
|
|
7
9
|
@p_hash = p_hash
|
|
8
10
|
@session_id = session_id
|
|
9
11
|
@action_name = action_name
|
|
10
12
|
@fastlane_client_language = fastlane_client_language
|
|
13
|
+
@build_tool_version = build_tool_version
|
|
11
14
|
end
|
|
12
15
|
|
|
13
16
|
def new_event(action_stage)
|
|
14
17
|
{
|
|
15
18
|
client_id: @p_hash,
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
19
|
+
session_id: @session_id,
|
|
20
|
+
name: action_stage,
|
|
21
|
+
params: {
|
|
22
|
+
fastlane_client_language: @fastlane_client_language,
|
|
23
|
+
fastlane_version: Fastlane::VERSION,
|
|
24
|
+
install_method: install_method,
|
|
25
|
+
ruby_version: RUBY_VERSION,
|
|
26
|
+
operating_system: Helper.operating_system,
|
|
27
|
+
build_tool_version: @build_tool_version,
|
|
28
|
+
ci: Helper.ci?.to_s
|
|
29
|
+
}.reject { |_, value| value.nil? }
|
|
20
30
|
}
|
|
21
31
|
end
|
|
32
|
+
|
|
33
|
+
private
|
|
34
|
+
|
|
35
|
+
def install_method
|
|
36
|
+
if Helper.bundler?
|
|
37
|
+
'bundler'
|
|
38
|
+
elsif Helper.contained_fastlane?
|
|
39
|
+
'standalone'
|
|
40
|
+
elsif Helper.homebrew?
|
|
41
|
+
'homebrew'
|
|
42
|
+
elsif Helper.mac_app?
|
|
43
|
+
'mac_app'
|
|
44
|
+
else
|
|
45
|
+
'gem'
|
|
46
|
+
end
|
|
47
|
+
end
|
|
22
48
|
end
|
|
23
49
|
end
|
|
@@ -34,21 +34,33 @@ module FastlaneCore
|
|
|
34
34
|
|
|
35
35
|
def post_request(event)
|
|
36
36
|
connection = Faraday.new(GA_URL) do |conn|
|
|
37
|
-
|
|
37
|
+
# This request runs while fastlane is shutting down,
|
|
38
|
+
# so keep the timeouts short to not delay the user
|
|
39
|
+
conn.options.open_timeout = 5
|
|
40
|
+
conn.options.timeout = 5
|
|
38
41
|
conn.adapter(Faraday.default_adapter)
|
|
39
42
|
end
|
|
40
43
|
connection.headers[:user_agent] = 'fastlane/' + Fastlane::VERSION
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
44
|
+
|
|
45
|
+
# GA4 protocol, event parameters are sent as `ep.<name>` query parameters
|
|
46
|
+
params = {
|
|
47
|
+
v: "2", # Protocol version (GA4)
|
|
48
|
+
tid: @ga_tracking, # GA4 measurement ID
|
|
49
|
+
cid: event[:client_id], # Client ID
|
|
50
|
+
sid: event[:session_id], # Session ID
|
|
51
|
+
_ss: "1", # Session start
|
|
52
|
+
seg: "1", # Session engaged
|
|
53
|
+
# Engagement time in ms, required for events to count towards active users
|
|
54
|
+
_et: (event[:engagement_time_msec] || 100).to_s,
|
|
55
|
+
en: event[:name].to_s # Event name
|
|
56
|
+
}
|
|
57
|
+
(event[:params] || {}).each do |key, value|
|
|
58
|
+
params["ep.#{key}"] = value.to_s
|
|
59
|
+
end
|
|
60
|
+
|
|
61
|
+
connection.post("/g/collect") do |request|
|
|
62
|
+
request.params = params
|
|
63
|
+
end
|
|
52
64
|
end
|
|
53
65
|
end
|
|
54
66
|
end
|