fastlane 2.139.0 → 2.144.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/LICENSE +1 -1
- 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 +28 -2
- data/deliver/lib/deliver/runner.rb +13 -2
- data/fastlane/lib/fastlane/action.rb +1 -1
- data/fastlane/lib/fastlane/actions/.hockey.rb.swp +0 -0
- data/fastlane/lib/fastlane/actions/.slack.rb.swp +0 -0
- data/fastlane/lib/fastlane/actions/.update_project_provisioning.rb.swp +0 -0
- data/fastlane/lib/fastlane/actions/README.md +2 -0
- data/fastlane/lib/fastlane/actions/app_store_build_number.rb +13 -5
- data/fastlane/lib/fastlane/actions/automatic_code_signing.rb +7 -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/clean_build_artifacts.rb +3 -0
- data/fastlane/lib/fastlane/actions/cocoapods.rb +2 -2
- data/fastlane/lib/fastlane/actions/crashlytics.rb +14 -2
- data/fastlane/lib/fastlane/actions/create_pull_request.rb +29 -0
- data/fastlane/lib/fastlane/actions/docs/{build_ios_app.md → build_app.md} +1 -1
- data/fastlane/lib/fastlane/actions/docs/frame_screenshots.md +22 -6
- data/fastlane/lib/fastlane/actions/docs/sync_code_signing.md +22 -6
- data/fastlane/lib/fastlane/actions/ensure_git_branch.rb +1 -1
- data/fastlane/lib/fastlane/actions/ensure_xcode_version.rb +35 -7
- data/fastlane/lib/fastlane/actions/frame_screenshots.rb +2 -1
- data/fastlane/lib/fastlane/actions/get_github_release.rb +3 -0
- data/fastlane/lib/fastlane/actions/gradle.rb +43 -2
- 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/latest_testflight_build_number.rb +9 -3
- data/fastlane/lib/fastlane/actions/notarize.rb +183 -0
- data/fastlane/lib/fastlane/actions/pod_lib_lint.rb +7 -1
- data/fastlane/lib/fastlane/actions/run_tests.rb +5 -22
- data/fastlane/lib/fastlane/actions/s3.rb +5 -291
- data/fastlane/lib/fastlane/actions/set_github_release.rb +1 -1
- data/fastlane/lib/fastlane/actions/spm.rb +8 -0
- data/fastlane/lib/fastlane/actions/swiftlint.rb +45 -9
- data/fastlane/lib/fastlane/actions/update_code_signing_settings.rb +190 -0
- data/fastlane/lib/fastlane/actions/update_plist.rb +37 -2
- data/fastlane/lib/fastlane/actions/upload_symbols_to_crashlytics.rb +13 -3
- data/fastlane/lib/fastlane/actions/upload_to_app_store.rb +1 -0
- data/fastlane/lib/fastlane/fast_file.rb +13 -3
- data/fastlane/lib/fastlane/helper/adb_helper.rb +1 -1
- data/fastlane/lib/fastlane/helper/s3_client_helper.rb +56 -0
- data/fastlane/lib/fastlane/plugins/plugin_manager.rb +1 -1
- data/fastlane/lib/fastlane/plugins/template/.rubocop.yml +2 -0
- data/fastlane/lib/fastlane/runner.rb +23 -18
- data/fastlane/lib/fastlane/server/socket_server_action_command_executor.rb +1 -1
- 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 +422 -45
- data/fastlane/swift/FastlaneSwiftRunner/FastlaneSwiftRunner.xcodeproj/project.xcworkspace/xcuserdata/josh.xcuserdatad/UserInterfaceState.xcuserstate +0 -0
- 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 +23 -3
- data/fastlane/swift/Precheckfile.swift +1 -1
- data/fastlane/swift/RubyCommand.swift +1 -1
- data/fastlane/swift/Scanfile.swift +1 -1
- data/fastlane/swift/ScanfileProtocol.swift +21 -1
- data/fastlane/swift/Screengrabfile.swift +1 -1
- data/fastlane/swift/Snapshotfile.swift +1 -1
- data/fastlane/swift/SnapshotfileProtocol.swift +9 -1
- data/fastlane_core/lib/fastlane_core/cert_checker.rb +28 -0
- data/fastlane_core/lib/fastlane_core/device_manager.rb +1 -1
- data/fastlane_core/lib/fastlane_core/ipa_file_analyser.rb +1 -0
- data/fastlane_core/lib/fastlane_core/keychain_importer.rb +2 -0
- data/fastlane_core/lib/fastlane_core/project.rb +27 -0
- data/fastlane_core/lib/fastlane_core/provisioning_profile.rb +15 -2
- data/frameit/lib/frameit/commands_generator.rb +25 -0
- data/frameit/lib/frameit/config_parser.rb +31 -9
- data/frameit/lib/frameit/device.rb +90 -0
- data/frameit/lib/frameit/device_types.rb +121 -5
- data/frameit/lib/frameit/editor.rb +28 -40
- data/frameit/lib/frameit/offsets.rb +8 -1
- data/frameit/lib/frameit/options.rb +81 -54
- data/frameit/lib/frameit/runner.rb +17 -7
- data/frameit/lib/frameit/screenshot.rb +35 -47
- data/frameit/lib/frameit/template_finder.rb +15 -12
- data/gym/lib/gym/code_signing_mapping.rb +32 -3
- data/gym/lib/gym/detect_values.rb +34 -2
- data/gym/lib/gym/generators/package_command_generator.rb +8 -0
- data/gym/lib/gym/generators/package_command_generator_xcode7.rb +52 -17
- data/gym/lib/gym/module.rb +8 -0
- data/gym/lib/gym/options.rb +25 -1
- data/gym/lib/gym/runner.rb +70 -21
- data/match/lib/match/change_password.rb +1 -1
- data/match/lib/match/encryption.rb +4 -0
- data/match/lib/match/encryption/openssl.rb +1 -1
- data/match/lib/match/generator.rb +17 -3
- data/match/lib/match/importer.rb +35 -20
- data/match/lib/match/module.rb +5 -2
- data/match/lib/match/nuke.rb +59 -17
- data/match/lib/match/options.rb +38 -15
- data/match/lib/match/runner.rb +24 -8
- data/match/lib/match/setup.rb +1 -1
- data/match/lib/match/spaceship_ensure.rb +19 -9
- data/match/lib/match/storage.rb +4 -0
- data/match/lib/match/storage/git_storage.rb +5 -2
- data/match/lib/match/storage/google_cloud_storage.rb +2 -2
- data/match/lib/match/storage/s3_storage.rb +162 -0
- data/pilot/lib/pilot/.manager.rb.swp +0 -0
- data/pilot/lib/pilot/build_manager.rb +24 -9
- data/scan/lib/scan/detect_values.rb +6 -1
- data/scan/lib/scan/manager.rb +18 -1
- data/scan/lib/scan/options.rb +28 -1
- data/scan/lib/scan/runner.rb +9 -7
- data/scan/lib/scan/slack_poster.rb +1 -1
- data/scan/lib/scan/test_command_generator.rb +12 -5
- data/screengrab/lib/screengrab/runner.rb +31 -18
- data/sigh/lib/sigh/.runner.rb.swp +0 -0
- data/snapshot/lib/snapshot/fixes/simulator_shared_pasteboard.rb +16 -0
- 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 +13 -0
- data/spaceship/lib/spaceship/connect_api/.DS_Store +0 -0
- data/spaceship/lib/spaceship/connect_api/models/.bundle_id.rb.swp +0 -0
- data/{gym/lib/gym/.runner.rb.swp → spaceship/lib/spaceship/connect_api/models/.bundle_id_capability.rb.swp} +0 -0
- data/spaceship/lib/spaceship/connect_api/models/app.rb +11 -0
- data/spaceship/lib/spaceship/connect_api/models/beta_feedback.rb +4 -0
- data/spaceship/lib/spaceship/connect_api/models/build.rb +1 -2
- data/spaceship/lib/spaceship/connect_api/models/certificate.rb +2 -0
- data/spaceship/lib/spaceship/connect_api/testflight/testflight.rb +29 -0
- data/spaceship/lib/spaceship/portal/app.rb +11 -2
- data/spaceship/lib/spaceship/tunes/app_version.rb +6 -1
- 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 +2 -2
- data/supply/lib/supply/client.rb +1 -1
- metadata +63 -18
Binary file
|
@@ -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
|
|
@@ -60,6 +63,18 @@ protocol MatchfileProtocol: class {
|
|
60
63
|
/// ID of the Google Cloud project to use for authentication
|
61
64
|
var googleCloudProjectId: String? { get }
|
62
65
|
|
66
|
+
/// Name of the S3 region
|
67
|
+
var s3Region: String? { get }
|
68
|
+
|
69
|
+
/// S3 access key
|
70
|
+
var s3AccessKey: String? { get }
|
71
|
+
|
72
|
+
/// S3 secret secret access key
|
73
|
+
var s3SecretAccessKey: String? { get }
|
74
|
+
|
75
|
+
/// Name of the S3 bucket
|
76
|
+
var s3Bucket: String? { get }
|
77
|
+
|
63
78
|
/// Keychain the items should be imported to
|
64
79
|
var keychainName: String { get }
|
65
80
|
|
@@ -78,7 +93,7 @@ protocol MatchfileProtocol: class {
|
|
78
93
|
/// Skip generation of a README.md for the created git repository
|
79
94
|
var skipDocs: Bool { get }
|
80
95
|
|
81
|
-
/// Set the provisioning profile's platform to work with (i.e. ios, tvos)
|
96
|
+
/// Set the provisioning profile's platform to work with (i.e. ios, tvos, macos)
|
82
97
|
var platform: String { get }
|
83
98
|
|
84
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")
|
@@ -93,6 +108,7 @@ protocol MatchfileProtocol: class {
|
|
93
108
|
|
94
109
|
extension MatchfileProtocol {
|
95
110
|
var type: String { return "development" }
|
111
|
+
var additionalCertTypes: [String]? { return nil }
|
96
112
|
var readonly: Bool { return false }
|
97
113
|
var generateAppleCerts: Bool { return true }
|
98
114
|
var skipProvisioningProfiles: Bool { return false }
|
@@ -112,6 +128,10 @@ extension MatchfileProtocol {
|
|
112
128
|
var googleCloudBucketName: String? { return nil }
|
113
129
|
var googleCloudKeysFile: String? { return nil }
|
114
130
|
var googleCloudProjectId: String? { return nil }
|
131
|
+
var s3Region: String? { return nil }
|
132
|
+
var s3AccessKey: String? { return nil }
|
133
|
+
var s3SecretAccessKey: String? { return nil }
|
134
|
+
var s3Bucket: String? { return nil }
|
115
135
|
var keychainName: String { return "login.keychain" }
|
116
136
|
var keychainPassword: String? { return nil }
|
117
137
|
var force: Bool { return false }
|
@@ -126,4 +146,4 @@ extension MatchfileProtocol {
|
|
126
146
|
|
127
147
|
// Please don't remove the lines below
|
128
148
|
// They are used to detect outdated files
|
129
|
-
// FastlaneRunnerAPIVersion [0.9.
|
149
|
+
// FastlaneRunnerAPIVersion [0.9.14]
|
@@ -42,6 +42,9 @@ protocol ScanfileProtocol: class {
|
|
42
42
|
/// Array of strings matching Test Bundle/Test Suite/Test Cases to skip
|
43
43
|
var skipTesting: String? { get }
|
44
44
|
|
45
|
+
/// The testplan associated with the scheme that should be used for testing
|
46
|
+
var testplan: String? { get }
|
47
|
+
|
45
48
|
/// Run tests using the provided `.xctestrun` file
|
46
49
|
var xctestrun: String? { get }
|
47
50
|
|
@@ -102,6 +105,9 @@ protocol ScanfileProtocol: class {
|
|
102
105
|
/// Generate the json compilation database with clang naming convention (compile_commands.json)
|
103
106
|
var useClangReportName: Bool { get }
|
104
107
|
|
108
|
+
/// Specify the exact number of test runners that will be spawned during parallel testing. Equivalent to -parallel-testing-worker-count
|
109
|
+
var concurrentWorkers: Int? { get }
|
110
|
+
|
105
111
|
/// Constrain the number of simulator devices on which to test concurrently. Equivalent to -maximum-concurrent-test-simulator-destinations
|
106
112
|
var maxConcurrentSimulators: Int? { get }
|
107
113
|
|
@@ -129,6 +135,12 @@ protocol ScanfileProtocol: class {
|
|
129
135
|
/// Use an extra XCCONFIG file to build your app
|
130
136
|
var xcconfig: String? { get }
|
131
137
|
|
138
|
+
/// App name to use in slack message and logfile name
|
139
|
+
var appName: String? { get }
|
140
|
+
|
141
|
+
/// Target version of the app being build or tested. Used to filter out simulator version
|
142
|
+
var deploymentTargetVersion: String? { get }
|
143
|
+
|
132
144
|
/// Create an Incoming WebHook for your Slack group to post results there
|
133
145
|
var slackUrl: String? { get }
|
134
146
|
|
@@ -162,6 +174,9 @@ protocol ScanfileProtocol: class {
|
|
162
174
|
/// Allows for override of the default `xcodebuild` command
|
163
175
|
var xcodebuildCommand: String { get }
|
164
176
|
|
177
|
+
/// Sets a custom path for Swift Package Manager dependencies
|
178
|
+
var clonedSourcePackagesPath: String? { get }
|
179
|
+
|
165
180
|
/// Should this step stop the build if the tests fail? Set this to false if you're using trainer
|
166
181
|
var failBuild: Bool { get }
|
167
182
|
}
|
@@ -181,6 +196,7 @@ extension ScanfileProtocol {
|
|
181
196
|
var appIdentifier: String? { return nil }
|
182
197
|
var onlyTesting: String? { return nil }
|
183
198
|
var skipTesting: String? { return nil }
|
199
|
+
var testplan: String? { return nil }
|
184
200
|
var xctestrun: String? { return nil }
|
185
201
|
var toolchain: String? { return nil }
|
186
202
|
var clean: Bool { return false }
|
@@ -201,6 +217,7 @@ extension ScanfileProtocol {
|
|
201
217
|
var shouldZipBuildProducts: Bool { return false }
|
202
218
|
var resultBundle: Bool { return false }
|
203
219
|
var useClangReportName: Bool { return false }
|
220
|
+
var concurrentWorkers: Int? { return nil }
|
204
221
|
var maxConcurrentSimulators: Int? { return nil }
|
205
222
|
var disableConcurrentTesting: Bool { return false }
|
206
223
|
var skipBuild: Bool { return false }
|
@@ -210,6 +227,8 @@ extension ScanfileProtocol {
|
|
210
227
|
var configuration: String? { return nil }
|
211
228
|
var xcargs: String? { return nil }
|
212
229
|
var xcconfig: String? { return nil }
|
230
|
+
var appName: String? { return nil }
|
231
|
+
var deploymentTargetVersion: String? { return nil }
|
213
232
|
var slackUrl: String? { return nil }
|
214
233
|
var slackChannel: String? { return nil }
|
215
234
|
var slackMessage: String? { return nil }
|
@@ -221,9 +240,10 @@ extension ScanfileProtocol {
|
|
221
240
|
var destination: String? { return nil }
|
222
241
|
var customReportFileName: String? { return nil }
|
223
242
|
var xcodebuildCommand: String { return "env NSUnbufferedIO=YES xcodebuild" }
|
243
|
+
var clonedSourcePackagesPath: String? { return nil }
|
224
244
|
var failBuild: Bool { return true }
|
225
245
|
}
|
226
246
|
|
227
247
|
// Please don't remove the lines below
|
228
248
|
// They are used to detect outdated files
|
229
|
-
// FastlaneRunnerAPIVersion [0.9.
|
249
|
+
// FastlaneRunnerAPIVersion [0.9.27]
|
@@ -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]
|
@@ -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
|
@@ -223,7 +223,7 @@ module FastlaneCore
|
|
223
223
|
plist_buddy_cmd = "-c \"Add :KeyboardContinuousPathEnabled bool false\""
|
224
224
|
plist_path = File.expand_path("~/Library/Developer/CoreSimulator/Devices/#{self.udid}/data/Library/Preferences/com.apple.keyboard.ContinuousPath.plist")
|
225
225
|
|
226
|
-
Helper.backticks("#{plist_buddy} #{plist_buddy_cmd} #{plist_path}")
|
226
|
+
Helper.backticks("#{plist_buddy} #{plist_buddy_cmd} #{plist_path} >/dev/null 2>&1")
|
227
227
|
end
|
228
228
|
end
|
229
229
|
end
|
@@ -37,6 +37,7 @@ module FastlaneCore
|
|
37
37
|
|
38
38
|
def self.fetch_info_plist_file(path)
|
39
39
|
UI.user_error!("Could not find file at path '#{path}'") unless File.exist?(path)
|
40
|
+
Zip.validate_entry_sizes = true # https://github.com/rubyzip/rubyzip/releases/tag/v2.0.0
|
40
41
|
Zip::File.open(path, "rb") do |zipfile|
|
41
42
|
file = zipfile.glob('**/Payload/*.app/Info.plist').first
|
42
43
|
return nil unless file
|
@@ -10,6 +10,7 @@ module FastlaneCore
|
|
10
10
|
command << " -P #{certificate_password.shellescape}"
|
11
11
|
command << " -T /usr/bin/codesign" # to not be asked for permission when running a tool like `gym` (before Sierra)
|
12
12
|
command << " -T /usr/bin/security"
|
13
|
+
command << " -T /usr/bin/productbuild" # to not be asked for permission when using an installer cert for macOS
|
13
14
|
command << " 1> /dev/null" unless output
|
14
15
|
|
15
16
|
UI.command(command) if output
|
@@ -37,6 +38,7 @@ module FastlaneCore
|
|
37
38
|
if Helper.backticks('security -h | grep set-key-partition-list', print: false).length > 0
|
38
39
|
command = "security set-key-partition-list"
|
39
40
|
command << " -S apple-tool:,apple:"
|
41
|
+
command << " -s" # This is a needed in Catalina to prevent "security: SecKeychainItemCopyAccess: A missing value was detected."
|
40
42
|
command << " -k #{keychain_password.to_s.shellescape}"
|
41
43
|
command << " #{keychain_path.shellescape}"
|
42
44
|
command << " 1> /dev/null" # always disable stdout. This can be very verbose, and leak potentially sensitive info
|
@@ -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
|
@@ -289,6 +294,10 @@ module FastlaneCore
|
|
289
294
|
supported_platforms.include?(:iOS)
|
290
295
|
end
|
291
296
|
|
297
|
+
def watchos?
|
298
|
+
supported_platforms.include?(:watchOS)
|
299
|
+
end
|
300
|
+
|
292
301
|
def supported_platforms
|
293
302
|
supported_platforms = build_settings(key: "SUPPORTED_PLATFORMS")
|
294
303
|
if supported_platforms.nil?
|
@@ -313,6 +322,10 @@ module FastlaneCore
|
|
313
322
|
proj << "-configuration #{options[:configuration].shellescape}" if options[:configuration]
|
314
323
|
proj << "-xcconfig #{options[:xcconfig].shellescape}" if options[:xcconfig]
|
315
324
|
|
325
|
+
if FastlaneCore::Helper.xcode_at_least?('11.0') && options[:cloned_source_packages_path]
|
326
|
+
proj << "-clonedSourcePackagesDirPath #{options[:cloned_source_packages_path].shellescape}"
|
327
|
+
end
|
328
|
+
|
316
329
|
return proj
|
317
330
|
end
|
318
331
|
|
@@ -335,6 +348,12 @@ module FastlaneCore
|
|
335
348
|
command
|
336
349
|
end
|
337
350
|
|
351
|
+
def build_xcodebuild_resolvepackagedependencies_command
|
352
|
+
command = "xcodebuild -resolvePackageDependencies #{xcodebuild_parameters.join(' ')}"
|
353
|
+
command += " 2> /dev/null" if xcodebuild_suppress_stderr
|
354
|
+
command
|
355
|
+
end
|
356
|
+
|
338
357
|
# Get the build settings for our project
|
339
358
|
# e.g. to properly get the DerivedData folder
|
340
359
|
# @param [String] The key of which we want the value for (e.g. "PRODUCT_NAME")
|
@@ -347,6 +366,14 @@ module FastlaneCore
|
|
347
366
|
options[:scheme] ||= schemes.first
|
348
367
|
end
|
349
368
|
|
369
|
+
# SwiftPM support
|
370
|
+
if FastlaneCore::Helper.xcode_at_least?('11.0')
|
371
|
+
UI.important("Resolving Swift Package Manager dependencies...")
|
372
|
+
FastlaneCore::CommandExecutor.execute(command: build_xcodebuild_resolvepackagedependencies_command,
|
373
|
+
print_all: true,
|
374
|
+
print_command: !self.xcodebuild_list_silent)
|
375
|
+
end
|
376
|
+
|
350
377
|
command = build_xcodebuild_showbuildsettings_command
|
351
378
|
|
352
379
|
# Xcode might hang here and retrying fixes the problem, see fastlane#4059
|
@@ -44,16 +44,29 @@ module FastlaneCore
|
|
44
44
|
parse(path, keychain_path).fetch("Name")
|
45
45
|
end
|
46
46
|
|
47
|
+
def bundle_id(path, keychain_path = nil)
|
48
|
+
profile = parse(path, keychain_path)
|
49
|
+
app_id_prefix = profile["ApplicationIdentifierPrefix"].first
|
50
|
+
bundle_id = profile["Entitlements"]["application-identifier"].gsub("#{app_id_prefix}.", "")
|
51
|
+
bundle_id
|
52
|
+
rescue
|
53
|
+
UI.error("Unable to extract the Bundle Id from the provided provisioning profile '#{path}'.")
|
54
|
+
end
|
55
|
+
|
47
56
|
def mac?(path, keychain_path = nil)
|
48
57
|
parse(path, keychain_path).fetch("Platform", []).include?('OSX')
|
49
58
|
end
|
50
59
|
|
51
60
|
def profile_filename(path, keychain_path = nil)
|
52
61
|
basename = uuid(path, keychain_path)
|
62
|
+
basename + profile_extension(path, keychain_path)
|
63
|
+
end
|
64
|
+
|
65
|
+
def profile_extension(path, keychain_path = nil)
|
53
66
|
if mac?(path, keychain_path)
|
54
|
-
|
67
|
+
".provisionprofile"
|
55
68
|
else
|
56
|
-
|
69
|
+
".mobileprovision"
|
57
70
|
end
|
58
71
|
end
|
59
72
|
|