fastlane 2.229.0 → 2.232.2
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 +98 -92
- data/bin/fastlane +2 -2
- data/deliver/lib/assets/summary.html.erb +3 -3
- data/deliver/lib/deliver/app_screenshot.rb +215 -347
- data/deliver/lib/deliver/app_screenshot_iterator.rb +4 -1
- data/deliver/lib/deliver/app_screenshot_validator.rb +5 -21
- data/deliver/lib/deliver/loader.rb +2 -9
- data/deliver/lib/deliver/upload_metadata.rb +5 -0
- data/deliver/lib/deliver/upload_screenshots.rb +4 -2
- data/fastlane/lib/assets/completions/completion.bash +1 -1
- data/fastlane/lib/assets/completions/completion.sh +2 -2
- data/fastlane/lib/fastlane/actions/app_store_build_number.rb +19 -14
- data/fastlane/lib/fastlane/actions/appium.rb +1 -1
- data/fastlane/lib/fastlane/actions/docs/create_app_online.md +6 -3
- data/fastlane/lib/fastlane/actions/docs/sync_code_signing.md +3 -1
- data/fastlane/lib/fastlane/actions/docs/upload_to_app_store.md.erb +34 -6
- data/fastlane/lib/fastlane/actions/docs/upload_to_testflight.md +2 -0
- data/fastlane/lib/fastlane/actions/get_version_number.rb +1 -1
- data/fastlane/lib/fastlane/actions/import_certificate.rb +9 -1
- data/fastlane/lib/fastlane/actions/increment_build_number.rb +1 -1
- data/fastlane/lib/fastlane/actions/install_xcode_plugin.rb +3 -2
- data/fastlane/lib/fastlane/actions/latest_testflight_build_number.rb +1 -1
- data/fastlane/lib/fastlane/actions/modify_services.rb +1 -0
- data/fastlane/lib/fastlane/actions/notarize.rb +1 -1
- data/fastlane/lib/fastlane/actions/upload_to_app_store.rb +1 -1
- data/fastlane/lib/fastlane/actions/xcov.rb +1 -7
- data/fastlane/lib/fastlane/cli_tools_distributor.rb +19 -1
- data/fastlane/lib/fastlane/console.rb +2 -2
- data/fastlane/lib/fastlane/documentation/markdown_docs_generator.rb +4 -4
- data/fastlane/lib/fastlane/erb_template_helper.rb +1 -7
- data/fastlane/lib/fastlane/plugins/template/%gem_name%.gemspec.erb +1 -1
- data/fastlane/lib/fastlane/plugins/template/.github/workflows/test.yml +20 -20
- data/fastlane/lib/fastlane/plugins/template/.rubocop.yml +1 -1
- data/fastlane/lib/fastlane/version.rb +2 -1
- data/fastlane/swift/Actions.swift +1 -1
- data/fastlane/swift/Appfile.swift +13 -5
- data/fastlane/swift/ArgumentProcessor.swift +1 -1
- data/fastlane/swift/Atomic.swift +1 -1
- data/fastlane/swift/ControlCommand.swift +5 -4
- data/fastlane/swift/Deliverfile.swift +2 -2
- data/fastlane/swift/DeliverfileProtocol.swift +265 -68
- data/fastlane/swift/Fastlane.swift +140 -88
- data/fastlane/swift/FastlaneSwiftRunner/FastlaneSwiftRunner.xcodeproj/project.pbxproj +3 -1
- data/fastlane/swift/Gymfile.swift +2 -2
- data/fastlane/swift/GymfileProtocol.swift +227 -54
- data/fastlane/swift/LaneFileProtocol.swift +4 -2
- data/fastlane/swift/MainProcess.swift +1 -1
- data/fastlane/swift/Matchfile.swift +2 -2
- data/fastlane/swift/MatchfileProtocol.swift +225 -58
- data/fastlane/swift/OptionalConfigValue.swift +1 -1
- data/fastlane/swift/Plugins.swift +1 -1
- data/fastlane/swift/Precheckfile.swift +2 -2
- data/fastlane/swift/PrecheckfileProtocol.swift +45 -13
- data/fastlane/swift/RubyCommand.swift +6 -7
- data/fastlane/swift/RubyCommandable.swift +1 -1
- data/fastlane/swift/Runner.swift +2 -2
- data/fastlane/swift/RunnerArgument.swift +1 -1
- data/fastlane/swift/Scanfile.swift +2 -2
- data/fastlane/swift/ScanfileProtocol.swift +332 -82
- data/fastlane/swift/Screengrabfile.swift +2 -2
- data/fastlane/swift/ScreengrabfileProtocol.swift +89 -24
- data/fastlane/swift/Snapshotfile.swift +2 -2
- data/fastlane/swift/SnapshotfileProtocol.swift +216 -53
- data/fastlane/swift/SocketClient.swift +2 -2
- data/fastlane/swift/SocketClientDelegateProtocol.swift +1 -1
- data/fastlane/swift/SocketResponse.swift +1 -1
- data/fastlane/swift/main.swift +1 -1
- data/fastlane_core/lib/fastlane_core/cert_checker.rb +10 -0
- data/fastlane_core/lib/fastlane_core/fastlane_pty.rb +5 -1
- data/fastlane_core/lib/fastlane_core/ipa_upload_package_builder.rb +14 -0
- data/fastlane_core/lib/fastlane_core/itunes_transporter.rb +38 -8
- data/fastlane_core/lib/fastlane_core/keychain_importer.rb +3 -1
- data/fastlane_core/lib/fastlane_core/project.rb +8 -0
- data/fastlane_core/lib/fastlane_core/provisioning_profile.rb +7 -1
- data/frameit/lib/frameit/device.rb +2 -2
- data/frameit/lib/frameit/device_types.rb +108 -70
- data/frameit/lib/frameit/template_finder.rb +1 -1
- data/gym/lib/assets/wrap_xcodebuild/xcbuild-safe.sh +1 -0
- data/gym/lib/gym/module.rb +9 -4
- data/gym/lib/gym/options.rb +20 -2
- data/gym/lib/gym/runner.rb +38 -3
- data/produce/lib/produce/commands_generator.rb +2 -0
- data/produce/lib/produce/developer_center.rb +1 -0
- data/produce/lib/produce/service.rb +6 -1
- data/scan/lib/scan/error_handler.rb +5 -0
- data/scan/lib/scan/options.rb +11 -1
- data/scan/lib/scan/test_command_generator.rb +8 -0
- data/sigh/lib/assets/resign.sh +6 -3
- data/sigh/lib/sigh/local_manage.rb +6 -4
- data/sigh/lib/sigh/runner.rb +18 -1
- data/snapshot/lib/snapshot/detect_values.rb +1 -1
- data/snapshot/lib/snapshot/options.rb +13 -1
- data/snapshot/lib/snapshot/simulator_launchers/simulator_launcher_base.rb +4 -2
- data/spaceship/lib/spaceship/client.rb +32 -2
- data/spaceship/lib/spaceship/connect_api/models/age_rating_declaration.rb +62 -8
- data/spaceship/lib/spaceship/connect_api/models/app_info_localization.rb +4 -4
- data/spaceship/lib/spaceship/connect_api/models/app_screenshot_set.rb +7 -1
- data/spaceship/lib/spaceship/connect_api/models/app_store_version_localization.rb +16 -16
- data/spaceship/lib/spaceship/connect_api/models/build_upload.rb +42 -0
- data/spaceship/lib/spaceship/connect_api/models/bundle_id_capability.rb +2 -0
- data/spaceship/lib/spaceship/connect_api/models/certificate.rb +32 -2
- data/spaceship/lib/spaceship/connect_api/models/webhook.rb +62 -0
- data/spaceship/lib/spaceship/connect_api/provisioning/provisioning.rb +0 -6
- data/spaceship/lib/spaceship/connect_api/testflight/testflight.rb +9 -0
- data/spaceship/lib/spaceship/connect_api/tunes/tunes.rb +38 -0
- data/spaceship/lib/spaceship/connect_api.rb +2 -0
- data/spaceship/lib/spaceship/errors.rb +8 -6
- data/spaceship/lib/spaceship/portal/key.rb +22 -3
- data/spaceship/lib/spaceship/portal/portal_client.rb +29 -2
- data/spaceship/lib/spaceship/spaceauth_runner.rb +5 -15
- data/supply/lib/supply/client.rb +18 -1
- data/trainer/lib/trainer/legacy_xcresult.rb +1 -1
- data/trainer/lib/trainer/test_parser.rb +1 -1
- data/trainer/lib/trainer/xcresult/helper.rb +11 -1
- metadata +116 -41
- data/fastlane/lib/fastlane/core_ext/bundler_monkey_patch.rb +0 -14
- data/fastlane/lib/fastlane/plugins/template/.circleci/config.yml +0 -43
- data/fastlane/lib/fastlane/plugins/template/.travis.yml +0 -4
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
// ScreengrabfileProtocol.swift
|
|
2
|
-
// Copyright (c)
|
|
2
|
+
// Copyright (c) 2026 FastlaneTools
|
|
3
3
|
|
|
4
4
|
public protocol ScreengrabfileProtocol: AnyObject {
|
|
5
5
|
/// Path to the root of your Android SDK installation, e.g. ~/tools/android-sdk-macosx
|
|
@@ -70,30 +70,95 @@ public protocol ScreengrabfileProtocol: AnyObject {
|
|
|
70
70
|
}
|
|
71
71
|
|
|
72
72
|
public extension ScreengrabfileProtocol {
|
|
73
|
-
var androidHome: String? {
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
var
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
var
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
var
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
var
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
var
|
|
94
|
-
|
|
73
|
+
var androidHome: String? {
|
|
74
|
+
return nil
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
var buildToolsVersion: String? {
|
|
78
|
+
return nil
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
var locales: [String] {
|
|
82
|
+
return ["en-US"]
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
var clearPreviousScreenshots: Bool {
|
|
86
|
+
return false
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
var outputDirectory: String {
|
|
90
|
+
return "fastlane/metadata/android"
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
var skipOpenSummary: Bool {
|
|
94
|
+
return false
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
var appPackageName: String {
|
|
98
|
+
return ""
|
|
99
|
+
}
|
|
100
|
+
|
|
101
|
+
var testsPackageName: String? {
|
|
102
|
+
return nil
|
|
103
|
+
}
|
|
104
|
+
|
|
105
|
+
var useTestsInPackages: [String]? {
|
|
106
|
+
return nil
|
|
107
|
+
}
|
|
108
|
+
|
|
109
|
+
var useTestsInClasses: [String]? {
|
|
110
|
+
return nil
|
|
111
|
+
}
|
|
112
|
+
|
|
113
|
+
var launchArguments: [String]? {
|
|
114
|
+
return nil
|
|
115
|
+
}
|
|
116
|
+
|
|
117
|
+
var testInstrumentationRunner: String {
|
|
118
|
+
return "androidx.test.runner.AndroidJUnitRunner"
|
|
119
|
+
}
|
|
120
|
+
|
|
121
|
+
var endingLocale: String {
|
|
122
|
+
return "en-US"
|
|
123
|
+
}
|
|
124
|
+
|
|
125
|
+
var useAdbRoot: Bool {
|
|
126
|
+
return false
|
|
127
|
+
}
|
|
128
|
+
|
|
129
|
+
var appApkPath: String? {
|
|
130
|
+
return nil
|
|
131
|
+
}
|
|
132
|
+
|
|
133
|
+
var testsApkPath: String? {
|
|
134
|
+
return nil
|
|
135
|
+
}
|
|
136
|
+
|
|
137
|
+
var specificDevice: String? {
|
|
138
|
+
return nil
|
|
139
|
+
}
|
|
140
|
+
|
|
141
|
+
var deviceType: String {
|
|
142
|
+
return "phone"
|
|
143
|
+
}
|
|
144
|
+
|
|
145
|
+
var exitOnTestFailure: Bool {
|
|
146
|
+
return true
|
|
147
|
+
}
|
|
148
|
+
|
|
149
|
+
var reinstallApp: Bool {
|
|
150
|
+
return false
|
|
151
|
+
}
|
|
152
|
+
|
|
153
|
+
var useTimestampSuffix: Bool {
|
|
154
|
+
return true
|
|
155
|
+
}
|
|
156
|
+
|
|
157
|
+
var adbHost: String? {
|
|
158
|
+
return nil
|
|
159
|
+
}
|
|
95
160
|
}
|
|
96
161
|
|
|
97
162
|
// Please don't remove the lines below
|
|
98
163
|
// They are used to detect outdated files
|
|
99
|
-
// FastlaneRunnerAPIVersion [0.9.
|
|
164
|
+
// FastlaneRunnerAPIVersion [0.9.142]
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
// Snapshotfile.swift
|
|
2
|
-
// Copyright (c)
|
|
2
|
+
// Copyright (c) 2026 FastlaneTools
|
|
3
3
|
|
|
4
4
|
// This class is automatically included in FastlaneRunner during build
|
|
5
5
|
|
|
@@ -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.
|
|
20
|
+
// Generated with fastlane 2.232.2
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
// SnapshotfileProtocol.swift
|
|
2
|
-
// Copyright (c)
|
|
2
|
+
// Copyright (c) 2026 FastlaneTools
|
|
3
3
|
|
|
4
4
|
public protocol SnapshotfileProtocol: AnyObject {
|
|
5
5
|
/// Path to the workspace file
|
|
@@ -119,12 +119,18 @@ public protocol SnapshotfileProtocol: AnyObject {
|
|
|
119
119
|
/// Sets a custom path for Swift Package Manager dependencies
|
|
120
120
|
var clonedSourcePackagesPath: String? { get }
|
|
121
121
|
|
|
122
|
+
/// Sets a custom package cache path for Swift Package Manager dependencies
|
|
123
|
+
var packageCachePath: String? { get }
|
|
124
|
+
|
|
122
125
|
/// Skips resolution of Swift Package Manager dependencies
|
|
123
126
|
var skipPackageDependenciesResolution: Bool { get }
|
|
124
127
|
|
|
125
|
-
/// Prevents packages from automatically being resolved to versions other than those recorded in the `Package.resolved` file
|
|
128
|
+
/// Prevents packages from automatically being resolved to versions other than those recorded in the `Package.resolved` file. This translates in the option `-disableAutomaticPackageResolution` being passed to xcodebuild
|
|
126
129
|
var disablePackageAutomaticUpdates: Bool { get }
|
|
127
130
|
|
|
131
|
+
/// Skips updating package dependencies from their remote. This translates in the option `-skipPackageUpdates` being passed to xcodebuild
|
|
132
|
+
var skipPackageRepositoryFetches: Bool { get }
|
|
133
|
+
|
|
128
134
|
/// Lets xcodebuild use a specified package authorization provider (keychain|netrc)
|
|
129
135
|
var packageAuthorizationProvider: String? { get }
|
|
130
136
|
|
|
@@ -154,58 +160,215 @@ public protocol SnapshotfileProtocol: AnyObject {
|
|
|
154
160
|
}
|
|
155
161
|
|
|
156
162
|
public extension SnapshotfileProtocol {
|
|
157
|
-
var workspace: String? {
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
var
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
var
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
var
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
var
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
var
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
var
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
var
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
var
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
var
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
var
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
var
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
var
|
|
206
|
-
|
|
163
|
+
var workspace: String? {
|
|
164
|
+
return nil
|
|
165
|
+
}
|
|
166
|
+
|
|
167
|
+
var project: String? {
|
|
168
|
+
return nil
|
|
169
|
+
}
|
|
170
|
+
|
|
171
|
+
var xcargs: String? {
|
|
172
|
+
return nil
|
|
173
|
+
}
|
|
174
|
+
|
|
175
|
+
var xcconfig: String? {
|
|
176
|
+
return nil
|
|
177
|
+
}
|
|
178
|
+
|
|
179
|
+
var devices: [String]? {
|
|
180
|
+
return nil
|
|
181
|
+
}
|
|
182
|
+
|
|
183
|
+
var languages: [String] {
|
|
184
|
+
return ["en-US"]
|
|
185
|
+
}
|
|
186
|
+
|
|
187
|
+
var launchArguments: [String] {
|
|
188
|
+
return [""]
|
|
189
|
+
}
|
|
190
|
+
|
|
191
|
+
var outputDirectory: String {
|
|
192
|
+
return "screenshots"
|
|
193
|
+
}
|
|
194
|
+
|
|
195
|
+
var outputSimulatorLogs: Bool {
|
|
196
|
+
return false
|
|
197
|
+
}
|
|
198
|
+
|
|
199
|
+
var iosVersion: String? {
|
|
200
|
+
return nil
|
|
201
|
+
}
|
|
202
|
+
|
|
203
|
+
var skipOpenSummary: Bool {
|
|
204
|
+
return false
|
|
205
|
+
}
|
|
206
|
+
|
|
207
|
+
var skipHelperVersionCheck: Bool {
|
|
208
|
+
return false
|
|
209
|
+
}
|
|
210
|
+
|
|
211
|
+
var clearPreviousScreenshots: Bool {
|
|
212
|
+
return false
|
|
213
|
+
}
|
|
214
|
+
|
|
215
|
+
var reinstallApp: Bool {
|
|
216
|
+
return false
|
|
217
|
+
}
|
|
218
|
+
|
|
219
|
+
var eraseSimulator: Bool {
|
|
220
|
+
return false
|
|
221
|
+
}
|
|
222
|
+
|
|
223
|
+
var headless: Bool {
|
|
224
|
+
return true
|
|
225
|
+
}
|
|
226
|
+
|
|
227
|
+
var overrideStatusBar: Bool {
|
|
228
|
+
return false
|
|
229
|
+
}
|
|
230
|
+
|
|
231
|
+
var overrideStatusBarArguments: String? {
|
|
232
|
+
return nil
|
|
233
|
+
}
|
|
234
|
+
|
|
235
|
+
var localizeSimulator: Bool {
|
|
236
|
+
return false
|
|
237
|
+
}
|
|
238
|
+
|
|
239
|
+
var darkMode: Bool? {
|
|
240
|
+
return nil
|
|
241
|
+
}
|
|
242
|
+
|
|
243
|
+
var appIdentifier: String? {
|
|
244
|
+
return nil
|
|
245
|
+
}
|
|
246
|
+
|
|
247
|
+
var addPhotos: [String]? {
|
|
248
|
+
return nil
|
|
249
|
+
}
|
|
250
|
+
|
|
251
|
+
var addVideos: [String]? {
|
|
252
|
+
return nil
|
|
253
|
+
}
|
|
254
|
+
|
|
255
|
+
var htmlTemplate: String? {
|
|
256
|
+
return nil
|
|
257
|
+
}
|
|
258
|
+
|
|
259
|
+
var buildlogPath: String {
|
|
260
|
+
return "~/Library/Logs/snapshot"
|
|
261
|
+
}
|
|
262
|
+
|
|
263
|
+
var clean: Bool {
|
|
264
|
+
return false
|
|
265
|
+
}
|
|
266
|
+
|
|
267
|
+
var testWithoutBuilding: Bool? {
|
|
268
|
+
return nil
|
|
269
|
+
}
|
|
270
|
+
|
|
271
|
+
var configuration: String? {
|
|
272
|
+
return nil
|
|
273
|
+
}
|
|
274
|
+
|
|
275
|
+
var sdk: String? {
|
|
276
|
+
return nil
|
|
277
|
+
}
|
|
278
|
+
|
|
279
|
+
var scheme: String? {
|
|
280
|
+
return nil
|
|
281
|
+
}
|
|
282
|
+
|
|
283
|
+
var numberOfRetries: Int {
|
|
284
|
+
return 1
|
|
285
|
+
}
|
|
286
|
+
|
|
287
|
+
var stopAfterFirstError: Bool {
|
|
288
|
+
return false
|
|
289
|
+
}
|
|
290
|
+
|
|
291
|
+
var derivedDataPath: String? {
|
|
292
|
+
return nil
|
|
293
|
+
}
|
|
294
|
+
|
|
295
|
+
var resultBundle: Bool {
|
|
296
|
+
return false
|
|
297
|
+
}
|
|
298
|
+
|
|
299
|
+
var testTargetName: String? {
|
|
300
|
+
return nil
|
|
301
|
+
}
|
|
302
|
+
|
|
303
|
+
var namespaceLogFiles: String? {
|
|
304
|
+
return nil
|
|
305
|
+
}
|
|
306
|
+
|
|
307
|
+
var concurrentSimulators: Bool {
|
|
308
|
+
return true
|
|
309
|
+
}
|
|
310
|
+
|
|
311
|
+
var disableSlideToType: Bool {
|
|
312
|
+
return false
|
|
313
|
+
}
|
|
314
|
+
|
|
315
|
+
var clonedSourcePackagesPath: String? {
|
|
316
|
+
return nil
|
|
317
|
+
}
|
|
318
|
+
|
|
319
|
+
var packageCachePath: String? {
|
|
320
|
+
return nil
|
|
321
|
+
}
|
|
322
|
+
|
|
323
|
+
var skipPackageDependenciesResolution: Bool {
|
|
324
|
+
return false
|
|
325
|
+
}
|
|
326
|
+
|
|
327
|
+
var disablePackageAutomaticUpdates: Bool {
|
|
328
|
+
return false
|
|
329
|
+
}
|
|
330
|
+
|
|
331
|
+
var skipPackageRepositoryFetches: Bool {
|
|
332
|
+
return false
|
|
333
|
+
}
|
|
334
|
+
|
|
335
|
+
var packageAuthorizationProvider: String? {
|
|
336
|
+
return nil
|
|
337
|
+
}
|
|
338
|
+
|
|
339
|
+
var testplan: String? {
|
|
340
|
+
return nil
|
|
341
|
+
}
|
|
342
|
+
|
|
343
|
+
var onlyTesting: String? {
|
|
344
|
+
return nil
|
|
345
|
+
}
|
|
346
|
+
|
|
347
|
+
var skipTesting: String? {
|
|
348
|
+
return nil
|
|
349
|
+
}
|
|
350
|
+
|
|
351
|
+
var xcodebuildFormatter: String {
|
|
352
|
+
return "xcbeautify"
|
|
353
|
+
}
|
|
354
|
+
|
|
355
|
+
var xcprettyArgs: String? {
|
|
356
|
+
return nil
|
|
357
|
+
}
|
|
358
|
+
|
|
359
|
+
var disableXcpretty: Bool? {
|
|
360
|
+
return nil
|
|
361
|
+
}
|
|
362
|
+
|
|
363
|
+
var suppressXcodeOutput: Bool? {
|
|
364
|
+
return nil
|
|
365
|
+
}
|
|
366
|
+
|
|
367
|
+
var useSystemScm: Bool {
|
|
368
|
+
return false
|
|
369
|
+
}
|
|
207
370
|
}
|
|
208
371
|
|
|
209
372
|
// Please don't remove the lines below
|
|
210
373
|
// They are used to detect outdated files
|
|
211
|
-
// FastlaneRunnerAPIVersion [0.9.
|
|
374
|
+
// FastlaneRunnerAPIVersion [0.9.136]
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
// SocketClient.swift
|
|
2
|
-
// Copyright (c)
|
|
2
|
+
// Copyright (c) 2026 FastlaneTools
|
|
3
3
|
|
|
4
4
|
//
|
|
5
5
|
// ** NOTE **
|
|
@@ -53,7 +53,7 @@ class SocketClient: NSObject {
|
|
|
53
53
|
|
|
54
54
|
private(set) var socketStatus: SocketStatus
|
|
55
55
|
|
|
56
|
-
|
|
56
|
+
/// localhost only, this prevents other computers from connecting
|
|
57
57
|
init(host: String = "localhost", port: UInt32 = 2000, commandTimeoutSeconds: Int = defaultCommandTimeoutSeconds, socketDelegate: SocketClientDelegateProtocol) {
|
|
58
58
|
self.host = host
|
|
59
59
|
self.port = port
|
data/fastlane/swift/main.swift
CHANGED
|
@@ -30,6 +30,16 @@ WWDRCA_CERTIFICATES = [
|
|
|
30
30
|
alias: 'G6',
|
|
31
31
|
sha256: 'bdd4ed6e74691f0c2bfd01be0296197af1379e0418e2d300efa9c3bef642ca30',
|
|
32
32
|
url: 'https://www.apple.com/certificateauthority/AppleWWDRCAG6.cer'
|
|
33
|
+
},
|
|
34
|
+
{
|
|
35
|
+
alias: 'DEV-ID-G1',
|
|
36
|
+
sha256: '7afc9d01a62f03a2de9637936d4afe68090d2de18d03f29c88cfb0b1ba63587f',
|
|
37
|
+
url: 'https://www.apple.com/certificateauthority/DeveloperIDCA.cer'
|
|
38
|
+
},
|
|
39
|
+
{
|
|
40
|
+
alias: 'DEV-ID-G2',
|
|
41
|
+
sha256: 'f16cd3c54c7f83cea4bf1a3e6a0819c8aaa8e4a1528fd144715f350643d2df3a',
|
|
42
|
+
url: 'https://www.apple.com/certificateauthority/DeveloperIDG2CA.cer'
|
|
33
43
|
}
|
|
34
44
|
]
|
|
35
45
|
|
|
@@ -26,8 +26,10 @@ module FastlaneCore
|
|
|
26
26
|
spawn_with_popen(command, &block)
|
|
27
27
|
end
|
|
28
28
|
|
|
29
|
-
def self.spawn_with_pty(
|
|
29
|
+
def self.spawn_with_pty(original_command, &block)
|
|
30
30
|
require 'pty'
|
|
31
|
+
# this forces the PTY flush - fixes #21792
|
|
32
|
+
command = ENV['FASTLANE_EXEC_FLUSH_PTY_WORKAROUND'] ? "#{original_command};" : original_command
|
|
31
33
|
PTY.spawn(command) do |command_stdout, command_stdin, pid|
|
|
32
34
|
begin
|
|
33
35
|
yield(command_stdout, command_stdin, pid)
|
|
@@ -37,6 +39,8 @@ module FastlaneCore
|
|
|
37
39
|
# This is expected on some linux systems, that indicates that the subcommand finished
|
|
38
40
|
# and we kept trying to read, ignore it
|
|
39
41
|
ensure
|
|
42
|
+
command_stdin.close
|
|
43
|
+
command_stdout.close
|
|
40
44
|
begin
|
|
41
45
|
Process.wait(pid)
|
|
42
46
|
rescue Errno::ECHILD, PTY::ChildExited
|
|
@@ -13,6 +13,20 @@ module FastlaneCore
|
|
|
13
13
|
attr_accessor :package_path
|
|
14
14
|
|
|
15
15
|
def generate(app_id: nil, ipa_path: nil, package_path: nil, platform: nil, app_identifier: nil, short_version: nil, bundle_version: nil)
|
|
16
|
+
unless Helper.is_mac?
|
|
17
|
+
# .itmsp packages are not supported for ipa uploads starting Transporter 4.1, for non-macOS
|
|
18
|
+
self.package_path = package_path
|
|
19
|
+
copy_ipa(ipa_path)
|
|
20
|
+
|
|
21
|
+
# copy any AppStoreInfo.plist file that's next to the ipa file
|
|
22
|
+
app_store_info_path = File.join(File.dirname(ipa_path), "AppStoreInfo.plist")
|
|
23
|
+
if File.exist?(app_store_info_path)
|
|
24
|
+
FileUtils.cp(app_store_info_path, File.join(self.package_path, "AppStoreInfo.plist"))
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
return self.package_path
|
|
28
|
+
end
|
|
29
|
+
|
|
16
30
|
self.package_path = File.join(package_path, "#{app_id}-#{SecureRandom.uuid}.itmsp")
|
|
17
31
|
FileUtils.rm_rf(self.package_path) if File.directory?(self.package_path)
|
|
18
32
|
FileUtils.mkdir_p(self.package_path)
|
|
@@ -219,8 +219,8 @@ module FastlaneCore
|
|
|
219
219
|
end
|
|
220
220
|
|
|
221
221
|
def file_upload_option(source)
|
|
222
|
-
|
|
223
|
-
is_asset_file_type = !File.directory?(source) &&
|
|
222
|
+
file_ext = File.extname(source).downcase
|
|
223
|
+
is_asset_file_type = !File.directory?(source) && allowed_package_extensions.map { |ext| ".#{ext}" }.include?(file_ext)
|
|
224
224
|
|
|
225
225
|
if is_asset_file_type
|
|
226
226
|
return "-assetFile #{source.shellescape}"
|
|
@@ -246,11 +246,16 @@ module FastlaneCore
|
|
|
246
246
|
end
|
|
247
247
|
return deliver_additional_params
|
|
248
248
|
end
|
|
249
|
+
|
|
250
|
+
def allowed_package_extensions
|
|
251
|
+
["ipa", "pkg", "dmg", "zip"]
|
|
252
|
+
end
|
|
249
253
|
end
|
|
250
254
|
|
|
251
255
|
# Generates commands and executes the altool.
|
|
252
256
|
class AltoolTransporterExecutor < TransporterExecutor
|
|
253
|
-
|
|
257
|
+
# Xcode 26 uses ERROR, while previous versions used *** Error
|
|
258
|
+
ERROR_REGEX = /(?:\*\*\*\s*)?ERROR:\s+(.+)/i
|
|
254
259
|
|
|
255
260
|
private_constant :ERROR_REGEX
|
|
256
261
|
|
|
@@ -296,7 +301,7 @@ module FastlaneCore
|
|
|
296
301
|
end
|
|
297
302
|
|
|
298
303
|
yield(@all_lines) if block_given?
|
|
299
|
-
|
|
304
|
+
@errors.empty?
|
|
300
305
|
end
|
|
301
306
|
|
|
302
307
|
def build_credential_params(username = nil, password = nil, jwt = nil, api_key = nil)
|
|
@@ -478,6 +483,31 @@ module FastlaneCore
|
|
|
478
483
|
UI.error("Could not download/upload from App Store Connect! It's probably related to your password or your internet connection.")
|
|
479
484
|
end
|
|
480
485
|
|
|
486
|
+
def file_upload_option(source)
|
|
487
|
+
# uploading packages on non-macOS platforms requires AppStoreInfo.plist starting with Transporter >= 4.1
|
|
488
|
+
if !Helper.is_mac? && File.directory?(source)
|
|
489
|
+
asset_file = Dir.glob(File.join(source, "*.{#{allowed_package_extensions.join(',')}}")).first
|
|
490
|
+
unless asset_file
|
|
491
|
+
UI.user_error!("No package file (#{allowed_package_extensions.join(',')}) found in #{source}")
|
|
492
|
+
end
|
|
493
|
+
|
|
494
|
+
appstore_info_path = File.join(source, "AppStoreInfo.plist")
|
|
495
|
+
unless File.file?(appstore_info_path)
|
|
496
|
+
UI.error("AppStoreInfo.plist is required for uploading #{File.extname(asset_file)} files on non-macOS platforms.")
|
|
497
|
+
UI.error("Expected AppStoreInfo.plist in the same directory as the #{File.extname(asset_file)} file.")
|
|
498
|
+
UI.error("Generate it by running either 'fastlane gym [...] --generate_appstore_info'")
|
|
499
|
+
UI.error("Or add '<key>generateAppStoreInformation</key><true/>' in an options.plist then run 'fastlane gym [...] --export_options options.plist'.")
|
|
500
|
+
UI.user_error!("Missing required AppStoreInfo.plist file for iTMSTransporter upload")
|
|
501
|
+
end
|
|
502
|
+
|
|
503
|
+
UI.verbose("Using AppStoreInfo.plist for iTMSTransporter upload: #{appstore_info_path}")
|
|
504
|
+
return "-assetFile #{asset_file.shellescape} -assetDescription #{appstore_info_path.shellescape}"
|
|
505
|
+
end
|
|
506
|
+
|
|
507
|
+
# use standard behavior for other file types or macOS platform
|
|
508
|
+
super(source)
|
|
509
|
+
end
|
|
510
|
+
|
|
481
511
|
private
|
|
482
512
|
|
|
483
513
|
def shell_escaped_password(password)
|
|
@@ -776,16 +806,16 @@ module FastlaneCore
|
|
|
776
806
|
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?
|
|
777
807
|
|
|
778
808
|
# Transport can upload .ipa, .dmg, and .pkg files directly with -assetFile
|
|
779
|
-
# However, -assetFile requires -assetDescription if Linux or Windows
|
|
780
|
-
# This will
|
|
781
|
-
# otherwise it will use the .itmsp package
|
|
809
|
+
# However, -assetFile requires -assetDescription arguments if Linux or Windows.
|
|
810
|
+
# This will return the asset directly if asset_path exists,
|
|
811
|
+
# otherwise it will use the .itmsp package for the -f argument
|
|
782
812
|
|
|
783
813
|
force_itmsp = FastlaneCore::Env.truthy?("ITMSTRANSPORTER_FORCE_ITMS_PACKAGE_UPLOAD")
|
|
784
814
|
can_use_asset_path = Helper.is_mac? && asset_path
|
|
785
815
|
|
|
786
816
|
actual_dir = if can_use_asset_path && !force_itmsp
|
|
787
817
|
# The asset gets deleted upon completion so copying to a temp directory
|
|
788
|
-
# (with randomized filename
|
|
818
|
+
# (with randomized filename. for multibyte-mixed filename it fails to upload)
|
|
789
819
|
new_file_name = "#{SecureRandom.uuid}#{File.extname(asset_path)}"
|
|
790
820
|
tmp_asset_path = File.join(Dir.tmpdir, new_file_name)
|
|
791
821
|
FileUtils.cp(asset_path, tmp_asset_path)
|
|
@@ -4,13 +4,15 @@ require 'security'
|
|
|
4
4
|
|
|
5
5
|
module FastlaneCore
|
|
6
6
|
class KeychainImporter
|
|
7
|
-
def self.import_file(path, keychain_path, keychain_password: nil, certificate_password: "", skip_set_partition_list: false, output: FastlaneCore::Globals.verbose?)
|
|
7
|
+
def self.import_file(path, keychain_path, keychain_password: nil, certificate_password: "", certificate_format: nil, skip_set_partition_list: false, output: FastlaneCore::Globals.verbose?)
|
|
8
8
|
UI.user_error!("Could not find file '#{path}'") unless File.exist?(path)
|
|
9
9
|
|
|
10
10
|
password_part = " -P #{certificate_password.shellescape}"
|
|
11
|
+
certificate_format_part = certificate_format.to_s.strip.empty? ? "" : " -f #{certificate_format.shellescape}"
|
|
11
12
|
|
|
12
13
|
command = "security import #{path.shellescape} -k '#{keychain_path.shellescape}'"
|
|
13
14
|
command << password_part
|
|
15
|
+
command << certificate_format_part
|
|
14
16
|
command << " -T /usr/bin/codesign" # to not be asked for permission when running a tool like `gym` (before Sierra)
|
|
15
17
|
command << " -T /usr/bin/security"
|
|
16
18
|
command << " -T /usr/bin/productbuild" # to not be asked for permission when using an installer cert for macOS
|
|
@@ -348,10 +348,18 @@ module FastlaneCore
|
|
|
348
348
|
proj << "-clonedSourcePackagesDirPath #{options[:cloned_source_packages_path].shellescape}"
|
|
349
349
|
end
|
|
350
350
|
|
|
351
|
+
if xcode_at_least_11 && options[:package_cache_path]
|
|
352
|
+
proj << "-packageCachePath #{options[:package_cache_path].shellescape}"
|
|
353
|
+
end
|
|
354
|
+
|
|
351
355
|
if xcode_at_least_11 && options[:disable_package_automatic_updates]
|
|
352
356
|
proj << "-disableAutomaticPackageResolution"
|
|
353
357
|
end
|
|
354
358
|
|
|
359
|
+
if xcode_at_least_11 && options[:skip_package_repository_fetches]
|
|
360
|
+
proj << "-skipPackageUpdates"
|
|
361
|
+
end
|
|
362
|
+
|
|
355
363
|
return proj
|
|
356
364
|
end
|
|
357
365
|
|
|
@@ -73,7 +73,13 @@ module FastlaneCore
|
|
|
73
73
|
end
|
|
74
74
|
|
|
75
75
|
def profiles_path
|
|
76
|
-
path = File.expand_path("~")
|
|
76
|
+
path = File.expand_path("~")
|
|
77
|
+
# Xcode 16 has a new location for provisioning profiles.
|
|
78
|
+
if FastlaneCore::Helper.xcode_at_least?(16)
|
|
79
|
+
path = File.join(path, "Library", "Developer", "Xcode", "UserData", "Provisioning Profiles")
|
|
80
|
+
else
|
|
81
|
+
path = File.join(path, "Library", "MobileDevice", "Provisioning Profiles")
|
|
82
|
+
end
|
|
77
83
|
# If the directory doesn't exist, create it first
|
|
78
84
|
unless File.directory?(path)
|
|
79
85
|
FileUtils.mkdir_p(path)
|