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.
- checksums.yaml +4 -4
- data/README.md +76 -76
- data/deliver/lib/deliver/download_screenshots.rb +48 -26
- data/deliver/lib/deliver/runner.rb +4 -1
- data/deliver/lib/deliver/submit_for_review.rb +26 -7
- data/deliver/lib/deliver/upload_metadata.rb +29 -10
- data/deliver/lib/deliver/upload_screenshots.rb +49 -10
- data/fastlane/lib/fastlane/actions/.hockey.rb.swp +0 -0
- data/fastlane/lib/fastlane/actions/.slack.rb.swp +0 -0
- data/fastlane/lib/fastlane/actions/.update_project_provisioning.rb.swp +0 -0
- data/fastlane/lib/fastlane/actions/docs/upload_to_app_store.md.erb +4 -0
- data/fastlane/lib/fastlane/version.rb +1 -1
- data/fastlane/swift/Deliverfile.swift +1 -1
- data/fastlane/swift/DeliverfileProtocol.swift +6 -6
- data/fastlane/swift/Fastlane.swift +22 -19
- data/fastlane/swift/FastlaneSwiftRunner/FastlaneSwiftRunner.xcodeproj/project.xcworkspace/xcuserdata/josh.xcuserdatad/UserInterfaceState.xcuserstate +0 -0
- data/fastlane/swift/Gymfile.swift +1 -1
- data/fastlane/swift/Matchfile.swift +1 -1
- data/fastlane/swift/Precheckfile.swift +1 -1
- data/fastlane/swift/Scanfile.swift +1 -1
- data/fastlane/swift/Screengrabfile.swift +1 -1
- data/fastlane/swift/Snapshotfile.swift +1 -1
- data/fastlane/swift/SocketClient.swift +2 -1
- data/fastlane_core/lib/fastlane_core/build_watcher.rb +4 -4
- data/fastlane_core/lib/fastlane_core/ipa_file_analyser.rb +0 -1
- data/fastlane_core/lib/fastlane_core/itunes_transporter.rb +89 -52
- data/fastlane_core/lib/fastlane_core/provisioning_profile.rb +1 -1
- data/pilot/lib/pilot/.manager.rb.swp +0 -0
- data/produce/lib/produce/itunes_connect.rb +29 -2
- data/spaceship/lib/spaceship/{.DS_Store → connect_api/.DS_Store} +0 -0
- data/spaceship/lib/spaceship/connect_api/client.rb +1 -1
- data/spaceship/lib/spaceship/connect_api/file_uploader.rb +42 -10
- data/spaceship/lib/spaceship/connect_api/models/age_rating_declaration.rb +1 -1
- data/spaceship/lib/spaceship/connect_api/models/app.rb +46 -6
- data/spaceship/lib/spaceship/connect_api/models/app_info.rb +4 -0
- data/spaceship/lib/spaceship/connect_api/models/app_preview.rb +62 -10
- data/spaceship/lib/spaceship/connect_api/models/app_preview_set.rb +2 -2
- data/spaceship/lib/spaceship/connect_api/models/app_review_attachment.rb +18 -28
- data/spaceship/lib/spaceship/connect_api/models/app_screenshot.rb +86 -37
- data/spaceship/lib/spaceship/connect_api/models/app_screenshot_set.rb +32 -2
- data/spaceship/lib/spaceship/connect_api/models/app_store_review_detail.rb +5 -6
- data/spaceship/lib/spaceship/connect_api/models/app_store_version.rb +22 -3
- data/spaceship/lib/spaceship/connect_api/models/user.rb +2 -1
- data/spaceship/lib/spaceship/connect_api/tunes/tunes.rb +41 -13
- data/spaceship/lib/spaceship/connect_api/users/users.rb +13 -0
- 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
|
-
|
68
|
-
UI.
|
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] ||=
|
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] =
|
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.
|
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
|
-
|
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
|
-
|
149
|
-
|
150
|
-
|
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")
|
Binary file
|
Binary file
|
Binary file
|
@@ -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).
|
@@ -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.
|
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. '
|
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
|
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. '
|
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
|
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
|
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
|
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.
|
8966
|
+
// FastlaneRunnerAPIVersion [0.9.72]
|
Binary file
|
@@ -34,7 +34,7 @@ class SocketClient: NSObject {
|
|
34
34
|
}
|
35
35
|
|
36
36
|
static let connectTimeoutSeconds = 2
|
37
|
-
static let defaultCommandTimeoutSeconds =
|
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
|
-
|
244
|
-
|
245
|
-
|
246
|
-
|
247
|
-
|
248
|
-
|
249
|
-
|
250
|
-
|
251
|
-
|
252
|
-
|
253
|
-
|
254
|
-
|
255
|
-
|
256
|
-
|
257
|
-
|
258
|
-
|
259
|
-
|
260
|
-
|
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
|
-
|
266
|
-
|
267
|
-
|
268
|
-
|
269
|
-
|
270
|
-
|
271
|
-
|
272
|
-
|
273
|
-
|
274
|
-
'
|
275
|
-
|
276
|
-
|
277
|
-
|
278
|
-
|
279
|
-
|
280
|
-
|
281
|
-
|
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
|
-
|
287
|
-
|
288
|
-
|
289
|
-
|
290
|
-
|
291
|
-
|
292
|
-
|
293
|
-
|
294
|
-
|
295
|
-
|
296
|
-
|
297
|
-
|
298
|
-
|
299
|
-
|
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
|