fastlane 2.161.0 → 2.162.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (50) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +76 -76
  3. data/cert/lib/cert/options.rb +28 -1
  4. data/cert/lib/cert/runner.rb +50 -33
  5. data/deliver/lib/deliver/app_screenshot_iterator.rb +4 -4
  6. data/deliver/lib/deliver/options.rb +2 -2
  7. data/deliver/lib/deliver/upload_metadata.rb +1 -0
  8. data/deliver/lib/deliver/upload_screenshots.rb +25 -8
  9. data/fastlane/lib/fastlane/version.rb +1 -1
  10. data/fastlane/swift/Deliverfile.swift +1 -1
  11. data/fastlane/swift/DeliverfileProtocol.swift +1 -1
  12. data/fastlane/swift/Fastlane.swift +51 -3
  13. data/fastlane/swift/Gymfile.swift +1 -1
  14. data/fastlane/swift/GymfileProtocol.swift +1 -1
  15. data/fastlane/swift/Matchfile.swift +1 -1
  16. data/fastlane/swift/MatchfileProtocol.swift +15 -3
  17. data/fastlane/swift/Precheckfile.swift +1 -1
  18. data/fastlane/swift/PrecheckfileProtocol.swift +1 -1
  19. data/fastlane/swift/Scanfile.swift +1 -1
  20. data/fastlane/swift/ScanfileProtocol.swift +1 -1
  21. data/fastlane/swift/Screengrabfile.swift +1 -1
  22. data/fastlane/swift/ScreengrabfileProtocol.swift +1 -1
  23. data/fastlane/swift/Snapshotfile.swift +1 -1
  24. data/fastlane/swift/SnapshotfileProtocol.swift +1 -1
  25. data/fastlane_core/lib/fastlane_core/analytics/analytics_session.rb +6 -7
  26. data/fastlane_core/lib/fastlane_core/keychain_importer.rb +2 -2
  27. data/match/lib/match/generator.rb +6 -1
  28. data/match/lib/match/importer.rb +39 -6
  29. data/match/lib/match/migrate.rb +13 -2
  30. data/match/lib/match/nuke.rb +65 -22
  31. data/match/lib/match/options.rb +26 -1
  32. data/match/lib/match/runner.rb +38 -10
  33. data/match/lib/match/spaceship_ensure.rb +27 -21
  34. data/match/lib/match/storage/google_cloud_storage.rb +20 -3
  35. data/match/lib/match/storage/s3_storage.rb +19 -3
  36. data/sigh/lib/sigh/options.rb +21 -0
  37. data/sigh/lib/sigh/runner.rb +80 -38
  38. data/spaceship/lib/spaceship/client.rb +2 -1
  39. data/spaceship/lib/spaceship/connect_api.rb +1 -0
  40. data/spaceship/lib/spaceship/connect_api/api_client.rb +3 -3
  41. data/spaceship/lib/spaceship/connect_api/client.rb +13 -3
  42. data/spaceship/lib/spaceship/connect_api/models/app_screenshot.rb +3 -1
  43. data/spaceship/lib/spaceship/connect_api/models/beta_tester.rb +2 -1
  44. data/spaceship/lib/spaceship/connect_api/models/certificate.rb +42 -0
  45. data/spaceship/lib/spaceship/connect_api/models/profile.rb +7 -1
  46. data/spaceship/lib/spaceship/connect_api/models/user_invitation.rb +59 -0
  47. data/spaceship/lib/spaceship/connect_api/provisioning/provisioning.rb +28 -2
  48. data/spaceship/lib/spaceship/connect_api/testflight/testflight.rb +13 -0
  49. data/spaceship/lib/spaceship/connect_api/users/users.rb +40 -0
  50. metadata +19 -18
@@ -17,4 +17,4 @@ public class Precheckfile: PrecheckfileProtocol {
17
17
  // during the `init` process, and you won't see this message
18
18
  }
19
19
 
20
- // Generated with fastlane 2.161.0
20
+ // Generated with fastlane 2.162.0
@@ -48,4 +48,4 @@ public extension PrecheckfileProtocol {
48
48
 
49
49
  // Please don't remove the lines below
50
50
  // They are used to detect outdated files
51
- // FastlaneRunnerAPIVersion [0.9.40]
51
+ // FastlaneRunnerAPIVersion [0.9.41]
@@ -17,4 +17,4 @@ public class Scanfile: ScanfileProtocol {
17
17
  // during the `init` process, and you won't see this message
18
18
  }
19
19
 
20
- // Generated with fastlane 2.161.0
20
+ // Generated with fastlane 2.162.0
@@ -260,4 +260,4 @@ public extension ScanfileProtocol {
260
260
 
261
261
  // Please don't remove the lines below
262
262
  // They are used to detect outdated files
263
- // FastlaneRunnerAPIVersion [0.9.52]
263
+ // FastlaneRunnerAPIVersion [0.9.53]
@@ -17,4 +17,4 @@ public class Screengrabfile: ScreengrabfileProtocol {
17
17
  // during the `init` process, and you won't see this message
18
18
  }
19
19
 
20
- // Generated with fastlane 2.161.0
20
+ // Generated with fastlane 2.162.0
@@ -96,4 +96,4 @@ public extension ScreengrabfileProtocol {
96
96
 
97
97
  // Please don't remove the lines below
98
98
  // They are used to detect outdated files
99
- // FastlaneRunnerAPIVersion [0.9.42]
99
+ // FastlaneRunnerAPIVersion [0.9.43]
@@ -17,4 +17,4 @@ public class Snapshotfile: SnapshotfileProtocol {
17
17
  // during the `init` process, and you won't see this message
18
18
  }
19
19
 
20
- // Generated with fastlane 2.161.0
20
+ // Generated with fastlane 2.162.0
@@ -184,4 +184,4 @@ public extension SnapshotfileProtocol {
184
184
 
185
185
  // Please don't remove the lines below
186
186
  // They are used to detect outdated files
187
- // FastlaneRunnerAPIVersion [0.9.36]
187
+ // FastlaneRunnerAPIVersion [0.9.37]
@@ -19,7 +19,7 @@ module FastlaneCore
19
19
  end
20
20
 
21
21
  def action_launched(launch_context: nil)
22
- unless did_show_message?
22
+ if should_show_message?
23
23
  show_message
24
24
  end
25
25
 
@@ -52,16 +52,15 @@ module FastlaneCore
52
52
  UI.message("You can disable this by adding `opt_out_usage` at the top of your Fastfile")
53
53
  end
54
54
 
55
- def did_show_message?
56
- file_name = ".did_show_opt_info"
55
+ def should_show_message?
56
+ return false if FastlaneCore::Env.truthy?("FASTLANE_OPT_OUT_USAGE")
57
57
 
58
+ file_name = ".did_show_opt_info"
58
59
  new_path = File.join(FastlaneCore.fastlane_user_dir, file_name)
59
- did_show = File.exist?(new_path)
60
-
61
- return did_show if did_show
60
+ return false if File.exist?(new_path)
62
61
 
63
62
  File.write(new_path, '1')
64
- false
63
+ true
65
64
  end
66
65
 
67
66
  def finalize_session
@@ -4,7 +4,7 @@ require 'security'
4
4
 
5
5
  module FastlaneCore
6
6
  class KeychainImporter
7
- def self.import_file(path, keychain_path, keychain_password: nil, certificate_password: "", output: FastlaneCore::Globals.verbose?)
7
+ def self.import_file(path, keychain_path, keychain_password: nil, certificate_password: "", skip_set_partition_list: false, output: FastlaneCore::Globals.verbose?)
8
8
  UI.user_error!("Could not find file '#{path}'") unless File.exist?(path)
9
9
 
10
10
  command = "security import #{path.shellescape} -k '#{keychain_path.shellescape}'"
@@ -19,7 +19,7 @@ module FastlaneCore
19
19
  UI.command_output(stdout.read.to_s) if output
20
20
 
21
21
  # Set partition list only if success since it can be a time consuming process if a lot of keys are installed
22
- if thrd.value.success?
22
+ if thrd.value.success? && !skip_set_partition_list
23
23
  keychain_password ||= resolve_keychain_password(keychain_path)
24
24
  set_partition_list(path, keychain_path, keychain_password: keychain_password, output: output)
25
25
  else
@@ -26,11 +26,14 @@ module Match
26
26
  generate_apple_certs: params[:generate_apple_certs],
27
27
  output_path: output_path,
28
28
  force: true, # we don't need a certificate without its private key, we only care about a new certificate
29
+ api_key_path: params[:api_key_path],
30
+ api_key: params[:api_key],
29
31
  username: params[:username],
30
32
  team_id: params[:team_id],
31
33
  team_name: params[:team_name],
32
34
  keychain_path: FastlaneCore::Helper.keychain_path(params[:keychain_name]),
33
- keychain_password: params[:keychain_password]
35
+ keychain_password: params[:keychain_password],
36
+ skip_set_partition_list: params[:skip_set_partition_list]
34
37
  })
35
38
 
36
39
  Cert.config = arguments
@@ -80,6 +83,8 @@ module Match
80
83
  cert_id: certificate_id,
81
84
  provisioning_name: profile_name,
82
85
  ignore_profiles_with_different_name: true,
86
+ api_key_path: params[:api_key_path],
87
+ api_key: params[:api_key],
83
88
  team_id: params[:team_id],
84
89
  team_name: params[:team_name],
85
90
  template_name: params[:template_name],
@@ -28,10 +28,17 @@ module Match
28
28
  google_cloud_bucket_name: params[:google_cloud_bucket_name].to_s,
29
29
  google_cloud_keys_file: params[:google_cloud_keys_file].to_s,
30
30
  google_cloud_project_id: params[:google_cloud_project_id].to_s,
31
+ s3_bucket: params[:s3_bucket],
32
+ s3_region: params[:s3_region],
33
+ s3_access_key: params[:s3_access_key],
34
+ s3_secret_access_key: params[:s3_secret_access_key],
35
+ s3_object_prefix: params[:s3_object_prefix],
31
36
  readonly: params[:readonly],
32
37
  username: params[:username],
33
38
  team_id: params[:team_id],
34
- team_name: params[:team_name]
39
+ team_name: params[:team_name],
40
+ api_key_path: params[:api_key_path],
41
+ api_key: params[:api_key]
35
42
  })
36
43
  storage.download
37
44
 
@@ -48,11 +55,25 @@ module Match
48
55
 
49
56
  case cert_type
50
57
  when :development
51
- certificate_type = Spaceship::ConnectAPI::Certificate::CertificateType::IOS_DEVELOPMENT + "," + Spaceship::ConnectAPI::Certificate::CertificateType::DEVELOPMENT
58
+ certificate_type = [
59
+ Spaceship::ConnectAPI::Certificate::CertificateType::IOS_DEVELOPMENT,
60
+ Spaceship::ConnectAPI::Certificate::CertificateType::MAC_APP_DEVELOPMENT,
61
+ Spaceship::ConnectAPI::Certificate::CertificateType::DEVELOPMENT
62
+ ].join(',')
52
63
  when :distribution, :enterprise
53
- certificate_type = Spaceship::ConnectAPI::Certificate::CertificateType::IOS_DISTRIBUTION + "," + Spaceship::ConnectAPI::Certificate::CertificateType::DISTRIBUTION
64
+ certificate_type = [
65
+ Spaceship::ConnectAPI::Certificate::CertificateType::IOS_DISTRIBUTION,
66
+ Spaceship::ConnectAPI::Certificate::CertificateType::MAC_APP_DISTRIBUTION,
67
+ Spaceship::ConnectAPI::Certificate::CertificateType::DISTRIBUTION
68
+ ].join(',')
54
69
  when :developer_id_application
55
- certificate_type = Spaceship::ConnectAPI::Certificate::CertificateType::DEVELOPER_ID_APPLICATION
70
+ certificate_type = [
71
+ Spaceship::ConnectAPI::Certificate::CertificateType::DEVELOPER_ID_APPLICATION
72
+ ].join(',')
73
+ when :mac_installer_distribution
74
+ certificate_type = [
75
+ Spaceship::ConnectAPI::Certificate::CertificateType::MAC_INSTALLER_DISTRIBUTION
76
+ ].join(',')
56
77
  else
57
78
  UI.user_error!("Cert type '#{cert_type}' is not supported")
58
79
  end
@@ -62,8 +83,14 @@ module Match
62
83
  output_dir_profiles = File.join(storage.prefixed_working_directory, "profiles", prov_type.to_s)
63
84
 
64
85
  # Need to get the cert id by comparing base64 encoded cert content with certificate content from the API responses
65
- Spaceship::Portal.login(params[:username])
66
- Spaceship::Portal.select_team(team_id: params[:team_id], team_name: params[:team_name])
86
+ token = api_token(params)
87
+ if token
88
+ UI.message("Creating authorization token for App Store Connect API")
89
+ Spaceship::ConnectAPI.token = token
90
+ else
91
+ UI.message("Login to App Store Connect (#{params[:username]})")
92
+ Spaceship::ConnectAPI.login(params[:username], use_portal: true, use_tunes: false, portal_team_id: params[:team_id], team_name: params[:team_name])
93
+ end
67
94
  certs = Spaceship::ConnectAPI::Certificate.all(filter: { certificateType: certificate_type })
68
95
 
69
96
  # Base64 encode contents to find match from API to find a cert ID
@@ -108,5 +135,11 @@ module Match
108
135
  UI.user_error!("#{file_description} does not exist at path: #{file_path}") unless !file_path.nil? || optional
109
136
  file_path
110
137
  end
138
+
139
+ def api_token(params)
140
+ @api_token ||= Spaceship::ConnectAPI::Token.create(params[:api_key]) if params[:api_key]
141
+ @api_token ||= Spaceship::ConnectAPI::Token.from_json_file(params[:api_key_path]) if params[:api_key_path]
142
+ return @api_token
143
+ end
111
144
  end
112
145
  end
@@ -42,9 +42,14 @@ module Match
42
42
  # while on Git we recommend using the git branch instead. As there is
43
43
  # no concept of branches in Google Cloud Storage (omg thanks), we use
44
44
  # the team id properly
45
- spaceship = SpaceshipEnsure.new(params[:username], params[:team_id], params[:team_name])
45
+ spaceship = SpaceshipEnsure.new(params[:username], params[:team_id], params[:team_name], api_token(params))
46
46
  team_id = spaceship.team_id
47
- UI.message("Detected team ID '#{team_id}' to use for Google Cloud Storage...")
47
+
48
+ if team_id.to_s.empty?
49
+ UI.user_error!("The `team_id` option is required. fastlane cannot automatically determine portal team id via the App Store Connect API (yet)")
50
+ else
51
+ UI.message("Detected team ID '#{team_id}' to use for Google Cloud Storage...")
52
+ end
48
53
 
49
54
  files_to_commit = []
50
55
  Dir.chdir(git_storage.working_directory) do
@@ -85,6 +90,12 @@ module Match
85
90
  UI.input("Please make sure to read the above and confirm with enter")
86
91
  end
87
92
 
93
+ def api_token(params)
94
+ @api_token ||= Spaceship::ConnectAPI::Token.create(params[:api_key]) if params[:api_key]
95
+ @api_token ||= Spaceship::ConnectAPI::Token.from_json_file(params[:api_key_path]) if params[:api_key_path]
96
+ return @api_token
97
+ end
98
+
88
99
  def ensure_parameters_are_valid(params)
89
100
  if params[:readonly]
90
101
  UI.user_error!("`fastlane match migrate` doesn't work in `readonly` mode")
@@ -44,7 +44,7 @@ module Match
44
44
  s3_access_key: params[:s3_access_key].to_s,
45
45
  s3_secret_access_key: params[:s3_secret_access_key].to_s,
46
46
  s3_bucket: params[:s3_bucket].to_s,
47
- team_id: params[:team_id] || Spaceship.client.team_id
47
+ team_id: params[:team_id] || Spaceship::ConnectAPI.client.portal_team_id
48
48
  })
49
49
  self.storage.download
50
50
 
@@ -97,10 +97,14 @@ module Match
97
97
  end
98
98
 
99
99
  def spaceship_login
100
- Spaceship.login(params[:username])
101
- Spaceship.select_team(team_id: params[:team_id], team_name: params[:team_name])
100
+ if api_token
101
+ UI.message("Creating authorization token for App Store Connect API")
102
+ Spaceship::ConnectAPI.token = api_token
103
+ else
104
+ Spaceship::ConnectAPI.login(params[:username], use_portal: true, use_tunes: false, portal_team_id: params[:team_id], team_name: params[:team_name])
105
+ end
102
106
 
103
- if Spaceship.client.in_house? && (type == "distribution" || type == "enterprise")
107
+ if Spaceship::ConnectAPI.client.in_house? && (type == "distribution" || type == "enterprise")
104
108
  UI.error("---")
105
109
  UI.error("⚠️ Warning: This seems to be an Enterprise account!")
106
110
  UI.error("By nuking your account's distribution, all your apps deployed via ad-hoc will stop working!") if type == "distribution"
@@ -111,6 +115,12 @@ module Match
111
115
  end
112
116
  end
113
117
 
118
+ def api_token
119
+ @api_token ||= Spaceship::ConnectAPI::Token.create(params[:api_key]) if params[:api_key]
120
+ @api_token ||= Spaceship::ConnectAPI::Token.from_json_file(params[:api_key_path]) if params[:api_key_path]
121
+ return @api_token
122
+ end
123
+
114
124
  # Collect all the certs/profiles
115
125
  def prepare_list
116
126
  UI.message("Fetching certificates and profiles...")
@@ -125,8 +135,10 @@ module Match
125
135
  # Get all iOS and macOS profile
126
136
  self.profiles = []
127
137
  prov_types.each do |prov_type|
128
- self.profiles += profile_type(prov_type).all(mac: false)
129
- self.profiles += profile_type(prov_type).all(mac: true)
138
+ types = profile_types(prov_type)
139
+ # Filtering on 'profileType' seems to be undocumented as of 2020-07-30
140
+ # but works on both web session and official API
141
+ self.profiles += Spaceship::ConnectAPI::Profile.all(filter: { profileType: types.join(",") })
130
142
  end
131
143
 
132
144
  # Gets the main and additional cert types
@@ -138,7 +150,7 @@ module Match
138
150
  self.certs = []
139
151
  self.certs += cert_types.map do |ct|
140
152
  certificate_type(ct).flat_map do |cert|
141
- cert.all(mac: false) + cert.all(mac: true)
153
+ Spaceship::ConnectAPI::Certificate.all(filter: { certificateType: cert })
142
154
  end
143
155
  end.flatten
144
156
 
@@ -165,7 +177,7 @@ module Match
165
177
  puts("")
166
178
  if self.certs.count > 0
167
179
  rows = self.certs.collect do |cert|
168
- cert_expiration = cert.expires.nil? ? "Unknown" : cert.expires.strftime("%Y-%m-%d")
180
+ cert_expiration = cert.expiration_date.nil? ? "Unknown" : Time.parse(cert.expiration_date).strftime("%Y-%m-%d")
169
181
  [cert.name, cert.id, cert.class.to_s.split("::").last, cert_expiration]
170
182
  end
171
183
  puts(Terminal::Table.new({
@@ -178,11 +190,11 @@ module Match
178
190
 
179
191
  if self.profiles.count > 0
180
192
  rows = self.profiles.collect do |p|
181
- status = p.status == 'Active' ? p.status.green : p.status.red
193
+ status = p.valid? ? p.profile_state.green : p.profile_state.red
182
194
 
183
195
  # Expires is sometimes nil
184
- expires = p.expires ? p.expires.strftime("%Y-%m-%d") : nil
185
- [p.name, p.id, status, p.type, expires]
196
+ expires = p.expiration_date ? Time.parse(p.expiration_date).strftime("%Y-%m-%d") : nil
197
+ [p.name, p.id, status, p.profile_type, expires]
186
198
  end
187
199
  puts(Terminal::Table.new({
188
200
  title: "Provisioning Profiles that are going to be revoked".green,
@@ -227,7 +239,7 @@ module Match
227
239
  self.certs.each do |cert|
228
240
  UI.message("Revoking certificate '#{cert.name}' (#{cert.id})...")
229
241
  begin
230
- cert.revoke!
242
+ cert.delete!
231
243
  rescue => ex
232
244
  UI.message(ex.to_s)
233
245
  end
@@ -274,31 +286,62 @@ module Match
274
286
  def certificate_type(type)
275
287
  case type.to_sym
276
288
  when :mac_installer_distribution
277
- return [Spaceship.certificate.mac_installer_distribution]
289
+ return [
290
+ Spaceship::ConnectAPI::Certificate::CertificateType::MAC_INSTALLER_DISTRIBUTION
291
+ ]
278
292
  when :distribution
279
- return [Spaceship.certificate.production, Spaceship.certificate.apple_distribution]
293
+ return [
294
+ Spaceship::ConnectAPI::Certificate::CertificateType::MAC_APP_DISTRIBUTION,
295
+ Spaceship::ConnectAPI::Certificate::CertificateType::IOS_DISTRIBUTION,
296
+ Spaceship::ConnectAPI::Certificate::CertificateType::DISTRIBUTION
297
+ ]
280
298
  when :development
281
- return [Spaceship.certificate.development, Spaceship.certificate.apple_development]
299
+ return [
300
+ Spaceship::ConnectAPI::Certificate::CertificateType::MAC_APP_DEVELOPMENT,
301
+ Spaceship::ConnectAPI::Certificate::CertificateType::IOS_DEVELOPMENT,
302
+ Spaceship::ConnectAPI::Certificate::CertificateType::DEVELOPMENT
303
+ ]
282
304
  when :enterprise
283
- return [Spaceship.certificate.in_house]
305
+ return [
306
+ Spaceship::ConnectAPI::Certificate::CertificateType::IOS_DISTRIBUTION
307
+ ]
284
308
  else
285
309
  raise "Unknown type '#{type}'"
286
310
  end
287
311
  end
288
312
 
289
313
  # The kind of provisioning profile we're interested in
290
- def profile_type(prov_type)
314
+ def profile_types(prov_type)
291
315
  case prov_type.to_sym
292
316
  when :appstore
293
- return Spaceship.provisioning_profile.app_store
317
+ return [
318
+ Spaceship::ConnectAPI::Profile::ProfileType::IOS_APP_STORE,
319
+ Spaceship::ConnectAPI::Profile::ProfileType::MAC_APP_STORE,
320
+ Spaceship::ConnectAPI::Profile::ProfileType::TVOS_APP_STORE,
321
+ Spaceship::ConnectAPI::Profile::ProfileType::MAC_CATALYST_APP_STORE
322
+ ]
294
323
  when :development
295
- return Spaceship.provisioning_profile.development
324
+ return [
325
+ Spaceship::ConnectAPI::Profile::ProfileType::IOS_APP_DEVELOPMENT,
326
+ Spaceship::ConnectAPI::Profile::ProfileType::MAC_APP_DEVELOPMENT,
327
+ Spaceship::ConnectAPI::Profile::ProfileType::TVOS_APP_DEVELOPMENT,
328
+ Spaceship::ConnectAPI::Profile::ProfileType::MAC_CATALYST_APP_DEVELOPMENT
329
+ ]
296
330
  when :enterprise
297
- return Spaceship.provisioning_profile.in_house
331
+ return [
332
+ Spaceship::ConnectAPI::Profile::ProfileType::IOS_APP_INHOUSE,
333
+ Spaceship::ConnectAPI::Profile::ProfileType::TVOS_APP_INHOUSE
334
+ ]
298
335
  when :adhoc
299
- return Spaceship.provisioning_profile.ad_hoc
336
+ return [
337
+ Spaceship::ConnectAPI::Profile::ProfileType::IOS_APP_ADHOC,
338
+ Spaceship::ConnectAPI::Profile::ProfileType::TVOS_APP_ADHOC
339
+ ]
300
340
  when :developer_id
301
- return Spaceship.provisioning_profile.direct
341
+ return [
342
+ Spaceship::ConnectAPI::Profile::ProfileType::MAC_APP_DIRECT,
343
+ Spaceship::ConnectAPI::Profile::ProfileType::MAC_CATALYST_APP_DIRECT
344
+ ]
302
345
  else
303
346
  raise "Unknown provisioning type '#{prov_type}'"
304
347
  end
@@ -62,7 +62,6 @@ module Match
62
62
  type: Boolean,
63
63
  default_value: false),
64
64
 
65
- # app
66
65
  FastlaneCore::ConfigItem.new(key: :app_identifier,
67
66
  short_option: "-a",
68
67
  env_name: "MATCH_APP_IDENTIFIER",
@@ -72,10 +71,30 @@ module Match
72
71
  code_gen_sensitive: true,
73
72
  default_value: CredentialsManager::AppfileConfig.try_fetch_value(:app_identifier),
74
73
  default_value_dynamic: true),
74
+
75
+ # App Store Connect API
76
+ FastlaneCore::ConfigItem.new(key: :api_key_path,
77
+ env_name: "SIGH_API_KEY_PATH",
78
+ 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)",
79
+ optional: true,
80
+ conflicting_options: [:api_key],
81
+ verify_block: proc do |value|
82
+ UI.user_error!("Couldn't find API key JSON file at path '#{value}'") unless File.exist?(value)
83
+ end),
84
+ FastlaneCore::ConfigItem.new(key: :api_key,
85
+ env_name: "SIGH_API_KEY",
86
+ 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)",
87
+ type: Hash,
88
+ optional: true,
89
+ sensitive: true,
90
+ conflicting_options: [:api_key_path]),
91
+
92
+ # Apple ID
75
93
  FastlaneCore::ConfigItem.new(key: :username,
76
94
  short_option: "-u",
77
95
  env_name: "MATCH_USERNAME",
78
96
  description: "Your Apple ID Username",
97
+ optional: true,
79
98
  default_value: user,
80
99
  default_value_dynamic: true),
81
100
  FastlaneCore::ConfigItem.new(key: :team_id,
@@ -268,6 +287,12 @@ module Match
268
287
  env_name: "MATCH_OUTPUT_PATH",
269
288
  description: "Path in which to export certificates, key and profile",
270
289
  optional: true),
290
+ FastlaneCore::ConfigItem.new(key: :skip_set_partition_list,
291
+ short_option: "-P",
292
+ env_name: "MATCH_SKIP_SET_PARTITION_LIST",
293
+ description: "Skips setting the partition list (which can sometimes take a long time). Setting the partition list is usually needed to prevent Xcode from prompting to allow a cert to be used for signing",
294
+ type: Boolean,
295
+ default_value: false),
271
296
 
272
297
  # other
273
298
  FastlaneCore::ConfigItem.new(key: :verbose,