fastlane 2.136.0 → 2.141.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 +85 -72
- data/cert/lib/cert/options.rb +12 -5
- data/cert/lib/cert/runner.rb +13 -0
- data/deliver/lib/deliver/options.rb +2 -2
- data/deliver/lib/deliver/runner.rb +13 -2
- data/deliver/lib/deliver/submit_for_review.rb +7 -1
- data/fastlane/lib/fastlane/action.rb +2 -2
- data/fastlane/lib/fastlane/actions/app_store_build_number.rb +1 -1
- data/fastlane/lib/fastlane/actions/build_app.rb +157 -6
- data/fastlane/lib/fastlane/actions/build_ios_app.rb +28 -132
- data/fastlane/lib/fastlane/actions/build_mac_app.rb +46 -0
- data/fastlane/lib/fastlane/actions/create_pull_request.rb +71 -2
- data/fastlane/lib/fastlane/actions/docs/{build_ios_app.md → build_app.md} +1 -1
- data/fastlane/lib/fastlane/actions/docs/sync_code_signing.md +19 -0
- data/fastlane/lib/fastlane/actions/docs/upload_to_app_store.md.erb +10 -0
- data/fastlane/lib/fastlane/actions/docs/upload_to_play_store.md +4 -2
- data/fastlane/lib/fastlane/actions/ensure_bundle_exec.rb +3 -3
- data/fastlane/lib/fastlane/actions/get_version_number.rb +7 -2
- data/fastlane/lib/fastlane/actions/gradle.rb +54 -3
- data/fastlane/lib/fastlane/actions/gym.rb +3 -7
- data/fastlane/lib/fastlane/actions/import_from_git.rb +4 -0
- data/fastlane/lib/fastlane/actions/increment_version_number.rb +6 -3
- data/fastlane/lib/fastlane/actions/last_git_tag.rb +14 -5
- data/fastlane/lib/fastlane/actions/latest_testflight_build_number.rb +2 -2
- data/fastlane/lib/fastlane/actions/register_devices.rb +5 -1
- data/fastlane/lib/fastlane/actions/ruby_version.rb +1 -1
- data/fastlane/lib/fastlane/actions/run_tests.rb +5 -22
- data/fastlane/lib/fastlane/actions/set_github_release.rb +1 -1
- data/fastlane/lib/fastlane/actions/setup_ci.rb +14 -8
- data/fastlane/lib/fastlane/actions/testfairy.rb +8 -1
- data/fastlane/lib/fastlane/actions/update_plist.rb +37 -2
- data/fastlane/lib/fastlane/actions/upload_to_app_store.rb +1 -0
- data/fastlane/lib/fastlane/actions/upload_to_play_store_internal_app_sharing.rb +78 -0
- data/fastlane/lib/fastlane/actions/verify_build.rb +1 -1
- data/fastlane/lib/fastlane/actions/xcode_select.rb +6 -1
- data/fastlane/lib/fastlane/cli_tools_distributor.rb +2 -2
- data/fastlane/lib/fastlane/commands_generator.rb +1 -1
- data/fastlane/lib/fastlane/fast_file.rb +13 -3
- data/fastlane/lib/fastlane/helper/adb_helper.rb +13 -4
- data/fastlane/lib/fastlane/plugins/template/.rubocop.yml +2 -0
- data/fastlane/lib/fastlane/runner.rb +23 -18
- data/fastlane/lib/fastlane/version.rb +1 -1
- data/fastlane/swift/Deliverfile.swift +1 -1
- data/fastlane/swift/DeliverfileProtocol.swift +3 -3
- data/fastlane/swift/Fastlane.swift +342 -66
- data/fastlane/swift/Gymfile.swift +1 -1
- data/fastlane/swift/GymfileProtocol.swift +17 -1
- data/fastlane/swift/Matchfile.swift +1 -1
- data/fastlane/swift/MatchfileProtocol.swift +12 -4
- data/fastlane/swift/Precheckfile.swift +1 -1
- data/fastlane/swift/Scanfile.swift +1 -1
- data/fastlane/swift/ScanfileProtocol.swift +17 -1
- data/fastlane/swift/Screengrabfile.swift +1 -1
- data/fastlane/swift/ScreengrabfileProtocol.swift +1 -9
- data/fastlane/swift/Snapshotfile.swift +1 -1
- data/fastlane/swift/SnapshotfileProtocol.swift +9 -1
- data/fastlane_core/lib/fastlane_core/build_watcher.rb +6 -2
- data/fastlane_core/lib/fastlane_core/cert_checker.rb +28 -0
- data/fastlane_core/lib/fastlane_core/device_manager.rb +20 -0
- data/fastlane_core/lib/fastlane_core/helper.rb +7 -1
- data/fastlane_core/lib/fastlane_core/project.rb +23 -0
- data/frameit/lib/frameit/editor.rb +3 -0
- data/gym/lib/gym/code_signing_mapping.rb +32 -3
- data/gym/lib/gym/detect_values.rb +34 -2
- data/gym/lib/gym/generators/build_command_generator.rb +1 -0
- data/gym/lib/gym/generators/package_command_generator.rb +4 -0
- data/gym/lib/gym/generators/package_command_generator_xcode7.rb +47 -17
- data/gym/lib/gym/module.rb +8 -0
- data/gym/lib/gym/options.rb +25 -1
- data/gym/lib/gym/runner.rb +63 -23
- data/match/lib/match/encryption/openssl.rb +1 -1
- data/match/lib/match/generator.rb +17 -3
- data/match/lib/match/module.rb +4 -1
- data/match/lib/match/nuke.rb +54 -16
- data/match/lib/match/options.rb +28 -15
- data/match/lib/match/runner.rb +21 -8
- data/match/lib/match/spaceship_ensure.rb +19 -9
- data/match/lib/match/storage/git_storage.rb +11 -3
- data/pilot/lib/pilot/build_manager.rb +46 -12
- data/pilot/lib/pilot/options.rb +3 -1
- data/scan/lib/scan/detect_values.rb +6 -1
- data/scan/lib/scan/manager.rb +18 -1
- data/scan/lib/scan/options.rb +23 -1
- data/scan/lib/scan/runner.rb +6 -0
- data/scan/lib/scan/slack_poster.rb +1 -1
- data/scan/lib/scan/test_command_generator.rb +1 -1
- data/screengrab/lib/screengrab/options.rb +1 -10
- data/screengrab/lib/screengrab/runner.rb +16 -19
- data/snapshot/lib/snapshot/options.rb +12 -1
- data/snapshot/lib/snapshot/simulator_launchers/launcher_configuration.rb +2 -0
- data/snapshot/lib/snapshot/simulator_launchers/simulator_launcher_base.rb +11 -0
- data/spaceship/lib/spaceship/client.rb +9 -4
- data/spaceship/lib/spaceship/connect_api.rb +2 -0
- data/spaceship/lib/spaceship/connect_api/models/app.rb +11 -0
- data/spaceship/lib/spaceship/connect_api/models/beta_feedback.rb +75 -0
- data/spaceship/lib/spaceship/connect_api/models/beta_screenshot.rb +18 -0
- data/spaceship/lib/spaceship/connect_api/models/build.rb +5 -0
- data/spaceship/lib/spaceship/connect_api/models/build_beta_detail.rb +5 -0
- data/spaceship/lib/spaceship/connect_api/testflight/testflight.rb +15 -0
- data/spaceship/lib/spaceship/portal/app.rb +11 -2
- data/spaceship/lib/spaceship/tunes/iap.rb +11 -11
- data/spaceship/lib/spaceship/tunes/iap_detail.rb +7 -3
- data/spaceship/lib/spaceship/tunes/iap_families.rb +12 -1
- data/spaceship/lib/spaceship/tunes/iap_family_details.rb +26 -17
- data/spaceship/lib/spaceship/tunes/iap_status.rb +5 -1
- data/spaceship/lib/spaceship/tunes/tunes_client.rb +4 -7
- data/supply/lib/supply/client.rb +27 -0
- data/supply/lib/supply/options.rb +8 -2
- data/supply/lib/supply/uploader.rb +55 -26
- metadata +44 -25
- data/supply/lib/supply/.uploader.rb.swp +0 -0
@@ -30,6 +30,9 @@ protocol GymfileProtocol: class {
|
|
30
30
|
/// Should we skip packaging the ipa?
|
31
31
|
var skipPackageIpa: Bool { get }
|
32
32
|
|
33
|
+
/// Should we skip packaging the pkg?
|
34
|
+
var skipPackagePkg: Bool { get }
|
35
|
+
|
33
36
|
/// Should the ipa file include symbols?
|
34
37
|
var includeSymbols: Bool? { get }
|
35
38
|
|
@@ -54,6 +57,12 @@ protocol GymfileProtocol: class {
|
|
54
57
|
/// Build without codesigning
|
55
58
|
var skipCodesigning: Bool? { get }
|
56
59
|
|
60
|
+
/// Platform to build when using a Catalyst enabled app. Valid values are: ios, macos
|
61
|
+
var catalystPlatform: String? { get }
|
62
|
+
|
63
|
+
/// Full name of 3rd Party Mac Developer Installer or Deveoper ID Installer certificate. Example: `3rd Party Mac Developer Installer: Your Company (ABC1234XWYZ)`
|
64
|
+
var installerCertName: String? { get }
|
65
|
+
|
57
66
|
/// The directory in which the archive should be stored in
|
58
67
|
var buildPath: String? { get }
|
59
68
|
|
@@ -119,6 +128,9 @@ protocol GymfileProtocol: class {
|
|
119
128
|
|
120
129
|
/// Do not try to build a profile mapping from the xcodeproj. Match or a manually provided mapping should be used
|
121
130
|
var skipProfileDetection: Bool { get }
|
131
|
+
|
132
|
+
/// Sets a custom path for Swift Package Manager dependencies
|
133
|
+
var clonedSourcePackagesPath: String? { get }
|
122
134
|
}
|
123
135
|
|
124
136
|
extension GymfileProtocol {
|
@@ -132,6 +144,7 @@ extension GymfileProtocol {
|
|
132
144
|
var silent: Bool { return false }
|
133
145
|
var codesigningIdentity: String? { return nil }
|
134
146
|
var skipPackageIpa: Bool { return false }
|
147
|
+
var skipPackagePkg: Bool { return false }
|
135
148
|
var includeSymbols: Bool? { return nil }
|
136
149
|
var includeBitcode: Bool? { return nil }
|
137
150
|
var exportMethod: String? { return nil }
|
@@ -140,6 +153,8 @@ extension GymfileProtocol {
|
|
140
153
|
var skipBuildArchive: Bool? { return nil }
|
141
154
|
var skipArchive: Bool? { return nil }
|
142
155
|
var skipCodesigning: Bool? { return nil }
|
156
|
+
var catalystPlatform: String? { return nil }
|
157
|
+
var installerCertName: String? { return nil }
|
143
158
|
var buildPath: String? { return nil }
|
144
159
|
var archivePath: String? { return nil }
|
145
160
|
var derivedDataPath: String? { return nil }
|
@@ -162,8 +177,9 @@ extension GymfileProtocol {
|
|
162
177
|
var analyzeBuildTime: Bool? { return nil }
|
163
178
|
var xcprettyUtf: Bool? { return nil }
|
164
179
|
var skipProfileDetection: Bool { return false }
|
180
|
+
var clonedSourcePackagesPath: String? { return nil }
|
165
181
|
}
|
166
182
|
|
167
183
|
// Please don't remove the lines below
|
168
184
|
// They are used to detect outdated files
|
169
|
-
// FastlaneRunnerAPIVersion [0.9.
|
185
|
+
// FastlaneRunnerAPIVersion [0.9.18]
|
@@ -1,8 +1,11 @@
|
|
1
1
|
protocol MatchfileProtocol: class {
|
2
2
|
|
3
|
-
/// Define the profile type, can be appstore, adhoc, development, enterprise
|
3
|
+
/// Define the profile type, can be appstore, adhoc, development, enterprise, developer_id
|
4
4
|
var type: String { get }
|
5
5
|
|
6
|
+
/// Create additional cert types needed for macOS installers (valid values: mac_installer_distribution, developer_id_installer)
|
7
|
+
var additionalCertTypes: [String]? { get }
|
8
|
+
|
6
9
|
/// Only fetch existing certificates and profiles, don't generate new ones
|
7
10
|
var readonly: Bool { get }
|
8
11
|
|
@@ -48,6 +51,9 @@ protocol MatchfileProtocol: class {
|
|
48
51
|
/// Use a basic authorization header to access the git repo (e.g.: access via HTTPS, GitHub Actions, etc), usually a string in Base64
|
49
52
|
var gitBasicAuthorization: String? { get }
|
50
53
|
|
54
|
+
/// Use a bearer authorization header to access the git repo (e.g.: access to an Azure Devops repository), usually a string in Base64
|
55
|
+
var gitBearerAuthorization: String? { get }
|
56
|
+
|
51
57
|
/// Name of the Google Cloud Storage bucket to use
|
52
58
|
var googleCloudBucketName: String? { get }
|
53
59
|
|
@@ -75,7 +81,7 @@ protocol MatchfileProtocol: class {
|
|
75
81
|
/// Skip generation of a README.md for the created git repository
|
76
82
|
var skipDocs: Bool { get }
|
77
83
|
|
78
|
-
/// Set the provisioning profile's platform to work with (i.e. ios, tvos)
|
84
|
+
/// Set the provisioning profile's platform to work with (i.e. ios, tvos, macos)
|
79
85
|
var platform: String { get }
|
80
86
|
|
81
87
|
/// 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")
|
@@ -90,8 +96,9 @@ protocol MatchfileProtocol: class {
|
|
90
96
|
|
91
97
|
extension MatchfileProtocol {
|
92
98
|
var type: String { return "development" }
|
99
|
+
var additionalCertTypes: [String]? { return nil }
|
93
100
|
var readonly: Bool { return false }
|
94
|
-
var generateAppleCerts: Bool { return
|
101
|
+
var generateAppleCerts: Bool { return true }
|
95
102
|
var skipProvisioningProfiles: Bool { return false }
|
96
103
|
var appIdentifier: [String] { return [] }
|
97
104
|
var username: String { return "" }
|
@@ -105,6 +112,7 @@ extension MatchfileProtocol {
|
|
105
112
|
var shallowClone: Bool { return false }
|
106
113
|
var cloneBranchDirectly: Bool { return false }
|
107
114
|
var gitBasicAuthorization: String? { return nil }
|
115
|
+
var gitBearerAuthorization: String? { return nil }
|
108
116
|
var googleCloudBucketName: String? { return nil }
|
109
117
|
var googleCloudKeysFile: String? { return nil }
|
110
118
|
var googleCloudProjectId: String? { return nil }
|
@@ -122,4 +130,4 @@ extension MatchfileProtocol {
|
|
122
130
|
|
123
131
|
// Please don't remove the lines below
|
124
132
|
// They are used to detect outdated files
|
125
|
-
// FastlaneRunnerAPIVersion [0.9.
|
133
|
+
// FastlaneRunnerAPIVersion [0.9.13]
|
@@ -24,6 +24,9 @@ protocol ScanfileProtocol: class {
|
|
24
24
|
/// Enabling this option will automatically erase the simulator before running the application
|
25
25
|
var resetSimulator: Bool { get }
|
26
26
|
|
27
|
+
/// Enabling this option will disable the simulator from showing the 'Slide to type' prompt
|
28
|
+
var disableSlideToType: Bool { get }
|
29
|
+
|
27
30
|
/// Enabling this option will launch the first simulator prior to calling any xcodebuild command
|
28
31
|
var prelaunchSimulator: Bool? { get }
|
29
32
|
|
@@ -126,6 +129,12 @@ protocol ScanfileProtocol: class {
|
|
126
129
|
/// Use an extra XCCONFIG file to build your app
|
127
130
|
var xcconfig: String? { get }
|
128
131
|
|
132
|
+
/// App name to use in slack message and logfile name
|
133
|
+
var appName: String? { get }
|
134
|
+
|
135
|
+
/// Target version of the app being build or tested. Used to filter out simulator version
|
136
|
+
var deploymentTargetVersion: String? { get }
|
137
|
+
|
129
138
|
/// Create an Incoming WebHook for your Slack group to post results there
|
130
139
|
var slackUrl: String? { get }
|
131
140
|
|
@@ -159,6 +168,9 @@ protocol ScanfileProtocol: class {
|
|
159
168
|
/// Allows for override of the default `xcodebuild` command
|
160
169
|
var xcodebuildCommand: String { get }
|
161
170
|
|
171
|
+
/// Sets a custom path for Swift Package Manager dependencies
|
172
|
+
var clonedSourcePackagesPath: String? { get }
|
173
|
+
|
162
174
|
/// Should this step stop the build if the tests fail? Set this to false if you're using trainer
|
163
175
|
var failBuild: Bool { get }
|
164
176
|
}
|
@@ -172,6 +184,7 @@ extension ScanfileProtocol {
|
|
172
184
|
var skipDetectDevices: Bool { return false }
|
173
185
|
var forceQuitSimulator: Bool { return false }
|
174
186
|
var resetSimulator: Bool { return false }
|
187
|
+
var disableSlideToType: Bool { return true }
|
175
188
|
var prelaunchSimulator: Bool? { return nil }
|
176
189
|
var reinstallApp: Bool { return false }
|
177
190
|
var appIdentifier: String? { return nil }
|
@@ -206,6 +219,8 @@ extension ScanfileProtocol {
|
|
206
219
|
var configuration: String? { return nil }
|
207
220
|
var xcargs: String? { return nil }
|
208
221
|
var xcconfig: String? { return nil }
|
222
|
+
var appName: String? { return nil }
|
223
|
+
var deploymentTargetVersion: String? { return nil }
|
209
224
|
var slackUrl: String? { return nil }
|
210
225
|
var slackChannel: String? { return nil }
|
211
226
|
var slackMessage: String? { return nil }
|
@@ -217,9 +232,10 @@ extension ScanfileProtocol {
|
|
217
232
|
var destination: String? { return nil }
|
218
233
|
var customReportFileName: String? { return nil }
|
219
234
|
var xcodebuildCommand: String { return "env NSUnbufferedIO=YES xcodebuild" }
|
235
|
+
var clonedSourcePackagesPath: String? { return nil }
|
220
236
|
var failBuild: Bool { return true }
|
221
237
|
}
|
222
238
|
|
223
239
|
// Please don't remove the lines below
|
224
240
|
// They are used to detect outdated files
|
225
|
-
// FastlaneRunnerAPIVersion [0.9.
|
241
|
+
// FastlaneRunnerAPIVersion [0.9.25]
|
@@ -65,12 +65,6 @@ protocol ScreengrabfileProtocol: class {
|
|
65
65
|
|
66
66
|
/// Configure the host used by adb to connect, allows running on remote devices farm
|
67
67
|
var adbHost: String? { get }
|
68
|
-
|
69
|
-
/// Enabling this option will clean the status bar
|
70
|
-
var cleanStatusBar: Bool { get }
|
71
|
-
|
72
|
-
/// Specifies the configuration for the clean status bar
|
73
|
-
var cleanStatusBarConfig: [String : Any] { get }
|
74
68
|
}
|
75
69
|
|
76
70
|
extension ScreengrabfileProtocol {
|
@@ -96,10 +90,8 @@ extension ScreengrabfileProtocol {
|
|
96
90
|
var reinstallApp: Bool { return false }
|
97
91
|
var useTimestampSuffix: Bool { return true }
|
98
92
|
var adbHost: String? { return nil }
|
99
|
-
var cleanStatusBar: Bool { return false }
|
100
|
-
var cleanStatusBarConfig: [String : Any] { return [:] }
|
101
93
|
}
|
102
94
|
|
103
95
|
// Please don't remove the lines below
|
104
96
|
// They are used to detect outdated files
|
105
|
-
// FastlaneRunnerAPIVersion [0.9.
|
97
|
+
// FastlaneRunnerAPIVersion [0.9.13]
|
@@ -101,6 +101,12 @@ protocol SnapshotfileProtocol: class {
|
|
101
101
|
|
102
102
|
/// Take snapshots on multiple simulators concurrently. Note: This option is only applicable when running against Xcode 9
|
103
103
|
var concurrentSimulators: Bool { get }
|
104
|
+
|
105
|
+
/// Disable the simulator from showing the 'Slide to type' prompt
|
106
|
+
var disableSlideToType: Bool { get }
|
107
|
+
|
108
|
+
/// Sets a custom path for Swift Package Manager dependencies
|
109
|
+
var clonedSourcePackagesPath: String? { get }
|
104
110
|
}
|
105
111
|
|
106
112
|
extension SnapshotfileProtocol {
|
@@ -138,8 +144,10 @@ extension SnapshotfileProtocol {
|
|
138
144
|
var testTargetName: String? { return nil }
|
139
145
|
var namespaceLogFiles: String? { return nil }
|
140
146
|
var concurrentSimulators: Bool { return true }
|
147
|
+
var disableSlideToType: Bool { return false }
|
148
|
+
var clonedSourcePackagesPath: String? { return nil }
|
141
149
|
}
|
142
150
|
|
143
151
|
// Please don't remove the lines below
|
144
152
|
// They are used to detect outdated files
|
145
|
-
// FastlaneRunnerAPIVersion [0.9.
|
153
|
+
// FastlaneRunnerAPIVersion [0.9.7]
|
@@ -6,7 +6,7 @@ module FastlaneCore
|
|
6
6
|
class BuildWatcher
|
7
7
|
class << self
|
8
8
|
# @return The build we waited for. This method will always return a build
|
9
|
-
def wait_for_build_processing_to_be_complete(app_id: nil, platform: nil, train_version: nil, app_version: nil, build_version: nil, poll_interval: 10, strict_build_watch: false, return_spaceship_testflight_build: true)
|
9
|
+
def wait_for_build_processing_to_be_complete(app_id: nil, platform: nil, train_version: nil, app_version: nil, build_version: nil, poll_interval: 10, strict_build_watch: false, return_when_build_appears: false, return_spaceship_testflight_build: true)
|
10
10
|
# Warn about train_version being removed in the future
|
11
11
|
if train_version
|
12
12
|
UI.deprecated(":train_version is no longer a used argument on FastlaneCore::BuildWatcher. Please use :app_version instead.")
|
@@ -32,7 +32,11 @@ module FastlaneCore
|
|
32
32
|
|
33
33
|
report_status(build: matched_build)
|
34
34
|
|
35
|
-
|
35
|
+
# Processing of builds by AppStoreConnect can be a very time consuming task and will
|
36
|
+
# block the worker running this task until it is completed. In some cases,
|
37
|
+
# having a build resource appear in AppStoreConnect (matched_build) may be enough (i.e. setting a changelog)
|
38
|
+
# so here we may choose to skip the full processing of the build if return_when_build_appears is true
|
39
|
+
if matched_build && (return_when_build_appears || matched_build.processed?)
|
36
40
|
if return_spaceship_testflight_build
|
37
41
|
return matched_build.to_testflight_build
|
38
42
|
else
|
@@ -10,6 +10,7 @@ module FastlaneCore
|
|
10
10
|
UI.user_error!("Could not find file '#{path}'") unless File.exist?(path)
|
11
11
|
|
12
12
|
ids = installed_identies(in_keychain: in_keychain)
|
13
|
+
ids += installed_installers(in_keychain: in_keychain)
|
13
14
|
finger_print = sha1_fingerprint(path)
|
14
15
|
|
15
16
|
return ids.include?(finger_print)
|
@@ -47,12 +48,39 @@ module FastlaneCore
|
|
47
48
|
return ids
|
48
49
|
end
|
49
50
|
|
51
|
+
def self.installed_installers(in_keychain: nil)
|
52
|
+
available = self.list_available_third_party_mac_installer(in_keychain: in_keychain)
|
53
|
+
available += self.list_available_developer_id_installer(in_keychain: in_keychain)
|
54
|
+
|
55
|
+
return available.scan(/^SHA-1 hash: ([[:xdigit:]]+)$/).flatten
|
56
|
+
end
|
57
|
+
|
50
58
|
def self.list_available_identities(in_keychain: nil)
|
59
|
+
# -v Show valid identities only (default is to show all identities)
|
60
|
+
# -p Specify policy to evaluate
|
51
61
|
commands = ['security find-identity -v -p codesigning']
|
52
62
|
commands << in_keychain if in_keychain
|
53
63
|
`#{commands.join(' ')}`
|
54
64
|
end
|
55
65
|
|
66
|
+
def self.list_available_third_party_mac_installer(in_keychain: nil)
|
67
|
+
# -Z Print SHA-256 (and SHA-1) hash of the certificate
|
68
|
+
# -a Find all matching certificates, not just the first one
|
69
|
+
# -c Match on "name" when searching (optional)
|
70
|
+
commands = ['security find-certificate -Z -a -c "3rd Party Mac Developer Installer"']
|
71
|
+
commands << in_keychain if in_keychain
|
72
|
+
`#{commands.join(' ')}`
|
73
|
+
end
|
74
|
+
|
75
|
+
def self.list_available_developer_id_installer(in_keychain: nil)
|
76
|
+
# -Z Print SHA-256 (and SHA-1) hash of the certificate
|
77
|
+
# -a Find all matching certificates, not just the first one
|
78
|
+
# -c Match on "name" when searching (optional)
|
79
|
+
commands = ['security find-certificate -Z -a -c "Developer ID Installer"']
|
80
|
+
commands << in_keychain if in_keychain
|
81
|
+
`#{commands.join(' ')}`
|
82
|
+
end
|
83
|
+
|
56
84
|
def self.wwdr_certificate_installed?
|
57
85
|
certificate_name = "Apple Worldwide Developer Relations Certification Authority"
|
58
86
|
keychain = wwdr_keychain
|
@@ -212,6 +212,19 @@ module FastlaneCore
|
|
212
212
|
`xcrun simctl delete #{self.udid}`
|
213
213
|
return
|
214
214
|
end
|
215
|
+
|
216
|
+
def disable_slide_to_type
|
217
|
+
return unless is_simulator
|
218
|
+
return unless os_type == "iOS"
|
219
|
+
return unless Gem::Version.new(os_version) >= Gem::Version.new('13.0')
|
220
|
+
UI.message("Disabling 'Slide to Type' #{self}")
|
221
|
+
|
222
|
+
plist_buddy = '/usr/libexec/PlistBuddy'
|
223
|
+
plist_buddy_cmd = "-c \"Add :KeyboardContinuousPathEnabled bool false\""
|
224
|
+
plist_path = File.expand_path("~/Library/Developer/CoreSimulator/Devices/#{self.udid}/data/Library/Preferences/com.apple.keyboard.ContinuousPath.plist")
|
225
|
+
|
226
|
+
Helper.backticks("#{plist_buddy} #{plist_buddy_cmd} #{plist_path}")
|
227
|
+
end
|
215
228
|
end
|
216
229
|
end
|
217
230
|
|
@@ -248,6 +261,13 @@ module FastlaneCore
|
|
248
261
|
all.select { |device| device.os_version == os_version }.each(&:delete)
|
249
262
|
end
|
250
263
|
|
264
|
+
# Disable 'Slide to Type' by UDID or name and OS version
|
265
|
+
# Latter is useful when combined with -destination option of xcodebuild
|
266
|
+
def disable_slide_to_type(udid: nil, name: nil, os_version: nil)
|
267
|
+
match = all.detect { |device| device.udid == udid || device.name == name && device.os_version == os_version }
|
268
|
+
match.disable_slide_to_type if match
|
269
|
+
end
|
270
|
+
|
251
271
|
def clear_cache
|
252
272
|
@devices = nil
|
253
273
|
end
|
@@ -71,13 +71,19 @@ module FastlaneCore
|
|
71
71
|
|
72
72
|
# @return [boolean] true if building in a known CI environment
|
73
73
|
def self.ci?
|
74
|
+
return true if self.is_circle_ci?
|
75
|
+
|
74
76
|
# Check for Jenkins, Travis CI, ... environment variables
|
75
|
-
['JENKINS_HOME', 'JENKINS_URL', 'TRAVIS', '
|
77
|
+
['JENKINS_HOME', 'JENKINS_URL', 'TRAVIS', 'CI', 'APPCENTER_BUILD_ID', 'TEAMCITY_VERSION', 'GO_PIPELINE_NAME', 'bamboo_buildKey', 'GITLAB_CI', 'XCS', 'TF_BUILD', 'GITHUB_ACTION', 'GITHUB_ACTIONS', 'BITRISE_IO'].each do |current|
|
76
78
|
return true if ENV.key?(current)
|
77
79
|
end
|
78
80
|
return false
|
79
81
|
end
|
80
82
|
|
83
|
+
def self.is_circle_ci?
|
84
|
+
return ENV.key?('CIRCLECI')
|
85
|
+
end
|
86
|
+
|
81
87
|
def self.operating_system
|
82
88
|
return "macOS" if RUBY_PLATFORM.downcase.include?("darwin")
|
83
89
|
return "Windows" if RUBY_PLATFORM.downcase.include?("mswin")
|
@@ -1,5 +1,6 @@
|
|
1
1
|
require_relative 'helper'
|
2
2
|
require 'xcodeproj'
|
3
|
+
require 'fastlane_core/command_executor'
|
3
4
|
|
4
5
|
module FastlaneCore
|
5
6
|
# Represents an Xcode project
|
@@ -273,6 +274,10 @@ module FastlaneCore
|
|
273
274
|
(framework? && build_settings(key: "PLATFORM_NAME") == "macosx")
|
274
275
|
end
|
275
276
|
|
277
|
+
def supports_mac_catalyst?
|
278
|
+
build_settings(key: "SUPPORTS_MACCATALYST") == "YES"
|
279
|
+
end
|
280
|
+
|
276
281
|
def command_line_tool?
|
277
282
|
(build_settings(key: "PRODUCT_TYPE") == "com.apple.product-type.tool")
|
278
283
|
end
|
@@ -313,6 +318,10 @@ module FastlaneCore
|
|
313
318
|
proj << "-configuration #{options[:configuration].shellescape}" if options[:configuration]
|
314
319
|
proj << "-xcconfig #{options[:xcconfig].shellescape}" if options[:xcconfig]
|
315
320
|
|
321
|
+
if FastlaneCore::Helper.xcode_at_least?('11.0') && options[:cloned_source_packages_path]
|
322
|
+
proj << "-clonedSourcePackagesDirPath #{options[:cloned_source_packages_path].shellescape}"
|
323
|
+
end
|
324
|
+
|
316
325
|
return proj
|
317
326
|
end
|
318
327
|
|
@@ -335,6 +344,12 @@ module FastlaneCore
|
|
335
344
|
command
|
336
345
|
end
|
337
346
|
|
347
|
+
def build_xcodebuild_resolvepackagedependencies_command
|
348
|
+
command = "xcodebuild -resolvePackageDependencies #{xcodebuild_parameters.join(' ')}"
|
349
|
+
command += " 2> /dev/null" if xcodebuild_suppress_stderr
|
350
|
+
command
|
351
|
+
end
|
352
|
+
|
338
353
|
# Get the build settings for our project
|
339
354
|
# e.g. to properly get the DerivedData folder
|
340
355
|
# @param [String] The key of which we want the value for (e.g. "PRODUCT_NAME")
|
@@ -347,6 +362,14 @@ module FastlaneCore
|
|
347
362
|
options[:scheme] ||= schemes.first
|
348
363
|
end
|
349
364
|
|
365
|
+
# SwiftPM support
|
366
|
+
if FastlaneCore::Helper.xcode_at_least?('11.0')
|
367
|
+
UI.important("Resolving Swift Package Manager dependencies...")
|
368
|
+
FastlaneCore::CommandExecutor.execute(command: build_xcodebuild_resolvepackagedependencies_command,
|
369
|
+
print_all: true,
|
370
|
+
print_command: !self.xcodebuild_list_silent)
|
371
|
+
end
|
372
|
+
|
350
373
|
command = build_xcodebuild_showbuildsettings_command
|
351
374
|
|
352
375
|
# Xcode might hang here and retrying fixes the problem, see fastlane#4059
|