fastlane 2.157.3 → 2.161.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/README.md +72 -72
- data/deliver/lib/deliver/options.rb +17 -1
- data/deliver/lib/deliver/runner.rb +36 -5
- data/deliver/lib/deliver/upload_metadata.rb +36 -6
- data/deliver/lib/deliver/upload_price_tier.rb +7 -2
- data/{pilot/lib/pilot/.manager.rb.swp → fastlane/lib/fastlane/.erb_template_helper.rb.swp} +0 -0
- data/fastlane/lib/fastlane/actions/{.ensure_git_status_clean.rb.swp → .git_commit.rb.swp} +0 -0
- data/fastlane/lib/fastlane/actions/actions_helper.rb +20 -1
- data/fastlane/lib/fastlane/actions/app_store_build_number.rb +1 -0
- data/fastlane/lib/fastlane/actions/app_store_connect_api_key.rb +6 -1
- data/fastlane/lib/fastlane/actions/clean_build_artifacts.rb +1 -0
- data/fastlane/lib/fastlane/actions/docs/capture_android_screenshots.md +2 -2
- data/fastlane/lib/fastlane/actions/docs/capture_ios_screenshots.md +1 -1
- data/fastlane/lib/fastlane/actions/docs/create_app_online.md +1 -1
- data/fastlane/lib/fastlane/actions/docs/frame_screenshots.md +3 -2
- data/fastlane/lib/fastlane/actions/docs/run_tests.md +2 -2
- data/fastlane/lib/fastlane/actions/docs/sync_code_signing.md +3 -3
- data/fastlane/lib/fastlane/actions/docs/upload_to_play_store.md +2 -2
- data/fastlane/lib/fastlane/actions/docs/upload_to_testflight.md +2 -2
- data/fastlane/lib/fastlane/actions/download_dsyms.rb +34 -7
- data/fastlane/lib/fastlane/actions/ensure_git_status_clean.rb +13 -2
- data/fastlane/lib/fastlane/actions/set_changelog.rb +2 -0
- data/fastlane/lib/fastlane/helper/git_helper.rb +2 -0
- data/fastlane/lib/fastlane/swift_fastlane_api_generator.rb +6 -4
- data/fastlane/lib/fastlane/swift_fastlane_function.rb +1 -1
- data/fastlane/lib/fastlane/version.rb +1 -1
- data/fastlane/swift/Actions.swift +2 -1
- data/fastlane/swift/Appfile.swift +2 -4
- data/fastlane/swift/ArgumentProcessor.swift +2 -6
- data/fastlane/swift/ControlCommand.swift +2 -5
- data/fastlane/swift/Deliverfile.swift +5 -2
- data/fastlane/swift/DeliverfileProtocol.swift +15 -4
- data/fastlane/swift/Fastfile.swift +5 -1
- data/fastlane/swift/Fastlane.swift +2285 -2240
- data/fastlane/swift/FastlaneSwiftRunner/FastlaneSwiftRunner.xcodeproj/project.pbxproj +5 -5
- data/fastlane/swift/Gymfile.swift +5 -2
- data/fastlane/swift/GymfileProtocol.swift +6 -3
- data/fastlane/swift/LaneFileProtocol.swift +42 -29
- data/fastlane/swift/MainProcess.swift +77 -0
- data/fastlane/swift/Matchfile.swift +5 -2
- data/fastlane/swift/MatchfileProtocol.swift +7 -4
- data/fastlane/swift/Plugins.swift +2 -1
- data/fastlane/swift/Precheckfile.swift +5 -2
- data/fastlane/swift/PrecheckfileProtocol.swift +18 -3
- data/fastlane/swift/RubyCommand.swift +2 -6
- data/fastlane/swift/RubyCommandable.swift +2 -6
- data/fastlane/swift/Runner.swift +5 -9
- data/fastlane/swift/RunnerArgument.swift +2 -6
- data/fastlane/swift/Scanfile.swift +5 -2
- data/fastlane/swift/ScanfileProtocol.swift +6 -3
- data/fastlane/swift/Screengrabfile.swift +5 -2
- data/fastlane/swift/ScreengrabfileProtocol.swift +6 -3
- data/fastlane/swift/Snapshotfile.swift +5 -2
- data/fastlane/swift/SnapshotfileProtocol.swift +6 -3
- data/fastlane/swift/SocketClient.swift +3 -7
- data/fastlane/swift/SocketClientDelegateProtocol.swift +2 -6
- data/fastlane/swift/SocketResponse.swift +2 -6
- data/fastlane/swift/formatting/Brewfile.lock.json +18 -10
- data/fastlane/swift/main.swift +4 -8
- data/fastlane/swift/upgrade_manifest.json +1 -1
- data/frameit/lib/frameit/editor.rb +1 -0
- data/match/lib/match/importer.rb +5 -2
- data/match/lib/match/options.rb +1 -1
- data/match/lib/match/spaceship_ensure.rb +3 -3
- data/pilot/lib/pilot/options.rb +2 -2
- data/precheck/lib/precheck/options.rb +25 -0
- data/precheck/lib/precheck/rule_processor.rb +94 -60
- data/precheck/lib/precheck/runner.rb +26 -5
- data/produce/lib/produce/itunes_connect.rb +2 -0
- data/sigh/lib/sigh/runner.rb +2 -0
- data/snapshot/lib/assets/SnapshotHelper.swift +17 -2
- data/spaceship/README.md +1 -1
- data/spaceship/lib/spaceship/{connect_api/.DS_Store → .DS_Store} +0 -0
- data/spaceship/lib/spaceship/connect_api/client.rb +34 -13
- data/{fastlane/lib/fastlane/actions/.update_project_provisioning.rb.swp → spaceship/lib/spaceship/connect_api/models/.app_store_version_submission.rb.swp} +0 -0
- data/spaceship/lib/spaceship/connect_api/models/app.rb +17 -9
- data/spaceship/lib/spaceship/connect_api/models/app_info.rb +1 -0
- data/spaceship/lib/spaceship/connect_api/models/app_screenshot_set.rb +2 -2
- data/spaceship/lib/spaceship/connect_api/models/app_store_version.rb +3 -5
- data/spaceship/lib/spaceship/connect_api/models/app_store_version_localization.rb +3 -5
- data/spaceship/lib/spaceship/connect_api/models/app_store_version_phased_release.rb +21 -0
- data/spaceship/lib/spaceship/connect_api/spaceship.rb +3 -2
- data/spaceship/lib/spaceship/connect_api/tunes/tunes.rb +29 -9
- data/spaceship/lib/spaceship/helper/net_http_generic_request.rb +11 -5
- metadata +24 -26
- data/fastlane/lib/fastlane/actions/.hockey.rb.swp +0 -0
- data/fastlane/lib/fastlane/actions/.slack.rb.swp +0 -0
- data/fastlane/swift/FastlaneSwiftRunner/FastlaneSwiftRunner.xcodeproj/project.xcworkspace/xcuserdata/josh.xcuserdatad/UserInterfaceState.xcuserstate +0 -0
data/fastlane/swift/Runner.swift
CHANGED
@@ -1,9 +1,5 @@
|
|
1
|
-
//
|
2
|
-
//
|
3
|
-
// FastlaneSwiftRunner
|
4
|
-
//
|
5
|
-
// Created by Joshua Liebowitz on 8/26/17.
|
6
|
-
//
|
1
|
+
// Runner.swift
|
2
|
+
// Copyright (c) 2020 FastlaneTools
|
7
3
|
|
8
4
|
//
|
9
5
|
// ** NOTE **
|
@@ -29,7 +25,7 @@ func desc(_: String) {
|
|
29
25
|
class Runner {
|
30
26
|
private var thread: Thread!
|
31
27
|
private var socketClient: SocketClient!
|
32
|
-
private let dispatchGroup
|
28
|
+
private let dispatchGroup = DispatchGroup()
|
33
29
|
private var returnValue: String? // lol, so safe
|
34
30
|
private var currentlyExecutingCommand: RubyCommandable?
|
35
31
|
private var shouldLeaveDispatchGroupDuringDisconnect = false
|
@@ -42,7 +38,7 @@ class Runner {
|
|
42
38
|
|
43
39
|
let secondsToWait = DispatchTimeInterval.seconds(SocketClient.defaultCommandTimeoutSeconds)
|
44
40
|
// swiftlint:disable next
|
45
|
-
let timeoutResult = waitWithPolling(self.executeNext[command.id], toEventually: { $0 == true }, timeout: SocketClient.defaultCommandTimeoutSeconds)
|
41
|
+
let timeoutResult = Self.waitWithPolling(self.executeNext[command.id], toEventually: { $0 == true }, timeout: SocketClient.defaultCommandTimeoutSeconds)
|
46
42
|
executeNext.removeValue(forKey: command.id)
|
47
43
|
let failureMessage = "command didn't execute in: \(SocketClient.defaultCommandTimeoutSeconds) seconds"
|
48
44
|
let success = testDispatchTimeoutResult(timeoutResult, failureMessage: failureMessage, timeToWait: secondsToWait)
|
@@ -58,7 +54,7 @@ class Runner {
|
|
58
54
|
}
|
59
55
|
}
|
60
56
|
|
61
|
-
|
57
|
+
static func waitWithPolling<T>(_ expression: @autoclosure @escaping () throws -> T, toEventually predicate: @escaping (T) -> Bool, timeout: Int, pollingInterval: DispatchTimeInterval = .milliseconds(4)) -> DispatchTimeoutResult {
|
62
58
|
func memoizedClosure<T>(_ closure: @escaping () throws -> T) -> (Bool) throws -> T {
|
63
59
|
var cache: T?
|
64
60
|
return { withoutCaching in
|
@@ -1,3 +1,6 @@
|
|
1
|
+
// Scanfile.swift
|
2
|
+
// Copyright (c) 2020 FastlaneTools
|
3
|
+
|
1
4
|
// This class is automatically included in FastlaneRunner during build
|
2
5
|
|
3
6
|
// This autogenerated file will be overwritten or replaced during build time, or when you initialize `scan`
|
@@ -8,10 +11,10 @@
|
|
8
11
|
// new group so that it won't be marked for upgrade
|
9
12
|
//
|
10
13
|
|
11
|
-
class Scanfile: ScanfileProtocol {
|
14
|
+
public class Scanfile: ScanfileProtocol {
|
12
15
|
// If you want to enable `scan`, run `fastlane scan init`
|
13
16
|
// After, this file will be replaced with a custom implementation that contains values you supplied
|
14
17
|
// during the `init` process, and you won't see this message
|
15
18
|
}
|
16
19
|
|
17
|
-
// Generated with fastlane 2.
|
20
|
+
// Generated with fastlane 2.161.0
|
@@ -1,4 +1,7 @@
|
|
1
|
-
|
1
|
+
// ScanfileProtocol.swift
|
2
|
+
// Copyright (c) 2020 FastlaneTools
|
3
|
+
|
4
|
+
public protocol ScanfileProtocol: class {
|
2
5
|
/// Path to the workspace file
|
3
6
|
var workspace: String? { get }
|
4
7
|
|
@@ -189,7 +192,7 @@ protocol ScanfileProtocol: class {
|
|
189
192
|
var failBuild: Bool { get }
|
190
193
|
}
|
191
194
|
|
192
|
-
extension ScanfileProtocol {
|
195
|
+
public extension ScanfileProtocol {
|
193
196
|
var workspace: String? { return nil }
|
194
197
|
var project: String? { return nil }
|
195
198
|
var scheme: String? { return nil }
|
@@ -257,4 +260,4 @@ extension ScanfileProtocol {
|
|
257
260
|
|
258
261
|
// Please don't remove the lines below
|
259
262
|
// They are used to detect outdated files
|
260
|
-
// FastlaneRunnerAPIVersion [0.9.
|
263
|
+
// FastlaneRunnerAPIVersion [0.9.52]
|
@@ -1,3 +1,6 @@
|
|
1
|
+
// Screengrabfile.swift
|
2
|
+
// Copyright (c) 2020 FastlaneTools
|
3
|
+
|
1
4
|
// This class is automatically included in FastlaneRunner during build
|
2
5
|
|
3
6
|
// This autogenerated file will be overwritten or replaced during build time, or when you initialize `screengrab`
|
@@ -8,10 +11,10 @@
|
|
8
11
|
// new group so that it won't be marked for upgrade
|
9
12
|
//
|
10
13
|
|
11
|
-
class Screengrabfile: ScreengrabfileProtocol {
|
14
|
+
public class Screengrabfile: ScreengrabfileProtocol {
|
12
15
|
// If you want to enable `screengrab`, run `fastlane screengrab init`
|
13
16
|
// After, this file will be replaced with a custom implementation that contains values you supplied
|
14
17
|
// during the `init` process, and you won't see this message
|
15
18
|
}
|
16
19
|
|
17
|
-
// Generated with fastlane 2.
|
20
|
+
// Generated with fastlane 2.161.0
|
@@ -1,4 +1,7 @@
|
|
1
|
-
|
1
|
+
// ScreengrabfileProtocol.swift
|
2
|
+
// Copyright (c) 2020 FastlaneTools
|
3
|
+
|
4
|
+
public protocol ScreengrabfileProtocol: class {
|
2
5
|
/// Path to the root of your Android SDK installation, e.g. ~/tools/android-sdk-macosx
|
3
6
|
var androidHome: String? { get }
|
4
7
|
|
@@ -66,7 +69,7 @@ protocol ScreengrabfileProtocol: class {
|
|
66
69
|
var adbHost: String? { get }
|
67
70
|
}
|
68
71
|
|
69
|
-
extension ScreengrabfileProtocol {
|
72
|
+
public extension ScreengrabfileProtocol {
|
70
73
|
var androidHome: String? { return nil }
|
71
74
|
var buildToolsVersion: String? { return nil }
|
72
75
|
var locales: [String] { return ["en-US"] }
|
@@ -93,4 +96,4 @@ extension ScreengrabfileProtocol {
|
|
93
96
|
|
94
97
|
// Please don't remove the lines below
|
95
98
|
// They are used to detect outdated files
|
96
|
-
// FastlaneRunnerAPIVersion [0.9.
|
99
|
+
// FastlaneRunnerAPIVersion [0.9.42]
|
@@ -1,3 +1,6 @@
|
|
1
|
+
// Snapshotfile.swift
|
2
|
+
// Copyright (c) 2020 FastlaneTools
|
3
|
+
|
1
4
|
// This class is automatically included in FastlaneRunner during build
|
2
5
|
|
3
6
|
// This autogenerated file will be overwritten or replaced during build time, or when you initialize `snapshot`
|
@@ -8,10 +11,10 @@
|
|
8
11
|
// new group so that it won't be marked for upgrade
|
9
12
|
//
|
10
13
|
|
11
|
-
class Snapshotfile: SnapshotfileProtocol {
|
14
|
+
public class Snapshotfile: SnapshotfileProtocol {
|
12
15
|
// If you want to enable `snapshot`, run `fastlane snapshot init`
|
13
16
|
// After, this file will be replaced with a custom implementation that contains values you supplied
|
14
17
|
// during the `init` process, and you won't see this message
|
15
18
|
}
|
16
19
|
|
17
|
-
// Generated with fastlane 2.
|
20
|
+
// Generated with fastlane 2.161.0
|
@@ -1,4 +1,7 @@
|
|
1
|
-
|
1
|
+
// SnapshotfileProtocol.swift
|
2
|
+
// Copyright (c) 2020 FastlaneTools
|
3
|
+
|
4
|
+
public protocol SnapshotfileProtocol: class {
|
2
5
|
/// Path the workspace file
|
3
6
|
var workspace: String? { get }
|
4
7
|
|
@@ -132,7 +135,7 @@ protocol SnapshotfileProtocol: class {
|
|
132
135
|
var suppressXcodeOutput: Bool? { get }
|
133
136
|
}
|
134
137
|
|
135
|
-
extension SnapshotfileProtocol {
|
138
|
+
public extension SnapshotfileProtocol {
|
136
139
|
var workspace: String? { return nil }
|
137
140
|
var project: String? { return nil }
|
138
141
|
var xcargs: String? { return nil }
|
@@ -181,4 +184,4 @@ extension SnapshotfileProtocol {
|
|
181
184
|
|
182
185
|
// Please don't remove the lines below
|
183
186
|
// They are used to detect outdated files
|
184
|
-
// FastlaneRunnerAPIVersion [0.9.
|
187
|
+
// FastlaneRunnerAPIVersion [0.9.36]
|
@@ -1,9 +1,5 @@
|
|
1
|
-
//
|
2
|
-
//
|
3
|
-
// FastlaneSwiftRunner
|
4
|
-
//
|
5
|
-
// Created by Joshua Liebowitz on 7/30/17.
|
6
|
-
//
|
1
|
+
// SocketClient.swift
|
2
|
+
// Copyright (c) 2020 FastlaneTools
|
7
3
|
|
8
4
|
//
|
9
5
|
// ** NOTE **
|
@@ -40,7 +36,7 @@ class SocketClient: NSObject {
|
|
40
36
|
fileprivate var inputStream: InputStream!
|
41
37
|
fileprivate var outputStream: OutputStream!
|
42
38
|
fileprivate var cleaningUpAfterDone = false
|
43
|
-
fileprivate let dispatchGroup
|
39
|
+
fileprivate let dispatchGroup = DispatchGroup()
|
44
40
|
fileprivate let readSemaphore = DispatchSemaphore(value: 1)
|
45
41
|
fileprivate let writeSemaphore = DispatchSemaphore(value: 1)
|
46
42
|
fileprivate let commandTimeoutSeconds: Int
|
@@ -2,22 +2,22 @@
|
|
2
2
|
"entries": {
|
3
3
|
"brew": {
|
4
4
|
"swiftformat": {
|
5
|
-
"version": "0.
|
5
|
+
"version": "0.45.6",
|
6
6
|
"bottle": {
|
7
7
|
"cellar": ":any_skip_relocation",
|
8
8
|
"prefix": "/usr/local",
|
9
9
|
"files": {
|
10
10
|
"catalina": {
|
11
|
-
"url": "https://homebrew.bintray.com/bottles/swiftformat-0.
|
12
|
-
"sha256": "
|
11
|
+
"url": "https://homebrew.bintray.com/bottles/swiftformat-0.45.6.catalina.bottle.tar.gz",
|
12
|
+
"sha256": "7f23ff740679b30e313c91533c2f3e6fa4210bb68f8e383c29e7f922f87d8f66"
|
13
13
|
},
|
14
14
|
"mojave": {
|
15
|
-
"url": "https://homebrew.bintray.com/bottles/swiftformat-0.
|
16
|
-
"sha256": "
|
15
|
+
"url": "https://homebrew.bintray.com/bottles/swiftformat-0.45.6.mojave.bottle.tar.gz",
|
16
|
+
"sha256": "b5349b775ff60c73c284d5de8ad2c0fdfb35428cff92bb7a8e5fcc6536750b89"
|
17
17
|
},
|
18
18
|
"high_sierra": {
|
19
|
-
"url": "https://homebrew.bintray.com/bottles/swiftformat-0.
|
20
|
-
"sha256": "
|
19
|
+
"url": "https://homebrew.bintray.com/bottles/swiftformat-0.45.6.high_sierra.bottle.tar.gz",
|
20
|
+
"sha256": "34d900217ca12736a112c31e54a5f4f7e64c1fe224f6e4ea76ad1d25b149f647"
|
21
21
|
}
|
22
22
|
}
|
23
23
|
}
|
@@ -27,12 +27,20 @@
|
|
27
27
|
"system": {
|
28
28
|
"macos": {
|
29
29
|
"catalina": {
|
30
|
-
"HOMEBREW_VERSION": "2.
|
30
|
+
"HOMEBREW_VERSION": "2.4.9-133-g0fdf8f2",
|
31
31
|
"HOMEBREW_PREFIX": "/usr/local",
|
32
|
-
"Homebrew/homebrew-core": "
|
32
|
+
"Homebrew/homebrew-core": "7141f37f3af0e6702f6dab2263852ddefbbbf8ed",
|
33
33
|
"CLT": "11.0.28.3",
|
34
|
-
"Xcode": "11.
|
34
|
+
"Xcode": "11.6",
|
35
35
|
"macOS": "10.15.4"
|
36
|
+
},
|
37
|
+
"big_sur": {
|
38
|
+
"HOMEBREW_VERSION": "2.4.13-249-g6454504",
|
39
|
+
"HOMEBREW_PREFIX": "/usr/local",
|
40
|
+
"Homebrew/homebrew-core": "020491c34515c229d904e6e69e14157cb728d2fa",
|
41
|
+
"CLT": "11.0.28.3",
|
42
|
+
"Xcode": "12.0",
|
43
|
+
"macOS": "11.0"
|
36
44
|
}
|
37
45
|
}
|
38
46
|
}
|
data/fastlane/swift/main.swift
CHANGED
@@ -1,9 +1,5 @@
|
|
1
|
-
//
|
2
|
-
//
|
3
|
-
// FastlaneSwiftRunner
|
4
|
-
//
|
5
|
-
// Created by Joshua Liebowitz on 8/26/17.
|
6
|
-
//
|
1
|
+
// main.swift
|
2
|
+
// Copyright (c) 2020 FastlaneTools
|
7
3
|
|
8
4
|
//
|
9
5
|
// ** NOTE **
|
@@ -24,7 +20,7 @@ class MainProcess {
|
|
24
20
|
@objc func connectToFastlaneAndRunLane() {
|
25
21
|
runner.startSocketThread(port: argumentProcessor.port)
|
26
22
|
|
27
|
-
let completedRun = Fastfile.runLane(named: argumentProcessor.currentLane, parameters: argumentProcessor.laneParameters())
|
23
|
+
let completedRun = Fastfile.runLane(from: nil, named: argumentProcessor.currentLane, parameters: argumentProcessor.laneParameters())
|
28
24
|
if completedRun {
|
29
25
|
runner.disconnectFromFastlaneProcess()
|
30
26
|
}
|
@@ -39,7 +35,7 @@ class MainProcess {
|
|
39
35
|
}
|
40
36
|
}
|
41
37
|
|
42
|
-
let process
|
38
|
+
let process = MainProcess()
|
43
39
|
process.startFastlaneThread()
|
44
40
|
|
45
41
|
while !process.doneRunningLane, RunLoop.current.run(mode: RunLoopMode.defaultRunLoopMode, before: Date(timeIntervalSinceNow: 2)) {
|
@@ -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","ControlCommand.swift":"Networking","RubyCommand.swift":"Networking","RubyCommandable.swift":"Networking","Runner.swift":"Networking","SocketClient.swift":"Networking","SocketClientDelegateProtocol.swift":"Networking","SocketResponse.swift":"Networking","
|
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","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"}
|
@@ -429,6 +429,7 @@ module Frameit
|
|
429
429
|
# Add the actual title
|
430
430
|
text_image.combine_options do |i|
|
431
431
|
i.font(current_font) if current_font
|
432
|
+
i.weight(@config[key.to_s]['font_weight']) if @config[key.to_s]['font_weight']
|
432
433
|
i.gravity("Center")
|
433
434
|
i.pointsize(actual_font_size(key))
|
434
435
|
i.draw("text 0,0 '#{text}'")
|
data/match/lib/match/importer.rb
CHANGED
@@ -2,6 +2,7 @@ require_relative 'spaceship_ensure'
|
|
2
2
|
require_relative 'encryption'
|
3
3
|
require_relative 'storage'
|
4
4
|
require_relative 'module'
|
5
|
+
require_relative 'generator'
|
5
6
|
require 'fastlane_core/provisioning_profile'
|
6
7
|
require 'fileutils'
|
7
8
|
|
@@ -56,8 +57,9 @@ module Match
|
|
56
57
|
UI.user_error!("Cert type '#{cert_type}' is not supported")
|
57
58
|
end
|
58
59
|
|
60
|
+
prov_type = Match.profile_type_sym(params[:type])
|
59
61
|
output_dir_certs = File.join(storage.prefixed_working_directory, "certs", cert_type.to_s)
|
60
|
-
output_dir_profiles = File.join(storage.prefixed_working_directory, "profiles",
|
62
|
+
output_dir_profiles = File.join(storage.prefixed_working_directory, "profiles", prov_type.to_s)
|
61
63
|
|
62
64
|
# Need to get the cert id by comparing base64 encoded cert content with certificate content from the API responses
|
63
65
|
Spaceship::Portal.login(params[:username])
|
@@ -86,7 +88,8 @@ module Match
|
|
86
88
|
FileUtils.mkdir_p(output_dir_profiles)
|
87
89
|
bundle_id = FastlaneCore::ProvisioningProfile.bundle_id(profile_path)
|
88
90
|
profile_extension = FastlaneCore::ProvisioningProfile.profile_extension(profile_path)
|
89
|
-
|
91
|
+
profile_type_name = Match::Generator.profile_type_name(prov_type)
|
92
|
+
dest_profile_path = File.join(output_dir_profiles, "#{profile_type_name}_#{bundle_id}#{profile_extension}")
|
90
93
|
files_to_commit.push(dest_profile_path)
|
91
94
|
IO.copy_stream(profile_path, dest_profile_path)
|
92
95
|
end
|
data/match/lib/match/options.rb
CHANGED
@@ -147,7 +147,7 @@ module Match
|
|
147
147
|
FastlaneCore::ConfigItem.new(key: :git_bearer_authorization,
|
148
148
|
env_name: "MATCH_GIT_BEARER_AUTHORIZATION",
|
149
149
|
sensitive: true,
|
150
|
-
description: "Use a bearer authorization header to access the git repo (e.g.: access to an Azure
|
150
|
+
description: "Use a bearer authorization header to access the git repo (e.g.: access to an Azure DevOps repository), usually a string in Base64",
|
151
151
|
conflicting_options: [:git_basic_authorization, :git_private_key],
|
152
152
|
optional: true,
|
153
153
|
default_value: nil),
|
@@ -18,14 +18,14 @@ module Match
|
|
18
18
|
UI.important("More information https://docs.fastlane.tools/actions/match/#access-control")
|
19
19
|
end
|
20
20
|
|
21
|
+
# Prompts select team if multiple teams and none specified
|
21
22
|
UI.message("Verifying that the certificate and profile are still valid on the Dev Portal...")
|
22
|
-
Spaceship::ConnectAPI.login(use_portal: true, use_tunes: false)
|
23
|
-
Spaceship::ConnectAPI.select_team
|
23
|
+
Spaceship::ConnectAPI.login(user, use_portal: true, use_tunes: false, portal_team_id: team_id, team_name: team_name)
|
24
24
|
end
|
25
25
|
|
26
26
|
# The team ID of the currently logged in team
|
27
27
|
def team_id
|
28
|
-
return Spaceship::ConnectAPI.client.
|
28
|
+
return Spaceship::ConnectAPI.client.portal_team_id
|
29
29
|
end
|
30
30
|
|
31
31
|
def bundle_identifier_exists(username: nil, app_identifier: nil, platform: nil)
|
data/pilot/lib/pilot/options.rb
CHANGED
@@ -12,7 +12,7 @@ module Pilot
|
|
12
12
|
[
|
13
13
|
FastlaneCore::ConfigItem.new(key: :api_key_path,
|
14
14
|
env_name: "PILOT_API_KEY_PATH",
|
15
|
-
description: "Path to your App Store Connect API
|
15
|
+
description: "Path to your App Store Connect API Key JSON file (https://docs.fastlane.tools/app-store-connect-api/#using-fastlane-api-key-json-file)",
|
16
16
|
optional: true,
|
17
17
|
conflicting_options: [:username],
|
18
18
|
verify_block: proc do |value|
|
@@ -20,7 +20,7 @@ module Pilot
|
|
20
20
|
end),
|
21
21
|
FastlaneCore::ConfigItem.new(key: :api_key,
|
22
22
|
env_name: "PILOT_API_KEY",
|
23
|
-
description: "
|
23
|
+
description: "Your App Store Connect API Key information (https://docs.fastlane.tools/app-store-connect-api/#use-return-value-and-pass-in-as-an-option)",
|
24
24
|
type: Hash,
|
25
25
|
optional: true,
|
26
26
|
sensitive: true,
|
@@ -25,6 +25,22 @@ module Precheck
|
|
25
25
|
user ||= CredentialsManager::AppfileConfig.try_fetch_value(:apple_id)
|
26
26
|
|
27
27
|
[
|
28
|
+
FastlaneCore::ConfigItem.new(key: :api_key_path,
|
29
|
+
env_name: "PRECHECK_API_KEY_PATH",
|
30
|
+
description: "Path to your App Store Connect API Key JSON file (https://docs.fastlane.tools/app-store-connect-api/#using-fastlane-api-key-json-file)",
|
31
|
+
optional: true,
|
32
|
+
conflicting_options: [:username],
|
33
|
+
verify_block: proc do |value|
|
34
|
+
UI.user_error!("Couldn't find API key JSON file at path '#{value}'") unless File.exist?(value)
|
35
|
+
end),
|
36
|
+
FastlaneCore::ConfigItem.new(key: :api_key,
|
37
|
+
env_name: "PRECHECK_API_KEY",
|
38
|
+
description: "Your App Store Connect API Key information (https://docs.fastlane.tools/app-store-connect-api/#use-return-value-and-pass-in-as-an-option)",
|
39
|
+
type: Hash,
|
40
|
+
optional: true,
|
41
|
+
sensitive: true,
|
42
|
+
conflicting_options: [:api_key_path, :username]),
|
43
|
+
|
28
44
|
FastlaneCore::ConfigItem.new(key: :app_identifier,
|
29
45
|
short_option: "-a",
|
30
46
|
env_name: "PRECHECK_APP_IDENTIFIER",
|
@@ -60,6 +76,15 @@ module Precheck
|
|
60
76
|
verify_block: proc do |value|
|
61
77
|
ENV["FASTLANE_ITC_TEAM_NAME"] = value.to_s
|
62
78
|
end),
|
79
|
+
FastlaneCore::ConfigItem.new(key: :platform,
|
80
|
+
short_option: "-j",
|
81
|
+
env_name: "PRECHECK_PLATFORM",
|
82
|
+
description: "The platform to use (optional)",
|
83
|
+
optional: true,
|
84
|
+
default_value: "ios",
|
85
|
+
verify_block: proc do |value|
|
86
|
+
UI.user_error!("The platform can only be ios, appletvos, or osx") unless %('ios', 'appletvos', 'osx').include?(value)
|
87
|
+
end),
|
63
88
|
FastlaneCore::ConfigItem.new(key: :default_rule_level,
|
64
89
|
short_option: "-r",
|
65
90
|
env_name: "PRECHECK_DEFAULT_RULE_LEVEL",
|
@@ -1,4 +1,5 @@
|
|
1
1
|
require 'spaceship/tunes/language_item'
|
2
|
+
require 'spaceship/tunes/iap_list'
|
2
3
|
require 'fastlane/markdown_table_formatter'
|
3
4
|
|
4
5
|
require_relative 'module'
|
@@ -43,8 +44,8 @@ module Precheck
|
|
43
44
|
class RuleProcessor
|
44
45
|
def self.process_app_and_version(app: nil, app_version: nil, rules: nil)
|
45
46
|
items_to_check = []
|
46
|
-
items_to_check +=
|
47
|
-
items_to_check +=
|
47
|
+
items_to_check += generate_app_items_to_check(app: app)
|
48
|
+
items_to_check += generate_version_items_to_check(app_version: app_version)
|
48
49
|
|
49
50
|
return process_rules(items_to_check: items_to_check, rules: rules)
|
50
51
|
end
|
@@ -125,66 +126,41 @@ module Precheck
|
|
125
126
|
return rule_hash
|
126
127
|
end
|
127
128
|
|
128
|
-
def self.
|
129
|
+
def self.generate_app_items_to_check(app: nil)
|
129
130
|
items = []
|
130
|
-
items += collect_urls_from_hash(hash: app_version.support_url,
|
131
|
-
item_name: :support_url,
|
132
|
-
friendly_name_postfix: "support URL")
|
133
|
-
items += collect_urls_from_hash(hash: app_version.marketing_url,
|
134
|
-
item_name: :marketing_url,
|
135
|
-
friendly_name_postfix: "marketing URL",
|
136
|
-
is_optional: true)
|
137
|
-
|
138
|
-
items += collect_urls_from_hash(hash: app.details.privacy_url,
|
139
|
-
item_name: :privacy_url,
|
140
|
-
friendly_name_postfix: "privacy URL",
|
141
|
-
is_optional: true)
|
142
|
-
return items
|
143
|
-
end
|
144
131
|
|
145
|
-
|
146
|
-
|
147
|
-
|
148
|
-
|
132
|
+
# App info localizations
|
133
|
+
app_info = app.fetch_edit_app_info
|
134
|
+
app_info_localizations = app_info.get_app_info_localizations
|
135
|
+
app_info_localizations.each do |localization|
|
136
|
+
items << collect_text_items_from_language_item(locale: localization.locale,
|
137
|
+
value: localization.name,
|
138
|
+
item_name: :app_name,
|
139
|
+
friendly_name_postfix: "app name")
|
140
|
+
|
141
|
+
items << collect_text_items_from_language_item(locale: localization.locale,
|
142
|
+
value: localization.subtitle,
|
143
|
+
item_name: :app_subtitle,
|
144
|
+
friendly_name_postfix: "app name subtitle",
|
145
|
+
is_optional: true)
|
146
|
+
|
147
|
+
items << collect_text_items_from_language_item(locale: localization.locale,
|
148
|
+
value: localization.privacy_policy_text,
|
149
|
+
item_name: :privacy_policy_text,
|
150
|
+
friendly_name_postfix: " tv privacy policy")
|
151
|
+
|
152
|
+
items << collect_urls_from_language_item(locale: localization.locale,
|
153
|
+
value: localization.privacy_policy_url,
|
154
|
+
item_name: :privacy_policy_url,
|
155
|
+
friendly_name_postfix: "privacy URL",
|
156
|
+
is_optional: true)
|
149
157
|
end
|
150
|
-
return items
|
151
|
-
end
|
152
|
-
|
153
|
-
def self.generate_text_items_to_check(app: nil, app_version: nil)
|
154
|
-
items = []
|
155
|
-
|
156
|
-
items << TextItemToCheck.new(app_version.copyright, :copyright, "copyright")
|
157
|
-
|
158
|
-
items += collect_text_items_from_language_item(hash: app_version.keywords,
|
159
|
-
item_name: :keywords,
|
160
|
-
friendly_name_postfix: "keywords")
|
161
|
-
|
162
|
-
items += collect_text_items_from_language_item(hash: app_version.description,
|
163
|
-
item_name: :description,
|
164
|
-
friendly_name_postfix: "description")
|
165
|
-
|
166
|
-
items += collect_text_items_from_language_item(hash: app_version.release_notes,
|
167
|
-
item_name: :release_notes,
|
168
|
-
friendly_name_postfix: "release notes")
|
169
|
-
|
170
|
-
items += collect_text_items_from_language_item(hash: app.details.name,
|
171
|
-
item_name: :app_name,
|
172
|
-
friendly_name_postfix: "app name")
|
173
|
-
|
174
|
-
items += collect_text_items_from_language_item(hash: app.details.apple_tv_privacy_policy,
|
175
|
-
item_name: :app_subtitle,
|
176
|
-
friendly_name_postfix: " tv privacy policy")
|
177
|
-
|
178
|
-
items += collect_text_items_from_language_item(hash: app.details.subtitle,
|
179
|
-
item_name: :app_subtitle,
|
180
|
-
friendly_name_postfix: "app name subtitle",
|
181
|
-
is_optional: true)
|
182
158
|
|
183
159
|
should_include_iap = Precheck.config[:include_in_app_purchases]
|
184
160
|
if should_include_iap
|
185
161
|
UI.message("Reading in-app purchases. If you have a lot, this might take a while")
|
186
162
|
UI.message("You can disable IAP checking by setting the `include_in_app_purchases` flag to `false`")
|
187
|
-
in_app_purchases = app.
|
163
|
+
in_app_purchases = get_iaps(app_id: app.id)
|
188
164
|
in_app_purchases ||= []
|
189
165
|
in_app_purchases.each do |purchase|
|
190
166
|
items += collect_iap_language_items(purchase_edit_versions: purchase.edit.versions)
|
@@ -195,6 +171,64 @@ module Precheck
|
|
195
171
|
return items
|
196
172
|
end
|
197
173
|
|
174
|
+
def self.generate_version_items_to_check(app_version: nil)
|
175
|
+
items = []
|
176
|
+
|
177
|
+
items << TextItemToCheck.new(app_version.copyright, :copyright, "copyright")
|
178
|
+
|
179
|
+
# Version localizations
|
180
|
+
version_localizations = app_version.get_app_store_version_localizations
|
181
|
+
version_localizations.each do |localization|
|
182
|
+
items << collect_text_items_from_language_item(locale: localization.locale,
|
183
|
+
value: localization.keywords,
|
184
|
+
item_name: :keywords,
|
185
|
+
friendly_name_postfix: "keywords")
|
186
|
+
|
187
|
+
items << collect_text_items_from_language_item(locale: localization.locale,
|
188
|
+
value: localization.description,
|
189
|
+
item_name: :description,
|
190
|
+
friendly_name_postfix: "description")
|
191
|
+
|
192
|
+
items << collect_text_items_from_language_item(locale: localization.locale,
|
193
|
+
value: localization.whats_new,
|
194
|
+
item_name: :release_notes,
|
195
|
+
friendly_name_postfix: "what's new")
|
196
|
+
|
197
|
+
items << collect_urls_from_language_item(locale: localization.locale,
|
198
|
+
value: localization.support_url,
|
199
|
+
item_name: :support_url,
|
200
|
+
friendly_name_postfix: "support URL")
|
201
|
+
|
202
|
+
items << collect_urls_from_language_item(locale: localization.locale,
|
203
|
+
value: localization.marketing_url,
|
204
|
+
item_name: :marketing_url,
|
205
|
+
friendly_name_postfix: "marketing URL",
|
206
|
+
is_optional: true)
|
207
|
+
end
|
208
|
+
|
209
|
+
return items
|
210
|
+
end
|
211
|
+
|
212
|
+
# As of 2020-09-04, this is the only non App Store Connect call in prechecks
|
213
|
+
# This will need to get replaced when the API becomes available
|
214
|
+
def self.get_iaps(app_id: nil, include_deleted: false)
|
215
|
+
r = Spaceship::Tunes.client.iaps(app_id: app_id)
|
216
|
+
return_iaps = []
|
217
|
+
r.each do |product|
|
218
|
+
attrs = product
|
219
|
+
|
220
|
+
# This is not great but Spaceship::Tunes::IAPList.factory looks
|
221
|
+
# for `application.apple_id`
|
222
|
+
mock_application = OpenStruct.new({ apple_id: app_id })
|
223
|
+
attrs[:application] = mock_application
|
224
|
+
|
225
|
+
loaded_iap = Spaceship::Tunes::IAPList.factory(attrs)
|
226
|
+
next if loaded_iap.status == "deleted" && !include_deleted
|
227
|
+
return_iaps << loaded_iap
|
228
|
+
end
|
229
|
+
return return_iaps
|
230
|
+
end
|
231
|
+
|
198
232
|
def self.collect_iap_language_items(purchase_edit_versions: nil, is_optional: false)
|
199
233
|
items = []
|
200
234
|
purchase_edit_versions.each do |language_key, hash|
|
@@ -207,12 +241,12 @@ module Precheck
|
|
207
241
|
end
|
208
242
|
|
209
243
|
# a few attributes are LanguageItem this method creates a TextItemToCheck for each pair
|
210
|
-
def self.collect_text_items_from_language_item(
|
211
|
-
|
212
|
-
|
213
|
-
|
214
|
-
|
215
|
-
return
|
244
|
+
def self.collect_text_items_from_language_item(locale: nil, value: nil, item_name: nil, friendly_name_postfix: nil, is_optional: false)
|
245
|
+
return TextItemToCheck.new(value, item_name, "#{friendly_name_postfix}: (#{locale})", is_optional)
|
246
|
+
end
|
247
|
+
|
248
|
+
def self.collect_urls_from_language_item(locale: nil, value: nil, item_name: nil, friendly_name_postfix: nil, is_optional: false)
|
249
|
+
return URLItemToCheck.new(value, item_name, "#{friendly_name_postfix}: (#{locale})", is_optional)
|
216
250
|
end
|
217
251
|
end
|
218
252
|
end
|