fastlane 2.69.3 → 2.70.0.beta.20171213010003
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/fastlane/lib/assets/DefaultFastfileTemplate +2 -2
- data/fastlane/lib/assets/DefaultFastfileTemplate.swift +10 -9
- data/fastlane/lib/fastlane/actions/sync_code_signing.rb +1 -1
- data/fastlane/lib/fastlane/version.rb +1 -1
- data/fastlane_core/lib/fastlane_core/core_ext/cfpropertylist.rb +1 -1
- data/gym/lib/gym/generators/package_command_generator_xcode7.rb +3 -2
- data/match/lib/match/encrypt.rb +0 -12
- data/match/lib/match/options.rb +1 -2
- metadata +17 -50
- data/fastlane/lib/fastlane/.DS_Store +0 -0
- data/fastlane/swift/Appfile.swift +0 -17
- data/fastlane/swift/ArgumentProcessor.swift +0 -72
- data/fastlane/swift/Deliverfile.swift +0 -14
- data/fastlane/swift/DeliverfileProtocol.swift +0 -118
- data/fastlane/swift/Fastfile.swift +0 -12
- data/fastlane/swift/Fastlane.swift +0 -3739
- data/fastlane/swift/FastlaneSwiftRunner/FastlaneSwiftRunner.xcodeproj/project.pbxproj +0 -409
- data/fastlane/swift/FastlaneSwiftRunner/FastlaneSwiftRunner.xcodeproj/project.xcworkspace/contents.xcworkspacedata +0 -7
- data/fastlane/swift/FastlaneSwiftRunner/FastlaneSwiftRunner.xcodeproj/project.xcworkspace/xcuserdata/liebowitz.xcuserdatad/UserInterfaceState.xcuserstate +0 -0
- data/fastlane/swift/FastlaneSwiftRunner/FastlaneSwiftRunner.xcodeproj/xcshareddata/xcschemes/FastlaneRunner.xcscheme +0 -103
- data/fastlane/swift/Gymfile.swift +0 -14
- data/fastlane/swift/GymfileProtocol.swift +0 -86
- data/fastlane/swift/LaneFileProtocol.swift +0 -103
- data/fastlane/swift/Matchfile.swift +0 -14
- data/fastlane/swift/MatchfileProtocol.swift +0 -54
- data/fastlane/swift/Precheckfile.swift +0 -14
- data/fastlane/swift/PrecheckfileProtocol.swift +0 -24
- data/fastlane/swift/RubyCommand.swift +0 -138
- data/fastlane/swift/Runner.swift +0 -190
- data/fastlane/swift/RunnerArgument.swift +0 -18
- data/fastlane/swift/Scanfile.swift +0 -14
- data/fastlane/swift/ScanfileProtocol.swift +0 -88
- data/fastlane/swift/Screengrabfile.swift +0 -14
- data/fastlane/swift/ScreengrabfileProtocol.swift +0 -48
- data/fastlane/swift/Snapshotfile.swift +0 -14
- data/fastlane/swift/SnapshotfileProtocol.swift +0 -70
- data/fastlane/swift/SocketClient.swift +0 -283
- data/fastlane/swift/SocketClientDelegateProtocol.swift +0 -19
- data/fastlane/swift/SocketResponse.swift +0 -74
- data/fastlane/swift/main.swift +0 -43
- data/precheck/lib/.DS_Store +0 -0
@@ -1,14 +0,0 @@
|
|
1
|
-
// This class is automatically included in FastlaneRunner during build
|
2
|
-
|
3
|
-
// This autogenerated file will be overwritten or replaced during build time, or when you initialize `gym`
|
4
|
-
class Gymfile: GymfileProtocol {
|
5
|
-
// If you want to enable `gym`, run `fastlane gym init`
|
6
|
-
// After, this file will be replaced with a custom implementation that contains values you supplied
|
7
|
-
// during the `init` process, and you won't see this message
|
8
|
-
}
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
// Generated with fastlane 2.69.2
|
@@ -1,86 +0,0 @@
|
|
1
|
-
protocol GymfileProtocol: class {
|
2
|
-
var workspace: String? { get }
|
3
|
-
var project: String? { get }
|
4
|
-
var scheme: String? { get }
|
5
|
-
var clean: Bool { get }
|
6
|
-
var outputDirectory: String { get }
|
7
|
-
var outputName: String? { get }
|
8
|
-
var configuration: String? { get }
|
9
|
-
var silent: Bool { get }
|
10
|
-
var codesigningIdentity: String? { get }
|
11
|
-
var skipPackageIpa: Bool { get }
|
12
|
-
var includeSymbols: Bool? { get }
|
13
|
-
var includeBitcode: Bool? { get }
|
14
|
-
var exportMethod: String? { get }
|
15
|
-
var exportOptions: [String : Any]? { get }
|
16
|
-
var exportXcargs: String? { get }
|
17
|
-
var skipBuildArchive: Bool? { get }
|
18
|
-
var skipArchive: Bool? { get }
|
19
|
-
var buildPath: String? { get }
|
20
|
-
var archivePath: String? { get }
|
21
|
-
var derivedDataPath: String? { get }
|
22
|
-
var resultBundle: String? { get }
|
23
|
-
var buildlogPath: String { get }
|
24
|
-
var sdk: String? { get }
|
25
|
-
var toolchain: String? { get }
|
26
|
-
var destination: String? { get }
|
27
|
-
var exportTeamId: String? { get }
|
28
|
-
var xcargs: String? { get }
|
29
|
-
var xcconfig: String? { get }
|
30
|
-
var suppressXcodeOutput: String? { get }
|
31
|
-
var disableXcpretty: String? { get }
|
32
|
-
var xcprettyTestFormat: String? { get }
|
33
|
-
var xcprettyFormatter: String? { get }
|
34
|
-
var xcprettyReportJunit: String? { get }
|
35
|
-
var xcprettyReportHtml: String? { get }
|
36
|
-
var xcprettyReportJson: String? { get }
|
37
|
-
var analyzeBuildTime: String? { get }
|
38
|
-
var xcprettyUtf: String? { get }
|
39
|
-
var skipProfileDetection: Bool { get }
|
40
|
-
}
|
41
|
-
|
42
|
-
extension GymfileProtocol {
|
43
|
-
var workspace: String? { return nil }
|
44
|
-
var project: String? { return nil }
|
45
|
-
var scheme: String? { return nil }
|
46
|
-
var clean: Bool { return false }
|
47
|
-
var outputDirectory: String { return "." }
|
48
|
-
var outputName: String? { return nil }
|
49
|
-
var configuration: String? { return nil }
|
50
|
-
var silent: Bool { return false }
|
51
|
-
var codesigningIdentity: String? { return nil }
|
52
|
-
var skipPackageIpa: Bool { return false }
|
53
|
-
var includeSymbols: Bool? { return nil }
|
54
|
-
var includeBitcode: Bool? { return nil }
|
55
|
-
var exportMethod: String? { return nil }
|
56
|
-
var exportOptions: [String : Any]? { return nil }
|
57
|
-
var exportXcargs: String? { return nil }
|
58
|
-
var skipBuildArchive: Bool? { return nil }
|
59
|
-
var skipArchive: Bool? { return nil }
|
60
|
-
var buildPath: String? { return nil }
|
61
|
-
var archivePath: String? { return nil }
|
62
|
-
var derivedDataPath: String? { return nil }
|
63
|
-
var resultBundle: String? { return nil }
|
64
|
-
var buildlogPath: String { return "~/Library/Logs/gym" }
|
65
|
-
var sdk: String? { return nil }
|
66
|
-
var toolchain: String? { return nil }
|
67
|
-
var destination: String? { return nil }
|
68
|
-
var exportTeamId: String? { return nil }
|
69
|
-
var xcargs: String? { return nil }
|
70
|
-
var xcconfig: String? { return nil }
|
71
|
-
var suppressXcodeOutput: String? { return nil }
|
72
|
-
var disableXcpretty: String? { return nil }
|
73
|
-
var xcprettyTestFormat: String? { return nil }
|
74
|
-
var xcprettyFormatter: String? { return nil }
|
75
|
-
var xcprettyReportJunit: String? { return nil }
|
76
|
-
var xcprettyReportHtml: String? { return nil }
|
77
|
-
var xcprettyReportJson: String? { return nil }
|
78
|
-
var analyzeBuildTime: String? { return nil }
|
79
|
-
var xcprettyUtf: String? { return nil }
|
80
|
-
var skipProfileDetection: Bool { return false }
|
81
|
-
}
|
82
|
-
|
83
|
-
|
84
|
-
// Please don't remove the lines below
|
85
|
-
// They are used to detect outdated files
|
86
|
-
// FastlaneRunnerAPIVersion [0.9.1]
|
@@ -1,103 +0,0 @@
|
|
1
|
-
//
|
2
|
-
// LaneFileProtocol.swift
|
3
|
-
// FastlaneSwiftRunner
|
4
|
-
//
|
5
|
-
// Created by Joshua Liebowitz on 8/4/17.
|
6
|
-
// Copyright © 2017 Joshua Liebowitz. All rights reserved.
|
7
|
-
//
|
8
|
-
|
9
|
-
import Foundation
|
10
|
-
|
11
|
-
public protocol LaneFileProtocol: class {
|
12
|
-
var fastlaneVersion: String { get }
|
13
|
-
static func runLane(named: String)
|
14
|
-
|
15
|
-
func recordLaneDescriptions()
|
16
|
-
func beforeAll()
|
17
|
-
func afterAll(currentLane: String)
|
18
|
-
func onError(currentLane: String, errorInfo: String)
|
19
|
-
}
|
20
|
-
|
21
|
-
public extension LaneFileProtocol {
|
22
|
-
var fastlaneVersion: String { return "" } // default "" because that means any is fine
|
23
|
-
func beforeAll() { } // no op by default
|
24
|
-
func afterAll(currentLane: String) { } // no op by default
|
25
|
-
func onError(currentLane: String, errorInfo: String) {} // no op by default
|
26
|
-
func recordLaneDescriptions() { } // no op by default
|
27
|
-
}
|
28
|
-
|
29
|
-
@objcMembers
|
30
|
-
public class LaneFile: NSObject, LaneFileProtocol {
|
31
|
-
private(set) static var fastfileInstance: Fastfile?
|
32
|
-
|
33
|
-
// Called before any lane is executed.
|
34
|
-
private func setupAllTheThings() {
|
35
|
-
// Step 1, add lange descriptions
|
36
|
-
(self as! Fastfile).recordLaneDescriptions()
|
37
|
-
|
38
|
-
// Step 2, run beforeAll() function
|
39
|
-
LaneFile.fastfileInstance!.beforeAll()
|
40
|
-
}
|
41
|
-
|
42
|
-
public static var lanes: [String : String] {
|
43
|
-
var laneToMethodName: [String : String] = [:]
|
44
|
-
var methodCount: UInt32 = 0
|
45
|
-
let methodList = class_copyMethodList(self, &methodCount)
|
46
|
-
for i in 0..<Int(methodCount) {
|
47
|
-
let selName = sel_getName(method_getName(methodList![i]))
|
48
|
-
let name = String(cString: selName)
|
49
|
-
let lowercasedName = name.lowercased()
|
50
|
-
guard lowercasedName.hasSuffix("lane") else {
|
51
|
-
continue
|
52
|
-
}
|
53
|
-
|
54
|
-
laneToMethodName[lowercasedName] = name
|
55
|
-
let lowercasedNameNoLane = String(lowercasedName.prefix(lowercasedName.count - 4))
|
56
|
-
laneToMethodName[lowercasedNameNoLane] = name
|
57
|
-
}
|
58
|
-
return laneToMethodName
|
59
|
-
}
|
60
|
-
|
61
|
-
public static func loadFastfile() {
|
62
|
-
if self.fastfileInstance == nil {
|
63
|
-
let fastfileType: AnyObject.Type = NSClassFromString(self.className())!
|
64
|
-
let fastfileAsNSObjectType: NSObject.Type = fastfileType as! NSObject.Type
|
65
|
-
let currentFastfileInstance: Fastfile? = fastfileAsNSObjectType.init() as? Fastfile
|
66
|
-
self.fastfileInstance = currentFastfileInstance
|
67
|
-
}
|
68
|
-
}
|
69
|
-
|
70
|
-
public static func runLane(named: String) {
|
71
|
-
log(message: "Running lane: \(named)")
|
72
|
-
self.loadFastfile()
|
73
|
-
|
74
|
-
guard let fastfileInstance: Fastfile = self.fastfileInstance else {
|
75
|
-
let message = "Unable to instantiate class named: \(self.className())"
|
76
|
-
log(message: message)
|
77
|
-
fatalError(message)
|
78
|
-
}
|
79
|
-
|
80
|
-
// call all methods that need to be called before we start calling lanes
|
81
|
-
fastfileInstance.setupAllTheThings()
|
82
|
-
|
83
|
-
let currentLanes = self.lanes
|
84
|
-
let lowerCasedLaneRequested = named.lowercased()
|
85
|
-
|
86
|
-
guard let laneMethod = currentLanes[lowerCasedLaneRequested] else {
|
87
|
-
let message = "unable to find lane named: \(named)"
|
88
|
-
log(message: message)
|
89
|
-
fatalError(message)
|
90
|
-
}
|
91
|
-
|
92
|
-
// We need to catch all possible errors here and display a nice message
|
93
|
-
_ = fastfileInstance.perform(NSSelectorFromString(laneMethod))
|
94
|
-
|
95
|
-
// only call on success
|
96
|
-
fastfileInstance.afterAll(currentLane: named)
|
97
|
-
log(message: "Done running lane: \(named) 🚀")
|
98
|
-
}
|
99
|
-
}
|
100
|
-
|
101
|
-
// Please don't remove the lines below
|
102
|
-
// They are used to detect outdated files
|
103
|
-
// FastlaneRunnerAPIVersion [0.9.1]
|
@@ -1,14 +0,0 @@
|
|
1
|
-
// This class is automatically included in FastlaneRunner during build
|
2
|
-
|
3
|
-
// This autogenerated file will be overwritten or replaced during build time, or when you initialize `match`
|
4
|
-
class Matchfile: MatchfileProtocol {
|
5
|
-
// If you want to enable `match`, run `fastlane match init`
|
6
|
-
// After, this file will be replaced with a custom implementation that contains values you supplied
|
7
|
-
// during the `init` process, and you won't see this message
|
8
|
-
}
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
// Generated with fastlane 2.69.2
|
@@ -1,54 +0,0 @@
|
|
1
|
-
protocol MatchfileProtocol: class {
|
2
|
-
var gitUrl: String { get }
|
3
|
-
var gitBranch: String { get }
|
4
|
-
var type: String { get }
|
5
|
-
var appIdentifier: [String] { get }
|
6
|
-
var username: String { get }
|
7
|
-
var keychainName: String { get }
|
8
|
-
var keychainPassword: String? { get }
|
9
|
-
var readonly: Bool { get }
|
10
|
-
var teamId: String? { get }
|
11
|
-
var gitFullName: String? { get }
|
12
|
-
var gitUserEmail: String? { get }
|
13
|
-
var teamName: String? { get }
|
14
|
-
var verbose: Bool { get }
|
15
|
-
var force: Bool { get }
|
16
|
-
var skipConfirmation: Bool { get }
|
17
|
-
var shallowClone: Bool { get }
|
18
|
-
var cloneBranchDirectly: Bool { get }
|
19
|
-
var workspace: String? { get }
|
20
|
-
var forceForNewDevices: Bool { get }
|
21
|
-
var skipDocs: Bool { get }
|
22
|
-
var platform: String { get }
|
23
|
-
var templateName: String? { get }
|
24
|
-
}
|
25
|
-
|
26
|
-
extension MatchfileProtocol {
|
27
|
-
var gitUrl: String { return "" }
|
28
|
-
var gitBranch: String { return "master" }
|
29
|
-
var type: String { return "development" }
|
30
|
-
var appIdentifier: [String] { return [] }
|
31
|
-
var username: String { return "" }
|
32
|
-
var keychainName: String { return "login.keychain" }
|
33
|
-
var keychainPassword: String? { return nil }
|
34
|
-
var readonly: Bool { return false }
|
35
|
-
var teamId: String? { return nil }
|
36
|
-
var gitFullName: String? { return nil }
|
37
|
-
var gitUserEmail: String? { return nil }
|
38
|
-
var teamName: String? { return nil }
|
39
|
-
var verbose: Bool { return false }
|
40
|
-
var force: Bool { return false }
|
41
|
-
var skipConfirmation: Bool { return false }
|
42
|
-
var shallowClone: Bool { return false }
|
43
|
-
var cloneBranchDirectly: Bool { return false }
|
44
|
-
var workspace: String? { return nil }
|
45
|
-
var forceForNewDevices: Bool { return false }
|
46
|
-
var skipDocs: Bool { return false }
|
47
|
-
var platform: String { return "ios" }
|
48
|
-
var templateName: String? { return nil }
|
49
|
-
}
|
50
|
-
|
51
|
-
|
52
|
-
// Please don't remove the lines below
|
53
|
-
// They are used to detect outdated files
|
54
|
-
// FastlaneRunnerAPIVersion [0.9.1]
|
@@ -1,14 +0,0 @@
|
|
1
|
-
// This class is automatically included in FastlaneRunner during build
|
2
|
-
|
3
|
-
// This autogenerated file will be overwritten or replaced during build time, or when you initialize `precheck`
|
4
|
-
class Precheckfile: PrecheckfileProtocol {
|
5
|
-
// If you want to enable `precheck`, run `fastlane precheck init`
|
6
|
-
// After, this file will be replaced with a custom implementation that contains values you supplied
|
7
|
-
// during the `init` process, and you won't see this message
|
8
|
-
}
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
// Generated with fastlane 2.69.2
|
@@ -1,24 +0,0 @@
|
|
1
|
-
protocol PrecheckfileProtocol: class {
|
2
|
-
var appIdentifier: String { get }
|
3
|
-
var username: String { get }
|
4
|
-
var teamId: String? { get }
|
5
|
-
var teamName: String? { get }
|
6
|
-
var defaultRuleLevel: String { get }
|
7
|
-
var includeInAppPurchases: Bool { get }
|
8
|
-
var freeStuffInIap: String? { get }
|
9
|
-
}
|
10
|
-
|
11
|
-
extension PrecheckfileProtocol {
|
12
|
-
var appIdentifier: String { return "" }
|
13
|
-
var username: String { return "" }
|
14
|
-
var teamId: String? { return nil }
|
15
|
-
var teamName: String? { return nil }
|
16
|
-
var defaultRuleLevel: String { return "error" }
|
17
|
-
var includeInAppPurchases: Bool { return true }
|
18
|
-
var freeStuffInIap: String? { return nil }
|
19
|
-
}
|
20
|
-
|
21
|
-
|
22
|
-
// Please don't remove the lines below
|
23
|
-
// They are used to detect outdated files
|
24
|
-
// FastlaneRunnerAPIVersion [0.9.1]
|
@@ -1,138 +0,0 @@
|
|
1
|
-
//
|
2
|
-
// RubyCommand.swift
|
3
|
-
// FastlaneSwiftRunner
|
4
|
-
//
|
5
|
-
// Created by Joshua Liebowitz on 8/4/17.
|
6
|
-
// Copyright © 2017 Joshua Liebowitz. All rights reserved.
|
7
|
-
//
|
8
|
-
|
9
|
-
import Foundation
|
10
|
-
|
11
|
-
protocol RubyCommandable {
|
12
|
-
var json: String { get }
|
13
|
-
}
|
14
|
-
|
15
|
-
struct RubyCommand: RubyCommandable {
|
16
|
-
struct Argument {
|
17
|
-
enum ArgType {
|
18
|
-
case stringClosure
|
19
|
-
|
20
|
-
var typeString: String {
|
21
|
-
switch self {
|
22
|
-
case .stringClosure:
|
23
|
-
return "string_closure" // this should match when is in ruby's SocketServerActionCommandExecutor
|
24
|
-
}
|
25
|
-
}
|
26
|
-
}
|
27
|
-
|
28
|
-
let name: String
|
29
|
-
let value: Any?
|
30
|
-
let type: ArgType?
|
31
|
-
|
32
|
-
init(name: String, value: Any?, type: ArgType? = nil) {
|
33
|
-
self.name = name
|
34
|
-
self.value = value
|
35
|
-
self.type = type
|
36
|
-
}
|
37
|
-
|
38
|
-
var hasValue: Bool {
|
39
|
-
return nil != self.value
|
40
|
-
}
|
41
|
-
|
42
|
-
var json: String {
|
43
|
-
get {
|
44
|
-
|
45
|
-
if let someValue = value {
|
46
|
-
let typeJson: String
|
47
|
-
if let type = type {
|
48
|
-
typeJson = ", \"value_type\" : \"\(type.typeString)\""
|
49
|
-
}else {
|
50
|
-
typeJson = ""
|
51
|
-
}
|
52
|
-
|
53
|
-
if type == .stringClosure {
|
54
|
-
return "{\"name\" : \"\(name)\", \"value\" : \"ignored_for_closure\"\(typeJson)}"
|
55
|
-
} else if let array = someValue as? [String] {
|
56
|
-
return "{\"name\" : \"\(name)\", \"value\" : \"\(array.joined(separator: ","))\"\(typeJson)}"
|
57
|
-
} else if let hash = someValue as? [String : Any] {
|
58
|
-
let jsonData = try! JSONSerialization.data(withJSONObject: hash, options: [])
|
59
|
-
let jsonString = String(data: jsonData, encoding: .utf8)!
|
60
|
-
return "{\"name\" : \"\(name)\", \"value\" : \(jsonString)\(typeJson)}"
|
61
|
-
} else {
|
62
|
-
let dictionary = [
|
63
|
-
"name": name,
|
64
|
-
"value": someValue
|
65
|
-
]
|
66
|
-
let jsonData = try! JSONSerialization.data(withJSONObject: dictionary, options: [])
|
67
|
-
let jsonString = String(data: jsonData, encoding: .utf8)!
|
68
|
-
return jsonString
|
69
|
-
}
|
70
|
-
} else {
|
71
|
-
// Just exclude this arg if it doesn't have a value
|
72
|
-
return ""
|
73
|
-
}
|
74
|
-
}
|
75
|
-
}
|
76
|
-
}
|
77
|
-
|
78
|
-
let commandID: String
|
79
|
-
let methodName: String
|
80
|
-
let className: String?
|
81
|
-
let args: [Argument]
|
82
|
-
|
83
|
-
func performCallback(callbackArg: String) {
|
84
|
-
// WARNING: This will perform the first callback it receives
|
85
|
-
let callbacks = self.args.filter { ($0.type != nil) && $0.type == .stringClosure }
|
86
|
-
guard let callback = callbacks.first else {
|
87
|
-
verbose(message: "received call to performCallback with \(callbackArg), but no callback available to perform")
|
88
|
-
return
|
89
|
-
}
|
90
|
-
|
91
|
-
guard let callbackArgValue = callback.value else {
|
92
|
-
verbose(message: "received call to performCallback with \(callbackArg), but callback is nil")
|
93
|
-
return
|
94
|
-
}
|
95
|
-
|
96
|
-
guard let callbackClosure = callbackArgValue as? ((String) -> Void) else {
|
97
|
-
verbose(message: "received call to performCallback with \(callbackArg), but callback type is unknown \(callbackArgValue.self)")
|
98
|
-
return
|
99
|
-
}
|
100
|
-
|
101
|
-
print("Performing callback with: \(callbackArg)")
|
102
|
-
callbackClosure(callbackArg)
|
103
|
-
}
|
104
|
-
|
105
|
-
var json: String {
|
106
|
-
let argsArrayJson = self.args
|
107
|
-
.map { $0.json }
|
108
|
-
.filter { $0 != "" }
|
109
|
-
|
110
|
-
let argsJson: String?
|
111
|
-
if argsArrayJson.count > 0 {
|
112
|
-
argsJson = "\"args\" : [\(argsArrayJson.joined(separator: ","))]"
|
113
|
-
} else {
|
114
|
-
argsJson = nil
|
115
|
-
}
|
116
|
-
|
117
|
-
let commandIDJson = "\"commandID\" : \"\(commandID)\""
|
118
|
-
let methodNameJson = "\"methodName\" : \"\(methodName)\""
|
119
|
-
|
120
|
-
var jsonParts = [commandIDJson, methodNameJson]
|
121
|
-
if let argsJson = argsJson {
|
122
|
-
jsonParts.append(argsJson)
|
123
|
-
}
|
124
|
-
|
125
|
-
if let className = className {
|
126
|
-
let classNameJson = "\"className\" : \"\(className)\""
|
127
|
-
jsonParts.append(classNameJson)
|
128
|
-
}
|
129
|
-
|
130
|
-
let commandJsonString = "{\(jsonParts.joined(separator: ","))}"
|
131
|
-
|
132
|
-
return commandJsonString
|
133
|
-
}
|
134
|
-
}
|
135
|
-
|
136
|
-
// Please don't remove the lines below
|
137
|
-
// They are used to detect outdated files
|
138
|
-
// FastlaneRunnerAPIVersion [0.9.1]
|