fastlane 2.227.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.
Files changed (132) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +102 -96
  3. data/bin/fastlane +2 -2
  4. data/deliver/lib/assets/summary.html.erb +3 -3
  5. data/deliver/lib/deliver/app_screenshot.rb +215 -347
  6. data/deliver/lib/deliver/app_screenshot_iterator.rb +4 -1
  7. data/deliver/lib/deliver/app_screenshot_validator.rb +5 -21
  8. data/deliver/lib/deliver/loader.rb +2 -9
  9. data/deliver/lib/deliver/runner.rb +1 -1
  10. data/deliver/lib/deliver/upload_metadata.rb +5 -0
  11. data/deliver/lib/deliver/upload_screenshots.rb +4 -2
  12. data/fastlane/lib/assets/completions/completion.bash +1 -1
  13. data/fastlane/lib/assets/completions/completion.sh +2 -2
  14. data/fastlane/lib/fastlane/actions/app_store_build_number.rb +19 -14
  15. data/fastlane/lib/fastlane/actions/appium.rb +1 -1
  16. data/fastlane/lib/fastlane/actions/docs/create_app_online.md +6 -3
  17. data/fastlane/lib/fastlane/actions/docs/sync_code_signing.md +11 -7
  18. data/fastlane/lib/fastlane/actions/docs/upload_to_app_store.md.erb +56 -17
  19. data/fastlane/lib/fastlane/actions/docs/upload_to_testflight.md +13 -1
  20. data/fastlane/lib/fastlane/actions/get_version_number.rb +1 -1
  21. data/fastlane/lib/fastlane/actions/import_certificate.rb +9 -1
  22. data/fastlane/lib/fastlane/actions/increment_build_number.rb +1 -1
  23. data/fastlane/lib/fastlane/actions/install_xcode_plugin.rb +3 -2
  24. data/fastlane/lib/fastlane/actions/latest_testflight_build_number.rb +1 -1
  25. data/fastlane/lib/fastlane/actions/modify_services.rb +1 -0
  26. data/fastlane/lib/fastlane/actions/notarize.rb +1 -1
  27. data/fastlane/lib/fastlane/actions/upload_to_app_store.rb +1 -1
  28. data/fastlane/lib/fastlane/actions/xcov.rb +1 -7
  29. data/fastlane/lib/fastlane/cli_tools_distributor.rb +19 -1
  30. data/fastlane/lib/fastlane/console.rb +2 -2
  31. data/fastlane/lib/fastlane/documentation/markdown_docs_generator.rb +4 -4
  32. data/fastlane/lib/fastlane/erb_template_helper.rb +1 -7
  33. data/fastlane/lib/fastlane/helper/s3_client_helper.rb +4 -0
  34. data/fastlane/lib/fastlane/plugins/template/%gem_name%.gemspec.erb +1 -1
  35. data/fastlane/lib/fastlane/plugins/template/.github/workflows/test.yml +20 -20
  36. data/fastlane/lib/fastlane/plugins/template/.rubocop.yml +1 -1
  37. data/fastlane/lib/fastlane/version.rb +2 -1
  38. data/fastlane/swift/Actions.swift +1 -1
  39. data/fastlane/swift/Appfile.swift +13 -5
  40. data/fastlane/swift/ArgumentProcessor.swift +1 -1
  41. data/fastlane/swift/Atomic.swift +1 -1
  42. data/fastlane/swift/ControlCommand.swift +5 -4
  43. data/fastlane/swift/Deliverfile.swift +2 -2
  44. data/fastlane/swift/DeliverfileProtocol.swift +265 -68
  45. data/fastlane/swift/Fastlane.swift +150 -157
  46. data/fastlane/swift/FastlaneSwiftRunner/FastlaneSwiftRunner.xcodeproj/project.pbxproj +3 -1
  47. data/fastlane/swift/Gymfile.swift +2 -2
  48. data/fastlane/swift/GymfileProtocol.swift +227 -54
  49. data/fastlane/swift/LaneFileProtocol.swift +4 -2
  50. data/fastlane/swift/MainProcess.swift +1 -1
  51. data/fastlane/swift/Matchfile.swift +2 -2
  52. data/fastlane/swift/MatchfileProtocol.swift +226 -59
  53. data/fastlane/swift/OptionalConfigValue.swift +1 -1
  54. data/fastlane/swift/Plugins.swift +1 -1
  55. data/fastlane/swift/Precheckfile.swift +2 -2
  56. data/fastlane/swift/PrecheckfileProtocol.swift +45 -13
  57. data/fastlane/swift/RubyCommand.swift +6 -7
  58. data/fastlane/swift/RubyCommandable.swift +1 -1
  59. data/fastlane/swift/Runner.swift +3 -3
  60. data/fastlane/swift/RunnerArgument.swift +1 -1
  61. data/fastlane/swift/Scanfile.swift +2 -2
  62. data/fastlane/swift/ScanfileProtocol.swift +334 -84
  63. data/fastlane/swift/Screengrabfile.swift +2 -2
  64. data/fastlane/swift/ScreengrabfileProtocol.swift +89 -24
  65. data/fastlane/swift/Snapshotfile.swift +2 -2
  66. data/fastlane/swift/SnapshotfileProtocol.swift +216 -53
  67. data/fastlane/swift/SocketClient.swift +7 -7
  68. data/fastlane/swift/SocketClientDelegateProtocol.swift +1 -1
  69. data/fastlane/swift/SocketResponse.swift +1 -1
  70. data/fastlane/swift/formatting/Rakefile +1 -2
  71. data/fastlane/swift/main.swift +1 -1
  72. data/fastlane_core/lib/assets/XMLTemplate.xml.erb +5 -1
  73. data/fastlane_core/lib/fastlane_core/cert_checker.rb +10 -0
  74. data/fastlane_core/lib/fastlane_core/command_executor.rb +3 -1
  75. data/fastlane_core/lib/fastlane_core/fastlane_pty.rb +5 -1
  76. data/fastlane_core/lib/fastlane_core/ipa_file_analyser.rb +4 -14
  77. data/fastlane_core/lib/fastlane_core/ipa_upload_package_builder.rb +19 -2
  78. data/fastlane_core/lib/fastlane_core/itunes_transporter.rb +143 -106
  79. data/fastlane_core/lib/fastlane_core/keychain_importer.rb +3 -1
  80. data/fastlane_core/lib/fastlane_core/project.rb +8 -0
  81. data/fastlane_core/lib/fastlane_core/provisioning_profile.rb +7 -1
  82. data/frameit/lib/frameit/device.rb +2 -2
  83. data/frameit/lib/frameit/device_types.rb +108 -70
  84. data/frameit/lib/frameit/template_finder.rb +1 -1
  85. data/gym/lib/assets/wrap_xcodebuild/xcbuild-safe.sh +1 -0
  86. data/gym/lib/gym/module.rb +9 -4
  87. data/gym/lib/gym/options.rb +20 -2
  88. data/gym/lib/gym/runner.rb +38 -3
  89. data/match/lib/match/options.rb +1 -0
  90. data/match/lib/match/storage/s3_storage.rb +4 -7
  91. data/pilot/lib/pilot/build_manager.rb +7 -1
  92. data/produce/lib/produce/commands_generator.rb +2 -0
  93. data/produce/lib/produce/developer_center.rb +1 -0
  94. data/produce/lib/produce/service.rb +6 -1
  95. data/scan/lib/scan/error_handler.rb +5 -0
  96. data/scan/lib/scan/options.rb +13 -3
  97. data/scan/lib/scan/test_command_generator.rb +10 -2
  98. data/sigh/lib/assets/resign.sh +6 -3
  99. data/sigh/lib/sigh/local_manage.rb +6 -4
  100. data/sigh/lib/sigh/options.rb +1 -0
  101. data/sigh/lib/sigh/runner.rb +23 -3
  102. data/snapshot/lib/snapshot/detect_values.rb +1 -1
  103. data/snapshot/lib/snapshot/options.rb +13 -1
  104. data/snapshot/lib/snapshot/simulator_launchers/simulator_launcher_base.rb +4 -2
  105. data/spaceship/lib/spaceship/client.rb +32 -2
  106. data/spaceship/lib/spaceship/connect_api/models/age_rating_declaration.rb +65 -9
  107. data/spaceship/lib/spaceship/connect_api/models/app_info_localization.rb +4 -4
  108. data/spaceship/lib/spaceship/connect_api/models/app_screenshot_set.rb +7 -1
  109. data/spaceship/lib/spaceship/connect_api/models/app_store_version_localization.rb +16 -16
  110. data/spaceship/lib/spaceship/connect_api/models/build_upload.rb +42 -0
  111. data/spaceship/lib/spaceship/connect_api/models/bundle_id_capability.rb +2 -0
  112. data/spaceship/lib/spaceship/connect_api/models/certificate.rb +32 -2
  113. data/spaceship/lib/spaceship/connect_api/models/device.rb +1 -2
  114. data/spaceship/lib/spaceship/connect_api/models/profile.rb +2 -3
  115. data/spaceship/lib/spaceship/connect_api/models/webhook.rb +62 -0
  116. data/spaceship/lib/spaceship/connect_api/provisioning/provisioning.rb +0 -6
  117. data/spaceship/lib/spaceship/connect_api/testflight/testflight.rb +9 -0
  118. data/spaceship/lib/spaceship/connect_api/tunes/tunes.rb +38 -0
  119. data/spaceship/lib/spaceship/connect_api.rb +2 -0
  120. data/spaceship/lib/spaceship/errors.rb +8 -6
  121. data/spaceship/lib/spaceship/portal/key.rb +22 -3
  122. data/spaceship/lib/spaceship/portal/portal_client.rb +29 -2
  123. data/spaceship/lib/spaceship/spaceauth_runner.rb +5 -15
  124. data/supply/lib/supply/client.rb +18 -1
  125. data/trainer/lib/trainer/legacy_xcresult.rb +1 -1
  126. data/trainer/lib/trainer/test_parser.rb +1 -1
  127. data/trainer/lib/trainer/xcresult/helper.rb +11 -1
  128. metadata +153 -37
  129. data/fastlane/lib/fastlane/actions/hipchat.rb +0 -200
  130. data/fastlane/lib/fastlane/core_ext/bundler_monkey_patch.rb +0 -14
  131. data/fastlane/lib/fastlane/plugins/template/.circleci/config.yml +0 -43
  132. data/fastlane/lib/fastlane/plugins/template/.travis.yml +0 -4
@@ -1,5 +1,5 @@
1
1
  // ScreengrabfileProtocol.swift
2
- // Copyright (c) 2025 FastlaneTools
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? { return nil }
74
- var buildToolsVersion: String? { return nil }
75
- var locales: [String] { return ["en-US"] }
76
- var clearPreviousScreenshots: Bool { return false }
77
- var outputDirectory: String { return "fastlane/metadata/android" }
78
- var skipOpenSummary: Bool { return false }
79
- var appPackageName: String { return "" }
80
- var testsPackageName: String? { return nil }
81
- var useTestsInPackages: [String]? { return nil }
82
- var useTestsInClasses: [String]? { return nil }
83
- var launchArguments: [String]? { return nil }
84
- var testInstrumentationRunner: String { return "androidx.test.runner.AndroidJUnitRunner" }
85
- var endingLocale: String { return "en-US" }
86
- var useAdbRoot: Bool { return false }
87
- var appApkPath: String? { return nil }
88
- var testsApkPath: String? { return nil }
89
- var specificDevice: String? { return nil }
90
- var deviceType: String { return "phone" }
91
- var exitOnTestFailure: Bool { return true }
92
- var reinstallApp: Bool { return false }
93
- var useTimestampSuffix: Bool { return true }
94
- var adbHost: String? { return nil }
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.131]
164
+ // FastlaneRunnerAPIVersion [0.9.142]
@@ -1,5 +1,5 @@
1
1
  // Snapshotfile.swift
2
- // Copyright (c) 2025 FastlaneTools
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.227.0
20
+ // Generated with fastlane 2.232.2
@@ -1,5 +1,5 @@
1
1
  // SnapshotfileProtocol.swift
2
- // Copyright (c) 2025 FastlaneTools
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? { return nil }
158
- var project: String? { return nil }
159
- var xcargs: String? { return nil }
160
- var xcconfig: String? { return nil }
161
- var devices: [String]? { return nil }
162
- var languages: [String] { return ["en-US"] }
163
- var launchArguments: [String] { return [""] }
164
- var outputDirectory: String { return "screenshots" }
165
- var outputSimulatorLogs: Bool { return false }
166
- var iosVersion: String? { return nil }
167
- var skipOpenSummary: Bool { return false }
168
- var skipHelperVersionCheck: Bool { return false }
169
- var clearPreviousScreenshots: Bool { return false }
170
- var reinstallApp: Bool { return false }
171
- var eraseSimulator: Bool { return false }
172
- var headless: Bool { return true }
173
- var overrideStatusBar: Bool { return false }
174
- var overrideStatusBarArguments: String? { return nil }
175
- var localizeSimulator: Bool { return false }
176
- var darkMode: Bool? { return nil }
177
- var appIdentifier: String? { return nil }
178
- var addPhotos: [String]? { return nil }
179
- var addVideos: [String]? { return nil }
180
- var htmlTemplate: String? { return nil }
181
- var buildlogPath: String { return "~/Library/Logs/snapshot" }
182
- var clean: Bool { return false }
183
- var testWithoutBuilding: Bool? { return nil }
184
- var configuration: String? { return nil }
185
- var sdk: String? { return nil }
186
- var scheme: String? { return nil }
187
- var numberOfRetries: Int { return 1 }
188
- var stopAfterFirstError: Bool { return false }
189
- var derivedDataPath: String? { return nil }
190
- var resultBundle: Bool { return false }
191
- var testTargetName: String? { return nil }
192
- var namespaceLogFiles: String? { return nil }
193
- var concurrentSimulators: Bool { return true }
194
- var disableSlideToType: Bool { return false }
195
- var clonedSourcePackagesPath: String? { return nil }
196
- var skipPackageDependenciesResolution: Bool { return false }
197
- var disablePackageAutomaticUpdates: Bool { return false }
198
- var packageAuthorizationProvider: String? { return nil }
199
- var testplan: String? { return nil }
200
- var onlyTesting: String? { return nil }
201
- var skipTesting: String? { return nil }
202
- var xcodebuildFormatter: String { return "xcbeautify" }
203
- var xcprettyArgs: String? { return nil }
204
- var disableXcpretty: Bool? { return nil }
205
- var suppressXcodeOutput: Bool? { return nil }
206
- var useSystemScm: Bool { return false }
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.125]
374
+ // FastlaneRunnerAPIVersion [0.9.136]
@@ -1,5 +1,5 @@
1
1
  // SocketClient.swift
2
- // Copyright (c) 2025 FastlaneTools
2
+ // Copyright (c) 2026 FastlaneTools
3
3
 
4
4
  //
5
5
  // ** NOTE **
@@ -51,9 +51,9 @@ class SocketClient: NSObject {
51
51
 
52
52
  private(set) weak var socketDelegate: SocketClientDelegateProtocol?
53
53
 
54
- public private(set) var socketStatus: SocketStatus
54
+ private(set) var socketStatus: SocketStatus
55
55
 
56
- // localhost only, this prevents other computers from connecting
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
@@ -110,13 +110,13 @@ class SocketClient: NSObject {
110
110
  socketDelegate?.connectionsOpened()
111
111
  }
112
112
 
113
- public func send(rubyCommand: RubyCommandable) {
113
+ func send(rubyCommand: RubyCommandable) {
114
114
  verbose(message: "sending: \(rubyCommand.json)")
115
115
  send(string: rubyCommand.json)
116
116
  writeSemaphore.signal()
117
117
  }
118
118
 
119
- public func sendComplete() {
119
+ func sendComplete() {
120
120
  closeSession(sendAbort: true)
121
121
  }
122
122
 
@@ -193,11 +193,11 @@ class SocketClient: NSObject {
193
193
  socketDelegate?.connectionsClosed()
194
194
  }
195
195
 
196
- public func enter() {
196
+ func enter() {
197
197
  dispatchGroup.enter()
198
198
  }
199
199
 
200
- public func leave() {
200
+ func leave() {
201
201
  readSemaphore.signal()
202
202
  writeSemaphore.signal()
203
203
  }
@@ -1,5 +1,5 @@
1
1
  // SocketClientDelegateProtocol.swift
2
- // Copyright (c) 2025 FastlaneTools
2
+ // Copyright (c) 2026 FastlaneTools
3
3
 
4
4
  //
5
5
  // ** NOTE **
@@ -1,5 +1,5 @@
1
1
  // SocketResponse.swift
2
- // Copyright (c) 2025 FastlaneTools
2
+ // Copyright (c) 2026 FastlaneTools
3
3
 
4
4
  //
5
5
  // ** NOTE **
@@ -8,8 +8,7 @@ task(:brew) do
8
8
  raise '`brew` is required. Please install brew. https://brew.sh/' unless system('which brew')
9
9
 
10
10
  puts('➡️ Brew')
11
- sh('brew update')
12
- sh('brew bundle')
11
+ sh('brew bundle check || brew bundle install')
13
12
  end
14
13
 
15
14
  task(:lint) do
@@ -1,5 +1,5 @@
1
1
  // main.swift
2
- // Copyright (c) 2025 FastlaneTools
2
+ // Copyright (c) 2026 FastlaneTools
3
3
 
4
4
  //
5
5
  // ** NOTE **
@@ -1,6 +1,10 @@
1
1
  <?xml version="1.0" encoding="UTF-8"?>
2
2
  <package xmlns="http://apple.com/itunes/importer" version="software5.4">
3
- <software_assets apple_id="<%= @data[:apple_id] %>" app_platform="<%= @data[:platform] %>">
3
+ <software_assets apple_id="<%= @data[:apple_id] %>" app_platform="<%= @data[:platform] %>"
4
+ <%= %Q[bundle_short_version_string="#{@data[:short_version]}"] if @data&.key?(:short_version) %>
5
+ <%= %Q[bundle_version="#{@data[:bundle_version]}"] if @data&.key?(:bundle_version) %>
6
+ <%= %Q[bundle_identifier="#{@data[:app_identifier]}"] if @data&.key?(:app_identifier) %>
7
+ >
4
8
  <asset type="<%= @data[:archive_type] %>">
5
9
  <data_file>
6
10
  <size><%= @data[:file_size] %></size>
@@ -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
 
@@ -77,8 +77,10 @@ module FastlaneCore
77
77
 
78
78
  # Exit status for build command, should be 0 if build succeeded
79
79
  if status != 0
80
+ is_output_already_printed = print_all && !suppress_output
80
81
  o = output.join("\n")
81
- puts(o) unless suppress_output # the user has the right to see the raw output
82
+ puts(o) unless is_output_already_printed
83
+
82
84
  UI.error("Exit status: #{status}")
83
85
  if error
84
86
  error.call(o, status)
@@ -26,8 +26,10 @@ module FastlaneCore
26
26
  spawn_with_popen(command, &block)
27
27
  end
28
28
 
29
- def self.spawn_with_pty(command, &block)
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
@@ -1,4 +1,5 @@
1
1
  require 'open3'
2
+ require 'stringio'
2
3
  require 'zip'
3
4
 
4
5
  require_relative 'core_ext/cfpropertylist'
@@ -46,21 +47,10 @@ module FastlaneCore
46
47
  end
47
48
  return nil if plist_data.nil?
48
49
 
49
- # Creates a temporary directory with a unique name tagged with 'fastlane'
50
- # The directory is deleted automatically at the end of the block
51
- Dir.mktmpdir("fastlane") do |tmp|
52
- # The XML file has to be properly unpacked first
53
- tmp_path = File.join(tmp, "Info.plist")
54
- File.open(tmp_path, 'wb') do |output|
55
- output.write(plist_data)
56
- end
57
- result = CFPropertyList.native_types(CFPropertyList::List.new(file: tmp_path).value)
58
-
59
- if result['CFBundleIdentifier'] || result['CFBundleVersion']
60
- return result
61
- end
50
+ result = CFPropertyList.native_types(CFPropertyList::List.new(data: plist_data).value)
51
+ if result['CFBundleIdentifier'] || result['CFBundleVersion']
52
+ return result
62
53
  end
63
-
64
54
  return nil
65
55
  end
66
56
 
@@ -12,7 +12,21 @@ module FastlaneCore
12
12
 
13
13
  attr_accessor :package_path
14
14
 
15
- def generate(app_id: nil, ipa_path: nil, package_path: nil, platform: nil)
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)
@@ -24,7 +38,10 @@ module FastlaneCore
24
38
  ipa_path: File.basename(ipa_path), # this is only the base name as the ipa is inside the package
25
39
  md5: Digest::MD5.file(ipa_path).hexdigest,
26
40
  archive_type: "bundle",
27
- platform: (platform || "ios") # pass "appletvos" for Apple TV's IPA
41
+ platform: (platform || "ios"), # pass "appletvos" for Apple TV's IPA
42
+ app_identifier: app_identifier,
43
+ short_version: short_version,
44
+ bundle_version: bundle_version
28
45
  }
29
46
 
30
47
  xml_path = File.join(FastlaneCore::ROOT, "lib/assets/XMLTemplate.xml.erb")