fastlane 2.168.0 → 2.173.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (104) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +68 -68
  3. data/cert/lib/cert/options.rb +2 -2
  4. data/deliver/lib/deliver/app_screenshot.rb +5 -7
  5. data/deliver/lib/deliver/app_screenshot_validator.rb +108 -0
  6. data/deliver/lib/deliver/commands_generator.rb +1 -1
  7. data/deliver/lib/deliver/loader.rb +123 -21
  8. data/deliver/lib/deliver/setup.rb +8 -3
  9. data/deliver/lib/deliver/upload_metadata.rb +6 -10
  10. data/deliver/lib/deliver/upload_screenshots.rb +1 -64
  11. data/fastlane/lib/fastlane/actions/add_git_tag.rb +12 -3
  12. data/fastlane/lib/fastlane/actions/artifactory.rb +36 -3
  13. data/fastlane/lib/fastlane/actions/build_app.rb +3 -1
  14. data/fastlane/lib/fastlane/actions/create_pull_request.rb +16 -1
  15. data/fastlane/lib/fastlane/actions/create_xcframework.rb +118 -0
  16. data/fastlane/lib/fastlane/actions/docs/frame_screenshots.md +1 -1
  17. data/fastlane/lib/fastlane/actions/docs/sync_code_signing.md +1 -1
  18. data/fastlane/lib/fastlane/actions/docs/upload_to_app_store.md.erb +4 -0
  19. data/fastlane/lib/fastlane/actions/docs/upload_to_testflight.md +5 -1
  20. data/fastlane/lib/fastlane/actions/download_app_privacy_details_from_app_store.rb +142 -0
  21. data/fastlane/lib/fastlane/actions/download_dsyms.rb +0 -1
  22. data/fastlane/lib/fastlane/actions/git_commit.rb +6 -2
  23. data/fastlane/lib/fastlane/actions/github_api.rb +14 -3
  24. data/fastlane/lib/fastlane/actions/nexus_upload.rb +1 -0
  25. data/fastlane/lib/fastlane/actions/onesignal.rb +13 -3
  26. data/fastlane/lib/fastlane/actions/pod_push.rb +9 -0
  27. data/fastlane/lib/fastlane/actions/push_to_git_remote.rb +9 -1
  28. data/fastlane/lib/fastlane/actions/register_device.rb +1 -1
  29. data/fastlane/lib/fastlane/actions/register_devices.rb +2 -1
  30. data/fastlane/lib/fastlane/actions/set_github_release.rb +21 -8
  31. data/fastlane/lib/fastlane/actions/slack.rb +4 -5
  32. data/fastlane/lib/fastlane/actions/spm.rb +2 -2
  33. data/fastlane/lib/fastlane/actions/swiftlint.rb +4 -4
  34. data/fastlane/lib/fastlane/actions/upload_app_privacy_details_to_app_store.rb +291 -0
  35. data/fastlane/lib/fastlane/actions/xcode_install.rb +8 -5
  36. data/fastlane/lib/fastlane/cli_tools_distributor.rb +3 -0
  37. data/fastlane/lib/fastlane/plugins/template/.rubocop.yml +1 -1
  38. data/fastlane/lib/fastlane/swift_fastlane_api_generator.rb +3 -0
  39. data/fastlane/lib/fastlane/version.rb +1 -1
  40. data/fastlane/swift/Deliverfile.swift +2 -2
  41. data/fastlane/swift/DeliverfileProtocol.swift +2 -2
  42. data/fastlane/swift/Fastlane.swift +267 -45
  43. data/fastlane/swift/Gymfile.swift +2 -2
  44. data/fastlane/swift/GymfileProtocol.swift +15 -3
  45. data/fastlane/swift/Matchfile.swift +2 -2
  46. data/fastlane/swift/MatchfileProtocol.swift +2 -2
  47. data/fastlane/swift/Precheckfile.swift +2 -2
  48. data/fastlane/swift/PrecheckfileProtocol.swift +6 -2
  49. data/fastlane/swift/Scanfile.swift +2 -2
  50. data/fastlane/swift/ScanfileProtocol.swift +18 -2
  51. data/fastlane/swift/Screengrabfile.swift +2 -2
  52. data/fastlane/swift/ScreengrabfileProtocol.swift +2 -2
  53. data/fastlane/swift/Snapshotfile.swift +2 -2
  54. data/fastlane/swift/SnapshotfileProtocol.swift +15 -3
  55. data/fastlane_core/lib/fastlane_core/helper.rb +2 -2
  56. data/fastlane_core/lib/fastlane_core/ipa_file_analyser.rb +41 -16
  57. data/fastlane_core/lib/fastlane_core/itunes_transporter.rb +3 -4
  58. data/fastlane_core/lib/fastlane_core/project.rb +19 -6
  59. data/frameit/lib/frameit/device_types.rb +7 -1
  60. data/gym/lib/gym/error_handler.rb +8 -0
  61. data/gym/lib/gym/generators/build_command_generator.rb +3 -0
  62. data/gym/lib/gym/generators/package_command_generator_xcode7.rb +2 -2
  63. data/gym/lib/gym/options.rb +19 -3
  64. data/match/lib/match/encryption/openssl.rb +4 -2
  65. data/match/lib/match/runner.rb +1 -1
  66. data/match/lib/match/storage/git_storage.rb +14 -10
  67. data/precheck/lib/precheck/options.rb +6 -1
  68. data/precheck/lib/precheck/rule_processor.rb +1 -1
  69. data/precheck/lib/precheck/runner.rb +1 -1
  70. data/scan/lib/scan/options.rb +22 -1
  71. data/scan/lib/scan/runner.rb +6 -1
  72. data/scan/lib/scan/slack_poster.rb +4 -1
  73. data/scan/lib/scan/test_command_generator.rb +3 -0
  74. data/screengrab/lib/screengrab/runner.rb +2 -0
  75. data/sigh/lib/sigh/runner.rb +1 -1
  76. data/snapshot/lib/assets/SnapshotHelper.swift +6 -2
  77. data/snapshot/lib/snapshot/options.rb +17 -2
  78. data/snapshot/lib/snapshot/update.rb +1 -1
  79. data/spaceship/lib/spaceship/client.rb +28 -1
  80. data/spaceship/lib/spaceship/connect_api.rb +6 -0
  81. data/spaceship/lib/spaceship/connect_api/api_client.rb +1 -1
  82. data/spaceship/lib/spaceship/connect_api/models/app.rb +19 -4
  83. data/spaceship/lib/spaceship/connect_api/models/app_data_usage.rb +59 -0
  84. data/spaceship/lib/spaceship/connect_api/models/app_data_usage_category.rb +65 -0
  85. data/spaceship/lib/spaceship/connect_api/models/app_data_usage_data_protection.rb +27 -0
  86. data/spaceship/lib/spaceship/connect_api/models/app_data_usage_grouping.rb +18 -0
  87. data/spaceship/lib/spaceship/connect_api/models/app_data_usage_purposes.rb +37 -0
  88. data/spaceship/lib/spaceship/connect_api/models/app_data_usages_publish_state.rb +36 -0
  89. data/spaceship/lib/spaceship/connect_api/models/app_info.rb +1 -0
  90. data/spaceship/lib/spaceship/connect_api/models/app_info_localization.rb +2 -0
  91. data/spaceship/lib/spaceship/connect_api/models/app_store_version.rb +8 -1
  92. data/spaceship/lib/spaceship/connect_api/models/beta_group.rb +9 -0
  93. data/spaceship/lib/spaceship/connect_api/models/device.rb +30 -0
  94. data/spaceship/lib/spaceship/connect_api/response.rb +3 -1
  95. data/spaceship/lib/spaceship/connect_api/testflight/testflight.rb +12 -0
  96. data/spaceship/lib/spaceship/connect_api/tunes/tunes.rb +103 -0
  97. data/spaceship/lib/spaceship/errors.rb +19 -0
  98. data/spaceship/lib/spaceship/two_step_or_factor_client.rb +19 -6
  99. data/spaceship/lib/spaceship/upgrade_2fa_later_client.rb +91 -0
  100. metadata +44 -23
  101. data/fastlane/lib/fastlane/actions/.download_dsyms.rb.swp +0 -0
  102. data/spaceship/lib/spaceship/connect_api/models/.app.rb.swp +0 -0
  103. data/spaceship/lib/spaceship/connect_api/models/.app_screenshot.rb.swp +0 -0
  104. data/spaceship/lib/spaceship/connect_api/models/.build.rb.swp +0 -0
@@ -1,5 +1,5 @@
1
1
  // Gymfile.swift
2
- // Copyright (c) 2020 FastlaneTools
2
+ // Copyright (c) 2021 FastlaneTools
3
3
 
4
4
  // This class is automatically included in FastlaneRunner during build
5
5
 
@@ -17,4 +17,4 @@ public class Gymfile: GymfileProtocol {
17
17
  // during the `init` process, and you won't see this message
18
18
  }
19
19
 
20
- // Generated with fastlane 2.168.0
20
+ // Generated with fastlane 2.173.0
@@ -1,5 +1,5 @@
1
1
  // GymfileProtocol.swift
2
- // Copyright (c) 2020 FastlaneTools
2
+ // Copyright (c) 2021 FastlaneTools
3
3
 
4
4
  public protocol GymfileProtocol: class {
5
5
  /// Path to the workspace file
@@ -41,7 +41,7 @@ public protocol GymfileProtocol: class {
41
41
  /// Should the ipa file include bitcode?
42
42
  var includeBitcode: Bool? { get }
43
43
 
44
- /// Method used to export the archive. Valid values are: app-store, ad-hoc, package, enterprise, development, developer-id
44
+ /// Method used to export the archive. Valid values are: app-store, validation, ad-hoc, package, enterprise, development, developer-id and mac-application
45
45
  var exportMethod: String? { get }
46
46
 
47
47
  /// Path to an export options plist or a hash with export options. Use 'xcodebuild -help' to print the full set of available options
@@ -133,6 +133,15 @@ public protocol GymfileProtocol: class {
133
133
 
134
134
  /// Sets a custom path for Swift Package Manager dependencies
135
135
  var clonedSourcePackagesPath: String? { get }
136
+
137
+ /// Skips resolution of Swift Package Manager dependencies
138
+ var skipPackageDependenciesResolution: Bool { get }
139
+
140
+ /// Prevents packages from automatically being resolved to versions other than those recorded in the `Package.resolved` file
141
+ var disablePackageAutomaticUpdates: Bool { get }
142
+
143
+ /// Lets xcodebuild use system's scm configuration
144
+ var useSystemScm: Bool { get }
136
145
  }
137
146
 
138
147
  public extension GymfileProtocol {
@@ -180,8 +189,11 @@ public extension GymfileProtocol {
180
189
  var xcprettyUtf: Bool? { return nil }
181
190
  var skipProfileDetection: Bool { return false }
182
191
  var clonedSourcePackagesPath: String? { return nil }
192
+ var skipPackageDependenciesResolution: Bool { return false }
193
+ var disablePackageAutomaticUpdates: Bool { return false }
194
+ var useSystemScm: Bool { return false }
183
195
  }
184
196
 
185
197
  // Please don't remove the lines below
186
198
  // They are used to detect outdated files
187
- // FastlaneRunnerAPIVersion [0.9.54]
199
+ // FastlaneRunnerAPIVersion [0.9.59]
@@ -1,5 +1,5 @@
1
1
  // Matchfile.swift
2
- // Copyright (c) 2020 FastlaneTools
2
+ // Copyright (c) 2021 FastlaneTools
3
3
 
4
4
  // This class is automatically included in FastlaneRunner during build
5
5
 
@@ -17,4 +17,4 @@ public class Matchfile: MatchfileProtocol {
17
17
  // during the `init` process, and you won't see this message
18
18
  }
19
19
 
20
- // Generated with fastlane 2.168.0
20
+ // Generated with fastlane 2.173.0
@@ -1,5 +1,5 @@
1
1
  // MatchfileProtocol.swift
2
- // Copyright (c) 2020 FastlaneTools
2
+ // Copyright (c) 2021 FastlaneTools
3
3
 
4
4
  public protocol MatchfileProtocol: class {
5
5
  /// Define the profile type, can be appstore, adhoc, development, enterprise, developer_id, mac_installer_distribution
@@ -184,4 +184,4 @@ public extension MatchfileProtocol {
184
184
 
185
185
  // Please don't remove the lines below
186
186
  // They are used to detect outdated files
187
- // FastlaneRunnerAPIVersion [0.9.48]
187
+ // FastlaneRunnerAPIVersion [0.9.53]
@@ -1,5 +1,5 @@
1
1
  // Precheckfile.swift
2
- // Copyright (c) 2020 FastlaneTools
2
+ // Copyright (c) 2021 FastlaneTools
3
3
 
4
4
  // This class is automatically included in FastlaneRunner during build
5
5
 
@@ -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.168.0
20
+ // Generated with fastlane 2.173.0
@@ -1,5 +1,5 @@
1
1
  // PrecheckfileProtocol.swift
2
- // Copyright (c) 2020 FastlaneTools
2
+ // Copyright (c) 2021 FastlaneTools
3
3
 
4
4
  public protocol PrecheckfileProtocol: class {
5
5
  /// Path to your App Store Connect API Key JSON file (https://docs.fastlane.tools/app-store-connect-api/#using-fastlane-api-key-json-file)
@@ -29,6 +29,9 @@ public protocol PrecheckfileProtocol: class {
29
29
  /// Should check in-app purchases?
30
30
  var includeInAppPurchases: Bool { get }
31
31
 
32
+ /// Should force check live app?
33
+ var useLive: Bool { get }
34
+
32
35
  /// using text indicating that your IAP is free
33
36
  var freeStuffInIap: String? { get }
34
37
  }
@@ -43,9 +46,10 @@ public extension PrecheckfileProtocol {
43
46
  var platform: String { return "ios" }
44
47
  var defaultRuleLevel: String { return "error" }
45
48
  var includeInAppPurchases: Bool { return true }
49
+ var useLive: Bool { return false }
46
50
  var freeStuffInIap: String? { return nil }
47
51
  }
48
52
 
49
53
  // Please don't remove the lines below
50
54
  // They are used to detect outdated files
51
- // FastlaneRunnerAPIVersion [0.9.47]
55
+ // FastlaneRunnerAPIVersion [0.9.52]
@@ -1,5 +1,5 @@
1
1
  // Scanfile.swift
2
- // Copyright (c) 2020 FastlaneTools
2
+ // Copyright (c) 2021 FastlaneTools
3
3
 
4
4
  // This class is automatically included in FastlaneRunner during build
5
5
 
@@ -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.168.0
20
+ // Generated with fastlane 2.173.0
@@ -1,5 +1,5 @@
1
1
  // ScanfileProtocol.swift
2
- // Copyright (c) 2020 FastlaneTools
2
+ // Copyright (c) 2021 FastlaneTools
3
3
 
4
4
  public protocol ScanfileProtocol: class {
5
5
  /// Path to the workspace file
@@ -176,6 +176,9 @@ public protocol ScanfileProtocol: class {
176
176
  /// Only post on Slack if the tests fail
177
177
  var slackOnlyOnFailure: Bool { get }
178
178
 
179
+ /// Specifies default payloads to include in Slack messages. For more info visit https://docs.fastlane.tools/actions/slack
180
+ var slackDefaultPayloads: [String]? { get }
181
+
179
182
  /// Use only if you're a pro, use the other options instead
180
183
  var destination: String? { get }
181
184
 
@@ -191,6 +194,15 @@ public protocol ScanfileProtocol: class {
191
194
  /// Sets a custom path for Swift Package Manager dependencies
192
195
  var clonedSourcePackagesPath: String? { get }
193
196
 
197
+ /// Skips resolution of Swift Package Manager dependencies
198
+ var skipPackageDependenciesResolution: Bool { get }
199
+
200
+ /// Prevents packages from automatically being resolved to versions other than those recorded in the `Package.resolved` file
201
+ var disablePackageAutomaticUpdates: Bool { get }
202
+
203
+ /// Lets xcodebuild use system's scm configuration
204
+ var useSystemScm: Bool { get }
205
+
194
206
  /// Should this step stop the build if the tests fail? Set this to false if you're using trainer
195
207
  var failBuild: Bool { get }
196
208
  }
@@ -254,14 +266,18 @@ public extension ScanfileProtocol {
254
266
  var slackIconUrl: String { return "https://fastlane.tools/assets/img/fastlane_icon.png" }
255
267
  var skipSlack: Bool { return false }
256
268
  var slackOnlyOnFailure: Bool { return false }
269
+ var slackDefaultPayloads: [String]? { return nil }
257
270
  var destination: String? { return nil }
258
271
  var catalystPlatform: String? { return nil }
259
272
  var customReportFileName: String? { return nil }
260
273
  var xcodebuildCommand: String { return "env NSUnbufferedIO=YES xcodebuild" }
261
274
  var clonedSourcePackagesPath: String? { return nil }
275
+ var skipPackageDependenciesResolution: Bool { return false }
276
+ var disablePackageAutomaticUpdates: Bool { return false }
277
+ var useSystemScm: Bool { return false }
262
278
  var failBuild: Bool { return true }
263
279
  }
264
280
 
265
281
  // Please don't remove the lines below
266
282
  // They are used to detect outdated files
267
- // FastlaneRunnerAPIVersion [0.9.59]
283
+ // FastlaneRunnerAPIVersion [0.9.64]
@@ -1,5 +1,5 @@
1
1
  // Screengrabfile.swift
2
- // Copyright (c) 2020 FastlaneTools
2
+ // Copyright (c) 2021 FastlaneTools
3
3
 
4
4
  // This class is automatically included in FastlaneRunner during build
5
5
 
@@ -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.168.0
20
+ // Generated with fastlane 2.173.0
@@ -1,5 +1,5 @@
1
1
  // ScreengrabfileProtocol.swift
2
- // Copyright (c) 2020 FastlaneTools
2
+ // Copyright (c) 2021 FastlaneTools
3
3
 
4
4
  public protocol ScreengrabfileProtocol: class {
5
5
  /// Path to the root of your Android SDK installation, e.g. ~/tools/android-sdk-macosx
@@ -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.49]
99
+ // FastlaneRunnerAPIVersion [0.9.54]
@@ -1,5 +1,5 @@
1
1
  // Snapshotfile.swift
2
- // Copyright (c) 2020 FastlaneTools
2
+ // Copyright (c) 2021 FastlaneTools
3
3
 
4
4
  // This class is automatically included in FastlaneRunner during build
5
5
 
@@ -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.168.0
20
+ // Generated with fastlane 2.173.0
@@ -1,5 +1,5 @@
1
1
  // SnapshotfileProtocol.swift
2
- // Copyright (c) 2020 FastlaneTools
2
+ // Copyright (c) 2021 FastlaneTools
3
3
 
4
4
  public protocol SnapshotfileProtocol: class {
5
5
  /// Path the workspace file
@@ -50,7 +50,7 @@ public protocol SnapshotfileProtocol: class {
50
50
  /// Enabling this option will prevent displaying the simulator window
51
51
  var headless: Bool { get }
52
52
 
53
- /// Enabling this option wil automatically override the status bar to show 9:41 AM, full battery, and full reception
53
+ /// Enabling this option will automatically override the status bar to show 9:41 AM, full battery, and full reception
54
54
  var overrideStatusBar: Bool { get }
55
55
 
56
56
  /// Enabling this option will configure the Simulator's system language
@@ -119,6 +119,12 @@ public protocol SnapshotfileProtocol: class {
119
119
  /// Sets a custom path for Swift Package Manager dependencies
120
120
  var clonedSourcePackagesPath: String? { get }
121
121
 
122
+ /// Skips resolution of Swift Package Manager dependencies
123
+ var skipPackageDependenciesResolution: Bool { get }
124
+
125
+ /// Prevents packages from automatically being resolved to versions other than those recorded in the `Package.resolved` file
126
+ var disablePackageAutomaticUpdates: Bool { get }
127
+
122
128
  /// The testplan associated with the scheme that should be used for testing
123
129
  var testplan: String? { get }
124
130
 
@@ -133,6 +139,9 @@ public protocol SnapshotfileProtocol: class {
133
139
 
134
140
  /// Suppress the output of xcodebuild to stdout. Output is still saved in buildlog_path
135
141
  var suppressXcodeOutput: Bool? { get }
142
+
143
+ /// Lets xcodebuild use system's scm configuration
144
+ var useSystemScm: Bool { get }
136
145
  }
137
146
 
138
147
  public extension SnapshotfileProtocol {
@@ -175,13 +184,16 @@ public extension SnapshotfileProtocol {
175
184
  var concurrentSimulators: Bool { return true }
176
185
  var disableSlideToType: Bool { return false }
177
186
  var clonedSourcePackagesPath: String? { return nil }
187
+ var skipPackageDependenciesResolution: Bool { return false }
188
+ var disablePackageAutomaticUpdates: Bool { return false }
178
189
  var testplan: String? { return nil }
179
190
  var onlyTesting: String? { return nil }
180
191
  var skipTesting: String? { return nil }
181
192
  var disableXcpretty: Bool? { return nil }
182
193
  var suppressXcodeOutput: Bool? { return nil }
194
+ var useSystemScm: Bool { return false }
183
195
  }
184
196
 
185
197
  // Please don't remove the lines below
186
198
  // They are used to detect outdated files
187
- // FastlaneRunnerAPIVersion [0.9.43]
199
+ // FastlaneRunnerAPIVersion [0.9.48]
@@ -14,7 +14,7 @@ module FastlaneCore
14
14
 
15
15
  def self.fastlane_enabled?
16
16
  # This is called from the root context on the first start
17
- @enabled ||= !FastlaneCore::FastlaneFolder.path.nil?
17
+ !FastlaneCore::FastlaneFolder.path.nil?
18
18
  end
19
19
 
20
20
  # Checks if fastlane is enabled for this project and returns the folder where the configuration lives
@@ -74,7 +74,7 @@ module FastlaneCore
74
74
  return true if self.is_circle_ci?
75
75
 
76
76
  # Check for Jenkins, Travis CI, ... environment variables
77
- ['JENKINS_HOME', 'JENKINS_URL', 'TRAVIS', 'CI', 'APPCENTER_BUILD_ID', 'TEAMCITY_VERSION', 'GO_PIPELINE_NAME', 'bamboo_buildKey', 'GITLAB_CI', 'XCS', 'TF_BUILD', 'GITHUB_ACTION', 'GITHUB_ACTIONS', 'BITRISE_IO'].each do |current|
77
+ ['JENKINS_HOME', 'JENKINS_URL', 'TRAVIS', 'CI', 'APPCENTER_BUILD_ID', 'TEAMCITY_VERSION', 'GO_PIPELINE_NAME', 'bamboo_buildKey', 'GITLAB_CI', 'XCS', 'TF_BUILD', 'GITHUB_ACTION', 'GITHUB_ACTIONS', 'BITRISE_IO', 'BUDDY'].each do |current|
78
78
  return true if ENV.key?(current)
79
79
  end
80
80
  return false
@@ -1,3 +1,4 @@
1
+ require 'open3'
1
2
  require 'zip'
2
3
 
3
4
  require_relative 'core_ext/cfpropertylist'
@@ -37,27 +38,51 @@ module FastlaneCore
37
38
 
38
39
  def self.fetch_info_plist_file(path)
39
40
  UI.user_error!("Could not find file at path '#{path}'") unless File.exist?(path)
40
- Zip::File.open(path, "rb") do |zipfile|
41
- file = zipfile.glob('**/Payload/*.app/Info.plist').first
42
- return nil unless file
41
+ plist_data = self.fetch_info_plist_with_rubyzip(path)
42
+ if plist_data.nil?
43
+ # Xcode produces invalid zip files for IPAs larger than 4GB. RubyZip
44
+ # can't read them, but the unzip command is able to work around this.
45
+ plist_data = self.fetch_info_plist_with_unzip(path)
46
+ end
47
+ return nil if plist_data.nil?
43
48
 
44
- # Creates a temporary directory with a unique name tagged with 'fastlane'
45
- # The directory is deleted automatically at the end of the block
46
- Dir.mktmpdir("fastlane") do |tmp|
47
- # The XML file has to be properly unpacked first
48
- tmp_path = File.join(tmp, "Info.plist")
49
- File.open(tmp_path, 'wb') do |output|
50
- output.write(zipfile.read(file))
51
- end
52
- result = CFPropertyList.native_types(CFPropertyList::List.new(file: tmp_path).value)
53
-
54
- if result['CFBundleIdentifier'] || result['CFBundleVersion']
55
- return result
56
- end
49
+ # Creates a temporary directory with a unique name tagged with 'fastlane'
50
+ # The directory is deleted automatically at the end of the block
51
+ Dir.mktmpdir("fastlane") do |tmp|
52
+ # The XML file has to be properly unpacked first
53
+ tmp_path = File.join(tmp, "Info.plist")
54
+ File.open(tmp_path, 'wb') do |output|
55
+ output.write(plist_data)
56
+ end
57
+ result = CFPropertyList.native_types(CFPropertyList::List.new(file: tmp_path).value)
58
+
59
+ if result['CFBundleIdentifier'] || result['CFBundleVersion']
60
+ return result
57
61
  end
58
62
  end
59
63
 
60
64
  return nil
61
65
  end
66
+
67
+ def self.fetch_info_plist_with_rubyzip(path)
68
+ Zip::File.open(path, "rb") do |zipfile|
69
+ file = zipfile.glob('**/Payload/*.app/Info.plist').first
70
+ return nil unless file
71
+ zipfile.read(file)
72
+ end
73
+ end
74
+
75
+ def self.fetch_info_plist_with_unzip(path)
76
+ list, error, = Open3.capture3("unzip", "-Z", "-1", path)
77
+ UI.command_output(error) unless error.empty?
78
+ return nil if list.empty?
79
+ entry = list.chomp.split("\n").find do |e|
80
+ File.fnmatch("**/Payload/*.app/Info.plist", e, File::FNM_PATHNAME)
81
+ end
82
+ data, error, = Open3.capture3("unzip", "-p", path, entry)
83
+ UI.command_output(error) unless error.empty?
84
+ return nil if data.empty?
85
+ data
86
+ end
62
87
  end
63
88
  end
@@ -160,11 +160,10 @@ module FastlaneCore
160
160
  end
161
161
 
162
162
  deliver_additional_params = env_deliver_additional_params.to_s.strip
163
- if !deliver_additional_params.include?("-t ")
164
- UI.user_error!("Invalid transport parameter")
165
- else
166
- return deliver_additional_params
163
+ if deliver_additional_params.include?("-t ")
164
+ UI.important("Apple recommends you don’t specify the -t transport and instead allow Transporter to use automatic transport discovery to determine the best transport mode for your packages. For more information, please read Apple's Transporter User Guide 2.1: https://help.apple.com/itc/transporteruserguide/#/apdATD1E1288-D1E1A1303-D1E1288A1126")
167
165
  end
166
+ return deliver_additional_params
168
167
  end
169
168
  end
170
169
 
@@ -275,7 +275,7 @@ module FastlaneCore
275
275
  end
276
276
 
277
277
  def supports_mac_catalyst?
278
- build_settings(key: "SUPPORTS_MACCATALYST") == "YES"
278
+ build_settings(key: "SUPPORTS_MACCATALYST") == "YES" || build_settings(key: "SUPPORTS_UIKITFORMAC") == "YES"
279
279
  end
280
280
 
281
281
  def command_line_tool?
@@ -322,11 +322,17 @@ module FastlaneCore
322
322
  proj << "-configuration #{options[:configuration].shellescape}" if options[:configuration]
323
323
  proj << "-derivedDataPath #{options[:derived_data_path].shellescape}" if options[:derived_data_path]
324
324
  proj << "-xcconfig #{options[:xcconfig].shellescape}" if options[:xcconfig]
325
+ proj << "-scmProvider system" if options[:use_system_scm]
325
326
 
326
- if FastlaneCore::Helper.xcode_at_least?('11.0') && options[:cloned_source_packages_path]
327
+ xcode_at_least_11 = FastlaneCore::Helper.xcode_at_least?('11.0')
328
+ if xcode_at_least_11 && options[:cloned_source_packages_path]
327
329
  proj << "-clonedSourcePackagesDirPath #{options[:cloned_source_packages_path].shellescape}"
328
330
  end
329
331
 
332
+ if xcode_at_least_11 && options[:disable_package_automatic_updates]
333
+ proj << "-disableAutomaticPackageResolution"
334
+ end
335
+
330
336
  return proj
331
337
  end
332
338
 
@@ -350,6 +356,7 @@ module FastlaneCore
350
356
  end
351
357
 
352
358
  def build_xcodebuild_resolvepackagedependencies_command
359
+ return nil if options[:skip_package_dependencies_resolution]
353
360
  command = "xcodebuild -resolvePackageDependencies #{xcodebuild_parameters.join(' ')}"
354
361
  command += " 2> /dev/null" if xcodebuild_suppress_stderr
355
362
  command
@@ -369,10 +376,16 @@ module FastlaneCore
369
376
 
370
377
  # SwiftPM support
371
378
  if FastlaneCore::Helper.xcode_at_least?('11.0')
372
- UI.important("Resolving Swift Package Manager dependencies...")
373
- FastlaneCore::CommandExecutor.execute(command: build_xcodebuild_resolvepackagedependencies_command,
374
- print_all: true,
375
- print_command: !self.xcodebuild_list_silent)
379
+ if (command = build_xcodebuild_resolvepackagedependencies_command)
380
+ UI.important("Resolving Swift Package Manager dependencies...")
381
+ FastlaneCore::CommandExecutor.execute(
382
+ command: command,
383
+ print_all: true,
384
+ print_command: !self.xcodebuild_list_silent
385
+ )
386
+ else
387
+ UI.important("Skipped Swift Package Manager dependencies resolution.")
388
+ end
376
389
  end
377
390
 
378
391
  command = build_xcodebuild_showbuildsettings_command