fastlane 2.150.0.rc7 → 2.150.0

Sign up to get free protection for your applications and to get access to all the features.
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: