fastlane 2.151.0 → 2.153.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (68) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +78 -78
  3. data/deliver/lib/deliver/.upload_metadata.rb.swp +0 -0
  4. data/deliver/lib/deliver/app_screenshot.rb +1 -1
  5. data/deliver/lib/deliver/commands_generator.rb +7 -4
  6. data/deliver/lib/deliver/detect_values.rb +9 -3
  7. data/deliver/lib/deliver/download_screenshots.rb +36 -31
  8. data/deliver/lib/deliver/options.rb +1 -1
  9. data/deliver/lib/deliver/runner.rb +5 -10
  10. data/deliver/lib/deliver/setup.rb +94 -3
  11. data/deliver/lib/deliver/submit_for_review.rb +4 -6
  12. data/deliver/lib/deliver/upload_metadata.rb +32 -28
  13. data/deliver/lib/deliver/upload_price_tier.rb +1 -3
  14. data/deliver/lib/deliver/upload_screenshots.rb +76 -45
  15. data/{deliver/lib/deliver/.download_screenshots.rb.swp → fastlane/lib/fastlane/.erb_template_helper.rb.swp} +0 -0
  16. data/{spaceship/lib/spaceship/connect_api/models/.app_screenshot.rb.swp → fastlane/lib/fastlane/actions/.git_commit.rb.swp} +0 -0
  17. data/fastlane/lib/fastlane/actions/docs/frame_screenshots.md +3 -1
  18. data/fastlane/lib/fastlane/actions/docs/upload_to_app_store.md.erb +1 -1
  19. data/fastlane/lib/fastlane/actions/download_dsyms.rb +4 -2
  20. data/fastlane/lib/fastlane/actions/erb.rb +10 -2
  21. data/fastlane/lib/fastlane/actions/git_branch.rb +4 -1
  22. data/fastlane/lib/fastlane/actions/upload_to_testflight.rb +11 -3
  23. data/fastlane/lib/fastlane/helper/s3_client_helper.rb +1 -1
  24. data/fastlane/lib/fastlane/runner.rb +3 -1
  25. data/fastlane/lib/fastlane/version.rb +1 -1
  26. data/fastlane/swift/Deliverfile.swift +1 -1
  27. data/fastlane/swift/DeliverfileProtocol.swift +3 -3
  28. data/fastlane/swift/Fastlane.swift +19 -7
  29. data/fastlane/swift/Gymfile.swift +1 -1
  30. data/fastlane/swift/GymfileProtocol.swift +1 -1
  31. data/fastlane/swift/Matchfile.swift +1 -1
  32. data/fastlane/swift/MatchfileProtocol.swift +1 -1
  33. data/fastlane/swift/Precheckfile.swift +1 -1
  34. data/fastlane/swift/PrecheckfileProtocol.swift +1 -1
  35. data/fastlane/swift/Scanfile.swift +1 -1
  36. data/fastlane/swift/ScanfileProtocol.swift +1 -1
  37. data/fastlane/swift/Screengrabfile.swift +1 -1
  38. data/fastlane/swift/ScreengrabfileProtocol.swift +1 -1
  39. data/fastlane/swift/Snapshotfile.swift +1 -1
  40. data/fastlane/swift/SnapshotfileProtocol.swift +1 -1
  41. data/fastlane_core/lib/fastlane_core/device_manager.rb +20 -6
  42. data/fastlane_core/lib/fastlane_core/itunes_transporter.rb +6 -3
  43. data/frameit/lib/frameit/editor.rb +8 -5
  44. data/match/lib/match/runner.rb +4 -4
  45. data/pilot/lib/pilot/options.rb +6 -0
  46. data/scan/lib/scan/runner.rb +19 -6
  47. data/spaceship/lib/spaceship/connect_api.rb +1 -0
  48. data/{deliver/lib/deliver/.commands_generator.rb.swp → spaceship/lib/spaceship/connect_api/.model.rb.swp} +0 -0
  49. data/spaceship/lib/spaceship/connect_api/client.rb +2 -2
  50. data/spaceship/lib/spaceship/connect_api/file_uploader.rb +0 -1
  51. data/spaceship/lib/spaceship/connect_api/model.rb +14 -0
  52. data/spaceship/lib/spaceship/connect_api/{.file_uploader.rb.swp → models/.app_store_review_detail.rb.swp} +0 -0
  53. data/spaceship/lib/spaceship/connect_api/models/.app_store_version.rb.swp +0 -0
  54. data/spaceship/lib/spaceship/connect_api/models/age_rating_declaration.rb +1 -0
  55. data/spaceship/lib/spaceship/connect_api/models/app.rb +40 -2
  56. data/spaceship/lib/spaceship/connect_api/models/app_info_localization.rb +1 -0
  57. data/spaceship/lib/spaceship/connect_api/models/app_preview.rb +5 -4
  58. data/spaceship/lib/spaceship/connect_api/models/app_screenshot.rb +44 -5
  59. data/spaceship/lib/spaceship/connect_api/models/app_store_review_detail.rb +1 -0
  60. data/spaceship/lib/spaceship/connect_api/models/app_store_version.rb +12 -0
  61. data/spaceship/lib/spaceship/connect_api/models/app_store_version_localization.rb +1 -0
  62. data/spaceship/lib/spaceship/connect_api/models/app_store_version_release_request.rb +12 -0
  63. data/spaceship/lib/spaceship/connect_api/models/build.rb +1 -0
  64. data/spaceship/lib/spaceship/connect_api/models/idfa_declaration.rb +1 -0
  65. data/spaceship/lib/spaceship/connect_api/tunes/tunes.rb +32 -1
  66. metadata +39 -64
  67. data/deliver/lib/deliver/.submit_for_review.rb.swp +0 -0
  68. data/deliver/lib/deliver/.upload_screenshots.rb.swp +0 -0
@@ -216,7 +216,9 @@ module Fastlane
216
216
  end
217
217
 
218
218
  def execute_action(method_sym, class_ref, arguments, custom_dir: nil, from_action: false)
219
- if custom_dir.nil?
219
+ if from_action == true
220
+ custom_dir = "." # We preserve the directory from where the previous action was called from
221
+ elsif custom_dir.nil?
220
222
  custom_dir ||= "." if Helper.test?
221
223
  custom_dir ||= ".."
222
224
  end
@@ -1,5 +1,5 @@
1
1
  module Fastlane
2
- VERSION = '2.151.0'.freeze
2
+ VERSION = '2.153.1'.freeze
3
3
  DESCRIPTION = "The easiest way to automate beta deployments and releases for your iOS and Android apps".freeze
4
4
  MINIMUM_XCODE_RELEASE = "7.0".freeze
5
5
  RUBOCOP_REQUIREMENT = '0.49.1'.freeze
@@ -14,4 +14,4 @@ class Deliverfile: DeliverfileProtocol {
14
14
  // during the `init` process, and you won't see this message
15
15
  }
16
16
 
17
- // Generated with fastlane 2.151.0
17
+ // Generated with fastlane 2.153.1
@@ -99,7 +99,7 @@ protocol DeliverfileProtocol: class {
99
99
  var precheckDefaultRuleLevel: String { get }
100
100
 
101
101
  /// **DEPRECATED!** Removed after the migration to the new App Store Connect API in June 2020 - An array of localized metadata items to upload individually by language so that errors can be identified. E.g. ['name', 'keywords', 'description']. Note: slow
102
- var individualMetadataItems: [String] { get }
102
+ var individualMetadataItems: [String]? { get }
103
103
 
104
104
  /// **DEPRECATED!** Removed after the migration to the new App Store Connect API in June 2020 - Metadata: The path to the app icon
105
105
  var appIcon: String? { get }
@@ -214,7 +214,7 @@ extension DeliverfileProtocol {
214
214
  var itcProvider: String? { return nil }
215
215
  var runPrecheckBeforeSubmit: Bool { return true }
216
216
  var precheckDefaultRuleLevel: String { return "warn" }
217
- var individualMetadataItems: [String] { return [] }
217
+ var individualMetadataItems: [String]? { return nil }
218
218
  var appIcon: String? { return nil }
219
219
  var appleWatchAppIcon: String? { return nil }
220
220
  var copyright: String? { return nil }
@@ -245,4 +245,4 @@ extension DeliverfileProtocol {
245
245
 
246
246
  // Please don't remove the lines below
247
247
  // They are used to detect outdated files
248
- // FastlaneRunnerAPIVersion [0.9.22]
248
+ // FastlaneRunnerAPIVersion [0.9.27]
@@ -523,7 +523,7 @@ func appstore(username: String,
523
523
  itcProvider: String? = nil,
524
524
  runPrecheckBeforeSubmit: Bool = true,
525
525
  precheckDefaultRuleLevel: Any = "warn",
526
- individualMetadataItems: [String] = [],
526
+ individualMetadataItems: [String]? = nil,
527
527
  appIcon: String? = nil,
528
528
  appleWatchAppIcon: String? = nil,
529
529
  copyright: String? = nil,
@@ -2573,7 +2573,7 @@ func deliver(username: Any = deliverfile.username,
2573
2573
  itcProvider: Any? = deliverfile.itcProvider,
2574
2574
  runPrecheckBeforeSubmit: Bool = deliverfile.runPrecheckBeforeSubmit,
2575
2575
  precheckDefaultRuleLevel: Any = deliverfile.precheckDefaultRuleLevel,
2576
- individualMetadataItems: [String] = deliverfile.individualMetadataItems,
2576
+ individualMetadataItems: [String]? = deliverfile.individualMetadataItems,
2577
2577
  appIcon: Any? = deliverfile.appIcon,
2578
2578
  appleWatchAppIcon: Any? = deliverfile.appleWatchAppIcon,
2579
2579
  copyright: Any? = deliverfile.copyright,
@@ -2760,7 +2760,7 @@ func downloadDsyms(username: String,
2760
2760
  teamName: String? = nil,
2761
2761
  platform: String = "ios",
2762
2762
  version: String? = nil,
2763
- buildNumber: String? = nil,
2763
+ buildNumber: Any? = nil,
2764
2764
  minVersion: String? = nil,
2765
2765
  outputDirectory: String? = nil,
2766
2766
  waitForDsymProcessing: Bool = false,
@@ -2974,16 +2974,19 @@ func ensureXcodeVersion(version: String? = nil,
2974
2974
  - template: ERB Template File
2975
2975
  - destination: Destination file
2976
2976
  - placeholders: Placeholders given as a hash
2977
+ - trimMode: Trim mode applied to the ERB
2977
2978
 
2978
2979
  Renders an ERB template with `:placeholders` given as a hash via parameter.
2979
2980
  If no `:destination` is set, it returns the rendered template as string.
2980
2981
  */
2981
2982
  func erb(template: String,
2982
2983
  destination: String? = nil,
2983
- placeholders: [String: Any] = [:]) {
2984
+ placeholders: [String: Any] = [:],
2985
+ trimMode: String? = nil) {
2984
2986
  let command = RubyCommand(commandID: "", methodName: "erb", className: nil, args: [RubyCommand.Argument(name: "template", value: template),
2985
2987
  RubyCommand.Argument(name: "destination", value: destination),
2986
- RubyCommand.Argument(name: "placeholders", value: placeholders)])
2988
+ RubyCommand.Argument(name: "placeholders", value: placeholders),
2989
+ RubyCommand.Argument(name: "trim_mode", value: trimMode)])
2987
2990
  _ = runner.executeCommand(command)
2988
2991
  }
2989
2992
 
@@ -5039,6 +5042,7 @@ func pem(development: Bool = false,
5039
5042
  - skipSubmission: Skip the distributing action of pilot and only upload the ipa file
5040
5043
  - skipWaitingForBuildProcessing: If set to true, the `distribute_external` option won't work and no build will be distributed to testers. (You might want to use this option if you are using this action on CI and have to pay for 'minutes used' on your CI plan). If set to `true` and a changelog is provided, it will partially wait for the build to appear on AppStore Connect so the changelog can be set, and skip the remaining processing steps
5041
5044
  - updateBuildInfoOnUpload: **DEPRECATED!** Update build info immediately after validation. This is deprecated and will be removed in a future release. App Store Connect no longer supports setting build info until after build processing has completed, which is when build info is updated by default
5045
+ - distributeOnly: Distribute a previously uploaded build (equivalent to the `fastlane pilot distribute` command)
5042
5046
  - usesNonExemptEncryption: Provide the 'Uses Non-Exempt Encryption' for export compliance. This is used if there is 'ITSAppUsesNonExemptEncryption' is not set in the Info.plist
5043
5047
  - distributeExternal: Should the build be distributed to external testers?
5044
5048
  - notifyExternalTesters: Should notify external testers?
@@ -5076,6 +5080,7 @@ func pilot(username: String,
5076
5080
  skipSubmission: Bool = false,
5077
5081
  skipWaitingForBuildProcessing: Bool = false,
5078
5082
  updateBuildInfoOnUpload: Bool = false,
5083
+ distributeOnly: Bool = false,
5079
5084
  usesNonExemptEncryption: Bool = false,
5080
5085
  distributeExternal: Bool = false,
5081
5086
  notifyExternalTesters: Bool = true,
@@ -5109,6 +5114,7 @@ func pilot(username: String,
5109
5114
  RubyCommand.Argument(name: "skip_submission", value: skipSubmission),
5110
5115
  RubyCommand.Argument(name: "skip_waiting_for_build_processing", value: skipWaitingForBuildProcessing),
5111
5116
  RubyCommand.Argument(name: "update_build_info_on_upload", value: updateBuildInfoOnUpload),
5117
+ RubyCommand.Argument(name: "distribute_only", value: distributeOnly),
5112
5118
  RubyCommand.Argument(name: "uses_non_exempt_encryption", value: usesNonExemptEncryption),
5113
5119
  RubyCommand.Argument(name: "distribute_external", value: distributeExternal),
5114
5120
  RubyCommand.Argument(name: "notify_external_testers", value: notifyExternalTesters),
@@ -7533,6 +7539,7 @@ func testfairy(apiKey: String,
7533
7539
  - skipSubmission: Skip the distributing action of pilot and only upload the ipa file
7534
7540
  - skipWaitingForBuildProcessing: If set to true, the `distribute_external` option won't work and no build will be distributed to testers. (You might want to use this option if you are using this action on CI and have to pay for 'minutes used' on your CI plan). If set to `true` and a changelog is provided, it will partially wait for the build to appear on AppStore Connect so the changelog can be set, and skip the remaining processing steps
7535
7541
  - updateBuildInfoOnUpload: **DEPRECATED!** Update build info immediately after validation. This is deprecated and will be removed in a future release. App Store Connect no longer supports setting build info until after build processing has completed, which is when build info is updated by default
7542
+ - distributeOnly: Distribute a previously uploaded build (equivalent to the `fastlane pilot distribute` command)
7536
7543
  - usesNonExemptEncryption: Provide the 'Uses Non-Exempt Encryption' for export compliance. This is used if there is 'ITSAppUsesNonExemptEncryption' is not set in the Info.plist
7537
7544
  - distributeExternal: Should the build be distributed to external testers?
7538
7545
  - notifyExternalTesters: Should notify external testers?
@@ -7570,6 +7577,7 @@ func testflight(username: String,
7570
7577
  skipSubmission: Bool = false,
7571
7578
  skipWaitingForBuildProcessing: Bool = false,
7572
7579
  updateBuildInfoOnUpload: Bool = false,
7580
+ distributeOnly: Bool = false,
7573
7581
  usesNonExemptEncryption: Bool = false,
7574
7582
  distributeExternal: Bool = false,
7575
7583
  notifyExternalTesters: Bool = true,
@@ -7603,6 +7611,7 @@ func testflight(username: String,
7603
7611
  RubyCommand.Argument(name: "skip_submission", value: skipSubmission),
7604
7612
  RubyCommand.Argument(name: "skip_waiting_for_build_processing", value: skipWaitingForBuildProcessing),
7605
7613
  RubyCommand.Argument(name: "update_build_info_on_upload", value: updateBuildInfoOnUpload),
7614
+ RubyCommand.Argument(name: "distribute_only", value: distributeOnly),
7606
7615
  RubyCommand.Argument(name: "uses_non_exempt_encryption", value: usesNonExemptEncryption),
7607
7616
  RubyCommand.Argument(name: "distribute_external", value: distributeExternal),
7608
7617
  RubyCommand.Argument(name: "notify_external_testers", value: notifyExternalTesters),
@@ -8185,7 +8194,7 @@ func uploadToAppStore(username: String,
8185
8194
  itcProvider: String? = nil,
8186
8195
  runPrecheckBeforeSubmit: Bool = true,
8187
8196
  precheckDefaultRuleLevel: Any = "warn",
8188
- individualMetadataItems: [String] = [],
8197
+ individualMetadataItems: [String]? = nil,
8189
8198
  appIcon: String? = nil,
8190
8199
  appleWatchAppIcon: String? = nil,
8191
8200
  copyright: String? = nil,
@@ -8448,6 +8457,7 @@ func uploadToPlayStoreInternalAppSharing(packageName: String,
8448
8457
  - skipSubmission: Skip the distributing action of pilot and only upload the ipa file
8449
8458
  - skipWaitingForBuildProcessing: If set to true, the `distribute_external` option won't work and no build will be distributed to testers. (You might want to use this option if you are using this action on CI and have to pay for 'minutes used' on your CI plan). If set to `true` and a changelog is provided, it will partially wait for the build to appear on AppStore Connect so the changelog can be set, and skip the remaining processing steps
8450
8459
  - updateBuildInfoOnUpload: **DEPRECATED!** Update build info immediately after validation. This is deprecated and will be removed in a future release. App Store Connect no longer supports setting build info until after build processing has completed, which is when build info is updated by default
8460
+ - distributeOnly: Distribute a previously uploaded build (equivalent to the `fastlane pilot distribute` command)
8451
8461
  - usesNonExemptEncryption: Provide the 'Uses Non-Exempt Encryption' for export compliance. This is used if there is 'ITSAppUsesNonExemptEncryption' is not set in the Info.plist
8452
8462
  - distributeExternal: Should the build be distributed to external testers?
8453
8463
  - notifyExternalTesters: Should notify external testers?
@@ -8485,6 +8495,7 @@ func uploadToTestflight(username: String,
8485
8495
  skipSubmission: Bool = false,
8486
8496
  skipWaitingForBuildProcessing: Bool = false,
8487
8497
  updateBuildInfoOnUpload: Bool = false,
8498
+ distributeOnly: Bool = false,
8488
8499
  usesNonExemptEncryption: Bool = false,
8489
8500
  distributeExternal: Bool = false,
8490
8501
  notifyExternalTesters: Bool = true,
@@ -8518,6 +8529,7 @@ func uploadToTestflight(username: String,
8518
8529
  RubyCommand.Argument(name: "skip_submission", value: skipSubmission),
8519
8530
  RubyCommand.Argument(name: "skip_waiting_for_build_processing", value: skipWaitingForBuildProcessing),
8520
8531
  RubyCommand.Argument(name: "update_build_info_on_upload", value: updateBuildInfoOnUpload),
8532
+ RubyCommand.Argument(name: "distribute_only", value: distributeOnly),
8521
8533
  RubyCommand.Argument(name: "uses_non_exempt_encryption", value: usesNonExemptEncryption),
8522
8534
  RubyCommand.Argument(name: "distribute_external", value: distributeExternal),
8523
8535
  RubyCommand.Argument(name: "notify_external_testers", value: notifyExternalTesters),
@@ -8977,4 +8989,4 @@ let snapshotfile: Snapshotfile = Snapshotfile()
8977
8989
 
8978
8990
  // Please don't remove the lines below
8979
8991
  // They are used to detect outdated files
8980
- // FastlaneRunnerAPIVersion [0.9.75]
8992
+ // FastlaneRunnerAPIVersion [0.9.80]
@@ -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.151.0
17
+ // Generated with fastlane 2.153.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.25]
184
+ // FastlaneRunnerAPIVersion [0.9.30]
@@ -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.151.0
17
+ // Generated with fastlane 2.153.1
@@ -157,4 +157,4 @@ extension MatchfileProtocol {
157
157
 
158
158
  // Please don't remove the lines below
159
159
  // They are used to detect outdated files
160
- // FastlaneRunnerAPIVersion [0.9.19]
160
+ // FastlaneRunnerAPIVersion [0.9.24]
@@ -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.151.0
17
+ // Generated with fastlane 2.153.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.18]
36
+ // FastlaneRunnerAPIVersion [0.9.23]
@@ -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.151.0
17
+ // Generated with fastlane 2.153.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.30]
260
+ // FastlaneRunnerAPIVersion [0.9.35]
@@ -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.151.0
17
+ // Generated with fastlane 2.153.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.20]
96
+ // FastlaneRunnerAPIVersion [0.9.25]
@@ -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.151.0
17
+ // Generated with fastlane 2.153.1
@@ -173,4 +173,4 @@ extension SnapshotfileProtocol {
173
173
 
174
174
  // Please don't remove the lines below
175
175
  // They are used to detect outdated files
176
- // FastlaneRunnerAPIVersion [0.9.14]
176
+ // FastlaneRunnerAPIVersion [0.9.19]
@@ -199,18 +199,32 @@ 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
+
206
+ UI.message("Booting #{self}")
207
+ `xcrun simctl boot #{self.udid}` unless self.state == "Booted"
208
+ end
209
+
210
+ def shutdown
211
+ return unless is_simulator
212
+ return unless os_type == "iOS"
213
+
214
+ UI.message("Shutting down #{self.udid}")
215
+ `xcrun simctl shutdown #{self.udid}` if self.state == "Booted"
216
+ end
217
+
202
218
  def reset
203
219
  UI.message("Resetting #{self}")
204
- `xcrun simctl shutdown #{self.udid}` if self.state == "Booted"
220
+ shutdown
205
221
  `xcrun simctl erase #{self.udid}`
206
- return
207
222
  end
208
223
 
209
224
  def delete
210
225
  UI.message("Deleting #{self}")
211
- `xcrun simctl shutdown #{self.udid}` unless self.state == "Shutdown"
226
+ shutdown
212
227
  `xcrun simctl delete #{self.udid}`
213
- return
214
228
  end
215
229
 
216
230
  def disable_slide_to_type
@@ -324,10 +338,10 @@ module FastlaneCore
324
338
  def copy_logarchive(device, log_identity, logs_destination_dir)
325
339
  require 'shellwords'
326
340
 
327
- logarchive_dst = File.join(logs_destination_dir, "system_logs-#{log_identity}.logarchive").shellescape
341
+ logarchive_dst = File.join(logs_destination_dir, "system_logs-#{log_identity}.logarchive")
328
342
  FileUtils.rm_rf(logarchive_dst)
329
343
  FileUtils.mkdir_p(File.expand_path("..", logarchive_dst))
330
- command = "xcrun simctl spawn --standalone #{device.udid} log collect --output #{logarchive_dst} 2>/dev/null"
344
+ command = "xcrun simctl spawn #{device.udid} log collect --output #{logarchive_dst.shellescape} 2>/dev/null"
331
345
  FastlaneCore::CommandExecutor.execute(command: command, print_all: false, print_command: true)
332
346
  end
333
347
  end
@@ -249,10 +249,11 @@ module FastlaneCore
249
249
  def build_upload_command(username, password, source = "/tmp", provider_short_name = "")
250
250
  if Helper.mac? && Helper.xcode_at_least?(11)
251
251
  [
252
+ "ITMS_TRANSPORTER_PASSWORD=#{password.shellescape}",
252
253
  'xcrun iTMSTransporter',
253
254
  '-m upload',
254
255
  "-u #{username.shellescape}",
255
- "-p #{password.shellescape}",
256
+ "-p @env:ITMS_TRANSPORTER_PASSWORD",
256
257
  "-f #{source.shellescape}",
257
258
  additional_upload_parameters, # that's here, because the user might overwrite the -t option
258
259
  '-k 100000',
@@ -285,10 +286,11 @@ module FastlaneCore
285
286
  def build_download_command(username, password, apple_id, destination = "/tmp", provider_short_name = "")
286
287
  if Helper.mac? && Helper.xcode_at_least?(11)
287
288
  [
289
+ "ITMS_TRANSPORTER_PASSWORD=#{password.shellescape}",
288
290
  'xcrun iTMSTransporter',
289
291
  '-m lookupMetadata',
290
292
  "-u #{username.shellescape}",
291
- "-p #{password.shellescape}",
293
+ "-p @env:ITMS_TRANSPORTER_PASSWORD",
292
294
  "-apple_id #{apple_id.shellescape}",
293
295
  "-destination #{destination.shellescape}",
294
296
  ("-itc_provider #{provider_short_name}" unless provider_short_name.to_s.empty?),
@@ -319,10 +321,11 @@ module FastlaneCore
319
321
  def build_provider_ids_command(username, password)
320
322
  if Helper.mac? && Helper.xcode_at_least?(11)
321
323
  [
324
+ "ITMS_TRANSPORTER_PASSWORD=#{password.shellescape}",
322
325
  'xcrun iTMSTransporter',
323
326
  '-m provider',
324
327
  "-u #{username.shellescape}",
325
- "-p #{password.shellescape}",
328
+ "-p @env:ITMS_TRANSPORTER_PASSWORD",
326
329
  '2>&1' # cause stderr to be written to stdout
327
330
  ].compact.join(' ')
328
331
  else
@@ -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'])
@@ -46,10 +46,10 @@ module Match
46
46
  google_cloud_bucket_name: params[:google_cloud_bucket_name].to_s,
47
47
  google_cloud_keys_file: params[:google_cloud_keys_file].to_s,
48
48
  google_cloud_project_id: params[:google_cloud_project_id].to_s,
49
- s3_region: params[:s3_region].to_s,
50
- s3_access_key: params[:s3_access_key].to_s,
51
- s3_secret_access_key: params[:s3_secret_access_key].to_s,
52
- s3_bucket: params[:s3_bucket].to_s,
49
+ s3_region: params[:s3_region],
50
+ s3_access_key: params[:s3_access_key],
51
+ s3_secret_access_key: params[:s3_secret_access_key],
52
+ s3_bucket: params[:s3_bucket],
53
53
  s3_object_prefix: params[:s3_object_prefix],
54
54
  readonly: params[:readonly],
55
55
  username: params[:readonly] ? nil : params[:username], # only pass username if not readonly
@@ -146,6 +146,12 @@ module Pilot
146
146
  default_value: false),
147
147
 
148
148
  # distribution
149
+ FastlaneCore::ConfigItem.new(key: :distribute_only,
150
+ short_option: "-D",
151
+ env_name: "PILOT_DISTRIBUTE_ONLY",
152
+ description: "Distribute a previously uploaded build (equivalent to the `fastlane pilot distribute` command)",
153
+ default_value: false,
154
+ type: Boolean),
149
155
  FastlaneCore::ConfigItem.new(key: :uses_non_exempt_encryption,
150
156
  short_option: "-X",
151
157
  env_name: "PILOT_USES_NON_EXEMPT_ENCRYPTION",
@@ -39,12 +39,7 @@ module Scan
39
39
  end
40
40
  end
41
41
 
42
- # We call this method, to be sure that all other simulators are killed
43
- # And a correct one is freshly launched. Switching between multiple simulator
44
- # in case the user specified multiple targets works with no issues
45
- # This way it's okay to just call it for the first simulator we're using for
46
- # the first test run
47
- FastlaneCore::Simulator.launch(Scan.devices.first) if Scan.devices && Scan.config[:prelaunch_simulator]
42
+ prelaunch_simulators
48
43
 
49
44
  if Scan.config[:reinstall_app]
50
45
  app_identifier = Scan.config[:app_identifier]
@@ -165,6 +160,24 @@ module Scan
165
160
  File.read(Scan.cache[:temp_junit_report])
166
161
  end
167
162
 
163
+ def prelaunch_simulators
164
+ return unless Scan.devices.to_a.size > 0 # no devices selected, no sims to launch
165
+
166
+ # Return early unless the user wants to prelaunch simulators. Or if the user wants simulator logs
167
+ # then we must prelaunch simulators because Xcode's headless
168
+ # mode launches and shutsdown the simulators before we can collect the logs.
169
+ return unless Scan.config[:prelaunch_simulator] || Scan.config[:include_simulator_logs]
170
+
171
+ devices_to_shutdown = []
172
+ Scan.devices.each do |device|
173
+ devices_to_shutdown << device if device.state == "Shutdown"
174
+ device.boot
175
+ end
176
+ at_exit do
177
+ devices_to_shutdown.each(&:shutdown)
178
+ end
179
+ end
180
+
168
181
  def copy_simulator_logs
169
182
  return unless Scan.config[:include_simulator_logs]
170
183