fastlane 2.201.2 → 2.204.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (49) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +88 -88
  3. data/deliver/lib/deliver/runner.rb +19 -2
  4. data/deliver/lib/deliver/submit_for_review.rb +25 -3
  5. data/fastlane/lib/fastlane/actions/run_tests.rb +10 -2
  6. data/fastlane/lib/fastlane/actions/trainer.rb +2 -2
  7. data/fastlane/lib/fastlane/actions/verify_build.rb +1 -1
  8. data/fastlane/lib/fastlane/swift_fastlane_api_generator.rb +1 -1
  9. data/fastlane/lib/fastlane/swift_lane_manager.rb +11 -3
  10. data/fastlane/lib/fastlane/swift_runner_upgrader.rb +55 -1
  11. data/fastlane/lib/fastlane/version.rb +1 -1
  12. data/fastlane/swift/Atomic.swift +150 -0
  13. data/fastlane/swift/Deliverfile.swift +1 -1
  14. data/fastlane/swift/DeliverfileProtocol.swift +2 -2
  15. data/fastlane/swift/Fastlane.swift +195 -159
  16. data/fastlane/swift/FastlaneSwiftRunner/FastlaneSwiftRunner.xcodeproj/project.pbxproj +30 -20
  17. data/fastlane/swift/FastlaneSwiftRunner/FastlaneSwiftRunner.xcodeproj/xcshareddata/xcschemes/FastlaneRunner.xcscheme +1 -1
  18. data/fastlane/swift/Gymfile.swift +1 -1
  19. data/fastlane/swift/GymfileProtocol.swift +2 -2
  20. data/fastlane/swift/LaneFileProtocol.swift +1 -1
  21. data/fastlane/swift/Matchfile.swift +1 -1
  22. data/fastlane/swift/MatchfileProtocol.swift +6 -2
  23. data/fastlane/swift/Precheckfile.swift +1 -1
  24. data/fastlane/swift/PrecheckfileProtocol.swift +2 -2
  25. data/fastlane/swift/Runner.swift +9 -1
  26. data/fastlane/swift/Scanfile.swift +1 -1
  27. data/fastlane/swift/ScanfileProtocol.swift +6 -2
  28. data/fastlane/swift/Screengrabfile.swift +1 -1
  29. data/fastlane/swift/ScreengrabfileProtocol.swift +2 -2
  30. data/fastlane/swift/Snapshotfile.swift +1 -1
  31. data/fastlane/swift/SnapshotfileProtocol.swift +2 -2
  32. data/fastlane/swift/SocketClient.swift +5 -1
  33. data/fastlane/swift/SocketClientDelegateProtocol.swift +1 -1
  34. data/fastlane/swift/formatting/Brewfile.lock.json +19 -19
  35. data/fastlane/swift/upgrade_manifest.json +1 -1
  36. data/fastlane_core/lib/fastlane_core/device_manager.rb +5 -1
  37. data/match/lib/match/nuke.rb +33 -9
  38. data/match/lib/match/options.rb +5 -0
  39. data/match/lib/match/storage/s3_storage.rb +3 -3
  40. data/pilot/lib/pilot/build_manager.rb +17 -7
  41. data/pilot/lib/pilot/options.rb +6 -1
  42. data/scan/lib/scan/options.rb +5 -0
  43. data/scan/lib/scan/runner.rb +18 -11
  44. data/scan/lib/scan/test_command_generator.rb +1 -0
  45. data/snapshot/lib/snapshot/simulator_launchers/simulator_launcher_base.rb +5 -1
  46. data/spaceship/lib/spaceship/connect_api/models/.app.rb.swp +0 -0
  47. data/spaceship/lib/spaceship/connect_api/models/app.rb +13 -2
  48. metadata +25 -24
  49. data/snapshot/lib/snapshot/.options.rb.swp +0 -0
@@ -10,6 +10,7 @@
10
10
  0311E387230AC1B20060BB5C /* Plugins.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0311E386230AC1B20060BB5C /* Plugins.swift */; };
11
11
  0311E38B230AC9490060BB5C /* Actions.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0311E38A230AC9490060BB5C /* Actions.swift */; };
12
12
  1257253924B7992C00E04FA3 /* main.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1257253824B7992B00E04FA3 /* main.swift */; };
13
+ 1267C3F42773A43E004DE48A /* Atomic.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1267C3F32773A43E004DE48A /* Atomic.swift */; };
13
14
  12D2EB8D2620D83C00844013 /* OptionalConfigValue.swift in Sources */ = {isa = PBXBuildFile; fileRef = 12D2EB8C2620D83B00844013 /* OptionalConfigValue.swift */; };
14
15
  B302067B1F5E3E9000DE6EBD /* SnapshotfileProtocol.swift in Sources */ = {isa = PBXBuildFile; fileRef = B30206741F5E3E9000DE6EBD /* SnapshotfileProtocol.swift */; };
15
16
  B302067C1F5E3E9000DE6EBD /* GymfileProtocol.swift in Sources */ = {isa = PBXBuildFile; fileRef = B30206751F5E3E9000DE6EBD /* GymfileProtocol.swift */; };
@@ -26,6 +27,7 @@
26
27
  B3BA65AC1F5A269100B34850 /* SocketClientDelegateProtocol.swift in Sources */ = {isa = PBXBuildFile; fileRef = B3BA65A31F5A269100B34850 /* SocketClientDelegateProtocol.swift */; };
27
28
  B3BA65AD1F5A269100B34850 /* SocketResponse.swift in Sources */ = {isa = PBXBuildFile; fileRef = B3BA65A41F5A269100B34850 /* SocketResponse.swift */; };
28
29
  B3BA65AF1F5A2D5C00B34850 /* RunnerArgument.swift in Sources */ = {isa = PBXBuildFile; fileRef = B3BA65AE1F5A2D5C00B34850 /* RunnerArgument.swift */; };
30
+ C0459CAC27261897002CDFB9 /* FastlaneRunner in CopyFiles */ = {isa = PBXBuildFile; fileRef = D556D6A91F6A08F5003108E3 /* FastlaneRunner */; settings = {ATTRIBUTES = (CodeSignOnCopy, ); }; };
29
31
  D55B28C31F6C588300DC42C5 /* Deliverfile.swift in Sources */ = {isa = PBXBuildFile; fileRef = D55B28BC1F6C588300DC42C5 /* Deliverfile.swift */; };
30
32
  D55B28C41F6C588300DC42C5 /* Gymfile.swift in Sources */ = {isa = PBXBuildFile; fileRef = D55B28BD1F6C588300DC42C5 /* Gymfile.swift */; };
31
33
  D55B28C51F6C588300DC42C5 /* Matchfile.swift in Sources */ = {isa = PBXBuildFile; fileRef = D55B28BE1F6C588300DC42C5 /* Matchfile.swift */; };
@@ -40,10 +42,24 @@
40
42
  D5D1DE991FFEE8EA00502A00 /* RubyCommandable.swift in Sources */ = {isa = PBXBuildFile; fileRef = D5D1DE981FFEE8E900502A00 /* RubyCommandable.swift */; };
41
43
  /* End PBXBuildFile section */
42
44
 
45
+ /* Begin PBXCopyFilesBuildPhase section */
46
+ C0459CAB27261886002CDFB9 /* CopyFiles */ = {
47
+ isa = PBXCopyFilesBuildPhase;
48
+ buildActionMask = 2147483647;
49
+ dstPath = $SRCROOT/../..;
50
+ dstSubfolderSpec = 0;
51
+ files = (
52
+ C0459CAC27261897002CDFB9 /* FastlaneRunner in CopyFiles */,
53
+ );
54
+ runOnlyForDeploymentPostprocessing = 0;
55
+ };
56
+ /* End PBXCopyFilesBuildPhase section */
57
+
43
58
  /* Begin PBXFileReference section */
44
59
  0311E386230AC1B20060BB5C /* Plugins.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = Plugins.swift; path = ../Plugins.swift; sourceTree = "<group>"; };
45
60
  0311E38A230AC9490060BB5C /* Actions.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = Actions.swift; path = ../Actions.swift; sourceTree = "<group>"; };
46
61
  1257253824B7992B00E04FA3 /* main.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = main.swift; path = ../main.swift; sourceTree = "<group>"; };
62
+ 1267C3F32773A43E004DE48A /* Atomic.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = Atomic.swift; path = ../Atomic.swift; sourceTree = "<group>"; };
47
63
  12D2EB8C2620D83B00844013 /* OptionalConfigValue.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; name = OptionalConfigValue.swift; path = ../OptionalConfigValue.swift; sourceTree = "<group>"; };
48
64
  B30206741F5E3E9000DE6EBD /* SnapshotfileProtocol.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = SnapshotfileProtocol.swift; path = ../SnapshotfileProtocol.swift; sourceTree = "<group>"; };
49
65
  B30206751F5E3E9000DE6EBD /* GymfileProtocol.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = GymfileProtocol.swift; path = ../GymfileProtocol.swift; sourceTree = "<group>"; };
@@ -121,6 +137,7 @@
121
137
  B3BA65B11F5A325E00B34850 /* Networking */ = {
122
138
  isa = PBXGroup;
123
139
  children = (
140
+ 1267C3F32773A43E004DE48A /* Atomic.swift */,
124
141
  B3144C072005533400470AFE /* README.txt */,
125
142
  D5B8A5B21FFDC49D00536B24 /* ControlCommand.swift */,
126
143
  B3BA65A01F5A269100B34850 /* RubyCommand.swift */,
@@ -181,7 +198,7 @@
181
198
  buildPhases = (
182
199
  B33BAF531F51F8D90001A751 /* Sources */,
183
200
  B33BAF541F51F8D90001A751 /* Frameworks */,
184
- D529C72B1F68BB1C0036536D /* ShellScript */,
201
+ C0459CAB27261886002CDFB9 /* CopyFiles */,
185
202
  );
186
203
  buildRules = (
187
204
  );
@@ -199,7 +216,7 @@
199
216
  isa = PBXProject;
200
217
  attributes = {
201
218
  LastSwiftUpdateCheck = 0830;
202
- LastUpgradeCheck = 0900;
219
+ LastUpgradeCheck = 1300;
203
220
  ORGANIZATIONNAME = "Joshua Liebowitz";
204
221
  TargetAttributes = {
205
222
  B33BAF561F51F8D90001A751 = {
@@ -211,11 +228,11 @@
211
228
  };
212
229
  buildConfigurationList = B33BAF521F51F8D90001A751 /* Build configuration list for PBXProject "FastlaneSwiftRunner" */;
213
230
  compatibilityVersion = "Xcode 3.2";
214
- developmentRegion = English;
231
+ developmentRegion = en;
215
232
  hasScannedForEncodings = 0;
216
233
  knownRegions = (
217
- English,
218
234
  en,
235
+ Base,
219
236
  );
220
237
  mainGroup = B33BAF4E1F51F8D90001A751;
221
238
  productRefGroup = B33BAF4E1F51F8D90001A751;
@@ -227,22 +244,6 @@
227
244
  };
228
245
  /* End PBXProject section */
229
246
 
230
- /* Begin PBXShellScriptBuildPhase section */
231
- D529C72B1F68BB1C0036536D /* ShellScript */ = {
232
- isa = PBXShellScriptBuildPhase;
233
- buildActionMask = 2147483647;
234
- files = (
235
- );
236
- inputPaths = (
237
- );
238
- outputPaths = (
239
- );
240
- runOnlyForDeploymentPostprocessing = 0;
241
- shellPath = /bin/sh;
242
- shellScript = "cd \"${SRCROOT}\"\ncd ../..\ncp \"${TARGET_BUILD_DIR}/${EXECUTABLE_PATH}\" .\n";
243
- };
244
- /* End PBXShellScriptBuildPhase section */
245
-
246
247
  /* Begin PBXSourcesBuildPhase section */
247
248
  B33BAF531F51F8D90001A751 /* Sources */ = {
248
249
  isa = PBXSourcesBuildPhase;
@@ -252,6 +253,7 @@
252
253
  D5D1DE991FFEE8EA00502A00 /* RubyCommandable.swift in Sources */,
253
254
  D55B28C41F6C588300DC42C5 /* Gymfile.swift in Sources */,
254
255
  B302067D1F5E3E9000DE6EBD /* MatchfileProtocol.swift in Sources */,
256
+ 1267C3F42773A43E004DE48A /* Atomic.swift in Sources */,
255
257
  B3BA65AC1F5A269100B34850 /* SocketClientDelegateProtocol.swift in Sources */,
256
258
  B3BA65A71F5A269100B34850 /* LaneFileProtocol.swift in Sources */,
257
259
  D55B28C61F6C588300DC42C5 /* Precheckfile.swift in Sources */,
@@ -299,6 +301,7 @@
299
301
  CLANG_WARN_BOOL_CONVERSION = YES;
300
302
  CLANG_WARN_COMMA = YES;
301
303
  CLANG_WARN_CONSTANT_CONVERSION = YES;
304
+ CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
302
305
  CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
303
306
  CLANG_WARN_DOCUMENTATION_COMMENTS = YES;
304
307
  CLANG_WARN_EMPTY_BODY = YES;
@@ -306,8 +309,10 @@
306
309
  CLANG_WARN_INFINITE_RECURSION = YES;
307
310
  CLANG_WARN_INT_CONVERSION = YES;
308
311
  CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
312
+ CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
309
313
  CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
310
314
  CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
315
+ CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES;
311
316
  CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
312
317
  CLANG_WARN_STRICT_PROTOTYPES = YES;
313
318
  CLANG_WARN_SUSPICIOUS_MOVE = YES;
@@ -355,6 +360,7 @@
355
360
  CLANG_WARN_BOOL_CONVERSION = YES;
356
361
  CLANG_WARN_COMMA = YES;
357
362
  CLANG_WARN_CONSTANT_CONVERSION = YES;
363
+ CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
358
364
  CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
359
365
  CLANG_WARN_DOCUMENTATION_COMMENTS = YES;
360
366
  CLANG_WARN_EMPTY_BODY = YES;
@@ -362,8 +368,10 @@
362
368
  CLANG_WARN_INFINITE_RECURSION = YES;
363
369
  CLANG_WARN_INT_CONVERSION = YES;
364
370
  CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
371
+ CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
365
372
  CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
366
373
  CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
374
+ CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES;
367
375
  CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
368
376
  CLANG_WARN_STRICT_PROTOTYPES = YES;
369
377
  CLANG_WARN_SUSPICIOUS_MOVE = YES;
@@ -394,6 +402,7 @@
394
402
  isa = XCBuildConfiguration;
395
403
  buildSettings = {
396
404
  CLANG_ENABLE_MODULES = YES;
405
+ CODE_SIGN_IDENTITY = "-";
397
406
  LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/../Frameworks @loader_path/../Frameworks";
398
407
  PRODUCT_NAME = "$(TARGET_NAME)";
399
408
  SWIFT_OPTIMIZATION_LEVEL = "-Onone";
@@ -405,6 +414,7 @@
405
414
  isa = XCBuildConfiguration;
406
415
  buildSettings = {
407
416
  CLANG_ENABLE_MODULES = YES;
417
+ CODE_SIGN_IDENTITY = "-";
408
418
  LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/../Frameworks @loader_path/../Frameworks";
409
419
  PRODUCT_NAME = "$(TARGET_NAME)";
410
420
  SWIFT_VERSION = 4.0;
@@ -1,6 +1,6 @@
1
1
  <?xml version="1.0" encoding="UTF-8"?>
2
2
  <Scheme
3
- LastUpgradeVersion = "0900"
3
+ LastUpgradeVersion = "1300"
4
4
  version = "1.3">
5
5
  <BuildAction
6
6
  parallelizeBuildables = "YES"
@@ -17,4 +17,4 @@ public class Gymfile: GymfileProtocol {
17
17
  // during the `init` process, and you won't see this message
18
18
  }
19
19
 
20
- // Generated with fastlane 2.201.2
20
+ // Generated with fastlane 2.204.1
@@ -1,7 +1,7 @@
1
1
  // GymfileProtocol.swift
2
2
  // Copyright (c) 2022 FastlaneTools
3
3
 
4
- public protocol GymfileProtocol: class {
4
+ public protocol GymfileProtocol: AnyObject {
5
5
  /// Path to the workspace file
6
6
  var workspace: String? { get }
7
7
 
@@ -204,4 +204,4 @@ public extension GymfileProtocol {
204
204
 
205
205
  // Please don't remove the lines below
206
206
  // They are used to detect outdated files
207
- // FastlaneRunnerAPIVersion [0.9.96]
207
+ // FastlaneRunnerAPIVersion [0.9.100]
@@ -10,7 +10,7 @@
10
10
 
11
11
  import Foundation
12
12
 
13
- public protocol LaneFileProtocol: class {
13
+ public protocol LaneFileProtocol: AnyObject {
14
14
  var fastlaneVersion: String { get }
15
15
  static func runLane(from fastfile: LaneFile?, named lane: String, with parameters: [String: String]) -> Bool
16
16
 
@@ -17,4 +17,4 @@ public class Matchfile: MatchfileProtocol {
17
17
  // during the `init` process, and you won't see this message
18
18
  }
19
19
 
20
- // Generated with fastlane 2.201.2
20
+ // Generated with fastlane 2.204.1
@@ -1,7 +1,7 @@
1
1
  // MatchfileProtocol.swift
2
2
  // Copyright (c) 2022 FastlaneTools
3
3
 
4
- public protocol MatchfileProtocol: class {
4
+ public protocol MatchfileProtocol: AnyObject {
5
5
  /// Define the profile type, can be appstore, adhoc, development, enterprise, developer_id, mac_installer_distribution
6
6
  var type: String { get }
7
7
 
@@ -110,6 +110,9 @@ public protocol MatchfileProtocol: class {
110
110
  /// Disables confirmation prompts during nuke, answering them with yes
111
111
  var skipConfirmation: Bool { get }
112
112
 
113
+ /// Remove certs from repository during nuke without revoking them on the developer portal
114
+ var safeRemoveCerts: Bool { get }
115
+
113
116
  /// Skip generation of a README.md for the created git repository
114
117
  var skipDocs: Bool { get }
115
118
 
@@ -178,6 +181,7 @@ public extension MatchfileProtocol {
178
181
  var includeAllCertificates: Bool { return false }
179
182
  var forceForNewCertificates: Bool { return false }
180
183
  var skipConfirmation: Bool { return false }
184
+ var safeRemoveCerts: Bool { return false }
181
185
  var skipDocs: Bool { return false }
182
186
  var platform: String { return "ios" }
183
187
  var deriveCatalystAppIdentifier: Bool { return false }
@@ -192,4 +196,4 @@ public extension MatchfileProtocol {
192
196
 
193
197
  // Please don't remove the lines below
194
198
  // They are used to detect outdated files
195
- // FastlaneRunnerAPIVersion [0.9.90]
199
+ // FastlaneRunnerAPIVersion [0.9.94]
@@ -17,4 +17,4 @@ public class Precheckfile: PrecheckfileProtocol {
17
17
  // during the `init` process, and you won't see this message
18
18
  }
19
19
 
20
- // Generated with fastlane 2.201.2
20
+ // Generated with fastlane 2.204.1
@@ -1,7 +1,7 @@
1
1
  // PrecheckfileProtocol.swift
2
2
  // Copyright (c) 2022 FastlaneTools
3
3
 
4
- public protocol PrecheckfileProtocol: class {
4
+ public protocol PrecheckfileProtocol: AnyObject {
5
5
  /// Path to your App Store Connect API Key JSON file (https://docs.fastlane.tools/app-store-connect-api/#using-fastlane-api-key-json-file)
6
6
  var apiKeyPath: String? { get }
7
7
 
@@ -52,4 +52,4 @@ public extension PrecheckfileProtocol {
52
52
 
53
53
  // Please don't remove the lines below
54
54
  // They are used to detect outdated files
55
- // FastlaneRunnerAPIVersion [0.9.89]
55
+ // FastlaneRunnerAPIVersion [0.9.93]
@@ -25,7 +25,13 @@ class Runner {
25
25
  private var returnValue: String? // lol, so safe
26
26
  private var currentlyExecutingCommand: RubyCommandable?
27
27
  private var shouldLeaveDispatchGroupDuringDisconnect = false
28
- private var executeNext: [String: Bool] = [:]
28
+ private var executeNext: AtomicDictionary<String, Bool> = {
29
+ if #available(macOS 10.12, *) {
30
+ return UnfairAtomicDictionary<String, Bool>()
31
+ } else {
32
+ return OSSPinAtomicDictionary<String, Bool>()
33
+ }
34
+ }()
29
35
 
30
36
  func executeCommand(_ command: RubyCommandable) -> String {
31
37
  dispatchGroup.enter()
@@ -261,6 +267,8 @@ private extension DispatchTimeInterval {
261
267
  result = TimeInterval(value) * 0.000_000_001
262
268
  case .never:
263
269
  fatalError()
270
+ @unknown default:
271
+ fatalError()
264
272
  }
265
273
  return result
266
274
  }
@@ -17,4 +17,4 @@ public class Scanfile: ScanfileProtocol {
17
17
  // during the `init` process, and you won't see this message
18
18
  }
19
19
 
20
- // Generated with fastlane 2.201.2
20
+ // Generated with fastlane 2.204.1
@@ -1,7 +1,7 @@
1
1
  // ScanfileProtocol.swift
2
2
  // Copyright (c) 2022 FastlaneTools
3
3
 
4
- public protocol ScanfileProtocol: class {
4
+ public protocol ScanfileProtocol: AnyObject {
5
5
  /// Path to the workspace file
6
6
  var workspace: String? { get }
7
7
 
@@ -134,6 +134,9 @@ public protocol ScanfileProtocol: class {
134
134
  /// Generate the json compilation database with clang naming convention (compile_commands.json)
135
135
  var useClangReportName: Bool { get }
136
136
 
137
+ /// Optionally override the per-target setting in the scheme for running tests in parallel. Equivalent to -parallel-testing-enabled
138
+ var parallelTesting: Bool? { get }
139
+
137
140
  /// Specify the exact number of test runners that will be spawned during parallel testing. Equivalent to -parallel-testing-worker-count
138
141
  var concurrentWorkers: Int? { get }
139
142
 
@@ -273,6 +276,7 @@ public extension ScanfileProtocol {
273
276
  var outputXctestrun: Bool { return false }
274
277
  var resultBundle: Bool { return false }
275
278
  var useClangReportName: Bool { return false }
279
+ var parallelTesting: Bool? { return nil }
276
280
  var concurrentWorkers: Int? { return nil }
277
281
  var maxConcurrentSimulators: Int? { return nil }
278
282
  var disableConcurrentTesting: Bool { return false }
@@ -308,4 +312,4 @@ public extension ScanfileProtocol {
308
312
 
309
313
  // Please don't remove the lines below
310
314
  // They are used to detect outdated files
311
- // FastlaneRunnerAPIVersion [0.9.101]
315
+ // FastlaneRunnerAPIVersion [0.9.105]
@@ -17,4 +17,4 @@ public class Screengrabfile: ScreengrabfileProtocol {
17
17
  // during the `init` process, and you won't see this message
18
18
  }
19
19
 
20
- // Generated with fastlane 2.201.2
20
+ // Generated with fastlane 2.204.1
@@ -1,7 +1,7 @@
1
1
  // ScreengrabfileProtocol.swift
2
2
  // Copyright (c) 2022 FastlaneTools
3
3
 
4
- public protocol ScreengrabfileProtocol: class {
4
+ public protocol ScreengrabfileProtocol: AnyObject {
5
5
  /// Path to the root of your Android SDK installation, e.g. ~/tools/android-sdk-macosx
6
6
  var androidHome: String? { get }
7
7
 
@@ -96,4 +96,4 @@ public extension ScreengrabfileProtocol {
96
96
 
97
97
  // Please don't remove the lines below
98
98
  // They are used to detect outdated files
99
- // FastlaneRunnerAPIVersion [0.9.91]
99
+ // FastlaneRunnerAPIVersion [0.9.95]
@@ -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.201.2
20
+ // Generated with fastlane 2.204.1
@@ -1,7 +1,7 @@
1
1
  // SnapshotfileProtocol.swift
2
2
  // Copyright (c) 2022 FastlaneTools
3
3
 
4
- public protocol SnapshotfileProtocol: class {
4
+ public protocol SnapshotfileProtocol: AnyObject {
5
5
  /// Path the workspace file
6
6
  var workspace: String? { get }
7
7
 
@@ -204,4 +204,4 @@ public extension SnapshotfileProtocol {
204
204
 
205
205
  // Please don't remove the lines below
206
206
  // They are used to detect outdated files
207
- // FastlaneRunnerAPIVersion [0.9.85]
207
+ // FastlaneRunnerAPIVersion [0.9.89]
@@ -144,7 +144,11 @@ class SocketClient: NSObject {
144
144
 
145
145
  private func sendThroughQueue(string: String) {
146
146
  let data = string.data(using: .utf8)!
147
- _ = data.withUnsafeBytes { self.outputStream.write($0, maxLength: data.count) }
147
+ data.withUnsafeBytes { (buffer: UnsafeRawBufferPointer) in
148
+ if let buffer = buffer.baseAddress {
149
+ self.outputStream.write(buffer.assumingMemoryBound(to: UInt8.self), maxLength: data.count)
150
+ }
151
+ }
148
152
  }
149
153
 
150
154
  private func privateSend(string: String) {
@@ -10,7 +10,7 @@
10
10
 
11
11
  import Foundation
12
12
 
13
- protocol SocketClientDelegateProtocol: class {
13
+ protocol SocketClientDelegateProtocol: AnyObject {
14
14
  func connectionsOpened()
15
15
  func connectionsClosed()
16
16
  func commandExecuted(serverResponse: SocketClientResponse, completion: (SocketClient) -> Void)
@@ -2,35 +2,35 @@
2
2
  "entries": {
3
3
  "brew": {
4
4
  "swiftformat": {
5
- "version": "0.49.2",
5
+ "version": "0.49.3",
6
6
  "bottle": {
7
7
  "rebuild": 0,
8
8
  "root_url": "https://ghcr.io/v2/homebrew/core",
9
9
  "files": {
10
10
  "arm64_monterey": {
11
11
  "cellar": ":any_skip_relocation",
12
- "url": "https://ghcr.io/v2/homebrew/core/swiftformat/blobs/sha256:2279db95259ddbc7ad83e47f5bbf8c308db55b74d5464ac79a027bd33138b023",
13
- "sha256": "2279db95259ddbc7ad83e47f5bbf8c308db55b74d5464ac79a027bd33138b023"
12
+ "url": "https://ghcr.io/v2/homebrew/core/swiftformat/blobs/sha256:3fd0427fdb74e0cc88da322ce2b2cd0b9e021fd286f34978b01b0bb62f9e8529",
13
+ "sha256": "3fd0427fdb74e0cc88da322ce2b2cd0b9e021fd286f34978b01b0bb62f9e8529"
14
14
  },
15
15
  "arm64_big_sur": {
16
16
  "cellar": ":any_skip_relocation",
17
- "url": "https://ghcr.io/v2/homebrew/core/swiftformat/blobs/sha256:2f6bddbef7d750d6ed546ed5decd4d54d439f16009491bdb4e4999c99d877bcf",
18
- "sha256": "2f6bddbef7d750d6ed546ed5decd4d54d439f16009491bdb4e4999c99d877bcf"
17
+ "url": "https://ghcr.io/v2/homebrew/core/swiftformat/blobs/sha256:cc99c52385e32a1d2bb42625a535cac9835313e65ba84776cbe2ad49ae41167d",
18
+ "sha256": "cc99c52385e32a1d2bb42625a535cac9835313e65ba84776cbe2ad49ae41167d"
19
19
  },
20
20
  "monterey": {
21
21
  "cellar": ":any_skip_relocation",
22
- "url": "https://ghcr.io/v2/homebrew/core/swiftformat/blobs/sha256:190bf822a188ec8e8be754de2fcd34166ffb07bbd40d67385653d898a251b167",
23
- "sha256": "190bf822a188ec8e8be754de2fcd34166ffb07bbd40d67385653d898a251b167"
22
+ "url": "https://ghcr.io/v2/homebrew/core/swiftformat/blobs/sha256:39877fc1115e6f15d20a76c30ddbb23d45f52fb95eb81382c4f4abe2b98eb03b",
23
+ "sha256": "39877fc1115e6f15d20a76c30ddbb23d45f52fb95eb81382c4f4abe2b98eb03b"
24
24
  },
25
25
  "big_sur": {
26
26
  "cellar": ":any_skip_relocation",
27
- "url": "https://ghcr.io/v2/homebrew/core/swiftformat/blobs/sha256:fe294ff0fa69548876a70ef7aaf30b7221a43adc9f75f7c157c6f881089da6eb",
28
- "sha256": "fe294ff0fa69548876a70ef7aaf30b7221a43adc9f75f7c157c6f881089da6eb"
27
+ "url": "https://ghcr.io/v2/homebrew/core/swiftformat/blobs/sha256:ead4633c1ec372b7cc6995dba2d3352691b4086f501e0346629072873bccef99",
28
+ "sha256": "ead4633c1ec372b7cc6995dba2d3352691b4086f501e0346629072873bccef99"
29
29
  },
30
30
  "catalina": {
31
31
  "cellar": ":any_skip_relocation",
32
- "url": "https://ghcr.io/v2/homebrew/core/swiftformat/blobs/sha256:2a174bf9c47a070b1fcaa32c066cd7c82604fc428db952f11c9bf1e4448c567a",
33
- "sha256": "2a174bf9c47a070b1fcaa32c066cd7c82604fc428db952f11c9bf1e4448c567a"
32
+ "url": "https://ghcr.io/v2/homebrew/core/swiftformat/blobs/sha256:359cd4f2c3eea7c28f485db06dc955d8b27eabab340420a0c52931004a3ee3e7",
33
+ "sha256": "359cd4f2c3eea7c28f485db06dc955d8b27eabab340420a0c52931004a3ee3e7"
34
34
  }
35
35
  }
36
36
  }
@@ -48,17 +48,17 @@
48
48
  "macOS": "10.15.7"
49
49
  },
50
50
  "big_sur": {
51
- "HOMEBREW_VERSION": "3.2.17",
52
- "HOMEBREW_PREFIX": "/opt/homebrew",
53
- "Homebrew/homebrew-core": "d975bb4c6f50e8cafd6df9fc7f2ebf04d22ffa41",
54
- "CLT": "13.0.0.0.1.1630607135",
55
- "Xcode": "13.0",
56
- "macOS": "11.6"
51
+ "HOMEBREW_VERSION": "3.3.9-34-g2e92128",
52
+ "HOMEBREW_PREFIX": "/usr/local",
53
+ "Homebrew/homebrew-core": "c28163ed56d6e54f2f71ecf678d4b4d33bac23a5",
54
+ "CLT": "12.4.0.0.1.1610135815",
55
+ "Xcode": "12.5",
56
+ "macOS": "11.0.1"
57
57
  },
58
58
  "monterey": {
59
- "HOMEBREW_VERSION": "3.3.12-10-g129e5bb",
59
+ "HOMEBREW_VERSION": "3.3.13-44-g8e97f60",
60
60
  "HOMEBREW_PREFIX": "/opt/homebrew",
61
- "Homebrew/homebrew-core": "ee89c86d2e1e18edd19974ae766264a4dcd1246d",
61
+ "Homebrew/homebrew-core": "9ccc327241b7ecea5f2266fc44c754858659298e",
62
62
  "CLT": "13.2.0.0.1.1638488800",
63
63
  "Xcode": "13.2.1",
64
64
  "macOS": "12.0.1"
@@ -1 +1 @@
1
- {"Actions.swift":"Autogenerated API","Fastlane.swift":"Autogenerated API","DeliverfileProtocol.swift":"Autogenerated API","GymfileProtocol.swift":"Autogenerated API","MatchfileProtocol.swift":"Autogenerated API","Plugins.swift":"Autogenerated API","PrecheckfileProtocol.swift":"Autogenerated API","ScanfileProtocol.swift":"Autogenerated API","ScreengrabfileProtocol.swift":"Autogenerated API","SnapshotfileProtocol.swift":"Autogenerated API","LaneFileProtocol.swift":"Fastfile Components","OptionalConfigValue.swift":"Fastfile Components","ControlCommand.swift":"Networking","RubyCommand.swift":"Networking","RubyCommandable.swift":"Networking","Runner.swift":"Networking","SocketClient.swift":"Networking","SocketClientDelegateProtocol.swift":"Networking","SocketResponse.swift":"Networking","main.swift":"Runner Code","ArgumentProcessor.swift":"Runner Code","RunnerArgument.swift":"Runner Code"}
1
+ {"Actions.swift":"Autogenerated API","Fastlane.swift":"Autogenerated API","DeliverfileProtocol.swift":"Autogenerated API","GymfileProtocol.swift":"Autogenerated API","MatchfileProtocol.swift":"Autogenerated API","Plugins.swift":"Autogenerated API","PrecheckfileProtocol.swift":"Autogenerated API","ScanfileProtocol.swift":"Autogenerated API","ScreengrabfileProtocol.swift":"Autogenerated API","SnapshotfileProtocol.swift":"Autogenerated API","LaneFileProtocol.swift":"Fastfile Components","OptionalConfigValue.swift":"Fastfile Components","Atomic.swift":"Networking","ControlCommand.swift":"Networking","RubyCommand.swift":"Networking","RubyCommandable.swift":"Networking","Runner.swift":"Networking","SocketClient.swift":"Networking","SocketClientDelegateProtocol.swift":"Networking","SocketResponse.swift":"Networking","main.swift":"Runner Code","ArgumentProcessor.swift":"Runner Code","RunnerArgument.swift":"Runner Code"}
@@ -320,7 +320,11 @@ module FastlaneCore
320
320
  UI.verbose("Uninstalling app '#{app_identifier}' from #{device_type}...")
321
321
 
322
322
  UI.message("Launch Simulator #{device_type}")
323
- Helper.backticks("xcrun instruments -w #{device_udid} &> /dev/null")
323
+ if FastlaneCore::Helper.xcode_at_least?("13")
324
+ Helper.backticks("open -a Simulator.app --args -CurrentDeviceUDID #{device_udid} &> /dev/null")
325
+ else
326
+ Helper.backticks("xcrun instruments -w #{device_udid} &> /dev/null")
327
+ end
324
328
 
325
329
  UI.message("Uninstall application #{app_identifier}")
326
330
  Helper.backticks("xcrun simctl uninstall #{device_udid} #{app_identifier} &> /dev/null")
@@ -18,6 +18,7 @@ module Match
18
18
  attr_accessor :params
19
19
  attr_accessor :type
20
20
 
21
+ attr_accessor :safe_remove_certs
21
22
  attr_accessor :certs
22
23
  attr_accessor :profiles
23
24
  attr_accessor :files
@@ -70,6 +71,8 @@ module Match
70
71
  hide_keys: [:app_identifier],
71
72
  title: "Summary for match nuke #{Fastlane::VERSION}")
72
73
 
74
+ self.safe_remove_certs = params[:safe_remove_certs] || false
75
+
73
76
  prepare_list
74
77
  filter_by_cert
75
78
  print_tables
@@ -81,11 +84,13 @@ module Match
81
84
  if (self.certs + self.profiles + self.files).count > 0
82
85
  unless params[:skip_confirmation]
83
86
  UI.error("---")
84
- UI.error("Are you sure you want to completely delete and revoke all the")
85
- UI.error("certificates and provisioning profiles listed above? (y/n)")
87
+ remove_or_revoke_message = self.safe_remove_certs ? "remove" : "revoke"
88
+ UI.error("Are you sure you want to completely delete and #{remove_or_revoke_message} all the")
89
+ UI.error("certificates and delete provisioning profiles listed above? (y/n)")
86
90
  UI.error("Warning: By nuking distribution, both App Store and Ad Hoc profiles will be deleted") if type == "distribution"
87
91
  UI.error("Warning: The :app_identifier value will be ignored - this will delete all profiles for all your apps!") if had_app_identifier
88
92
  UI.error("---")
93
+ print_safe_remove_certs_hint
89
94
  end
90
95
  if params[:skip_confirmation] || UI.confirm("Do you really want to nuke everything listed above?")
91
96
  nuke_it_now!
@@ -119,10 +124,12 @@ module Match
119
124
  if Spaceship::ConnectAPI.client.in_house? && (type == "distribution" || type == "enterprise")
120
125
  UI.error("---")
121
126
  UI.error("⚠️ Warning: This seems to be an Enterprise account!")
122
- UI.error("By nuking your account's distribution, all your apps deployed via ad-hoc will stop working!") if type == "distribution"
123
- UI.error("By nuking your account's enterprise, all your in-house apps will stop working!") if type == "enterprise"
127
+ unless self.safe_remove_certs
128
+ UI.error("By nuking your account's distribution, all your apps deployed via ad-hoc will stop working!") if type == "distribution"
129
+ UI.error("By nuking your account's enterprise, all your in-house apps will stop working!") if type == "enterprise"
130
+ end
124
131
  UI.error("---")
125
-
132
+ print_safe_remove_certs_hint
126
133
  UI.user_error!("Enterprise account nuke cancelled") unless UI.confirm("Do you really want to nuke your Enterprise account?")
127
134
  end
128
135
  end
@@ -168,7 +175,7 @@ module Match
168
175
  keys += self.storage.list_files(file_name: ct.to_s, file_ext: "p12")
169
176
  end
170
177
 
171
- # Finds all the iOS and macOS profofiles in the file storage
178
+ # Finds all the iOS and macOS profiles in the file storage
172
179
  profiles = []
173
180
  prov_types.each do |prov_type|
174
181
  profiles += self.storage.list_files(file_name: prov_type.to_s, file_ext: "mobileprovision")
@@ -190,7 +197,7 @@ module Match
190
197
  [i + 1, cert.name, cert.id, cert.class.to_s.split("::").last, cert_expiration]
191
198
  end
192
199
  puts(Terminal::Table.new({
193
- title: "Certificates that can be revoked".green,
200
+ title: "Certificates that can be #{removed_or_revoked_message}".green,
194
201
  headings: ["Option", "Name", "ID", "Type", "Expires"],
195
202
  rows: FastlaneCore::PrintTable.transform_output(rows)
196
203
  }))
@@ -259,7 +266,7 @@ module Match
259
266
  [cert.name, cert.id, cert.class.to_s.split("::").last, cert_expiration]
260
267
  end
261
268
  puts(Terminal::Table.new({
262
- title: "Certificates that are going to be revoked".green,
269
+ title: "Certificates that are going to be #{removed_or_revoked_message}".green,
263
270
  headings: ["Name", "ID", "Type", "Expires"],
264
271
  rows: FastlaneCore::PrintTable.transform_output(rows)
265
272
  }))
@@ -313,8 +320,14 @@ module Match
313
320
  UI.success("Successfully deleted profile")
314
321
  end
315
322
 
316
- UI.header("Revoking #{self.certs.count} certificates...") unless self.certs.count == 0
323
+ removing_or_revoking_message = self.safe_remove_certs ? "Removing" : "Revoking"
324
+ UI.header("#{removing_or_revoking_message} #{self.certs.count} certificates...") unless self.certs.count == 0
317
325
  self.certs.each do |cert|
326
+ if self.safe_remove_certs
327
+ UI.message("Certificate '#{cert.name}' (#{cert.id}) will be removed from repository without revoking it")
328
+ next
329
+ end
330
+
318
331
  UI.message("Revoking certificate '#{cert.name}' (#{cert.id})...")
319
332
  begin
320
333
  cert.delete!
@@ -427,6 +440,17 @@ module Match
427
440
  raise "Unknown provisioning type '#{prov_type}'"
428
441
  end
429
442
  end
443
+
444
+ # Helpers for `safe_remove_certs`
445
+ def print_safe_remove_certs_hint
446
+ return if self.safe_remove_certs
447
+ UI.important("Hint: You can use --safe_remove_certs option to remove certificates")
448
+ UI.important("from repository without revoking them.")
449
+ end
450
+
451
+ def removed_or_revoked_message
452
+ self.safe_remove_certs ? "removed" : "revoked"
453
+ end
430
454
  end
431
455
  # rubocop:disable Metrics/ClassLength
432
456
  end
@@ -257,6 +257,11 @@ module Match
257
257
  description: "Disables confirmation prompts during nuke, answering them with yes",
258
258
  type: Boolean,
259
259
  default_value: false),
260
+ FastlaneCore::ConfigItem.new(key: :safe_remove_certs,
261
+ env_name: "MATCH_SAFE_REMOVE_CERTS",
262
+ description: "Remove certs from repository during nuke without revoking them on the developer portal",
263
+ type: Boolean,
264
+ default_value: false),
260
265
  FastlaneCore::ConfigItem.new(key: :skip_docs,
261
266
  env_name: "MATCH_SKIP_DOCS",
262
267
  description: "Skip generation of a README.md for the created git repository",
@@ -168,10 +168,10 @@ module Match
168
168
  private
169
169
 
170
170
  def s3_object_path(file_name)
171
- santized = sanitize_file_name(file_name)
172
- return santized if santized.start_with?(s3_object_prefix)
171
+ sanitized = sanitize_file_name(file_name)
172
+ return sanitized if sanitized.start_with?(s3_object_prefix)
173
173
 
174
- s3_object_prefix + santized
174
+ s3_object_prefix + sanitized
175
175
  end
176
176
 
177
177
  def strip_s3_object_prefix(object_path)