fastlane 2.146.0 → 2.149.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 +86 -86
- data/cert/lib/cert/commands_generator.rb +1 -0
- data/credentials_manager/lib/credentials_manager/cli.rb +2 -0
- data/deliver/lib/deliver/app_screenshot.rb +3 -3
- data/deliver/lib/deliver/commands_generator.rb +1 -0
- data/deliver/lib/deliver/html_generator.rb +2 -2
- data/deliver/lib/deliver/submit_for_review.rb +5 -1
- data/fastlane/lib/{fastlane/actions/.update_code_signing_settings.rb.swp → assets/.s3_html_template.erb.swp} +0 -0
- data/fastlane/lib/assets/custom_action_template.rb +6 -6
- data/fastlane/lib/assets/s3_html_template.erb +1 -1
- data/fastlane/lib/fastlane/actions/.hipchat.rb.swp +0 -0
- data/fastlane/lib/fastlane/actions/.slack.rb.swp +0 -0
- data/fastlane/lib/fastlane/actions/cocoapods.rb +1 -1
- data/fastlane/lib/fastlane/actions/crashlytics.rb +0 -4
- data/fastlane/lib/fastlane/actions/docs/build_app.md +1 -1
- data/fastlane/lib/fastlane/actions/docs/capture_android_screenshots.md +42 -2
- data/fastlane/lib/fastlane/actions/docs/capture_ios_screenshots.md +3 -1
- data/fastlane/lib/fastlane/actions/docs/frame_screenshots.md +1 -1
- data/fastlane/lib/fastlane/actions/docs/sync_code_signing.md +2 -2
- data/fastlane/lib/fastlane/actions/docs/upload_to_play_store.md +12 -0
- data/fastlane/lib/fastlane/actions/get_managed_play_store_publishing_rights.rb +1 -1
- data/fastlane/lib/fastlane/actions/git_branch.rb +1 -1
- data/fastlane/lib/fastlane/actions/hipchat.rb +1 -1
- data/fastlane/lib/fastlane/actions/push_to_git_remote.rb +1 -1
- data/fastlane/lib/fastlane/actions/set_pod_key.rb +3 -3
- data/fastlane/lib/fastlane/actions/slack.rb +1 -1
- data/fastlane/lib/fastlane/actions/slather.rb +8 -1
- data/fastlane/lib/fastlane/actions/swiftlint.rb +14 -0
- data/fastlane/lib/fastlane/actions/sync_code_signing.rb +1 -1
- data/fastlane/lib/fastlane/actions/testfairy.rb +18 -3
- data/fastlane/lib/fastlane/actions/update_code_signing_settings.rb +7 -2
- data/fastlane/lib/fastlane/actions/upload_symbols_to_crashlytics.rb +2 -2
- data/fastlane/lib/fastlane/actions/verify_xcode.rb +7 -0
- data/fastlane/lib/fastlane/actions/xcodebuild.rb +4 -4
- data/fastlane/lib/fastlane/cli_tools_distributor.rb +28 -6
- data/fastlane/lib/fastlane/commands_generator.rb +5 -2
- data/fastlane/lib/fastlane/documentation/actions_list.rb +1 -1
- data/fastlane/lib/fastlane/helper/lane_helper.rb +13 -0
- data/fastlane/lib/fastlane/lane_manager.rb +0 -10
- data/fastlane/lib/fastlane/plugins/plugin_manager.rb +3 -3
- data/fastlane/lib/fastlane/plugins/template/.github/workflows/test.yml +29 -0
- data/fastlane/lib/fastlane/swift_fastlane_function.rb +15 -2
- data/fastlane/lib/fastlane/swift_lane_manager.rb +0 -8
- data/fastlane/lib/fastlane/version.rb +1 -1
- data/fastlane/swift/Deliverfile.swift +1 -1
- data/fastlane/swift/Fastlane.swift +130 -26
- data/fastlane/swift/Gymfile.swift +1 -1
- data/fastlane/swift/GymfileProtocol.swift +1 -1
- data/fastlane/swift/LaneFileProtocol.swift +5 -2
- data/fastlane/swift/Matchfile.swift +1 -1
- data/fastlane/swift/MatchfileProtocol.swift +9 -1
- data/fastlane/swift/Precheckfile.swift +1 -1
- data/fastlane/swift/Scanfile.swift +1 -1
- data/fastlane/swift/ScanfileProtocol.swift +15 -3
- data/fastlane/swift/Screengrabfile.swift +1 -1
- data/fastlane/swift/Snapshotfile.swift +1 -1
- data/fastlane/swift/SnapshotfileProtocol.swift +25 -1
- data/fastlane_core/lib/fastlane_core/helper.rb +17 -0
- data/fastlane_core/lib/fastlane_core/keychain_importer.rb +46 -2
- data/fastlane_core/lib/fastlane_core/project.rb +1 -0
- data/frameit/lib/frameit/commands_generator.rb +1 -0
- data/frameit/lib/frameit/device_types.rb +10 -0
- data/frameit/lib/frameit/options.rb +5 -2
- data/frameit/lib/frameit/runner.rb +5 -0
- data/frameit/lib/frameit/screenshot.rb +1 -0
- data/gym/lib/gym/generators/package_command_generator.rb +4 -0
- data/gym/lib/gym/generators/package_command_generator_xcode7.rb +4 -0
- data/gym/lib/gym/options.rb +1 -1
- data/gym/lib/gym/runner.rb +14 -0
- data/match/lib/match/change_password.rb +1 -18
- data/match/lib/match/commands_generator.rb +1 -0
- data/match/lib/match/encryption/openssl.rb +1 -1
- data/match/lib/match/generator.rb +7 -2
- data/match/lib/match/nuke.rb +21 -16
- data/match/lib/match/options.rb +23 -1
- data/match/lib/match/storage/git_storage.rb +4 -0
- data/match/lib/match/storage/google_cloud_storage.rb +4 -0
- data/match/lib/match/storage/interface.rb +4 -0
- data/match/lib/match/storage/s3_storage.rb +4 -0
- data/match/lib/match/utils.rb +1 -1
- data/pem/lib/pem/commands_generator.rb +1 -0
- data/pilot/lib/pilot/build_manager.rb +23 -7
- data/pilot/lib/pilot/options.rb +5 -0
- data/produce/lib/produce/commands_generator.rb +1 -0
- data/scan/lib/scan/.options.rb.swp +0 -0
- data/scan/lib/scan/detect_values.rb +3 -0
- data/scan/lib/scan/options.rb +26 -3
- data/scan/lib/scan/runner.rb +2 -0
- data/scan/lib/scan/test_command_generator.rb +7 -2
- data/scan/lib/scan/test_result_parser.rb +9 -2
- data/screengrab/lib/screengrab/runner.rb +10 -9
- data/sigh/lib/sigh/commands_generator.rb +1 -0
- data/sigh/lib/sigh/options.rb +7 -1
- data/sigh/lib/sigh/runner.rb +2 -1
- data/snapshot/lib/assets/SnapfileTemplate +3 -0
- data/snapshot/lib/assets/SnapshotHelper.swift +12 -33
- data/snapshot/lib/snapshot/detect_values.rb +15 -0
- data/snapshot/lib/snapshot/options.rb +42 -0
- data/snapshot/lib/snapshot/reports_generator.rb +1 -1
- data/snapshot/lib/snapshot/simulator_launchers/launcher_configuration.rb +2 -0
- data/snapshot/lib/snapshot/simulator_launchers/simulator_launcher.rb +4 -0
- data/snapshot/lib/snapshot/simulator_launchers/simulator_launcher_base.rb +24 -1
- data/snapshot/lib/snapshot/test_command_generator.rb +8 -3
- data/snapshot/lib/snapshot/test_command_generator_base.rb +10 -1
- data/spaceship/lib/spaceship/base.rb +1 -1
- data/spaceship/lib/spaceship/client.rb +9 -1
- data/spaceship/lib/spaceship/commands_generator.rb +1 -0
- data/spaceship/lib/spaceship/connect_api/model.rb +6 -0
- data/spaceship/lib/spaceship/connect_api/models/build.rb +4 -0
- data/spaceship/lib/spaceship/errors.rb +3 -0
- data/spaceship/lib/spaceship/tunes/iap.rb +15 -0
- data/spaceship/lib/spaceship/tunes/tunes_client.rb +14 -0
- data/supply/lib/supply/commands_generator.rb +1 -0
- data/supply/lib/supply/options.rb +9 -0
- data/supply/lib/supply/uploader.rb +4 -0
- metadata +47 -30
@@ -60,7 +60,7 @@ protocol GymfileProtocol: class {
|
|
60
60
|
/// Platform to build when using a Catalyst enabled app. Valid values are: ios, macos
|
61
61
|
var catalystPlatform: String? { get }
|
62
62
|
|
63
|
-
/// Full name of 3rd Party Mac Developer Installer or
|
63
|
+
/// Full name of 3rd Party Mac Developer Installer or Developer ID Installer certificate. Example: `3rd Party Mac Developer Installer: Your Company (ABC1234XWYZ)`
|
64
64
|
var installerCertName: String? { get }
|
65
65
|
|
66
66
|
/// The directory in which the archive should be stored in
|
@@ -19,6 +19,7 @@ public protocol LaneFileProtocol: class {
|
|
19
19
|
static func runLane(named: String, parameters: [String : String]) -> Bool
|
20
20
|
|
21
21
|
func recordLaneDescriptions()
|
22
|
+
func beforeAll(currentLane: String, parameters: [String : String])
|
22
23
|
func beforeAll()
|
23
24
|
func afterAll(currentLane: String)
|
24
25
|
func onError(currentLane: String, errorInfo: String)
|
@@ -26,6 +27,7 @@ public protocol LaneFileProtocol: class {
|
|
26
27
|
|
27
28
|
public extension LaneFileProtocol {
|
28
29
|
var fastlaneVersion: String { return "" } // default "" because that means any is fine
|
30
|
+
func beforeAll(currentLane: String, parameters: [String : String]) { } // no op by default
|
29
31
|
func beforeAll() { } // no op by default
|
30
32
|
func afterAll(currentLane: String) { } // no op by default
|
31
33
|
func onError(currentLane: String, errorInfo: String) {} // no op by default
|
@@ -37,7 +39,8 @@ public class LaneFile: NSObject, LaneFileProtocol {
|
|
37
39
|
private(set) static var fastfileInstance: Fastfile?
|
38
40
|
|
39
41
|
// Called before any lane is executed.
|
40
|
-
private func setupAllTheThings() {
|
42
|
+
private func setupAllTheThings(lane: String, parameters: [String : String]) {
|
43
|
+
LaneFile.fastfileInstance!.beforeAll(currentLane: lane, parameters: parameters)
|
41
44
|
LaneFile.fastfileInstance!.beforeAll()
|
42
45
|
}
|
43
46
|
|
@@ -123,7 +126,7 @@ public class LaneFile: NSObject, LaneFileProtocol {
|
|
123
126
|
}
|
124
127
|
|
125
128
|
// call all methods that need to be called before we start calling lanes
|
126
|
-
fastfileInstance.setupAllTheThings()
|
129
|
+
fastfileInstance.setupAllTheThings(lane: named, parameters: parameters)
|
127
130
|
|
128
131
|
// We need to catch all possible errors here and display a nice message
|
129
132
|
_ = fastfileInstance.perform(NSSelectorFromString(laneMethod), with: parameters)
|
@@ -99,6 +99,12 @@ protocol MatchfileProtocol: class {
|
|
99
99
|
/// The name of provisioning profile template. If the developer account has provisioning profile templates (aka: custom entitlements), the template name can be found by inspecting the Entitlements drop-down while creating/editing a provisioning profile (e.g. "Apple Pay Pass Suppression Development")
|
100
100
|
var templateName: String? { get }
|
101
101
|
|
102
|
+
/// A custom name for the provisioning profile. This will replace the default provisioning profile name if specified
|
103
|
+
var profileName: String? { get }
|
104
|
+
|
105
|
+
/// Should the command fail if it was about to create a duplicate of an existing provisioning profile. It can happen due to issues on Apple Developer Portal, when profile to be recreated was not properly deleted first
|
106
|
+
var failOnNameTaken: Bool { get }
|
107
|
+
|
102
108
|
/// Path in which to export certificates, key and profile
|
103
109
|
var outputPath: String? { get }
|
104
110
|
|
@@ -140,10 +146,12 @@ extension MatchfileProtocol {
|
|
140
146
|
var skipDocs: Bool { return false }
|
141
147
|
var platform: String { return "ios" }
|
142
148
|
var templateName: String? { return nil }
|
149
|
+
var profileName: String? { return nil }
|
150
|
+
var failOnNameTaken: Bool { return false }
|
143
151
|
var outputPath: String? { return nil }
|
144
152
|
var verbose: Bool { return false }
|
145
153
|
}
|
146
154
|
|
147
155
|
// Please don't remove the lines below
|
148
156
|
// They are used to detect outdated files
|
149
|
-
// FastlaneRunnerAPIVersion [0.9.
|
157
|
+
// FastlaneRunnerAPIVersion [0.9.17]
|
@@ -45,6 +45,12 @@ protocol ScanfileProtocol: class {
|
|
45
45
|
/// The testplan associated with the scheme that should be used for testing
|
46
46
|
var testplan: String? { get }
|
47
47
|
|
48
|
+
/// Array of strings matching test plan configurations to run
|
49
|
+
var onlyTestConfigurations: String? { get }
|
50
|
+
|
51
|
+
/// Array of strings matching test plan configurations to skip
|
52
|
+
var skipTestConfigurations: String? { get }
|
53
|
+
|
48
54
|
/// Run tests using the provided `.xctestrun` file
|
49
55
|
var xctestrun: String? { get }
|
50
56
|
|
@@ -66,10 +72,13 @@ protocol ScanfileProtocol: class {
|
|
66
72
|
/// Should the HTML report be opened when tests are completed?
|
67
73
|
var openReport: Bool { get }
|
68
74
|
|
75
|
+
/// Disable xcpretty formatting of build, similar to `output_style='raw'` but this will also skip the test results table
|
76
|
+
var disableXcpretty: Bool? { get }
|
77
|
+
|
69
78
|
/// The directory in which all reports will be stored
|
70
79
|
var outputDirectory: String { get }
|
71
80
|
|
72
|
-
/// Define how the output should look like. Valid values are: standard, basic, rspec, or raw (disables xcpretty)
|
81
|
+
/// Define how the output should look like. Valid values are: standard, basic, rspec, or raw (disables xcpretty during xcodebuild)
|
73
82
|
var outputStyle: String? { get }
|
74
83
|
|
75
84
|
/// Comma separated list of the output types (e.g. html, junit, json-compilation-database)
|
@@ -197,6 +206,8 @@ extension ScanfileProtocol {
|
|
197
206
|
var onlyTesting: String? { return nil }
|
198
207
|
var skipTesting: String? { return nil }
|
199
208
|
var testplan: String? { return nil }
|
209
|
+
var onlyTestConfigurations: String? { return nil }
|
210
|
+
var skipTestConfigurations: String? { return nil }
|
200
211
|
var xctestrun: String? { return nil }
|
201
212
|
var toolchain: String? { return nil }
|
202
213
|
var clean: Bool { return false }
|
@@ -204,6 +215,7 @@ extension ScanfileProtocol {
|
|
204
215
|
var addressSanitizer: Bool? { return nil }
|
205
216
|
var threadSanitizer: Bool? { return nil }
|
206
217
|
var openReport: Bool { return false }
|
218
|
+
var disableXcpretty: Bool? { return nil }
|
207
219
|
var outputDirectory: String { return "./test_output" }
|
208
220
|
var outputStyle: String? { return nil }
|
209
221
|
var outputTypes: String { return "html,junit" }
|
@@ -234,7 +246,7 @@ extension ScanfileProtocol {
|
|
234
246
|
var slackMessage: String? { return nil }
|
235
247
|
var slackUseWebhookConfiguredUsernameAndIcon: Bool { return false }
|
236
248
|
var slackUsername: String { return "fastlane" }
|
237
|
-
var slackIconUrl: String { return "https://
|
249
|
+
var slackIconUrl: String { return "https://fastlane.tools/assets/img/fastlane_icon.png" }
|
238
250
|
var skipSlack: Bool { return false }
|
239
251
|
var slackOnlyOnFailure: Bool { return false }
|
240
252
|
var destination: String? { return nil }
|
@@ -246,4 +258,4 @@ extension ScanfileProtocol {
|
|
246
258
|
|
247
259
|
// Please don't remove the lines below
|
248
260
|
// They are used to detect outdated files
|
249
|
-
// FastlaneRunnerAPIVersion [0.9.
|
261
|
+
// FastlaneRunnerAPIVersion [0.9.30]
|
@@ -45,6 +45,9 @@ protocol SnapshotfileProtocol: class {
|
|
45
45
|
/// Enabling this option will automatically erase the simulator before running the application
|
46
46
|
var eraseSimulator: Bool { get }
|
47
47
|
|
48
|
+
/// Enabling this option wil automatically override the status bar to show 9:41 AM, full battery, and full reception
|
49
|
+
var overrideStatusBar: Bool { get }
|
50
|
+
|
48
51
|
/// Enabling this option will configure the Simulator's system language
|
49
52
|
var localizeSimulator: Bool { get }
|
50
53
|
|
@@ -60,6 +63,9 @@ protocol SnapshotfileProtocol: class {
|
|
60
63
|
/// A list of videos that should be added to the simulator before running the application
|
61
64
|
var addVideos: [String]? { get }
|
62
65
|
|
66
|
+
/// A path to screenshots.html template
|
67
|
+
var htmlTemplate: String { get }
|
68
|
+
|
63
69
|
/// The directory where to store the build log
|
64
70
|
var buildlogPath: String { get }
|
65
71
|
|
@@ -107,6 +113,18 @@ protocol SnapshotfileProtocol: class {
|
|
107
113
|
|
108
114
|
/// Sets a custom path for Swift Package Manager dependencies
|
109
115
|
var clonedSourcePackagesPath: String? { get }
|
116
|
+
|
117
|
+
/// The testplan associated with the scheme that should be used for testing
|
118
|
+
var testplan: String? { get }
|
119
|
+
|
120
|
+
/// Array of strings matching Test Bundle/Test Suite/Test Cases to run
|
121
|
+
var onlyTesting: String? { get }
|
122
|
+
|
123
|
+
/// Array of strings matching Test Bundle/Test Suite/Test Cases to skip
|
124
|
+
var skipTesting: String? { get }
|
125
|
+
|
126
|
+
/// Disable xcpretty formatting of build
|
127
|
+
var disableXcpretty: Bool? { get }
|
110
128
|
}
|
111
129
|
|
112
130
|
extension SnapshotfileProtocol {
|
@@ -125,11 +143,13 @@ extension SnapshotfileProtocol {
|
|
125
143
|
var clearPreviousScreenshots: Bool { return false }
|
126
144
|
var reinstallApp: Bool { return false }
|
127
145
|
var eraseSimulator: Bool { return false }
|
146
|
+
var overrideStatusBar: Bool { return false }
|
128
147
|
var localizeSimulator: Bool { return false }
|
129
148
|
var darkMode: Bool? { return nil }
|
130
149
|
var appIdentifier: String? { return nil }
|
131
150
|
var addPhotos: [String]? { return nil }
|
132
151
|
var addVideos: [String]? { return nil }
|
152
|
+
var htmlTemplate: String { return "/Users/josh/Projects/fastlane/fastlane/snapshot/lib/snapshot/page.html.erb" }
|
133
153
|
var buildlogPath: String { return "~/Library/Logs/snapshot" }
|
134
154
|
var clean: Bool { return false }
|
135
155
|
var testWithoutBuilding: Bool? { return nil }
|
@@ -146,8 +166,12 @@ extension SnapshotfileProtocol {
|
|
146
166
|
var concurrentSimulators: Bool { return true }
|
147
167
|
var disableSlideToType: Bool { return false }
|
148
168
|
var clonedSourcePackagesPath: String? { return nil }
|
169
|
+
var testplan: String? { return nil }
|
170
|
+
var onlyTesting: String? { return nil }
|
171
|
+
var skipTesting: String? { return nil }
|
172
|
+
var disableXcpretty: Bool? { return nil }
|
149
173
|
}
|
150
174
|
|
151
175
|
// Please don't remove the lines below
|
152
176
|
// They are used to detect outdated files
|
153
|
-
// FastlaneRunnerAPIVersion [0.9.
|
177
|
+
// FastlaneRunnerAPIVersion [0.9.10]
|
@@ -416,5 +416,22 @@ module FastlaneCore
|
|
416
416
|
UI.deprecated("Helper.log is deprecated. Use `UI` class instead")
|
417
417
|
UI.current.log
|
418
418
|
end
|
419
|
+
|
420
|
+
def self.ask_password(message: "Passphrase: ", confirm: nil)
|
421
|
+
raise "This code should only run in interactive mode" unless UI.interactive?
|
422
|
+
|
423
|
+
loop do
|
424
|
+
password = UI.password(message)
|
425
|
+
if confirm
|
426
|
+
password2 = UI.password("Type passphrase again: ")
|
427
|
+
if password == password2
|
428
|
+
return password
|
429
|
+
end
|
430
|
+
else
|
431
|
+
return password
|
432
|
+
end
|
433
|
+
UI.error("Passphrases differ. Try again")
|
434
|
+
end
|
435
|
+
end
|
419
436
|
end
|
420
437
|
end
|
@@ -1,9 +1,10 @@
|
|
1
1
|
require_relative 'helper'
|
2
2
|
require 'open3'
|
3
|
+
require 'security'
|
3
4
|
|
4
5
|
module FastlaneCore
|
5
6
|
class KeychainImporter
|
6
|
-
def self.import_file(path, keychain_path, keychain_password:
|
7
|
+
def self.import_file(path, keychain_path, keychain_password: nil, certificate_password: "", output: FastlaneCore::Globals.verbose?)
|
7
8
|
UI.user_error!("Could not find file '#{path}'") unless File.exist?(path)
|
8
9
|
|
9
10
|
command = "security import #{path.shellescape} -k '#{keychain_path.shellescape}'"
|
@@ -19,6 +20,7 @@ module FastlaneCore
|
|
19
20
|
|
20
21
|
# Set partition list only if success since it can be a time consuming process if a lot of keys are installed
|
21
22
|
if thrd.value.success?
|
23
|
+
keychain_password ||= resolve_keychain_password(keychain_path)
|
22
24
|
set_partition_list(path, keychain_path, keychain_password: keychain_password, output: output)
|
23
25
|
else
|
24
26
|
# Output verbose if file is already installed since not an error otherwise we will show the whole error
|
@@ -32,7 +34,7 @@ module FastlaneCore
|
|
32
34
|
end
|
33
35
|
end
|
34
36
|
|
35
|
-
def self.set_partition_list(path, keychain_path, keychain_password:
|
37
|
+
def self.set_partition_list(path, keychain_path, keychain_password: nil, output: FastlaneCore::Globals.verbose?)
|
36
38
|
# When security supports partition lists, also add the partition IDs
|
37
39
|
# See https://openradar.appspot.com/28524119
|
38
40
|
if Helper.backticks('security -h | grep set-key-partition-list', print: false).length > 0
|
@@ -53,6 +55,9 @@ module FastlaneCore
|
|
53
55
|
|
54
56
|
# Inform user when no/wrong password was used as its needed to prevent UI permission popup from Xcode when signing
|
55
57
|
if err.include?("SecKeychainItemSetAccessWithPassword")
|
58
|
+
keychain_name = File.basename(keychain_path, ".*")
|
59
|
+
Security::InternetPassword.delete(server: server_name(keychain_name))
|
60
|
+
|
56
61
|
UI.important("")
|
57
62
|
UI.important("Could not configure imported keychain item (certificate) to prevent UI permission popup when code signing\n" \
|
58
63
|
"Check if you supplied the correct `keychain_password` for keychain: `#{keychain_path}`\n" \
|
@@ -72,5 +77,44 @@ module FastlaneCore
|
|
72
77
|
|
73
78
|
end
|
74
79
|
end
|
80
|
+
|
81
|
+
# https://github.com/fastlane/fastlane/issues/14196
|
82
|
+
# Keychain password is needed to set the partition list to
|
83
|
+
# prevent Xcode from prompting dialog for keychain password when signing
|
84
|
+
# 1. Uses keychain password from login keychain if found
|
85
|
+
# 2. Prompts user for keychain password and stores it in login keychain for user later
|
86
|
+
def self.resolve_keychain_password(keychain_path)
|
87
|
+
keychain_name = File.basename(keychain_path, ".*")
|
88
|
+
server = server_name(keychain_name)
|
89
|
+
|
90
|
+
# Attempt to find password in keychain for keychain
|
91
|
+
item = Security::InternetPassword.find(server: server)
|
92
|
+
if item
|
93
|
+
keychain_password = item.password
|
94
|
+
UI.important("Using keychain password from keychain item #{server} in #{keychain_path}")
|
95
|
+
end
|
96
|
+
|
97
|
+
if keychain_password.nil?
|
98
|
+
if UI.interactive?
|
99
|
+
UI.important("Enter the password for #{keychain_path}")
|
100
|
+
UI.important("This passphrase will be stored in your local keychain with the name #{server} and used in future runs")
|
101
|
+
UI.important("This prompt can be avoided by specifying the 'keychain_password' option or 'MATCH_KEYCHAIN_PASSWORD' environment variable")
|
102
|
+
keychain_password = FastlaneCore::Helper.ask_password(message: "Password for #{keychain_name} keychain: ", confirm: true)
|
103
|
+
Security::InternetPassword.add(server, "", keychain_password)
|
104
|
+
else
|
105
|
+
UI.important("Keychain password for #{keychain_path} was not specified and not found in your keychain. Specify the 'keychain_password' option to prevent the UI permission popup when code signing")
|
106
|
+
keychain_password = ""
|
107
|
+
end
|
108
|
+
end
|
109
|
+
|
110
|
+
return keychain_password
|
111
|
+
end
|
112
|
+
|
113
|
+
# server name used for accessing the macOS keychain
|
114
|
+
def self.server_name(keychain_name)
|
115
|
+
["fastlane", "keychain", keychain_name].join("_")
|
116
|
+
end
|
117
|
+
|
118
|
+
private_class_method :server_name
|
75
119
|
end
|
76
120
|
end
|
@@ -321,6 +321,7 @@ module FastlaneCore
|
|
321
321
|
proj << "-project #{options[:project].shellescape}" if options[:project]
|
322
322
|
proj << "-configuration #{options[:configuration].shellescape}" if options[:configuration]
|
323
323
|
proj << "-xcconfig #{options[:xcconfig].shellescape}" if options[:xcconfig]
|
324
|
+
proj << "-derivedDataPath #{options[:derived_data_path].shellescape}" if options[:derived_data_path]
|
324
325
|
|
325
326
|
if FastlaneCore::Helper.xcode_at_least?('11.0') && options[:cloned_source_packages_path]
|
326
327
|
proj << "-clonedSourcePackagesDirPath #{options[:cloned_source_packages_path].shellescape}"
|
@@ -64,6 +64,14 @@ module Frameit
|
|
64
64
|
def self.all_platforms
|
65
65
|
Platform.constants.map { |c| Platform.const_get(c) }
|
66
66
|
end
|
67
|
+
|
68
|
+
def self.symbol_to_constant(symbol)
|
69
|
+
if symbol == :android
|
70
|
+
ANDROID
|
71
|
+
else
|
72
|
+
IOS
|
73
|
+
end
|
74
|
+
end
|
67
75
|
end
|
68
76
|
|
69
77
|
module Devices
|
@@ -119,6 +127,8 @@ module Frameit
|
|
119
127
|
IPAD_PRO = Frameit::Device.new("ipad-pro", "Apple iPad Pro", 3, [[2048, 2732], [2732, 2048]], 264, Color::SPACE_GRAY, Platform::IOS, Deliver::AppScreenshot::ScreenSize::IOS_IPAD_PRO)
|
120
128
|
# 3rd generation:
|
121
129
|
IPAD_PRO_12_9 = Frameit::Device.new("ipadPro129", "Apple iPad Pro (12.9-inch) (3rd generation)", 4, [[2048, 2732], [2732, 2048]], 264, Color::SPACE_GRAY, Platform::IOS, Deliver::AppScreenshot::ScreenSize::IOS_IPAD_PRO_12_9)
|
130
|
+
# 4th generation:
|
131
|
+
IPAD_PRO_12_9_4 = Frameit::Device.new("ipadPro129", "Apple iPad Pro (12.9-inch) (4th generation)", 5, [[2048, 2732], [2732, 2048]], 264, Color::SPACE_GRAY, Platform::IOS, Deliver::AppScreenshot::ScreenSize::IOS_IPAD_PRO_12_9)
|
122
132
|
# iPad Pro (10.5-inch) is not in frameit-frames repo, but must be included so that we are backward compatible with PR #15373
|
123
133
|
# priority must be lower so that users who didn't copy the frame to their frameit frames folder will not get an error
|
124
134
|
# ID and formatted name must be exactly as specified so that device.detect_device() will select this device if the filename includes them
|
@@ -1,4 +1,6 @@
|
|
1
1
|
require 'fastlane_core/configuration/config_item'
|
2
|
+
require 'fastlane/actions/actions_helper'
|
3
|
+
require 'fastlane/helper/lane_helper'
|
2
4
|
|
3
5
|
require_relative 'module'
|
4
6
|
require_relative 'config_parser'
|
@@ -97,9 +99,10 @@ module Frameit
|
|
97
99
|
type: Boolean),
|
98
100
|
FastlaneCore::ConfigItem.new(key: :use_platform,
|
99
101
|
env_name: "FRAMEIT_USE_PLATFORM",
|
100
|
-
description: "Choose a platform, the valid options are IOS, ANDROID and ANY (
|
102
|
+
description: "Choose a platform, the valid options are IOS, ANDROID and ANY (default is either general platform defined in the fastfile or IOS to ensure backward compatibility)",
|
101
103
|
optional: true,
|
102
|
-
default_value: Platform::
|
104
|
+
default_value: Platform.symbol_to_constant(Fastlane::Helper::LaneHelper.current_platform),
|
105
|
+
default_value_dynamic: true,
|
103
106
|
verify_block: proc do |value|
|
104
107
|
UI.user_error!("Invalid platform type '#{value}'. Available values are " + Platform.all_platforms.join(', ') + ".") unless ConfigParser.supported_platform?(value)
|
105
108
|
end)
|
@@ -82,8 +82,13 @@ module Frameit
|
|
82
82
|
# Loads the config (colors, background, texts, etc.)
|
83
83
|
# Don't use this method to access the actual text and use `fetch_texts` instead
|
84
84
|
def create_config(screenshot_path)
|
85
|
+
# Screengrab pulls screenshots to a different folder location
|
86
|
+
# frameit only handles two levels of folders, to not break
|
87
|
+
# compatibility with Supply we look into a different path for Android
|
88
|
+
# Issue https://github.com/fastlane/fastlane/issues/16289
|
85
89
|
config_path = File.join(File.expand_path("..", screenshot_path), "Framefile.json")
|
86
90
|
config_path = File.join(File.expand_path("../..", screenshot_path), "Framefile.json") unless File.exist?(config_path)
|
91
|
+
config_path = File.join(File.expand_path("../../../..", screenshot_path), "Framefile.json") unless File.exist?(config_path)
|
87
92
|
file = ConfigParser.new.load(config_path)
|
88
93
|
return {} unless file # no config file at all
|
89
94
|
file.fetch_value(screenshot_path)
|
@@ -27,6 +27,7 @@ module Frameit
|
|
27
27
|
# - see Parameters in the doc
|
28
28
|
# - contains default values and validates values
|
29
29
|
# - accessed via Frameit.config[:key]
|
30
|
+
# - default value is either general platform from fastfile or IOS if run directly
|
30
31
|
# - lowest priority
|
31
32
|
# - commands_generator.rb
|
32
33
|
# - commands entered directly to CLI (e. g. fastlane frameit android)
|
@@ -53,6 +53,10 @@ module Gym
|
|
53
53
|
generator.asset_packs_path
|
54
54
|
end
|
55
55
|
|
56
|
+
def appstore_info_path
|
57
|
+
generator.appstore_info_path
|
58
|
+
end
|
59
|
+
|
56
60
|
# The generator we need to use for the currently used Xcode version
|
57
61
|
# Since we dropped Xcode 6 support, it's just this class, but maybe we'll have
|
58
62
|
# new classes in the future
|
@@ -141,6 +141,10 @@ module Gym
|
|
141
141
|
Gym.cache[:asset_packs_path] ||= File.join(temporary_output_path, "OnDemandResources")
|
142
142
|
end
|
143
143
|
|
144
|
+
def appstore_info_path
|
145
|
+
Gym.cache[:appstore_info_path] ||= File.join(temporary_output_path, "AppStoreInfo.plist")
|
146
|
+
end
|
147
|
+
|
144
148
|
private
|
145
149
|
|
146
150
|
def normalize_export_options(hash)
|