fastlane 2.150.0.rc7 → 2.150.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 34e85dcd86b90ee3b9187bc8417630a13c81188999870ddcc856dda2e11d2a7b
4
- data.tar.gz: a3f719e25bfaac439e8a5052e68b16d63f94e2c2e2cf66ad5411b55970eb7f34
3
+ metadata.gz: 8487fa83f02a3dc9dc73920e47fa8c8652d8870c1c591d644ee2138446d41b7d
4
+ data.tar.gz: 158f51047d36d16716f02af2f790c89f4015e50a28a404ec8122a98eacf4f83b
5
5
  SHA512:
6
- metadata.gz: 0b769c9010489fab0525f1966896b3563e97877d2fa562d26614d3732a9f8a9e8cd08dc340043c094e9761892ff1c7aa469a09ff47744458a57f9d053cc06a3c
7
- data.tar.gz: 5c4165e619e55db0c588a2298d5242103a35b7d785f04d3458f2cd5b73d3c7184e550096791244d15ec4c75541447e2850bbefeb51e4041dfd36d87e656309df
6
+ metadata.gz: 482164ad088f8bc85cbbb31446a0e766c597d7fc50f5cd9d98888f176d15fcbdeaf16d0a54ca92cf72a73d55bcef6bdcc98a2a8c07b303430b374546d0f77225
7
+ data.tar.gz: 54fa6088bc3373a0d936999022b54050fbd1f82bab8cd6dce45e0403dee4a213d2f5d7f950f5bcaa83599e1dc24668e1d156ab213be15bd2904a1340b45ebea5
data/README.md CHANGED
@@ -34,35 +34,35 @@ If the above doesn't help, please [submit an issue](https://github.com/fastlane/
34
34
  <!-- This table is regenerated and resorted on each release -->
35
35
  <table id='team'>
36
36
  <tr>
37
- <td id='iulian-onofrei'>
38
- <a href='https://github.com/revolter'>
39
- <img src='https://github.com/revolter.png?size=140'>
40
- </a>
41
- <h4 align='center'><a href='https://twitter.com/Revolt666'>Iulian Onofrei</a></h4>
42
- </td>
43
- <td id='stefan-natchev'>
44
- <a href='https://github.com/snatchev'>
45
- <img src='https://github.com/snatchev.png?size=140'>
46
- </a>
47
- <h4 align='center'><a href='https://twitter.com/snatchev'>Stefan Natchev</a></h4>
48
- </td>
49
37
  <td id='joshua-liebowitz'>
50
38
  <a href='https://github.com/taquitos'>
51
39
  <img src='https://github.com/taquitos.png?size=140'>
52
40
  </a>
53
41
  <h4 align='center'><a href='https://twitter.com/taquitos'>Joshua Liebowitz</a></h4>
54
42
  </td>
43
+ <td id='matthew-ellis'>
44
+ <a href='https://github.com/matthewellis'>
45
+ <img src='https://github.com/matthewellis.png?size=140'>
46
+ </a>
47
+ <h4 align='center'><a href='https://twitter.com/mellis1995'>Matthew Ellis</a></h4>
48
+ </td>
55
49
  <td id='helmut-januschka'>
56
50
  <a href='https://github.com/hjanuschka'>
57
51
  <img src='https://github.com/hjanuschka.png?size=140'>
58
52
  </a>
59
53
  <h4 align='center'><a href='https://twitter.com/hjanuschka'>Helmut Januschka</a></h4>
60
54
  </td>
61
- <td id='jorge-revuelta-h'>
62
- <a href='https://github.com/minuscorp'>
63
- <img src='https://github.com/minuscorp.png?size=140'>
55
+ <td id='josh-holtz'>
56
+ <a href='https://github.com/joshdholtz'>
57
+ <img src='https://github.com/joshdholtz.png?size=140'>
64
58
  </a>
65
- <h4 align='center'><a href='https://twitter.com/minuscorp'>Jorge Revuelta H</a></h4>
59
+ <h4 align='center'><a href='https://twitter.com/joshdholtz'>Josh Holtz</a></h4>
60
+ </td>
61
+ <td id='max-ott'>
62
+ <a href='https://github.com/max-ott'>
63
+ <img src='https://github.com/max-ott.png?size=140'>
64
+ </a>
65
+ <h4 align='center'><a href='https://twitter.com/ott_max'>Max Ott</a></h4>
66
66
  </td>
67
67
  </tr>
68
68
  <tr>
@@ -72,55 +72,23 @@ If the above doesn't help, please [submit an issue](https://github.com/fastlane/
72
72
  </a>
73
73
  <h4 align='center'><a href='https://twitter.com/lmirosevic'>Luka Mirosevic</a></h4>
74
74
  </td>
75
- <td id='danielle-tomlinson'>
76
- <a href='https://github.com/endocrimes'>
77
- <img src='https://github.com/endocrimes.png?size=140'>
78
- </a>
79
- <h4 align='center'><a href='https://twitter.com/endocrimes'>Danielle Tomlinson</a></h4>
80
- </td>
81
- <td id='jan-piotrowski'>
82
- <a href='https://github.com/janpio'>
83
- <img src='https://github.com/janpio.png?size=140'>
84
- </a>
85
- <h4 align='center'><a href='https://twitter.com/Sujan'>Jan Piotrowski</a></h4>
86
- </td>
87
- <td id='aaron-brager'>
88
- <a href='https://github.com/getaaron'>
89
- <img src='https://github.com/getaaron.png?size=140'>
90
- </a>
91
- <h4 align='center'><a href='https://twitter.com/getaaron'>Aaron Brager</a></h4>
92
- </td>
93
- <td id='olivier-halligon'>
94
- <a href='https://github.com/AliSoftware'>
95
- <img src='https://github.com/AliSoftware.png?size=140'>
75
+ <td id='iulian-onofrei'>
76
+ <a href='https://github.com/revolter'>
77
+ <img src='https://github.com/revolter.png?size=140'>
96
78
  </a>
97
- <h4 align='center'><a href='https://twitter.com/aligatr'>Olivier Halligon</a></h4>
79
+ <h4 align='center'><a href='https://twitter.com/Revolt666'>Iulian Onofrei</a></h4>
98
80
  </td>
99
- </tr>
100
- <tr>
101
81
  <td id='jimmy-dee'>
102
82
  <a href='https://github.com/jdee'>
103
83
  <img src='https://github.com/jdee.png?size=140'>
104
84
  </a>
105
85
  <h4 align='center'>Jimmy Dee</h4>
106
86
  </td>
107
- <td id='daniel-jankowski'>
108
- <a href='https://github.com/mollyIV'>
109
- <img src='https://github.com/mollyIV.png?size=140'>
110
- </a>
111
- <h4 align='center'><a href='https://twitter.com/mollyIV'>Daniel Jankowski</a></h4>
112
- </td>
113
- <td id='felix-krause'>
114
- <a href='https://github.com/KrauseFx'>
115
- <img src='https://github.com/KrauseFx.png?size=140'>
116
- </a>
117
- <h4 align='center'><a href='https://twitter.com/KrauseFx'>Felix Krause</a></h4>
118
- </td>
119
- <td id='matthew-ellis'>
120
- <a href='https://github.com/matthewellis'>
121
- <img src='https://github.com/matthewellis.png?size=140'>
87
+ <td id='jérôme-lacoste'>
88
+ <a href='https://github.com/lacostej'>
89
+ <img src='https://github.com/lacostej.png?size=140'>
122
90
  </a>
123
- <h4 align='center'><a href='https://twitter.com/mellis1995'>Matthew Ellis</a></h4>
91
+ <h4 align='center'><a href='https://twitter.com/lacostej'>Jérôme Lacoste</a></h4>
124
92
  </td>
125
93
  <td id='manu-wallner'>
126
94
  <a href='https://github.com/milch'>
@@ -130,50 +98,82 @@ If the above doesn't help, please [submit an issue](https://github.com/fastlane/
130
98
  </td>
131
99
  </tr>
132
100
  <tr>
133
- <td id='andrew-mcburney'>
134
- <a href='https://github.com/armcburney'>
135
- <img src='https://github.com/armcburney.png?size=140'>
101
+ <td id='felix-krause'>
102
+ <a href='https://github.com/KrauseFx'>
103
+ <img src='https://github.com/KrauseFx.png?size=140'>
136
104
  </a>
137
- <h4 align='center'><a href='https://twitter.com/armcburney'>Andrew McBurney</a></h4>
105
+ <h4 align='center'><a href='https://twitter.com/KrauseFx'>Felix Krause</a></h4>
138
106
  </td>
139
- <td id='jérôme-lacoste'>
140
- <a href='https://github.com/lacostej'>
141
- <img src='https://github.com/lacostej.png?size=140'>
107
+ <td id='jan-piotrowski'>
108
+ <a href='https://github.com/janpio'>
109
+ <img src='https://github.com/janpio.png?size=140'>
142
110
  </a>
143
- <h4 align='center'><a href='https://twitter.com/lacostej'>Jérôme Lacoste</a></h4>
111
+ <h4 align='center'><a href='https://twitter.com/Sujan'>Jan Piotrowski</a></h4>
144
112
  </td>
145
- <td id='max-ott'>
146
- <a href='https://github.com/max-ott'>
147
- <img src='https://github.com/max-ott.png?size=140'>
113
+ <td id='stefan-natchev'>
114
+ <a href='https://github.com/snatchev'>
115
+ <img src='https://github.com/snatchev.png?size=140'>
148
116
  </a>
149
- <h4 align='center'><a href='https://twitter.com/ott_max'>Max Ott</a></h4>
117
+ <h4 align='center'><a href='https://twitter.com/snatchev'>Stefan Natchev</a></h4>
150
118
  </td>
151
- <td id='josh-holtz'>
152
- <a href='https://github.com/joshdholtz'>
153
- <img src='https://github.com/joshdholtz.png?size=140'>
119
+ <td id='olivier-halligon'>
120
+ <a href='https://github.com/AliSoftware'>
121
+ <img src='https://github.com/AliSoftware.png?size=140'>
154
122
  </a>
155
- <h4 align='center'><a href='https://twitter.com/joshdholtz'>Josh Holtz</a></h4>
123
+ <h4 align='center'><a href='https://twitter.com/aligatr'>Olivier Halligon</a></h4>
156
124
  </td>
157
- <td id='fumiya-nakamura'>
158
- <a href='https://github.com/nafu'>
159
- <img src='https://github.com/nafu.png?size=140'>
125
+ <td id='danielle-tomlinson'>
126
+ <a href='https://github.com/endocrimes'>
127
+ <img src='https://github.com/endocrimes.png?size=140'>
160
128
  </a>
161
- <h4 align='center'><a href='https://twitter.com/nafu003'>Fumiya Nakamura</a></h4>
129
+ <h4 align='center'><a href='https://twitter.com/endocrimes'>Danielle Tomlinson</a></h4>
162
130
  </td>
163
131
  </tr>
164
132
  <tr>
133
+ <td id='aaron-brager'>
134
+ <a href='https://github.com/getaaron'>
135
+ <img src='https://github.com/getaaron.png?size=140'>
136
+ </a>
137
+ <h4 align='center'><a href='https://twitter.com/getaaron'>Aaron Brager</a></h4>
138
+ </td>
139
+ <td id='jorge-revuelta-h'>
140
+ <a href='https://github.com/minuscorp'>
141
+ <img src='https://github.com/minuscorp.png?size=140'>
142
+ </a>
143
+ <h4 align='center'><a href='https://twitter.com/minuscorp'>Jorge Revuelta H</a></h4>
144
+ </td>
165
145
  <td id='maksym-grebenets'>
166
146
  <a href='https://github.com/mgrebenets'>
167
147
  <img src='https://github.com/mgrebenets.png?size=140'>
168
148
  </a>
169
149
  <h4 align='center'><a href='https://twitter.com/mgrebenets'>Maksym Grebenets</a></h4>
170
150
  </td>
151
+ <td id='fumiya-nakamura'>
152
+ <a href='https://github.com/nafu'>
153
+ <img src='https://github.com/nafu.png?size=140'>
154
+ </a>
155
+ <h4 align='center'><a href='https://twitter.com/nafu003'>Fumiya Nakamura</a></h4>
156
+ </td>
157
+ <td id='andrew-mcburney'>
158
+ <a href='https://github.com/armcburney'>
159
+ <img src='https://github.com/armcburney.png?size=140'>
160
+ </a>
161
+ <h4 align='center'><a href='https://twitter.com/armcburney'>Andrew McBurney</a></h4>
162
+ </td>
163
+ </tr>
164
+ <tr>
171
165
  <td id='kohki-miki'>
172
166
  <a href='https://github.com/giginet'>
173
167
  <img src='https://github.com/giginet.png?size=140'>
174
168
  </a>
175
169
  <h4 align='center'><a href='https://twitter.com/giginet'>Kohki Miki</a></h4>
176
170
  </td>
171
+ <td id='daniel-jankowski'>
172
+ <a href='https://github.com/mollyIV'>
173
+ <img src='https://github.com/mollyIV.png?size=140'>
174
+ </a>
175
+ <h4 align='center'><a href='https://twitter.com/mollyIV'>Daniel Jankowski</a></h4>
176
+ </td>
177
177
  </table>
178
178
 
179
179
  Special thanks to all [contributors](https://github.com/fastlane/fastlane/graphs/contributors) for extending and improving _fastlane_.
@@ -32,13 +32,13 @@ module Deliver
32
32
  screenshot_sets = localization.get_app_screenshot_sets
33
33
  screenshot_sets.each do |screenshot_set|
34
34
  screenshot_set.app_screenshots.each_with_index do |screenshot, index|
35
- url = screenshot.image_asset_url
36
- next if url.nil?
37
-
38
35
  file_name = [index, screenshot_set.screenshot_display_type, index].join("_")
39
- original_file_extension = File.basename(screenshot.file_name)
36
+ original_file_extension = File.extname(screenshot.file_name).strip.downcase[1..-1]
40
37
  file_name += "." + original_file_extension
41
38
 
39
+ url = screenshot.image_asset_url(type: original_file_extension)
40
+ next if url.nil?
41
+
42
42
  language = localization.locale
43
43
 
44
44
  UI.message("Downloading existing screenshot '#{file_name}' for language '#{language}'")
@@ -80,8 +80,10 @@ module Deliver
80
80
 
81
81
  platform = Spaceship::ConnectAPI::Platform.map(options[:platform])
82
82
 
83
- app_store_version_localizations = verify_available_version_languages!(options, app) unless options[:edit_live]
84
- app_info_localizations = verify_available_info_languages!(options, app) unless options[:edit_live]
83
+ enabled_languages = detect_languages(options)
84
+
85
+ app_store_version_localizations = verify_available_version_languages!(options, app, enabled_languages) unless options[:edit_live]
86
+ app_info_localizations = verify_available_info_languages!(options, app, enabled_languages) unless options[:edit_live]
85
87
 
86
88
  if options[:edit_live]
87
89
  # not all values are editable when using live_version
@@ -405,7 +407,7 @@ module Deliver
405
407
  end
406
408
 
407
409
  # Finding languages to enable
408
- def verify_available_info_languages!(options, app)
410
+ def verify_available_info_languages!(options, app, languages)
409
411
  app_info = app.fetch_edit_app_info
410
412
 
411
413
  unless app_info
@@ -415,7 +417,7 @@ module Deliver
415
417
 
416
418
  localizations = app_info.get_app_info_localizations
417
419
 
418
- languages = (options[:languages] || []).reject { |lang| lang == "default" }
420
+ languages = (languages || []).reject { |lang| lang == "default" }
419
421
  locales_to_enable = languages - localizations.map(&:locale)
420
422
 
421
423
  if locales_to_enable.count > 0
@@ -439,7 +441,7 @@ module Deliver
439
441
  end
440
442
 
441
443
  # Finding languages to enable
442
- def verify_available_version_languages!(options, app)
444
+ def verify_available_version_languages!(options, app, languages)
443
445
  platform = Spaceship::ConnectAPI::Platform.map(options[:platform])
444
446
  version = app.get_edit_app_store_version(platform: platform)
445
447
 
@@ -450,7 +452,7 @@ module Deliver
450
452
 
451
453
  localizations = version.get_app_store_version_localizations
452
454
 
453
- languages = (options[:languages] || []).reject { |lang| lang == "default" }
455
+ languages = (languages || []).reject { |lang| lang == "default" }
454
456
  locales_to_enable = languages - localizations.map(&:locale)
455
457
 
456
458
  if locales_to_enable.count > 0
@@ -548,7 +550,8 @@ module Deliver
548
550
  UI.message("Uploading app review information to App Store Connect")
549
551
  app_store_review_detail = begin
550
552
  version.fetch_app_store_review_detail
551
- rescue
553
+ rescue => error
554
+ UI.error("Error fetching app store review detail - #{error.message}")
552
555
  nil
553
556
  end # errors if doesn't exist
554
557
  if app_store_review_detail
@@ -560,7 +563,7 @@ module Deliver
560
563
 
561
564
  def set_review_attachment_file(version, options)
562
565
  app_store_review_detail = version.fetch_app_store_review_detail
563
- app_review_attachments = app_store_review_detail.fetch_app_review_attachments
566
+ app_review_attachments = app_store_review_detail.app_store_review_attachments || []
564
567
 
565
568
  if options[:app_review_attachment_file]
566
569
  app_review_attachments.each do |app_review_attachment|
@@ -65,8 +65,8 @@ module Deliver
65
65
  end
66
66
 
67
67
  # Crash if any errors happen while deleting
68
- unless errors.empty?
69
- UI.crash!(errors.map(&:message).join("\n"))
68
+ errors.each do |error|
69
+ UI.error(error.message)
70
70
  end
71
71
  end
72
72
  end
@@ -92,14 +92,27 @@ module Deliver
92
92
  localizations = version.get_app_store_version_localizations
93
93
  end
94
94
 
95
- upload_screenshots(screenshots_per_language, localizations)
95
+ upload_screenshots(screenshots_per_language, localizations, options)
96
96
  end
97
97
 
98
- def upload_screenshots(screenshots_per_language, localizations)
98
+ def upload_screenshots(screenshots_per_language, localizations, options)
99
99
  # Check if should wait for processing
100
- wait_for_processing = !FastlaneCore::Env.truthy?("DELIVER_SKIP_WAIT_FOR_SCREENSHOT_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
+
101
110
  if wait_for_processing
102
- UI.important("Set environment variable DELIVER_SKIP_WAIT_FOR_SCREENSHOT_PROCESSING=true to skip waiting for screenshots to process")
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")
103
116
  end
104
117
 
105
118
  # Upload screenshots
@@ -1,5 +1,5 @@
1
1
  module Fastlane
2
- VERSION = '2.150.0.rc7'.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() {
@@ -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
@@ -113,7 +113,7 @@ module FastlaneCore
113
113
  else
114
114
  # `security` only works on Mac, fallback to `openssl`
115
115
  # via https://stackoverflow.com/a/14379814/252627
116
- decoded = `openssl smime -inform der -verify -noverify -in #{path} 2> #{err}`
116
+ decoded = `openssl smime -inform der -verify -noverify -in #{path.shellescape} 2> #{err}`
117
117
  end
118
118
  UI.error("Failure to decode #{path}. Exit: #{$?.exitstatus}: #{File.read(err)}") if $?.exitstatus != 0
119
119
  decoded
@@ -120,6 +120,12 @@ module Spaceship
120
120
  def upload_screenshot(path: nil, wait_for_processing: true)
121
121
  return Spaceship::ConnectAPI::AppScreenshot.create(app_screenshot_set_id: id, path: path, wait_for_processing: wait_for_processing)
122
122
  end
123
+
124
+ def reorder_screenshots(app_screenshot_ids: nil)
125
+ Spaceship::ConnectAPI.patch_app_screenshot_set_screenshots(app_screenshot_set_id: id, app_screenshot_ids: app_screenshot_ids)
126
+
127
+ return Spaceship::ConnectAPI.get_app_screenshot_set(app_screenshot_set_id: id, includes: "appScreenshots").first
128
+ end
123
129
  end
124
130
  end
125
131
  end
@@ -15,6 +15,8 @@ module Spaceship
15
15
  attr_accessor :demo_account_required
16
16
  attr_accessor :notes
17
17
 
18
+ attr_accessor :app_store_review_attachments
19
+
18
20
  attr_mapping({
19
21
  "contactFirstName" => "contact_first_name",
20
22
  "contactLastName" => "contact_last_name",
@@ -23,7 +25,9 @@ module Spaceship
23
25
  "demoAccountName" => "demo_account_name",
24
26
  "demoAccountPassword" => "demo_account_password",
25
27
  "demoAccountRequired" => "demo_account_required",
26
- "notes" => "notes"
28
+ "notes" => "notes",
29
+
30
+ "appStoreReviewAttachments" => "app_store_review_attachments"
27
31
  })
28
32
 
29
33
  def self.type
@@ -34,11 +38,6 @@ module Spaceship
34
38
  # API
35
39
  #
36
40
 
37
- def fetch_app_review_attachments
38
- resp = Spaceship::ConnectAPI.get_app_review_attachments(app_store_review_detail_id: id)
39
- return resp.to_models
40
- end
41
-
42
41
  def update(attributes: nil)
43
42
  return Spaceship::ConnectAPI.patch_app_store_review_detail(app_store_review_detail_id: id, attributes: attributes)
44
43
  end
@@ -122,8 +122,8 @@ module Spaceship
122
122
  return resp.to_models.first
123
123
  end
124
124
 
125
- def fetch_app_store_review_detail
126
- resp = Spaceship::ConnectAPI.get_app_store_review_detail(app_store_version_id: id)
125
+ def fetch_app_store_review_detail(includes: "appStoreReviewAttachments")
126
+ resp = Spaceship::ConnectAPI.get_app_store_review_detail(app_store_version_id: id, includes: includes)
127
127
  return resp.to_models.first
128
128
  end
129
129
 
@@ -273,11 +273,6 @@ module Spaceship
273
273
  # appReviewAttachments
274
274
  #
275
275
 
276
- def get_app_review_attachments(app_store_review_detail_id: nil, filter: {}, includes: nil, limit: nil, sort: nil)
277
- params = Client.instance.build_params(filter: filter, includes: includes, limit: limit, sort: sort)
278
- Client.instance.get("appStoreReviewDetails/#{app_store_review_detail_id}/appReviewAttachments", params)
279
- end
280
-
281
276
  def post_app_review_attachment(app_store_review_detail_id: nil, attributes: {})
282
277
  body = {
283
278
  data: {
@@ -323,6 +318,11 @@ module Spaceship
323
318
  Client.instance.get("appScreenshotSets", params)
324
319
  end
325
320
 
321
+ def get_app_screenshot_set(app_screenshot_set_id: nil, filter: {}, includes: nil, limit: nil, sort: nil)
322
+ params = Client.instance.build_params(filter: filter, includes: includes, limit: limit, sort: sort)
323
+ Client.instance.get("appScreenshotSets/#{app_screenshot_set_id}", params)
324
+ end
325
+
326
326
  def post_app_screenshot_set(app_store_version_localization_id: nil, attributes: {})
327
327
  body = {
328
328
  data: {
@@ -342,6 +342,21 @@ module Spaceship
342
342
  Client.instance.post("appScreenshotSets", body)
343
343
  end
344
344
 
345
+ def patch_app_screenshot_set_screenshots(app_screenshot_set_id: nil, app_screenshot_ids: nil)
346
+ app_screenshot_ids ||= []
347
+
348
+ body = {
349
+ data: app_screenshot_ids.map do |app_screenshot_id|
350
+ {
351
+ type: "appScreenshots",
352
+ id: app_screenshot_id
353
+ }
354
+ end
355
+ }
356
+
357
+ Client.instance.patch("appScreenshotSets/#{app_screenshot_set_id}/relationships/appScreenshots", body)
358
+ end
359
+
345
360
  #
346
361
  # appScreenshots
347
362
  #
metadata CHANGED
@@ -1,31 +1,31 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: fastlane
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.150.0.rc7
4
+ version: 2.150.0
5
5
  platform: ruby
6
6
  authors:
7
- - Manu Wallner
8
- - Danielle Tomlinson
9
- - Matthew Ellis
10
- - Stefan Natchev
11
- - Jimmy Dee
12
- - Kohki Miki
13
- - Jorge Revuelta H
14
- - Daniel Jankowski
15
- - Jérôme Lacoste
16
7
  - Andrew McBurney
17
- - Max Ott
18
- - Iulian Onofrei
19
- - Helmut Januschka
8
+ - Jimmy Dee
9
+ - Matthew Ellis
20
10
  - Jan Piotrowski
21
- - Luka Mirosevic
22
- - Felix Krause
23
- - Fumiya Nakamura
24
- - Olivier Halligon
25
- - Maksym Grebenets
26
11
  - Aaron Brager
12
+ - Helmut Januschka
27
13
  - Josh Holtz
14
+ - Daniel Jankowski
15
+ - Manu Wallner
16
+ - Kohki Miki
17
+ - Luka Mirosevic
18
+ - Max Ott
19
+ - Jorge Revuelta H
20
+ - Danielle Tomlinson
21
+ - Stefan Natchev
22
+ - Fumiya Nakamura
23
+ - Iulian Onofrei
28
24
  - Joshua Liebowitz
25
+ - Jérôme Lacoste
26
+ - Maksym Grebenets
27
+ - Olivier Halligon
28
+ - Felix Krause
29
29
  autorequire:
30
30
  bindir: bin
31
31
  cert_chain: []
@@ -495,20 +495,20 @@ dependencies:
495
495
  requirements:
496
496
  - - ">="
497
497
  - !ruby/object:Gem::Version
498
- version: 1.3.0
498
+ version: 2.0.0
499
499
  - - "<"
500
500
  - !ruby/object:Gem::Version
501
- version: 2.0.0
501
+ version: 3.0.0
502
502
  type: :runtime
503
503
  prerelease: false
504
504
  version_requirements: !ruby/object:Gem::Requirement
505
505
  requirements:
506
506
  - - ">="
507
507
  - !ruby/object:Gem::Version
508
- version: 1.3.0
508
+ version: 2.0.0
509
509
  - - "<"
510
510
  - !ruby/object:Gem::Version
511
- version: 2.0.0
511
+ version: 3.0.0
512
512
  - !ruby/object:Gem::Dependency
513
513
  name: security
514
514
  requirement: !ruby/object:Gem::Requirement
@@ -654,7 +654,7 @@ dependencies:
654
654
  version: '0.1'
655
655
  - - "<"
656
656
  - !ruby/object:Gem::Version
657
- version: '2.0'
657
+ version: '4.0'
658
658
  type: :runtime
659
659
  prerelease: false
660
660
  version_requirements: !ruby/object:Gem::Requirement
@@ -664,7 +664,7 @@ dependencies:
664
664
  version: '0.1'
665
665
  - - "<"
666
666
  - !ruby/object:Gem::Version
667
- version: '2.0'
667
+ version: '4.0'
668
668
  - !ruby/object:Gem::Dependency
669
669
  name: aws-sdk-s3
670
670
  requirement: !ruby/object:Gem::Requirement
@@ -1842,9 +1842,9 @@ required_ruby_version: !ruby/object:Gem::Requirement
1842
1842
  version: '2.4'
1843
1843
  required_rubygems_version: !ruby/object:Gem::Requirement
1844
1844
  requirements:
1845
- - - ">"
1845
+ - - ">="
1846
1846
  - !ruby/object:Gem::Version
1847
- version: 1.3.1
1847
+ version: '0'
1848
1848
  requirements: []
1849
1849
  rubygems_version: 3.0.3
1850
1850
  signing_key: