fastlane 2.152.0 → 2.155.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (91) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +76 -76
  3. data/deliver/lib/deliver/app_screenshot.rb +1 -1
  4. data/deliver/lib/deliver/commands_generator.rb +7 -4
  5. data/deliver/lib/deliver/detect_values.rb +9 -3
  6. data/deliver/lib/deliver/download_screenshots.rb +1 -3
  7. data/deliver/lib/deliver/html_generator.rb +8 -1
  8. data/deliver/lib/deliver/runner.rb +5 -10
  9. data/deliver/lib/deliver/setup.rb +92 -3
  10. data/deliver/lib/deliver/submit_for_review.rb +1 -3
  11. data/deliver/lib/deliver/upload_metadata.rb +46 -26
  12. data/deliver/lib/deliver/upload_price_tier.rb +1 -3
  13. data/deliver/lib/deliver/upload_screenshots.rb +75 -44
  14. data/{deliver/lib/deliver/.commands_generator.rb.swp → fastlane/lib/fastlane/.erb_template_helper.rb.swp} +0 -0
  15. data/{frameit/lib/frameit/.editor.rb.swp → fastlane/lib/fastlane/actions/.git_commit.rb.swp} +0 -0
  16. data/fastlane/lib/fastlane/actions/carthage.rb +7 -0
  17. data/fastlane/lib/fastlane/actions/create_keychain.rb +5 -1
  18. data/fastlane/lib/fastlane/actions/docs/frame_screenshots.md +3 -1
  19. data/fastlane/lib/fastlane/actions/docs/sync_code_signing.md +21 -2
  20. data/fastlane/lib/fastlane/actions/docs/upload_to_app_store.md.erb +4 -4
  21. data/fastlane/lib/fastlane/actions/download_dsyms.rb +4 -2
  22. data/fastlane/lib/fastlane/actions/erb.rb +10 -2
  23. data/fastlane/lib/fastlane/actions/git_pull.rb +13 -2
  24. data/fastlane/lib/fastlane/actions/sync_code_signing.rb +5 -0
  25. data/fastlane/lib/fastlane/runner.rb +3 -1
  26. data/fastlane/lib/fastlane/version.rb +1 -1
  27. data/fastlane/swift/Deliverfile.swift +1 -1
  28. data/fastlane/swift/DeliverfileProtocol.swift +1 -1
  29. data/fastlane/swift/Fastlane.swift +407 -189
  30. data/fastlane/swift/Gymfile.swift +1 -1
  31. data/fastlane/swift/GymfileProtocol.swift +1 -1
  32. data/fastlane/swift/Matchfile.swift +1 -1
  33. data/fastlane/swift/MatchfileProtocol.swift +10 -2
  34. data/fastlane/swift/Precheckfile.swift +1 -1
  35. data/fastlane/swift/PrecheckfileProtocol.swift +1 -1
  36. data/fastlane/swift/Scanfile.swift +1 -1
  37. data/fastlane/swift/ScanfileProtocol.swift +1 -1
  38. data/fastlane/swift/Screengrabfile.swift +1 -1
  39. data/fastlane/swift/ScreengrabfileProtocol.swift +1 -1
  40. data/fastlane/swift/Snapshotfile.swift +1 -1
  41. data/fastlane/swift/SnapshotfileProtocol.swift +9 -1
  42. data/fastlane_core/lib/fastlane_core/device_manager.rb +25 -6
  43. data/frameit/lib/frameit/editor.rb +11 -6
  44. data/gym/lib/gym/detect_values.rb +6 -3
  45. data/gym/lib/gym/module.rb +30 -0
  46. data/gym/lib/gym/runner.rb +23 -18
  47. data/match/lib/match/generator.rb +6 -0
  48. data/match/lib/match/options.rb +16 -4
  49. data/match/lib/match/runner.rb +13 -5
  50. data/match/lib/match/spaceship_ensure.rb +7 -9
  51. data/match/lib/match/storage/git_storage.rb +16 -2
  52. data/match/lib/match/storage/google_cloud_storage.rb +1 -1
  53. data/pilot/lib/pilot/build_manager.rb +9 -0
  54. data/pilot/lib/pilot/options.rb +1 -1
  55. data/scan/lib/scan/runner.rb +19 -6
  56. data/sigh/lib/sigh/.runner.rb.swp +0 -0
  57. data/sigh/lib/sigh/download_all.rb +42 -27
  58. data/sigh/lib/sigh/module.rb +26 -0
  59. data/sigh/lib/sigh/options.rb +2 -2
  60. data/sigh/lib/sigh/runner.rb +96 -35
  61. data/snapshot/lib/snapshot/options.rb +10 -0
  62. data/snapshot/lib/snapshot/simulator_launchers/launcher_configuration.rb +2 -0
  63. data/snapshot/lib/snapshot/simulator_launchers/simulator_launcher_base.rb +5 -0
  64. data/snapshot/lib/snapshot/test_command_generator.rb +3 -2
  65. data/snapshot/lib/snapshot/test_command_generator_xcode_8.rb +4 -1
  66. data/spaceship/lib/spaceship/connect_api.rb +1 -0
  67. data/spaceship/lib/spaceship/connect_api/client.rb +5 -3
  68. data/spaceship/lib/spaceship/connect_api/model.rb +15 -1
  69. data/spaceship/lib/spaceship/connect_api/models/.device.rb.swp +0 -0
  70. data/spaceship/lib/spaceship/connect_api/models/age_rating_declaration.rb +1 -0
  71. data/spaceship/lib/spaceship/connect_api/models/app.rb +61 -3
  72. data/spaceship/lib/spaceship/connect_api/models/app_info_localization.rb +1 -0
  73. data/spaceship/lib/spaceship/connect_api/models/app_preview.rb +1 -0
  74. data/spaceship/lib/spaceship/connect_api/models/app_screenshot.rb +44 -5
  75. data/spaceship/lib/spaceship/connect_api/models/app_store_review_detail.rb +1 -0
  76. data/spaceship/lib/spaceship/connect_api/models/app_store_version.rb +12 -0
  77. data/spaceship/lib/spaceship/connect_api/models/app_store_version_localization.rb +1 -0
  78. data/spaceship/lib/spaceship/connect_api/models/app_store_version_release_request.rb +12 -0
  79. data/spaceship/lib/spaceship/connect_api/models/build.rb +1 -0
  80. data/spaceship/lib/spaceship/connect_api/models/bundle_id.rb +17 -5
  81. data/spaceship/lib/spaceship/connect_api/models/bundle_id_capability.rb +41 -7
  82. data/spaceship/lib/spaceship/connect_api/models/idfa_declaration.rb +1 -0
  83. data/spaceship/lib/spaceship/connect_api/models/profile.rb +31 -1
  84. data/spaceship/lib/spaceship/connect_api/provisioning/client.rb +46 -4
  85. data/spaceship/lib/spaceship/connect_api/provisioning/provisioning.rb +41 -0
  86. data/spaceship/lib/spaceship/connect_api/tunes/tunes.rb +32 -1
  87. data/supply/lib/supply/client.rb +2 -1
  88. data/supply/lib/supply/options.rb +8 -1
  89. metadata +33 -58
  90. data/deliver/lib/deliver/.submit_for_review.rb.swp +0 -0
  91. data/deliver/lib/deliver/.upload_metadata.rb.swp +0 -0
@@ -14,4 +14,4 @@ class Gymfile: GymfileProtocol {
14
14
  // during the `init` process, and you won't see this message
15
15
  }
16
16
 
17
- // Generated with fastlane 2.152.0
17
+ // Generated with fastlane 2.155.1
@@ -181,4 +181,4 @@ extension GymfileProtocol {
181
181
 
182
182
  // Please don't remove the lines below
183
183
  // They are used to detect outdated files
184
- // FastlaneRunnerAPIVersion [0.9.28]
184
+ // FastlaneRunnerAPIVersion [0.9.33]
@@ -14,4 +14,4 @@ class Matchfile: MatchfileProtocol {
14
14
  // during the `init` process, and you won't see this message
15
15
  }
16
16
 
17
- // Generated with fastlane 2.152.0
17
+ // Generated with fastlane 2.155.1
@@ -53,6 +53,9 @@ protocol MatchfileProtocol: class {
53
53
  /// Use a bearer authorization header to access the git repo (e.g.: access to an Azure Devops repository), usually a string in Base64
54
54
  var gitBearerAuthorization: String? { get }
55
55
 
56
+ /// Use a private key to access the git repo (e.g.: access to GitHub repository via Deploy keys), usually a id_rsa named file or the contents hereof
57
+ var gitPrivateKey: String? { get }
58
+
56
59
  /// Name of the Google Cloud Storage bucket to use
57
60
  var googleCloudBucketName: String? { get }
58
61
 
@@ -95,9 +98,12 @@ protocol MatchfileProtocol: class {
95
98
  /// Skip generation of a README.md for the created git repository
96
99
  var skipDocs: Bool { get }
97
100
 
98
- /// Set the provisioning profile's platform to work with (i.e. ios, tvos, macos)
101
+ /// Set the provisioning profile's platform to work with (i.e. ios, tvos, macos, catalyst)
99
102
  var platform: String { get }
100
103
 
104
+ /// Enable this if you have the Mac Catalyst capability enabled and your project was created with Xcode 11.3 or earlier. Prepends 'maccatalyst.' to the app identifier for the provisioning profile mapping
105
+ var deriveCatalystAppIdentifier: Bool { get }
106
+
101
107
  /// 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")
102
108
  var templateName: String? { get }
103
109
 
@@ -133,6 +139,7 @@ extension MatchfileProtocol {
133
139
  var cloneBranchDirectly: Bool { return false }
134
140
  var gitBasicAuthorization: String? { return nil }
135
141
  var gitBearerAuthorization: String? { return nil }
142
+ var gitPrivateKey: String? { return nil }
136
143
  var googleCloudBucketName: String? { return nil }
137
144
  var googleCloudKeysFile: String? { return nil }
138
145
  var googleCloudProjectId: String? { return nil }
@@ -148,6 +155,7 @@ extension MatchfileProtocol {
148
155
  var skipConfirmation: Bool { return false }
149
156
  var skipDocs: Bool { return false }
150
157
  var platform: String { return "ios" }
158
+ var deriveCatalystAppIdentifier: Bool { return false }
151
159
  var templateName: String? { return nil }
152
160
  var profileName: String? { return nil }
153
161
  var failOnNameTaken: Bool { return false }
@@ -157,4 +165,4 @@ extension MatchfileProtocol {
157
165
 
158
166
  // Please don't remove the lines below
159
167
  // They are used to detect outdated files
160
- // FastlaneRunnerAPIVersion [0.9.22]
168
+ // FastlaneRunnerAPIVersion [0.9.27]
@@ -14,4 +14,4 @@ class Precheckfile: PrecheckfileProtocol {
14
14
  // during the `init` process, and you won't see this message
15
15
  }
16
16
 
17
- // Generated with fastlane 2.152.0
17
+ // Generated with fastlane 2.155.1
@@ -33,4 +33,4 @@ extension PrecheckfileProtocol {
33
33
 
34
34
  // Please don't remove the lines below
35
35
  // They are used to detect outdated files
36
- // FastlaneRunnerAPIVersion [0.9.21]
36
+ // FastlaneRunnerAPIVersion [0.9.26]
@@ -14,4 +14,4 @@ class Scanfile: ScanfileProtocol {
14
14
  // during the `init` process, and you won't see this message
15
15
  }
16
16
 
17
- // Generated with fastlane 2.152.0
17
+ // Generated with fastlane 2.155.1
@@ -257,4 +257,4 @@ extension ScanfileProtocol {
257
257
 
258
258
  // Please don't remove the lines below
259
259
  // They are used to detect outdated files
260
- // FastlaneRunnerAPIVersion [0.9.33]
260
+ // FastlaneRunnerAPIVersion [0.9.38]
@@ -14,4 +14,4 @@ class Screengrabfile: ScreengrabfileProtocol {
14
14
  // during the `init` process, and you won't see this message
15
15
  }
16
16
 
17
- // Generated with fastlane 2.152.0
17
+ // Generated with fastlane 2.155.1
@@ -93,4 +93,4 @@ extension ScreengrabfileProtocol {
93
93
 
94
94
  // Please don't remove the lines below
95
95
  // They are used to detect outdated files
96
- // FastlaneRunnerAPIVersion [0.9.23]
96
+ // FastlaneRunnerAPIVersion [0.9.28]
@@ -14,4 +14,4 @@ class Snapshotfile: SnapshotfileProtocol {
14
14
  // during the `init` process, and you won't see this message
15
15
  }
16
16
 
17
- // Generated with fastlane 2.152.0
17
+ // Generated with fastlane 2.155.1
@@ -44,6 +44,9 @@ protocol SnapshotfileProtocol: class {
44
44
  /// Enabling this option will automatically erase the simulator before running the application
45
45
  var eraseSimulator: Bool { get }
46
46
 
47
+ /// Enabling this option will prevent displaying the simulator window
48
+ var headless: Bool { get }
49
+
47
50
  /// Enabling this option wil automatically override the status bar to show 9:41 AM, full battery, and full reception
48
51
  var overrideStatusBar: Bool { get }
49
52
 
@@ -124,6 +127,9 @@ protocol SnapshotfileProtocol: class {
124
127
 
125
128
  /// Disable xcpretty formatting of build
126
129
  var disableXcpretty: Bool? { get }
130
+
131
+ /// Suppress the output of xcodebuild to stdout. Output is still saved in buildlog_path
132
+ var suppressXcodeOutput: Bool? { get }
127
133
  }
128
134
 
129
135
  extension SnapshotfileProtocol {
@@ -142,6 +148,7 @@ extension SnapshotfileProtocol {
142
148
  var clearPreviousScreenshots: Bool { return false }
143
149
  var reinstallApp: Bool { return false }
144
150
  var eraseSimulator: Bool { return false }
151
+ var headless: Bool { return true }
145
152
  var overrideStatusBar: Bool { return false }
146
153
  var localizeSimulator: Bool { return false }
147
154
  var darkMode: Bool? { return nil }
@@ -169,8 +176,9 @@ extension SnapshotfileProtocol {
169
176
  var onlyTesting: String? { return nil }
170
177
  var skipTesting: String? { return nil }
171
178
  var disableXcpretty: Bool? { return nil }
179
+ var suppressXcodeOutput: Bool? { return nil }
172
180
  }
173
181
 
174
182
  // Please don't remove the lines below
175
183
  // They are used to detect outdated files
176
- // FastlaneRunnerAPIVersion [0.9.17]
184
+ // FastlaneRunnerAPIVersion [0.9.22]
@@ -199,18 +199,37 @@ module FastlaneCore
199
199
  self.name
200
200
  end
201
201
 
202
+ def boot
203
+ return unless is_simulator
204
+ return unless os_type == "iOS"
205
+ return if self.state == 'Booted'
206
+
207
+ UI.message("Booting #{self}")
208
+
209
+ `xcrun simctl boot #{self.udid} 2>/dev/null`
210
+ self.state = 'Booted'
211
+ end
212
+
213
+ def shutdown
214
+ return unless is_simulator
215
+ return unless os_type == "iOS"
216
+ return if self.state != 'Booted'
217
+
218
+ UI.message("Shutting down #{self.udid}")
219
+ `xcrun simctl shutdown #{self.udid} 2>/dev/null`
220
+ self.state = 'Shutdown'
221
+ end
222
+
202
223
  def reset
203
224
  UI.message("Resetting #{self}")
204
- `xcrun simctl shutdown #{self.udid}` if self.state == "Booted"
225
+ shutdown
205
226
  `xcrun simctl erase #{self.udid}`
206
- return
207
227
  end
208
228
 
209
229
  def delete
210
230
  UI.message("Deleting #{self}")
211
- `xcrun simctl shutdown #{self.udid}` unless self.state == "Shutdown"
231
+ shutdown
212
232
  `xcrun simctl delete #{self.udid}`
213
- return
214
233
  end
215
234
 
216
235
  def disable_slide_to_type
@@ -324,10 +343,10 @@ module FastlaneCore
324
343
  def copy_logarchive(device, log_identity, logs_destination_dir)
325
344
  require 'shellwords'
326
345
 
327
- logarchive_dst = File.join(logs_destination_dir, "system_logs-#{log_identity}.logarchive").shellescape
346
+ logarchive_dst = File.join(logs_destination_dir, "system_logs-#{log_identity}.logarchive")
328
347
  FileUtils.rm_rf(logarchive_dst)
329
348
  FileUtils.mkdir_p(File.expand_path("..", logarchive_dst))
330
- command = "xcrun simctl spawn --standalone #{device.udid} log collect --output #{logarchive_dst} 2>/dev/null"
349
+ command = "xcrun simctl spawn #{device.udid} log collect --output #{logarchive_dst.shellescape} 2>/dev/null"
331
350
  FastlaneCore::CommandExecutor.execute(command: command, print_all: false, print_command: true)
332
351
  end
333
352
  end
@@ -298,7 +298,7 @@ module Frameit
298
298
  resize_text(keyword)
299
299
 
300
300
  vertical_padding = vertical_frame_padding # assign padding to variable
301
- spacing_between_title_and_keyword = (actual_font_size / 2)
301
+ spacing_between_title_and_keyword = (actual_font_size('keyword') / 2)
302
302
  title_left_space = (background.width / 2.0 - title.width / 2.0).round
303
303
  keyword_left_space = (background.width / 2.0 - keyword.width / 2.0).round
304
304
 
@@ -359,7 +359,7 @@ module Frameit
359
359
  vertical_padding = vertical_frame_padding # assign padding to variable
360
360
  left_space = (background.width / 2.0 - sum_width / 2.0).round
361
361
 
362
- self.space_to_device += actual_font_size + vertical_padding
362
+ self.space_to_device += actual_font_size('title') + vertical_padding
363
363
 
364
364
  if title_below_image
365
365
  title_top = background.height - effective_text_height / 2 - title.height / 2
@@ -385,7 +385,10 @@ module Frameit
385
385
  background
386
386
  end
387
387
 
388
- def actual_font_size
388
+ def actual_font_size(key)
389
+ font_size = @config[key.to_s]['font_size']
390
+ return font_size if !font_size.nil? && font_size > 0
391
+
389
392
  font_scale_factor = @config['font_scale_factor'] || 0.1
390
393
  UI.user_error!("Parameter 'font_scale_factor' can not be 0. Please provide a value larger than 0.0 (default = 0.1).") if font_scale_factor == 0.0
391
394
  [@image.width * font_scale_factor].max.round
@@ -393,7 +396,7 @@ module Frameit
393
396
 
394
397
  # The space between the keyword and the title
395
398
  def keyword_padding
396
- (actual_font_size / 3.0).round
399
+ (actual_font_size('keyword') / 3.0).round
397
400
  end
398
401
 
399
402
  # This will build up to 2 individual images with the title and optional keyword, which will then be added to the real image
@@ -427,7 +430,7 @@ module Frameit
427
430
  text_image.combine_options do |i|
428
431
  i.font(current_font) if current_font
429
432
  i.gravity("Center")
430
- i.pointsize(actual_font_size)
433
+ i.pointsize(actual_font_size(key))
431
434
  i.draw("text 0,0 '#{text}'")
432
435
  i.interline_spacing(interline_spacing) if interline_spacing
433
436
  i.fill(@config[key.to_s]['color'])
@@ -497,7 +500,9 @@ module Frameit
497
500
  UI.user_error!("Valid parameters :keyword, :title") unless [:keyword, :title].include?(type)
498
501
 
499
502
  # Try to get it from a keyword.strings or title.strings file
500
- strings_path = File.join(File.expand_path("..", screenshot.path), "#{type}.strings")
503
+ strings_path = File.join(File.expand_path("../", screenshot.path), "#{type}.strings")
504
+ strings_path = File.join(File.expand_path("../../", screenshot.path), "#{type}.strings") unless File.exist?(strings_path)
505
+ strings_path = File.join(File.expand_path("../../../", screenshot.path), "#{type}.strings") unless File.exist?(strings_path)
501
506
  if File.exist?(strings_path)
502
507
  parsed = StringsParser.parse(strings_path)
503
508
  text_array = parsed.find { |k, v| screenshot.path.upcase.include?(k.upcase) }
@@ -144,10 +144,13 @@ module Gym
144
144
  # Is it an iOS device or a Mac?
145
145
  def self.detect_platform
146
146
  return if Gym.config[:destination]
147
- platform = if Gym.project.mac? || Gym.building_mac_catalyst_for_mac?
148
- min_xcode8? ? "macOS" : "OS X"
149
- elsif Gym.project.tvos?
147
+
148
+ platform = if Gym.project.tvos?
150
149
  "tvOS"
150
+ elsif Gym.building_for_ios?
151
+ "iOS"
152
+ elsif Gym.building_for_mac?
153
+ min_xcode8? ? "macOS" : "OS X"
151
154
  else
152
155
  "iOS"
153
156
  end
@@ -25,6 +25,28 @@ module Gym
25
25
  require 'gym/xcodebuild_fixes/generic_archive_fix'
26
26
  end
27
27
 
28
+ def building_for_ios?
29
+ if Gym.project.mac?
30
+ # Can be building for iOS if mac project and catalyst
31
+ return building_mac_catalyst_for_ios?
32
+ else
33
+ # Can be iOS project and build for mac if catalyst
34
+ return false if building_mac_catalyst_for_mac?
35
+
36
+ # Can be iOS project if iOS, tvOS, or watchOS
37
+ return Gym.project.ios? || Gym.project.tvos? || Gym.project.watchos?
38
+ end
39
+ end
40
+
41
+ def building_for_mac?
42
+ if Gym.project.supports_mac_catalyst?
43
+ # Can be a mac project and not build mac if catalyst
44
+ return building_mac_catalyst_for_mac?
45
+ else
46
+ return Gym.project.mac?
47
+ end
48
+ end
49
+
28
50
  def building_mac_catalyst_for_ios?
29
51
  Gym.project.supports_mac_catalyst? && Gym.config[:catalyst_platform] == "ios"
30
52
  end
@@ -32,6 +54,14 @@ module Gym
32
54
  def building_mac_catalyst_for_mac?
33
55
  Gym.project.supports_mac_catalyst? && Gym.config[:catalyst_platform] == "macos"
34
56
  end
57
+
58
+ def export_destination_upload?
59
+ config_path = Gym.cache[:config_path]
60
+ return false if config_path.nil?
61
+
62
+ result = CFPropertyList.native_types(CFPropertyList::List.new(file: config_path).value)
63
+ return result["destination"] == "upload"
64
+ end
35
65
  end
36
66
 
37
67
  Helper = FastlaneCore::Helper # you gotta love Ruby: Helper.* should use the Helper class contained in FastlaneCore
@@ -23,25 +23,24 @@ module Gym
23
23
 
24
24
  FileUtils.mkdir_p(File.expand_path(Gym.config[:output_directory]))
25
25
 
26
- # Determine platform to archive
27
- is_mac = Gym.project.mac? || Gym.building_mac_catalyst_for_mac?
28
- is_ios = !is_mac && (Gym.project.ios? || Gym.project.tvos? || Gym.project.watchos?)
29
-
30
26
  # Archive
31
- if is_ios
27
+ if Gym.building_for_ios?
32
28
  fix_generic_archive unless Gym.project.watchos? # See https://github.com/fastlane/fastlane/pull/4325
33
29
  return BuildCommandGenerator.archive_path if Gym.config[:skip_package_ipa]
34
30
 
35
31
  package_app
36
32
  compress_and_move_dsym
37
- path = move_ipa
38
- move_manifest
39
- move_app_thinning
40
- move_app_thinning_size_report
41
- move_apps_folder
42
- move_asset_packs
43
- move_appstore_info
44
- elsif is_mac
33
+
34
+ unless Gym.export_destination_upload?
35
+ path = move_ipa
36
+ move_manifest
37
+ move_app_thinning
38
+ move_app_thinning_size_report
39
+ move_apps_folder
40
+ move_asset_packs
41
+ move_appstore_info
42
+ end
43
+ elsif Gym.building_for_mac?
45
44
  path = File.expand_path(Gym.config[:output_directory])
46
45
  compress_and_move_dsym
47
46
  if Gym.project.mac_app? || Gym.building_mac_catalyst_for_mac?
@@ -49,14 +48,17 @@ module Gym
49
48
  return path if Gym.config[:skip_package_pkg]
50
49
 
51
50
  package_app
52
- path = move_pkg
53
- move_appstore_info
51
+ unless Gym.export_destination_upload?
52
+ path = move_pkg
53
+ move_appstore_info
54
+ end
54
55
  return path
55
56
  end
56
57
  copy_files_from_path(File.join(BuildCommandGenerator.archive_path, "Products/usr/local/bin/*")) if Gym.project.command_line_tool?
57
58
  end
58
59
  return path
59
60
  end
61
+ # rubocop:enable Metrics/PerceivedComplexity
60
62
 
61
63
  #####################################################
62
64
  # @!group Printing out things
@@ -273,11 +275,14 @@ module Gym
273
275
  app_path = File.join(BuildCommandGenerator.archive_path, "Products/Applications/#{exe_name}.app")
274
276
 
275
277
  UI.crash!("Couldn't find application in '#{BuildCommandGenerator.archive_path}'") unless File.exist?(app_path)
278
+
279
+ joined_app_path = File.join(Gym.config[:output_directory], File.basename(app_path))
280
+ FileUtils.rm_rf(joined_app_path)
276
281
  FileUtils.cp_r(app_path, File.expand_path(Gym.config[:output_directory]), remove_destination: true)
277
- app_path = File.join(Gym.config[:output_directory], File.basename(app_path))
282
+
278
283
  UI.success("Successfully exported the .app file:")
279
- UI.message(app_path)
280
- app_path
284
+ UI.message(joined_app_path)
285
+ joined_app_path
281
286
  end
282
287
 
283
288
  # Move the manifest.plist if exists into the output directory
@@ -14,7 +14,13 @@ module Match
14
14
  specific_cert_type = cert_type.to_s
15
15
  end
16
16
 
17
+ platform = params[:platform]
18
+ if platform.to_s == :catalyst.to_s
19
+ platform = :macos.to_s
20
+ end
21
+
17
22
  arguments = FastlaneCore::Configuration.create(Cert::Options.available_options, {
23
+ platform: platform,
18
24
  development: params[:type] == "development",
19
25
  type: specific_cert_type,
20
26
  generate_apple_certs: params[:generate_apple_certs],
@@ -141,14 +141,21 @@ module Match
141
141
  env_name: "MATCH_GIT_BASIC_AUTHORIZATION",
142
142
  sensitive: true,
143
143
  description: "Use a basic authorization header to access the git repo (e.g.: access via HTTPS, GitHub Actions, etc), usually a string in Base64",
144
- conflicting_options: [:git_bearer_authorization],
144
+ conflicting_options: [:git_bearer_authorization, :git_private_key],
145
145
  optional: true,
146
146
  default_value: nil),
147
147
  FastlaneCore::ConfigItem.new(key: :git_bearer_authorization,
148
148
  env_name: "MATCH_GIT_BEARER_AUTHORIZATION",
149
149
  sensitive: true,
150
150
  description: "Use a bearer authorization header to access the git repo (e.g.: access to an Azure Devops repository), usually a string in Base64",
151
- conflicting_options: [:git_basic_authorization],
151
+ conflicting_options: [:git_basic_authorization, :git_private_key],
152
+ optional: true,
153
+ default_value: nil),
154
+ FastlaneCore::ConfigItem.new(key: :git_private_key,
155
+ env_name: "MATCH_GIT_PRIVATE_KEY",
156
+ sensitive: true,
157
+ description: "Use a private key to access the git repo (e.g.: access to GitHub repository via Deploy keys), usually a id_rsa named file or the contents hereof",
158
+ conflicting_options: [:git_basic_authorization, :git_bearer_authorization],
152
159
  optional: true,
153
160
  default_value: nil),
154
161
 
@@ -228,14 +235,19 @@ module Match
228
235
  FastlaneCore::ConfigItem.new(key: :platform,
229
236
  short_option: '-o',
230
237
  env_name: "MATCH_PLATFORM",
231
- description: "Set the provisioning profile's platform to work with (i.e. ios, tvos, macos)",
238
+ description: "Set the provisioning profile's platform to work with (i.e. ios, tvos, macos, catalyst)",
232
239
  default_value: default_platform,
233
240
  default_value_dynamic: true,
234
241
  verify_block: proc do |value|
235
242
  value = value.to_s
236
- pt = %w(tvos ios macos)
243
+ pt = %w(tvos ios macos catalyst)
237
244
  UI.user_error!("Unsupported platform, must be: #{pt}") unless pt.include?(value)
238
245
  end),
246
+ FastlaneCore::ConfigItem.new(key: :derive_catalyst_app_identifier,
247
+ env_name: "MATCH_DERIVE_CATALYST_APP_IDENTIFIER",
248
+ description: "Enable this if you have the Mac Catalyst capability enabled and your project was created with Xcode 11.3 or earlier. Prepends 'maccatalyst.' to the app identifier for the provisioning profile mapping",
249
+ type: Boolean,
250
+ default_value: false),
239
251
  FastlaneCore::ConfigItem.new(key: :template_name,
240
252
  env_name: "MATCH_PROVISIONING_PROFILE_TEMPLATE_NAME",
241
253
  description: "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\")",