fastlane 2.150.0.rc3 → 2.150.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (46) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +76 -76
  3. data/deliver/lib/deliver/download_screenshots.rb +48 -26
  4. data/deliver/lib/deliver/runner.rb +4 -1
  5. data/deliver/lib/deliver/submit_for_review.rb +26 -7
  6. data/deliver/lib/deliver/upload_metadata.rb +29 -10
  7. data/deliver/lib/deliver/upload_screenshots.rb +49 -10
  8. data/fastlane/lib/fastlane/actions/.hockey.rb.swp +0 -0
  9. data/fastlane/lib/fastlane/actions/.slack.rb.swp +0 -0
  10. data/fastlane/lib/fastlane/actions/.update_project_provisioning.rb.swp +0 -0
  11. data/fastlane/lib/fastlane/actions/docs/upload_to_app_store.md.erb +4 -0
  12. data/fastlane/lib/fastlane/version.rb +1 -1
  13. data/fastlane/swift/Deliverfile.swift +1 -1
  14. data/fastlane/swift/DeliverfileProtocol.swift +6 -6
  15. data/fastlane/swift/Fastlane.swift +22 -19
  16. data/fastlane/swift/FastlaneSwiftRunner/FastlaneSwiftRunner.xcodeproj/project.xcworkspace/xcuserdata/josh.xcuserdatad/UserInterfaceState.xcuserstate +0 -0
  17. data/fastlane/swift/Gymfile.swift +1 -1
  18. data/fastlane/swift/Matchfile.swift +1 -1
  19. data/fastlane/swift/Precheckfile.swift +1 -1
  20. data/fastlane/swift/Scanfile.swift +1 -1
  21. data/fastlane/swift/Screengrabfile.swift +1 -1
  22. data/fastlane/swift/Snapshotfile.swift +1 -1
  23. data/fastlane/swift/SocketClient.swift +2 -1
  24. data/fastlane_core/lib/fastlane_core/build_watcher.rb +4 -4
  25. data/fastlane_core/lib/fastlane_core/ipa_file_analyser.rb +0 -1
  26. data/fastlane_core/lib/fastlane_core/itunes_transporter.rb +89 -52
  27. data/fastlane_core/lib/fastlane_core/provisioning_profile.rb +1 -1
  28. data/pilot/lib/pilot/.manager.rb.swp +0 -0
  29. data/produce/lib/produce/itunes_connect.rb +29 -2
  30. data/spaceship/lib/spaceship/{.DS_Store → connect_api/.DS_Store} +0 -0
  31. data/spaceship/lib/spaceship/connect_api/client.rb +1 -1
  32. data/spaceship/lib/spaceship/connect_api/file_uploader.rb +42 -10
  33. data/spaceship/lib/spaceship/connect_api/models/age_rating_declaration.rb +1 -1
  34. data/spaceship/lib/spaceship/connect_api/models/app.rb +46 -6
  35. data/spaceship/lib/spaceship/connect_api/models/app_info.rb +4 -0
  36. data/spaceship/lib/spaceship/connect_api/models/app_preview.rb +62 -10
  37. data/spaceship/lib/spaceship/connect_api/models/app_preview_set.rb +2 -2
  38. data/spaceship/lib/spaceship/connect_api/models/app_review_attachment.rb +18 -28
  39. data/spaceship/lib/spaceship/connect_api/models/app_screenshot.rb +86 -37
  40. data/spaceship/lib/spaceship/connect_api/models/app_screenshot_set.rb +32 -2
  41. data/spaceship/lib/spaceship/connect_api/models/app_store_review_detail.rb +5 -6
  42. data/spaceship/lib/spaceship/connect_api/models/app_store_version.rb +22 -3
  43. data/spaceship/lib/spaceship/connect_api/models/user.rb +2 -1
  44. data/spaceship/lib/spaceship/connect_api/tunes/tunes.rb +41 -13
  45. data/spaceship/lib/spaceship/connect_api/users/users.rb +13 -0
  46. metadata +37 -32
@@ -1,4 +1,5 @@
1
1
  require 'spaceship/tunes/tunes'
2
+ require 'digest/md5'
2
3
 
3
4
  require_relative 'app_screenshot'
4
5
  require_relative 'module'
@@ -64,8 +65,8 @@ module Deliver
64
65
  end
65
66
 
66
67
  # Crash if any errors happen while deleting
67
- unless errors.empty?
68
- UI.crash!(errors.map(&:message).join("\n"))
68
+ errors.each do |error|
69
+ UI.error(error.message)
69
70
  end
70
71
  end
71
72
  end
@@ -91,6 +92,29 @@ module Deliver
91
92
  localizations = version.get_app_store_version_localizations
92
93
  end
93
94
 
95
+ upload_screenshots(screenshots_per_language, localizations, options)
96
+ end
97
+
98
+ def upload_screenshots(screenshots_per_language, localizations, options)
99
+ # Check if should wait for processing
100
+ # Default to waiting if submitting for review (since needed for submission)
101
+ # Otherwise use enviroment variable
102
+ if ENV["DELIVER_SKIP_WAIT_FOR_SCREENSHOT_PROCESSING"].nil?
103
+ wait_for_processing = options[:submit_for_review]
104
+ UI.verbose("Setting wait_for_processing from ':submit_for_review' option")
105
+ else
106
+ UI.verbose("Setting wait_for_processing from 'DELIVER_SKIP_WAIT_FOR_SCREENSHOT_PROCESSING' environment variable")
107
+ wait_for_processing = !FastlaneCore::Env.truthy?("DELIVER_SKIP_WAIT_FOR_SCREENSHOT_PROCESSING")
108
+ end
109
+
110
+ if wait_for_processing
111
+ UI.important("Will wait for screenshot image processing")
112
+ UI.important("Set env DELIVER_SKIP_WAIT_FOR_SCREENSHOT_PROCESSING=true to skip waiting for screenshots to process")
113
+ else
114
+ UI.important("Skipping the wait for screenshot image processing (which may affect submission)")
115
+ UI.important("Set env DELIVER_SKIP_WAIT_FOR_SCREENSHOT_PROCESSING=false to skip waiting for screenshots to process")
116
+ end
117
+
94
118
  # Upload screenshots
95
119
  indized = {} # per language and device type
96
120
 
@@ -114,7 +138,13 @@ module Deliver
114
138
  app_screenshot_sets_map[app_screenshot_set.screenshot_display_type] = app_screenshot_set
115
139
 
116
140
  # Set initial screnshot count
117
- indized[localization.locale][app_screenshot_set.screenshot_display_type] ||= app_screenshot_set.app_screenshots.size
141
+ indized[localization.locale][app_screenshot_set.screenshot_display_type] ||= {
142
+ count: app_screenshot_set.app_screenshots.size,
143
+ checksums: []
144
+ }
145
+
146
+ checksums = app_screenshot_set.app_screenshots.map(&:source_file_checksum).uniq
147
+ indized[localization.locale][app_screenshot_set.screenshot_display_type][:checksums] = checksums
118
148
  end
119
149
 
120
150
  UI.message("Uploading #{screenshots_for_language.length} screenshots for language #{language}")
@@ -133,21 +163,30 @@ module Deliver
133
163
  })
134
164
  app_screenshot_sets_map[display_type] = set
135
165
 
136
- indized[localization.locale][set.screenshot_display_type] = 0
166
+ indized[localization.locale][set.screenshot_display_type] = {
167
+ count: 0,
168
+ checksums: []
169
+ }
137
170
  end
138
171
 
139
- index = indized[localization.locale][set.screenshot_display_type]
172
+ index = indized[localization.locale][set.screenshot_display_type][:count]
140
173
 
141
174
  if index >= 10
142
- UI.error("Too many screenshots found for device '#{screenshot.formatted_name}' in '#{screenshot.language}', skipping this one (#{screenshot.path})")
175
+ UI.error("Too many screenshots found for device '#{screenshot.device_type}' in '#{screenshot.language}', skipping this one (#{screenshot.path})")
143
176
  next
144
177
  end
145
178
 
146
- indized[localization.locale][set.screenshot_display_type] += 1
179
+ bytes = File.binread(screenshot.path)
180
+ checksum = Digest::MD5.hexdigest(bytes)
181
+ duplicate = indized[localization.locale][set.screenshot_display_type][:checksums].include?(checksum)
147
182
 
148
- # Also.. what is the messages type even for?
149
- UI.message("Uploading '#{screenshot.path}'...")
150
- set.upload_screenshot(path: screenshot.path)
183
+ if duplicate
184
+ UI.message("Previous uploaded. Skipping '#{screenshot.path}'...")
185
+ else
186
+ indized[localization.locale][set.screenshot_display_type][:count] += 1
187
+ UI.message("Uploading '#{screenshot.path}'...")
188
+ set.upload_screenshot(path: screenshot.path, wait_for_processing: wait_for_processing)
189
+ end
151
190
  end
152
191
  end
153
192
  UI.success("Successfully uploaded screenshots to App Store Connect")
@@ -435,6 +435,10 @@ Omit `build_number` to let _fastlane_ automatically select the latest build numb
435
435
 
436
436
  Use the `submission_information` parameter for additional submission specifiers, including compliance and IDFA settings. Look at the Spaceship's [`app_submission.rb`](https://github.com/fastlane/fastlane/blob/master/spaceship/lib/spaceship/tunes/app_submission.rb) file for options. See [this example](https://github.com/artsy/eigen/blob/faa02e2746194d8d7c11899474de9c517435eca4/fastlane/Fastfile#L131-L149).
437
437
 
438
+ ```no-highlight
439
+ fastlane deliver submit_build --build_number 830 --submission_information "{\"export_compliance_uses_encryption\": false, \"add_id_info_uses_idfa\": false }"
440
+ ```
441
+
438
442
  # Credentials
439
443
 
440
444
  A detailed description about how your credentials are handled is available in a [credentials_manager](https://github.com/fastlane/fastlane/tree/master/credentials_manager).
@@ -1,5 +1,5 @@
1
1
  module Fastlane
2
- VERSION = '2.150.0.rc3'.freeze
2
+ VERSION = '2.150.0'.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
@@ -18,4 +18,4 @@ class Deliverfile: DeliverfileProtocol {
18
18
 
19
19
 
20
20
 
21
- // Generated with fastlane 2.149.1
21
+ // Generated with fastlane 2.150.0
@@ -76,7 +76,7 @@ protocol DeliverfileProtocol: class {
76
76
  var appRatingConfigPath: String? { get }
77
77
 
78
78
  /// Extra information for the submission (e.g. compliance specifications, IDFA settings)
79
- var submissionInformation: String? { get }
79
+ var submissionInformation: [String : Any]? { get }
80
80
 
81
81
  /// The ID of your App Store Connect team if you're in multiple teams
82
82
  var teamId: String? { get }
@@ -99,13 +99,13 @@ protocol DeliverfileProtocol: class {
99
99
  /// The default precheck rule level unless otherwise configured
100
100
  var precheckDefaultRuleLevel: String { get }
101
101
 
102
- /// 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
+ /// **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
103
103
  var individualMetadataItems: [String] { get }
104
104
 
105
- /// Metadata: The path to the app icon
105
+ /// **DEPRECATED!** Removed after the migration to the new App Store Connect API in June 2020 - Metadata: The path to the app icon
106
106
  var appIcon: String? { get }
107
107
 
108
- /// Metadata: The path to the Apple Watch app icon
108
+ /// **DEPRECATED!** Removed after the migration to the new App Store Connect API in June 2020 - Metadata: The path to the Apple Watch app icon
109
109
  var appleWatchAppIcon: String? { get }
110
110
 
111
111
  /// Metadata: The copyright notice
@@ -207,7 +207,7 @@ extension DeliverfileProtocol {
207
207
  var resetRatings: Bool { return false }
208
208
  var priceTier: String? { return nil }
209
209
  var appRatingConfigPath: String? { return nil }
210
- var submissionInformation: String? { return nil }
210
+ var submissionInformation: [String : Any]? { return nil }
211
211
  var teamId: String? { return nil }
212
212
  var teamName: String? { return nil }
213
213
  var devPortalTeamId: String? { return nil }
@@ -246,4 +246,4 @@ extension DeliverfileProtocol {
246
246
 
247
247
  // Please don't remove the lines below
248
248
  // They are used to detect outdated files
249
- // FastlaneRunnerAPIVersion [0.9.19]
249
+ // FastlaneRunnerAPIVersion [0.9.20]
@@ -455,9 +455,9 @@ func appledoc(input: Any,
455
455
  - itcProvider: The provider short name to be used with the iTMSTransporter to identify your team. This value will override the automatically detected provider short name. To get provider short name run `pathToXcode.app/Contents/Applications/Application\ Loader.app/Contents/itms/bin/iTMSTransporter -m provider -u 'USERNAME' -p 'PASSWORD' -account_type itunes_connect -v off`. The short names of providers should be listed in the second column
456
456
  - runPrecheckBeforeSubmit: Run precheck before submitting to app review
457
457
  - precheckDefaultRuleLevel: The default precheck rule level unless otherwise configured
458
- - individualMetadataItems: An array of localized metadata items to upload individually by language so that errors can be identified. E.g. ['name', 'keywords', 'description']. Note: slow
459
- - appIcon: Metadata: The path to the app icon
460
- - appleWatchAppIcon: Metadata: The path to the Apple Watch app icon
458
+ - individualMetadataItems: **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
459
+ - appIcon: **DEPRECATED!** Removed after the migration to the new App Store Connect API in June 2020 - Metadata: The path to the app icon
460
+ - appleWatchAppIcon: **DEPRECATED!** Removed after the migration to the new App Store Connect API in June 2020 - Metadata: The path to the Apple Watch app icon
461
461
  - copyright: Metadata: The copyright notice
462
462
  - primaryCategory: Metadata: The english name of the primary category (e.g. `Business`, `Books`)
463
463
  - secondaryCategory: Metadata: The english name of the secondary category (e.g. `Business`, `Books`)
@@ -515,7 +515,7 @@ func appstore(username: String,
515
515
  resetRatings: Bool = false,
516
516
  priceTier: Any? = nil,
517
517
  appRatingConfigPath: String? = nil,
518
- submissionInformation: Any? = nil,
518
+ submissionInformation: [String : Any]? = nil,
519
519
  teamId: Any? = nil,
520
520
  teamName: String? = nil,
521
521
  devPortalTeamId: String? = nil,
@@ -2248,7 +2248,7 @@ func createAppOnManagedPlayStore(jsonKey: String? = nil,
2248
2248
  - sku: SKU Number (e.g. '1234')
2249
2249
  - platform: The platform to use (optional)
2250
2250
  - platforms: The platforms to use (optional)
2251
- - language: Primary Language (e.g. 'English', 'German')
2251
+ - language: Primary Language (e.g. 'en-US', 'fr-FR')
2252
2252
  - companyName: The name of your company. Only required if it's the first app you create
2253
2253
  - skipItc: Skip the creation of the app on App Store Connect
2254
2254
  - itcUsers: Array of App Store Connect users. If provided, you can limit access to this newly created app for users with the App Manager, Developer, Marketer or Sales roles
@@ -2505,9 +2505,9 @@ func deleteKeychain(name: String? = nil,
2505
2505
  - itcProvider: The provider short name to be used with the iTMSTransporter to identify your team. This value will override the automatically detected provider short name. To get provider short name run `pathToXcode.app/Contents/Applications/Application\ Loader.app/Contents/itms/bin/iTMSTransporter -m provider -u 'USERNAME' -p 'PASSWORD' -account_type itunes_connect -v off`. The short names of providers should be listed in the second column
2506
2506
  - runPrecheckBeforeSubmit: Run precheck before submitting to app review
2507
2507
  - precheckDefaultRuleLevel: The default precheck rule level unless otherwise configured
2508
- - individualMetadataItems: An array of localized metadata items to upload individually by language so that errors can be identified. E.g. ['name', 'keywords', 'description']. Note: slow
2509
- - appIcon: Metadata: The path to the app icon
2510
- - appleWatchAppIcon: Metadata: The path to the Apple Watch app icon
2508
+ - individualMetadataItems: **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
2509
+ - appIcon: **DEPRECATED!** Removed after the migration to the new App Store Connect API in June 2020 - Metadata: The path to the app icon
2510
+ - appleWatchAppIcon: **DEPRECATED!** Removed after the migration to the new App Store Connect API in June 2020 - Metadata: The path to the Apple Watch app icon
2511
2511
  - copyright: Metadata: The copyright notice
2512
2512
  - primaryCategory: Metadata: The english name of the primary category (e.g. `Business`, `Books`)
2513
2513
  - secondaryCategory: Metadata: The english name of the secondary category (e.g. `Business`, `Books`)
@@ -2565,7 +2565,7 @@ func deliver(username: Any = deliverfile.username,
2565
2565
  resetRatings: Bool = deliverfile.resetRatings,
2566
2566
  priceTier: Any? = deliverfile.priceTier,
2567
2567
  appRatingConfigPath: Any? = deliverfile.appRatingConfigPath,
2568
- submissionInformation: Any? = deliverfile.submissionInformation,
2568
+ submissionInformation: [String : Any]? = deliverfile.submissionInformation,
2569
2569
  teamId: Any? = deliverfile.teamId,
2570
2570
  teamName: Any? = deliverfile.teamName,
2571
2571
  devPortalTeamId: Any? = deliverfile.devPortalTeamId,
@@ -2799,7 +2799,7 @@ func downloadDsyms(username: String,
2799
2799
  func downloadFromPlayStore(packageName: String,
2800
2800
  versionName: String? = nil,
2801
2801
  track: String = "production",
2802
- metadataPath: String? = nil,
2802
+ metadataPath: String = "./metadata",
2803
2803
  key: String? = nil,
2804
2804
  issuer: String? = nil,
2805
2805
  jsonKey: String? = nil,
@@ -5343,7 +5343,7 @@ func println(message: String? = nil) {
5343
5343
  - sku: SKU Number (e.g. '1234')
5344
5344
  - platform: The platform to use (optional)
5345
5345
  - platforms: The platforms to use (optional)
5346
- - language: Primary Language (e.g. 'English', 'German')
5346
+ - language: Primary Language (e.g. 'en-US', 'fr-FR')
5347
5347
  - companyName: The name of your company. Only required if it's the first app you create
5348
5348
  - skipItc: Skip the creation of the app on App Store Connect
5349
5349
  - itcUsers: Array of App Store Connect users. If provided, you can limit access to this newly created app for users with the App Manager, Developer, Marketer or Sales roles
@@ -7097,6 +7097,7 @@ func splunkmint(dsym: String? = nil,
7097
7097
  - packagePath: Change working directory before any other operation
7098
7098
  - xcconfig: Use xcconfig file to override swift package generate-xcodeproj defaults
7099
7099
  - configuration: Build with configuration (debug|release) [default: debug]
7100
+ - disableSandbox: Disable using the sandbox when executing subprocesses
7100
7101
  - xcprettyOutput: Specifies the output type for xcpretty. eg. 'test', or 'simple'
7101
7102
  - xcprettyArgs: Pass in xcpretty additional command line arguments (e.g. '--test --no-color' or '--tap --no-utf'), requires xcpretty_output to be specified also
7102
7103
  - verbose: Increase verbosity of informational output
@@ -7106,6 +7107,7 @@ func spm(command: String = "build",
7106
7107
  packagePath: String? = nil,
7107
7108
  xcconfig: String? = nil,
7108
7109
  configuration: String? = nil,
7110
+ disableSandbox: Bool = false,
7109
7111
  xcprettyOutput: String? = nil,
7110
7112
  xcprettyArgs: String? = nil,
7111
7113
  verbose: Bool = false) {
@@ -7114,6 +7116,7 @@ func spm(command: String = "build",
7114
7116
  RubyCommand.Argument(name: "package_path", value: packagePath),
7115
7117
  RubyCommand.Argument(name: "xcconfig", value: xcconfig),
7116
7118
  RubyCommand.Argument(name: "configuration", value: configuration),
7119
+ RubyCommand.Argument(name: "disable_sandbox", value: disableSandbox),
7117
7120
  RubyCommand.Argument(name: "xcpretty_output", value: xcprettyOutput),
7118
7121
  RubyCommand.Argument(name: "xcpretty_args", value: xcprettyArgs),
7119
7122
  RubyCommand.Argument(name: "verbose", value: verbose)])
@@ -7196,7 +7199,7 @@ func supply(packageName: String,
7196
7199
  releaseStatus: String = "completed",
7197
7200
  track: String = "production",
7198
7201
  rollout: String? = nil,
7199
- metadataPath: String? = nil,
7202
+ metadataPath: String = "./metadata",
7200
7203
  key: String? = nil,
7201
7204
  issuer: String? = nil,
7202
7205
  jsonKey: String? = nil,
@@ -8099,9 +8102,9 @@ func uploadSymbolsToSentry(apiHost: String = "https://app.getsentry.com/api/0",
8099
8102
  - itcProvider: The provider short name to be used with the iTMSTransporter to identify your team. This value will override the automatically detected provider short name. To get provider short name run `pathToXcode.app/Contents/Applications/Application\ Loader.app/Contents/itms/bin/iTMSTransporter -m provider -u 'USERNAME' -p 'PASSWORD' -account_type itunes_connect -v off`. The short names of providers should be listed in the second column
8100
8103
  - runPrecheckBeforeSubmit: Run precheck before submitting to app review
8101
8104
  - precheckDefaultRuleLevel: The default precheck rule level unless otherwise configured
8102
- - individualMetadataItems: An array of localized metadata items to upload individually by language so that errors can be identified. E.g. ['name', 'keywords', 'description']. Note: slow
8103
- - appIcon: Metadata: The path to the app icon
8104
- - appleWatchAppIcon: Metadata: The path to the Apple Watch app icon
8105
+ - individualMetadataItems: **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
8106
+ - appIcon: **DEPRECATED!** Removed after the migration to the new App Store Connect API in June 2020 - Metadata: The path to the app icon
8107
+ - appleWatchAppIcon: **DEPRECATED!** Removed after the migration to the new App Store Connect API in June 2020 - Metadata: The path to the Apple Watch app icon
8105
8108
  - copyright: Metadata: The copyright notice
8106
8109
  - primaryCategory: Metadata: The english name of the primary category (e.g. `Business`, `Books`)
8107
8110
  - secondaryCategory: Metadata: The english name of the secondary category (e.g. `Business`, `Books`)
@@ -8159,7 +8162,7 @@ func uploadToAppStore(username: String,
8159
8162
  resetRatings: Bool = false,
8160
8163
  priceTier: Any? = nil,
8161
8164
  appRatingConfigPath: String? = nil,
8162
- submissionInformation: Any? = nil,
8165
+ submissionInformation: [String : Any]? = nil,
8163
8166
  teamId: Any? = nil,
8164
8167
  teamName: String? = nil,
8165
8168
  devPortalTeamId: String? = nil,
@@ -8305,7 +8308,7 @@ func uploadToPlayStore(packageName: String,
8305
8308
  releaseStatus: String = "completed",
8306
8309
  track: String = "production",
8307
8310
  rollout: String? = nil,
8308
- metadataPath: String? = nil,
8311
+ metadataPath: String = "./metadata",
8309
8312
  key: String? = nil,
8310
8313
  issuer: String? = nil,
8311
8314
  jsonKey: String? = nil,
@@ -8815,7 +8818,7 @@ func xcov(workspace: String? = nil,
8815
8818
  coverallsServiceJobId: String? = nil,
8816
8819
  coverallsRepoToken: String? = nil,
8817
8820
  xcconfig: String? = nil,
8818
- ideFoundationPath: String = "/Applications/Xcode-11.5.app/Contents/Developer/../Frameworks/IDEFoundation.framework/Versions/A/IDEFoundation",
8821
+ ideFoundationPath: String = "/Applications/Xcode.app/Contents/Developer/../Frameworks/IDEFoundation.framework/Versions/A/IDEFoundation",
8819
8822
  legacySupport: Bool = false) {
8820
8823
  let command = RubyCommand(commandID: "", methodName: "xcov", className: nil, args: [RubyCommand.Argument(name: "workspace", value: workspace),
8821
8824
  RubyCommand.Argument(name: "project", value: project),
@@ -8960,4 +8963,4 @@ let snapshotfile: Snapshotfile = Snapshotfile()
8960
8963
 
8961
8964
  // Please don't remove the lines below
8962
8965
  // They are used to detect outdated files
8963
- // FastlaneRunnerAPIVersion [0.9.71]
8966
+ // FastlaneRunnerAPIVersion [0.9.72]
@@ -18,4 +18,4 @@ class Gymfile: GymfileProtocol {
18
18
 
19
19
 
20
20
 
21
- // Generated with fastlane 2.149.1
21
+ // Generated with fastlane 2.150.0
@@ -18,4 +18,4 @@ class Matchfile: MatchfileProtocol {
18
18
 
19
19
 
20
20
 
21
- // Generated with fastlane 2.149.1
21
+ // Generated with fastlane 2.150.0
@@ -18,4 +18,4 @@ class Precheckfile: PrecheckfileProtocol {
18
18
 
19
19
 
20
20
 
21
- // Generated with fastlane 2.149.1
21
+ // Generated with fastlane 2.150.0
@@ -18,4 +18,4 @@ class Scanfile: ScanfileProtocol {
18
18
 
19
19
 
20
20
 
21
- // Generated with fastlane 2.149.1
21
+ // Generated with fastlane 2.150.0
@@ -18,4 +18,4 @@ class Screengrabfile: ScreengrabfileProtocol {
18
18
 
19
19
 
20
20
 
21
- // Generated with fastlane 2.149.1
21
+ // Generated with fastlane 2.150.0
@@ -18,4 +18,4 @@ class Snapshotfile: SnapshotfileProtocol {
18
18
 
19
19
 
20
20
 
21
- // Generated with fastlane 2.149.1
21
+ // Generated with fastlane 2.150.0
@@ -34,7 +34,7 @@ class SocketClient: NSObject {
34
34
  }
35
35
 
36
36
  static let connectTimeoutSeconds = 2
37
- static let defaultCommandTimeoutSeconds = 3_600 // Hopefully 1 hr is enough ¯\_(ツ)_/¯
37
+ static let defaultCommandTimeoutSeconds = 10_800 // 3 hours
38
38
  static let doneToken = "done" // TODO: remove these
39
39
  static let cancelToken = "cancelFastlaneRun"
40
40
 
@@ -118,6 +118,7 @@ class SocketClient: NSObject {
118
118
  public func send(rubyCommand: RubyCommandable) {
119
119
  verbose(message: "sending: \(rubyCommand.json)")
120
120
  send(string: rubyCommand.json)
121
+ writeSemaphore.signal()
121
122
  }
122
123
 
123
124
  public func sendComplete() {
@@ -6,7 +6,7 @@ module FastlaneCore
6
6
  class BuildWatcher
7
7
  class << self
8
8
  # @return The build we waited for. This method will always return a build
9
- def wait_for_build_processing_to_be_complete(app_id: nil, platform: nil, train_version: nil, app_version: nil, build_version: nil, poll_interval: 10, strict_build_watch: false, return_when_build_appears: false, return_spaceship_testflight_build: true)
9
+ def wait_for_build_processing_to_be_complete(app_id: nil, platform: nil, train_version: nil, app_version: nil, build_version: nil, poll_interval: 10, strict_build_watch: false, return_when_build_appears: false, return_spaceship_testflight_build: true, select_latest: false)
10
10
  # Warn about train_version being removed in the future
11
11
  if train_version
12
12
  UI.deprecated(":train_version is no longer a used argument on FastlaneCore::BuildWatcher. Please use :app_version instead.")
@@ -23,7 +23,7 @@ module FastlaneCore
23
23
 
24
24
  showed_info = false
25
25
  loop do
26
- matched_build = matching_build(watched_app_version: app_version, watched_build_version: build_version, app_id: app_id, platform: platform)
26
+ matched_build = matching_build(watched_app_version: app_version, watched_build_version: build_version, app_id: app_id, platform: platform, select_latest: select_latest)
27
27
 
28
28
  if matched_build.nil? && !showed_info
29
29
  UI.important("Read more information on why this build isn't showing up yet - https://github.com/fastlane/fastlane/issues/14997")
@@ -55,7 +55,7 @@ module FastlaneCore
55
55
  return version.instance_of?(String) ? version.split('.').map { |s| s.to_i.to_s }.join('.') : version
56
56
  end
57
57
 
58
- def matching_build(watched_app_version: nil, watched_build_version: nil, app_id: nil, platform: nil)
58
+ def matching_build(watched_app_version: nil, watched_build_version: nil, app_id: nil, platform: nil, select_latest: false)
59
59
  # Get build deliveries (newly uploaded processing builds)
60
60
  watched_app_version = remove_version_leading_zeros(version: watched_app_version)
61
61
  watched_build_version = remove_version_leading_zeros(version: watched_build_version)
@@ -69,7 +69,7 @@ module FastlaneCore
69
69
 
70
70
  # Raise error if more than 1 build is returned
71
71
  # This should never happen but need to inform the user if it does
72
- if matched_builds.size > 1
72
+ if matched_builds.size > 1 && !select_latest
73
73
  error_builds = matched_builds.map do |build|
74
74
  "#{build.app_version}(#{build.version}) for #{build.platform} - #{build.processing_state}"
75
75
  end.join("\n")
@@ -37,7 +37,6 @@ module FastlaneCore
37
37
 
38
38
  def self.fetch_info_plist_file(path)
39
39
  UI.user_error!("Could not find file at path '#{path}'") unless File.exist?(path)
40
- Zip.validate_entry_sizes = true # https://github.com/rubyzip/rubyzip/releases/tag/v2.0.0
41
40
  Zip::File.open(path, "rb") do |zipfile|
42
41
  file = zipfile.glob('**/Payload/*.app/Info.plist').first
43
42
  return nil unless file
@@ -239,64 +239,101 @@ module FastlaneCore
239
239
  # escaping problems in its accompanying shell script.
240
240
  class JavaTransporterExecutor < TransporterExecutor
241
241
  def build_upload_command(username, password, source = "/tmp", provider_short_name = "")
242
- [
243
- Helper.transporter_java_executable_path.shellescape,
244
- "-Djava.ext.dirs=#{Helper.transporter_java_ext_dir.shellescape}",
245
- '-XX:NewSize=2m',
246
- '-Xms32m',
247
- '-Xmx1024m',
248
- '-Xms1024m',
249
- '-Djava.awt.headless=true',
250
- '-Dsun.net.http.retryPost=false',
251
- java_code_option,
252
- '-m upload',
253
- "-u #{username.shellescape}",
254
- "-p #{password.shellescape}",
255
- "-f #{source.shellescape}",
256
- additional_upload_parameters, # that's here, because the user might overwrite the -t option
257
- '-k 100000',
258
- ("-itc_provider #{provider_short_name}" unless provider_short_name.to_s.empty?),
259
- '2>&1' # cause stderr to be written to stdout
260
- ].compact.join(' ') # compact gets rid of the possibly nil ENV value
242
+ if Helper.mac? && Helper.xcode_at_least?(11)
243
+ [
244
+ 'xcrun iTMSTransporter',
245
+ '-m upload',
246
+ "-u #{username.shellescape}",
247
+ "-p #{password.shellescape}",
248
+ "-f #{source.shellescape}",
249
+ additional_upload_parameters, # that's here, because the user might overwrite the -t option
250
+ '-k 100000',
251
+ ("-itc_provider #{provider_short_name}" unless provider_short_name.to_s.empty?),
252
+ '2>&1' # cause stderr to be written to stdout
253
+ ].compact.join(' ') # compact gets rid of the possibly nil ENV value
254
+ else
255
+ [
256
+ Helper.transporter_java_executable_path.shellescape,
257
+ "-Djava.ext.dirs=#{Helper.transporter_java_ext_dir.shellescape}",
258
+ '-XX:NewSize=2m',
259
+ '-Xms32m',
260
+ '-Xmx1024m',
261
+ '-Xms1024m',
262
+ '-Djava.awt.headless=true',
263
+ '-Dsun.net.http.retryPost=false',
264
+ java_code_option,
265
+ '-m upload',
266
+ "-u #{username.shellescape}",
267
+ "-p #{password.shellescape}",
268
+ "-f #{source.shellescape}",
269
+ additional_upload_parameters, # that's here, because the user might overwrite the -t option
270
+ '-k 100000',
271
+ ("-itc_provider #{provider_short_name}" unless provider_short_name.to_s.empty?),
272
+ '2>&1' # cause stderr to be written to stdout
273
+ ].compact.join(' ') # compact gets rid of the possibly nil ENV value
274
+ end
261
275
  end
262
276
 
263
277
  def build_download_command(username, password, apple_id, destination = "/tmp", provider_short_name = "")
264
- [
265
- Helper.transporter_java_executable_path.shellescape,
266
- "-Djava.ext.dirs=#{Helper.transporter_java_ext_dir.shellescape}",
267
- '-XX:NewSize=2m',
268
- '-Xms32m',
269
- '-Xmx1024m',
270
- '-Xms1024m',
271
- '-Djava.awt.headless=true',
272
- '-Dsun.net.http.retryPost=false',
273
- java_code_option,
274
- '-m lookupMetadata',
275
- "-u #{username.shellescape}",
276
- "-p #{password.shellescape}",
277
- "-apple_id #{apple_id.shellescape}",
278
- "-destination #{destination.shellescape}",
279
- ("-itc_provider #{provider_short_name}" unless provider_short_name.to_s.empty?),
280
- '2>&1' # cause stderr to be written to stdout
281
- ].compact.join(' ')
278
+ if Helper.mac? && Helper.xcode_at_least?(11)
279
+ [
280
+ 'xcrun iTMSTransporter',
281
+ '-m lookupMetadata',
282
+ "-u #{username.shellescape}",
283
+ "-p #{password.shellescape}",
284
+ "-apple_id #{apple_id.shellescape}",
285
+ "-destination #{destination.shellescape}",
286
+ ("-itc_provider #{provider_short_name}" unless provider_short_name.to_s.empty?),
287
+ '2>&1' # cause stderr to be written to stdout
288
+ ].compact.join(' ')
289
+ else
290
+ [
291
+ Helper.transporter_java_executable_path.shellescape,
292
+ "-Djava.ext.dirs=#{Helper.transporter_java_ext_dir.shellescape}",
293
+ '-XX:NewSize=2m',
294
+ '-Xms32m',
295
+ '-Xmx1024m',
296
+ '-Xms1024m',
297
+ '-Djava.awt.headless=true',
298
+ '-Dsun.net.http.retryPost=false',
299
+ java_code_option,
300
+ '-m lookupMetadata',
301
+ "-u #{username.shellescape}",
302
+ "-p #{password.shellescape}",
303
+ "-apple_id #{apple_id.shellescape}",
304
+ "-destination #{destination.shellescape}",
305
+ ("-itc_provider #{provider_short_name}" unless provider_short_name.to_s.empty?),
306
+ '2>&1' # cause stderr to be written to stdout
307
+ ].compact.join(' ')
308
+ end
282
309
  end
283
310
 
284
311
  def build_provider_ids_command(username, password)
285
- [
286
- Helper.transporter_java_executable_path.shellescape,
287
- "-Djava.ext.dirs=#{Helper.transporter_java_ext_dir.shellescape}",
288
- '-XX:NewSize=2m',
289
- '-Xms32m',
290
- '-Xmx1024m',
291
- '-Xms1024m',
292
- '-Djava.awt.headless=true',
293
- '-Dsun.net.http.retryPost=false',
294
- java_code_option,
295
- '-m provider',
296
- "-u #{username.shellescape}",
297
- "-p #{password.shellescape}",
298
- '2>&1' # cause stderr to be written to stdout
299
- ].compact.join(' ')
312
+ if Helper.mac? && Helper.xcode_at_least?(11)
313
+ [
314
+ 'xcrun iTMSTransporter',
315
+ '-m provider',
316
+ "-u #{username.shellescape}",
317
+ "-p #{password.shellescape}",
318
+ '2>&1' # cause stderr to be written to stdout
319
+ ].compact.join(' ')
320
+ else
321
+ [
322
+ Helper.transporter_java_executable_path.shellescape,
323
+ "-Djava.ext.dirs=#{Helper.transporter_java_ext_dir.shellescape}",
324
+ '-XX:NewSize=2m',
325
+ '-Xms32m',
326
+ '-Xmx1024m',
327
+ '-Xms1024m',
328
+ '-Djava.awt.headless=true',
329
+ '-Dsun.net.http.retryPost=false',
330
+ java_code_option,
331
+ '-m provider',
332
+ "-u #{username.shellescape}",
333
+ "-p #{password.shellescape}",
334
+ '2>&1' # cause stderr to be written to stdout
335
+ ].compact.join(' ')
336
+ end
300
337
  end
301
338
 
302
339
  def java_code_option