fastlane 2.201.1 → 2.204.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.md +92 -92
- data/deliver/lib/deliver/runner.rb +19 -2
- data/deliver/lib/deliver/submit_for_review.rb +25 -3
- data/fastlane/lib/fastlane/actions/run_tests.rb +10 -2
- data/fastlane/lib/fastlane/actions/trainer.rb +2 -2
- data/fastlane/lib/fastlane/actions/verify_build.rb +1 -1
- data/fastlane/lib/fastlane/swift_fastlane_api_generator.rb +1 -1
- data/fastlane/lib/fastlane/swift_lane_manager.rb +11 -3
- data/fastlane/lib/fastlane/swift_runner_upgrader.rb +55 -1
- data/fastlane/lib/fastlane/version.rb +1 -1
- data/fastlane/swift/Atomic.swift +150 -0
- data/fastlane/swift/Deliverfile.swift +1 -1
- data/fastlane/swift/DeliverfileProtocol.swift +2 -2
- data/fastlane/swift/Fastlane.swift +197 -161
- data/fastlane/swift/FastlaneSwiftRunner/FastlaneSwiftRunner.xcodeproj/project.pbxproj +30 -20
- data/fastlane/swift/FastlaneSwiftRunner/FastlaneSwiftRunner.xcodeproj/xcshareddata/xcschemes/FastlaneRunner.xcscheme +1 -1
- data/fastlane/swift/Gymfile.swift +1 -1
- data/fastlane/swift/GymfileProtocol.swift +2 -2
- data/fastlane/swift/LaneFileProtocol.swift +1 -1
- data/fastlane/swift/Matchfile.swift +1 -1
- data/fastlane/swift/MatchfileProtocol.swift +6 -2
- data/fastlane/swift/Precheckfile.swift +1 -1
- data/fastlane/swift/PrecheckfileProtocol.swift +2 -2
- data/fastlane/swift/Runner.swift +9 -1
- data/fastlane/swift/Scanfile.swift +1 -1
- data/fastlane/swift/ScanfileProtocol.swift +7 -3
- data/fastlane/swift/Screengrabfile.swift +1 -1
- data/fastlane/swift/ScreengrabfileProtocol.swift +2 -2
- data/fastlane/swift/Snapshotfile.swift +1 -1
- data/fastlane/swift/SnapshotfileProtocol.swift +2 -2
- data/fastlane/swift/SocketClient.swift +5 -1
- data/fastlane/swift/SocketClientDelegateProtocol.swift +1 -1
- data/fastlane/swift/formatting/Brewfile.lock.json +19 -19
- data/fastlane/swift/upgrade_manifest.json +1 -1
- data/fastlane_core/lib/fastlane_core/device_manager.rb +5 -1
- data/match/lib/match/nuke.rb +33 -9
- data/match/lib/match/options.rb +5 -0
- data/match/lib/match/storage/s3_storage.rb +3 -3
- data/pilot/lib/pilot/build_manager.rb +17 -7
- data/pilot/lib/pilot/options.rb +6 -1
- data/scan/lib/scan/options.rb +6 -1
- data/scan/lib/scan/runner.rb +40 -13
- data/scan/lib/scan/test_command_generator.rb +8 -3
- data/snapshot/lib/snapshot/simulator_launchers/simulator_launcher_base.rb +5 -1
- data/spaceship/lib/spaceship/connect_api/models/app.rb +2 -1
- metadata +24 -27
- data/fastlane/lib/fastlane/actions/.run_tests.rb.swp +0 -0
- data/scan/lib/scan/.error_handler.rb.swp +0 -0
- data/scan/lib/scan/.runner.rb.swp +0 -0
- data/trainer/lib/trainer/.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
|
-
|
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 =
|
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 =
|
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,7 +1,7 @@
|
|
1
1
|
// GymfileProtocol.swift
|
2
2
|
// Copyright (c) 2022 FastlaneTools
|
3
3
|
|
4
|
-
public protocol GymfileProtocol:
|
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.
|
207
|
+
// FastlaneRunnerAPIVersion [0.9.99]
|
@@ -10,7 +10,7 @@
|
|
10
10
|
|
11
11
|
import Foundation
|
12
12
|
|
13
|
-
public protocol LaneFileProtocol:
|
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
|
|
@@ -1,7 +1,7 @@
|
|
1
1
|
// MatchfileProtocol.swift
|
2
2
|
// Copyright (c) 2022 FastlaneTools
|
3
3
|
|
4
|
-
public protocol MatchfileProtocol:
|
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.
|
199
|
+
// FastlaneRunnerAPIVersion [0.9.93]
|
@@ -1,7 +1,7 @@
|
|
1
1
|
// PrecheckfileProtocol.swift
|
2
2
|
// Copyright (c) 2022 FastlaneTools
|
3
3
|
|
4
|
-
public protocol PrecheckfileProtocol:
|
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.
|
55
|
+
// FastlaneRunnerAPIVersion [0.9.92]
|
data/fastlane/swift/Runner.swift
CHANGED
@@ -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:
|
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
|
}
|
@@ -1,7 +1,7 @@
|
|
1
1
|
// ScanfileProtocol.swift
|
2
2
|
// Copyright (c) 2022 FastlaneTools
|
3
3
|
|
4
|
-
public protocol ScanfileProtocol:
|
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
|
|
@@ -221,7 +224,7 @@ public protocol ScanfileProtocol: class {
|
|
221
224
|
/// Lets xcodebuild use system's scm configuration
|
222
225
|
var useSystemScm: Bool { get }
|
223
226
|
|
224
|
-
/// The number of times a test can fail
|
227
|
+
/// The number of times a test can fail
|
225
228
|
var numberOfRetries: Int { get }
|
226
229
|
|
227
230
|
/// Should this step stop the build if the tests fail? Set this to false if you're using trainer
|
@@ -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.
|
315
|
+
// FastlaneRunnerAPIVersion [0.9.104]
|
@@ -1,7 +1,7 @@
|
|
1
1
|
// ScreengrabfileProtocol.swift
|
2
2
|
// Copyright (c) 2022 FastlaneTools
|
3
3
|
|
4
|
-
public protocol ScreengrabfileProtocol:
|
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.
|
99
|
+
// FastlaneRunnerAPIVersion [0.9.94]
|
@@ -1,7 +1,7 @@
|
|
1
1
|
// SnapshotfileProtocol.swift
|
2
2
|
// Copyright (c) 2022 FastlaneTools
|
3
3
|
|
4
|
-
public protocol SnapshotfileProtocol:
|
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.
|
207
|
+
// FastlaneRunnerAPIVersion [0.9.88]
|
@@ -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
|
-
|
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:
|
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.
|
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:
|
13
|
-
"sha256": "
|
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:
|
18
|
-
"sha256": "
|
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:
|
23
|
-
"sha256": "
|
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:
|
28
|
-
"sha256": "
|
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:
|
33
|
-
"sha256": "
|
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.
|
52
|
-
"HOMEBREW_PREFIX": "/
|
53
|
-
"Homebrew/homebrew-core": "
|
54
|
-
"CLT": "
|
55
|
-
"Xcode": "
|
56
|
-
"macOS": "11.
|
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.
|
59
|
+
"HOMEBREW_VERSION": "3.3.13-35-gd36b61d",
|
60
60
|
"HOMEBREW_PREFIX": "/opt/homebrew",
|
61
|
-
"Homebrew/homebrew-core": "
|
61
|
+
"Homebrew/homebrew-core": "caf7a353223f571135abd6bee8a33f775f4fbe0f",
|
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.
|
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")
|
data/match/lib/match/nuke.rb
CHANGED
@@ -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
|
-
|
85
|
-
UI.error("
|
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
|
-
|
123
|
-
|
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
|
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
|
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
|
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
|
-
|
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
|
data/match/lib/match/options.rb
CHANGED
@@ -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
|
-
|
172
|
-
return
|
171
|
+
sanitized = sanitize_file_name(file_name)
|
172
|
+
return sanitized if sanitized.start_with?(s3_object_prefix)
|
173
173
|
|
174
|
-
s3_object_prefix +
|
174
|
+
s3_object_prefix + sanitized
|
175
175
|
end
|
176
176
|
|
177
177
|
def strip_s3_object_prefix(object_path)
|