fastlane 2.182.0 → 2.183.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.
Files changed (43) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +82 -82
  3. data/deliver/lib/assets/summary.html.erb +10 -10
  4. data/deliver/lib/deliver/submit_for_review.rb +3 -3
  5. data/deliver/lib/deliver/upload_metadata.rb +1 -1
  6. data/fastlane/lib/fastlane/actions/danger.rb +7 -1
  7. data/fastlane/lib/fastlane/actions/get_managed_play_store_publishing_rights.rb +3 -1
  8. data/fastlane/lib/fastlane/actions/git_pull.rb +4 -10
  9. data/fastlane/lib/fastlane/actions/hipchat.rb +2 -1
  10. data/fastlane/lib/fastlane/actions/notification.rb +1 -1
  11. data/fastlane/lib/fastlane/actions/xcodebuild.rb +5 -5
  12. data/fastlane/lib/fastlane/plugins/template/%gem_name%.gemspec.erb +1 -1
  13. data/fastlane/lib/fastlane/plugins/template/.rubocop.yml +1 -1
  14. data/fastlane/lib/fastlane/version.rb +1 -1
  15. data/fastlane/swift/Deliverfile.swift +1 -1
  16. data/fastlane/swift/DeliverfileProtocol.swift +1 -1
  17. data/fastlane/swift/Fastlane.swift +13 -9
  18. data/fastlane/swift/Gymfile.swift +1 -1
  19. data/fastlane/swift/GymfileProtocol.swift +1 -1
  20. data/fastlane/swift/Matchfile.swift +1 -1
  21. data/fastlane/swift/MatchfileProtocol.swift +1 -1
  22. data/fastlane/swift/Precheckfile.swift +1 -1
  23. data/fastlane/swift/PrecheckfileProtocol.swift +1 -1
  24. data/fastlane/swift/Scanfile.swift +1 -1
  25. data/fastlane/swift/ScanfileProtocol.swift +1 -1
  26. data/fastlane/swift/Screengrabfile.swift +1 -1
  27. data/fastlane/swift/ScreengrabfileProtocol.swift +1 -1
  28. data/fastlane/swift/Snapshotfile.swift +1 -1
  29. data/fastlane/swift/SnapshotfileProtocol.swift +1 -1
  30. data/fastlane/swift/formatting/Brewfile.lock.json +11 -11
  31. data/fastlane_core/lib/fastlane_core/build_watcher.rb +15 -2
  32. data/fastlane_core/lib/fastlane_core/device_manager.rb +1 -1
  33. data/fastlane_core/lib/fastlane_core/ui/implementations/shell.rb +4 -1
  34. data/frameit/lib/frameit/config_parser.rb +2 -2
  35. data/frameit/lib/frameit/frame_downloader.rb +2 -1
  36. data/gym/lib/gym/code_signing_mapping.rb +2 -2
  37. data/gym/lib/gym/generators/package_command_generator_xcode7.rb +6 -5
  38. data/pilot/lib/pilot/build_manager.rb +3 -3
  39. data/scan/lib/scan/runner.rb +1 -1
  40. data/spaceship/README.md +2 -2
  41. data/spaceship/lib/spaceship/connect_api/model.rb +1 -1
  42. data/spaceship/lib/spaceship/connect_api/models/.app.rb.swp +0 -0
  43. metadata +44 -41
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: a070315dda69108ca90681daef2a7faf462b82dbad765141469131cb851599e8
4
- data.tar.gz: 1022b14bee49abce8a9b30bbdaa1b20a294ced05cc41fb8760a02d4c0f8f18e7
3
+ metadata.gz: f6eb7cf4626f2d80b3e2e9d1babae5ed8518aba5ef23d4a73ba5360b8f8737c0
4
+ data.tar.gz: 328282bf768094d61b5224a888acb68fbe5a6a56d47e33c39df22d11652ab8ae
5
5
  SHA512:
6
- metadata.gz: e58537c12bc248c3f7e657e0e40a3ca7976581902d73ce6618b5378b77d7cf6c98ca8c8007714b5d7a752be868f04f916ff81dba31e1647d82b56608b088e2de
7
- data.tar.gz: b81b9773dda36d9db4423d19d94782e8c32d32b5bd4bab4a53dd06f9f4acc4b5c0e1cb2933fc4dd8d5d564e6e2d744bdd26906dd5366be6d89ce16cf4df101d6
6
+ metadata.gz: 896193a32f695ef2553dbd729afaaf11b183ba31cdab590c3a8b2f02a99aa47c9ddb30c0332e26361a8cfd30460957e50b9b5a2347ab7dabcbb8eacc48dfdfba
7
+ data.tar.gz: d741cff12645e1afd755f75102bffbde8374f92248ba15e30f7f33334226b2ac26d79c33cc0b3c1982d3850dc9c1c7f3814b74c75466bac4f6a2d05b8bf7c0fb
data/README.md CHANGED
@@ -35,17 +35,17 @@ If the above doesn't help, please [submit an issue](https://github.com/fastlane/
35
35
  <!-- This table is regenerated and resorted on each release -->
36
36
  <table id='team'>
37
37
  <tr>
38
- <td id='daniel-jankowski'>
39
- <a href='https://github.com/mollyIV'>
40
- <img src='https://github.com/mollyIV.png?size=140'>
38
+ <td id='joshua-liebowitz'>
39
+ <a href='https://github.com/taquitos'>
40
+ <img src='https://github.com/taquitos.png?size=140'>
41
41
  </a>
42
- <h4 align='center'><a href='https://twitter.com/mollyIV'>Daniel Jankowski</a></h4>
42
+ <h4 align='center'><a href='https://twitter.com/taquitos'>Joshua Liebowitz</a></h4>
43
43
  </td>
44
- <td id='danielle-tomlinson'>
45
- <a href='https://github.com/endocrimes'>
46
- <img src='https://github.com/endocrimes.png?size=140'>
44
+ <td id='luka-mirosevic'>
45
+ <a href='https://github.com/lmirosevic'>
46
+ <img src='https://github.com/lmirosevic.png?size=140'>
47
47
  </a>
48
- <h4 align='center'><a href='https://twitter.com/endocrimes'>Danielle Tomlinson</a></h4>
48
+ <h4 align='center'><a href='https://twitter.com/lmirosevic'>Luka Mirosevic</a></h4>
49
49
  </td>
50
50
  <td id='iulian-onofrei'>
51
51
  <a href='https://github.com/revolter'>
@@ -53,75 +53,69 @@ If the above doesn't help, please [submit an issue](https://github.com/fastlane/
53
53
  </a>
54
54
  <h4 align='center'><a href='https://twitter.com/Revolt666'>Iulian Onofrei</a></h4>
55
55
  </td>
56
- <td id='satoshi-namai'>
57
- <a href='https://github.com/ainame'>
58
- <img src='https://github.com/ainame.png?size=140'>
56
+ <td id='maksym-grebenets'>
57
+ <a href='https://github.com/mgrebenets'>
58
+ <img src='https://github.com/mgrebenets.png?size=140'>
59
59
  </a>
60
- <h4 align='center'><a href='https://twitter.com/ainame'>Satoshi Namai</a></h4>
60
+ <h4 align='center'><a href='https://twitter.com/mgrebenets'>Maksym Grebenets</a></h4>
61
61
  </td>
62
- <td id='felix-krause'>
63
- <a href='https://github.com/KrauseFx'>
64
- <img src='https://github.com/KrauseFx.png?size=140'>
62
+ <td id='jorge-revuelta-h'>
63
+ <a href='https://github.com/minuscorp'>
64
+ <img src='https://github.com/minuscorp.png?size=140'>
65
65
  </a>
66
- <h4 align='center'><a href='https://twitter.com/KrauseFx'>Felix Krause</a></h4>
66
+ <h4 align='center'><a href='https://twitter.com/minuscorp'>Jorge Revuelta H</a></h4>
67
67
  </td>
68
68
  </tr>
69
69
  <tr>
70
- <td id='jimmy-dee'>
71
- <a href='https://github.com/jdee'>
72
- <img src='https://github.com/jdee.png?size=140'>
70
+ <td id='danielle-tomlinson'>
71
+ <a href='https://github.com/endocrimes'>
72
+ <img src='https://github.com/endocrimes.png?size=140'>
73
73
  </a>
74
- <h4 align='center'>Jimmy Dee</h4>
74
+ <h4 align='center'><a href='https://twitter.com/endocrimes'>Danielle Tomlinson</a></h4>
75
75
  </td>
76
- <td id='manu-wallner'>
77
- <a href='https://github.com/milch'>
78
- <img src='https://github.com/milch.png?size=140'>
76
+ <td id='josh-holtz'>
77
+ <a href='https://github.com/joshdholtz'>
78
+ <img src='https://github.com/joshdholtz.png?size=140'>
79
79
  </a>
80
- <h4 align='center'><a href='https://twitter.com/acrooow'>Manu Wallner</a></h4>
80
+ <h4 align='center'><a href='https://twitter.com/joshdholtz'>Josh Holtz</a></h4>
81
81
  </td>
82
- <td id='andrew-mcburney'>
83
- <a href='https://github.com/armcburney'>
84
- <img src='https://github.com/armcburney.png?size=140'>
82
+ <td id='jérôme-lacoste'>
83
+ <a href='https://github.com/lacostej'>
84
+ <img src='https://github.com/lacostej.png?size=140'>
85
85
  </a>
86
- <h4 align='center'><a href='https://twitter.com/armcburney'>Andrew McBurney</a></h4>
86
+ <h4 align='center'><a href='https://twitter.com/lacostej'>Jérôme Lacoste</a></h4>
87
87
  </td>
88
- <td id='kohki-miki'>
89
- <a href='https://github.com/giginet'>
90
- <img src='https://github.com/giginet.png?size=140'>
88
+ <td id='max-ott'>
89
+ <a href='https://github.com/max-ott'>
90
+ <img src='https://github.com/max-ott.png?size=140'>
91
91
  </a>
92
- <h4 align='center'><a href='https://twitter.com/giginet'>Kohki Miki</a></h4>
92
+ <h4 align='center'><a href='https://twitter.com/ott_max'>Max Ott</a></h4>
93
93
  </td>
94
- <td id='roger-oba'>
95
- <a href='https://github.com/rogerluan'>
96
- <img src='https://github.com/rogerluan.png?size=140'>
94
+ <td id='jimmy-dee'>
95
+ <a href='https://github.com/jdee'>
96
+ <img src='https://github.com/jdee.png?size=140'>
97
97
  </a>
98
- <h4 align='center'><a href='https://twitter.com/rogerluan_'>Roger Oba</a></h4>
98
+ <h4 align='center'>Jimmy Dee</h4>
99
99
  </td>
100
100
  </tr>
101
101
  <tr>
102
- <td id='jérôme-lacoste'>
103
- <a href='https://github.com/lacostej'>
104
- <img src='https://github.com/lacostej.png?size=140'>
105
- </a>
106
- <h4 align='center'><a href='https://twitter.com/lacostej'>Jérôme Lacoste</a></h4>
107
- </td>
108
- <td id='luka-mirosevic'>
109
- <a href='https://github.com/lmirosevic'>
110
- <img src='https://github.com/lmirosevic.png?size=140'>
102
+ <td id='felix-krause'>
103
+ <a href='https://github.com/KrauseFx'>
104
+ <img src='https://github.com/KrauseFx.png?size=140'>
111
105
  </a>
112
- <h4 align='center'><a href='https://twitter.com/lmirosevic'>Luka Mirosevic</a></h4>
106
+ <h4 align='center'><a href='https://twitter.com/KrauseFx'>Felix Krause</a></h4>
113
107
  </td>
114
- <td id='fumiya-nakamura'>
115
- <a href='https://github.com/nafu'>
116
- <img src='https://github.com/nafu.png?size=140'>
108
+ <td id='satoshi-namai'>
109
+ <a href='https://github.com/ainame'>
110
+ <img src='https://github.com/ainame.png?size=140'>
117
111
  </a>
118
- <h4 align='center'><a href='https://twitter.com/nafu003'>Fumiya Nakamura</a></h4>
112
+ <h4 align='center'><a href='https://twitter.com/ainame'>Satoshi Namai</a></h4>
119
113
  </td>
120
- <td id='aaron-brager'>
121
- <a href='https://github.com/getaaron'>
122
- <img src='https://github.com/getaaron.png?size=140'>
114
+ <td id='stefan-natchev'>
115
+ <a href='https://github.com/snatchev'>
116
+ <img src='https://github.com/snatchev.png?size=140'>
123
117
  </a>
124
- <h4 align='center'><a href='https://twitter.com/getaaron'>Aaron Brager</a></h4>
118
+ <h4 align='center'><a href='https://twitter.com/snatchev'>Stefan Natchev</a></h4>
125
119
  </td>
126
120
  <td id='matthew-ellis'>
127
121
  <a href='https://github.com/matthewellis'>
@@ -129,63 +123,69 @@ If the above doesn't help, please [submit an issue](https://github.com/fastlane/
129
123
  </a>
130
124
  <h4 align='center'><a href='https://twitter.com/mellis1995'>Matthew Ellis</a></h4>
131
125
  </td>
132
- </tr>
133
- <tr>
134
126
  <td id='jan-piotrowski'>
135
127
  <a href='https://github.com/janpio'>
136
128
  <img src='https://github.com/janpio.png?size=140'>
137
129
  </a>
138
130
  <h4 align='center'><a href='https://twitter.com/Sujan'>Jan Piotrowski</a></h4>
139
131
  </td>
140
- <td id='josh-holtz'>
141
- <a href='https://github.com/joshdholtz'>
142
- <img src='https://github.com/joshdholtz.png?size=140'>
132
+ </tr>
133
+ <tr>
134
+ <td id='manu-wallner'>
135
+ <a href='https://github.com/milch'>
136
+ <img src='https://github.com/milch.png?size=140'>
143
137
  </a>
144
- <h4 align='center'><a href='https://twitter.com/joshdholtz'>Josh Holtz</a></h4>
138
+ <h4 align='center'><a href='https://twitter.com/acrooow'>Manu Wallner</a></h4>
145
139
  </td>
146
- <td id='stefan-natchev'>
147
- <a href='https://github.com/snatchev'>
148
- <img src='https://github.com/snatchev.png?size=140'>
140
+ <td id='daniel-jankowski'>
141
+ <a href='https://github.com/mollyIV'>
142
+ <img src='https://github.com/mollyIV.png?size=140'>
149
143
  </a>
150
- <h4 align='center'><a href='https://twitter.com/snatchev'>Stefan Natchev</a></h4>
144
+ <h4 align='center'><a href='https://twitter.com/mollyIV'>Daniel Jankowski</a></h4>
151
145
  </td>
152
- <td id='max-ott'>
153
- <a href='https://github.com/max-ott'>
154
- <img src='https://github.com/max-ott.png?size=140'>
146
+ <td id='fumiya-nakamura'>
147
+ <a href='https://github.com/nafu'>
148
+ <img src='https://github.com/nafu.png?size=140'>
155
149
  </a>
156
- <h4 align='center'><a href='https://twitter.com/ott_max'>Max Ott</a></h4>
150
+ <h4 align='center'><a href='https://twitter.com/nafu003'>Fumiya Nakamura</a></h4>
157
151
  </td>
158
- <td id='maksym-grebenets'>
159
- <a href='https://github.com/mgrebenets'>
160
- <img src='https://github.com/mgrebenets.png?size=140'>
152
+ <td id='aaron-brager'>
153
+ <a href='https://github.com/getaaron'>
154
+ <img src='https://github.com/getaaron.png?size=140'>
161
155
  </a>
162
- <h4 align='center'><a href='https://twitter.com/mgrebenets'>Maksym Grebenets</a></h4>
156
+ <h4 align='center'><a href='https://twitter.com/getaaron'>Aaron Brager</a></h4>
163
157
  </td>
164
- </tr>
165
- <tr>
166
- <td id='joshua-liebowitz'>
167
- <a href='https://github.com/taquitos'>
168
- <img src='https://github.com/taquitos.png?size=140'>
158
+ <td id='kohki-miki'>
159
+ <a href='https://github.com/giginet'>
160
+ <img src='https://github.com/giginet.png?size=140'>
169
161
  </a>
170
- <h4 align='center'><a href='https://twitter.com/taquitos'>Joshua Liebowitz</a></h4>
162
+ <h4 align='center'><a href='https://twitter.com/giginet'>Kohki Miki</a></h4>
171
163
  </td>
164
+ </tr>
165
+ <tr>
172
166
  <td id='helmut-januschka'>
173
167
  <a href='https://github.com/hjanuschka'>
174
168
  <img src='https://github.com/hjanuschka.png?size=140'>
175
169
  </a>
176
170
  <h4 align='center'><a href='https://twitter.com/hjanuschka'>Helmut Januschka</a></h4>
177
171
  </td>
172
+ <td id='roger-oba'>
173
+ <a href='https://github.com/rogerluan'>
174
+ <img src='https://github.com/rogerluan.png?size=140'>
175
+ </a>
176
+ <h4 align='center'><a href='https://twitter.com/rogerluan_'>Roger Oba</a></h4>
177
+ </td>
178
178
  <td id='olivier-halligon'>
179
179
  <a href='https://github.com/AliSoftware'>
180
180
  <img src='https://github.com/AliSoftware.png?size=140'>
181
181
  </a>
182
182
  <h4 align='center'><a href='https://twitter.com/aligatr'>Olivier Halligon</a></h4>
183
183
  </td>
184
- <td id='jorge-revuelta-h'>
185
- <a href='https://github.com/minuscorp'>
186
- <img src='https://github.com/minuscorp.png?size=140'>
184
+ <td id='andrew-mcburney'>
185
+ <a href='https://github.com/armcburney'>
186
+ <img src='https://github.com/armcburney.png?size=140'>
187
187
  </a>
188
- <h4 align='center'><a href='https://twitter.com/minuscorp'>Jorge Revuelta H</a></h4>
188
+ <h4 align='center'><a href='https://twitter.com/armcburney'>Andrew McBurney</a></h4>
189
189
  </td>
190
190
  </table>
191
191
 
@@ -91,7 +91,7 @@
91
91
 
92
92
  .app-changelog-list {
93
93
  list-style-type: square;
94
-
94
+
95
95
  font-weight: 300;
96
96
  }
97
97
 
@@ -137,10 +137,10 @@
137
137
  }
138
138
  </style>
139
139
  </head>
140
-
140
+
141
141
  <body>
142
142
  <div class="app-icons">
143
-
143
+
144
144
  <% if @options[:app_icon] %>
145
145
  <div class="app-icon">
146
146
  Large App Icon:<br>
@@ -182,7 +182,7 @@
182
182
  <% end %>
183
183
  <% end %>
184
184
  </div>
185
-
185
+
186
186
  <% if @options[:keywords] and @options[:keywords][language] %>
187
187
  <div class="app-keyword">
188
188
  <div class="cat-headline">Keywords</div>
@@ -193,7 +193,7 @@
193
193
  </ul>
194
194
  </div>
195
195
  <% end %>
196
-
196
+
197
197
  <% if @options[:description] %>
198
198
  <div class="app-description">
199
199
  <div class="cat-headline">Description</div>
@@ -202,7 +202,7 @@
202
202
  </div>
203
203
  </div>
204
204
  <% end %>
205
-
205
+
206
206
  <% if @options[:release_notes] %>
207
207
  <div class="app-changelog">
208
208
  <div class="cat-headline">Changelog</div>
@@ -216,7 +216,7 @@
216
216
  <%= (@options[:promotional_text][language] || '').gsub("\n", "<br />") %>
217
217
  </div>
218
218
  <% end %>
219
-
219
+
220
220
  <div class="app-screenshots">
221
221
  <div class="cat-headline">Screenshots</div>
222
222
 
@@ -237,7 +237,7 @@
237
237
  <div class="app-screenshot-row">
238
238
 
239
239
  <% screenshots.each_with_index do |screenshot, index| %>
240
- <a href="<%= URI.escape(screenshot.path) %>" target="_blank"><img class="app-screenshot" src="<%= render_relative_path(@export_path, URI.escape(screenshot.path)) %>" title="Screenshot #<%=index%> for <%=language%>"></a>
240
+ <a href="<%= render_relative_path(@export_path, Addressable::URI.encode(screenshot.path)) %>" target="_blank"><img class="app-screenshot" src="<%= render_relative_path(@export_path, Addressable::URI.encode(screenshot.path)) %>" title="Screenshot #<%=index%> for <%=language%>"></a>
241
241
  <% end %>
242
242
  </div>
243
243
  <% end %>
@@ -250,7 +250,7 @@
250
250
  <% if options[:overwrite_screenshots] %>
251
251
  <b>--overwrite_screenshots</b> is set, existing screenshots will be removed, but none will be uploaded.
252
252
  <% else %>
253
- The existing screenshots on App Store Connect will be kept.
253
+ The existing screenshots on App Store Connect will be kept.
254
254
  if you want to remove them you have to use the <i>--overwrite_screenshots</i> flag.
255
255
  <% end %>
256
256
  <p>
@@ -259,7 +259,7 @@
259
259
  </div>
260
260
  <% end %>
261
261
  </div>
262
-
262
+
263
263
  <hr />
264
264
  <% end # end data
265
265
  %>
@@ -57,7 +57,7 @@ module Deliver
57
57
 
58
58
  def update_export_compliance(options, app, build)
59
59
  submission_information = options[:submission_information] || {}
60
- submission_information = submission_information.collect { |k, v| [k.to_sym, v] }.to_h
60
+ submission_information = submission_information.transform_keys(&:to_sym)
61
61
 
62
62
  uses_encryption = submission_information[:export_compliance_uses_encryption]
63
63
 
@@ -87,7 +87,7 @@ module Deliver
87
87
 
88
88
  def update_idfa(options, app, version)
89
89
  submission_information = options[:submission_information] || {}
90
- submission_information = submission_information.collect { |k, v| [k.to_sym, v] }.to_h
90
+ submission_information = submission_information.transform_keys(&:to_sym)
91
91
 
92
92
  uses_idfa = submission_information[:add_id_info_uses_idfa]
93
93
 
@@ -163,7 +163,7 @@ module Deliver
163
163
 
164
164
  def update_submission_information(options, app)
165
165
  submission_information = options[:submission_information] || {}
166
- submission_information = submission_information.collect { |k, v| [k.to_sym, v] }.to_h
166
+ submission_information = submission_information.transform_keys(&:to_sym)
167
167
 
168
168
  content_rights = submission_information[:content_rights_contains_third_party_content]
169
169
 
@@ -595,7 +595,7 @@ module Deliver
595
595
  info = options[:app_review_information]
596
596
  return if info.nil? || info.empty?
597
597
 
598
- info = info.collect { |k, v| [k.to_sym, v] }.to_h
598
+ info = info.transform_keys(&:to_sym)
599
599
  UI.user_error!("`app_review_information` must be a hash", show_github_issues: true) unless info.kind_of?(Hash)
600
600
 
601
601
  attributes = {}
@@ -17,6 +17,7 @@ module Fastlane
17
17
  cmd << "--danger_id=#{danger_id}" if danger_id
18
18
  cmd << "--dangerfile=#{dangerfile}" if dangerfile
19
19
  cmd << "--fail-on-errors=true" if params[:fail_on_errors]
20
+ cmd << "--fail-if-no-pr=true" if params[:fail_if_no_pr]
20
21
  cmd << "--new-comment" if params[:new_comment]
21
22
  cmd << "--remove-previous-comments" if params[:remove_previous_comments]
22
23
  cmd << "--base=#{base}" if base
@@ -99,7 +100,12 @@ module Fastlane
99
100
  env_name: "FL_DANGER_PR",
100
101
  description: "Run danger on a specific pull request. e.g. \"https://github.com/danger/danger/pull/518\"",
101
102
  is_string: true,
102
- optional: true)
103
+ optional: true),
104
+ FastlaneCore::ConfigItem.new(key: :fail_if_no_pr,
105
+ env_name: "FL_DANGER_FAIL_IF_NO_PR",
106
+ description: "Fail Danger execution if no PR is found",
107
+ type: Boolean,
108
+ default_value: false)
103
109
  ]
104
110
  end
105
111
 
@@ -26,7 +26,9 @@ module Fastlane
26
26
  # Login
27
27
  credentials = JSON.parse(json_key_data)
28
28
  callback_uri = 'https://fastlane.github.io/managed_google_play-callback/callback.html'
29
- uri = "https://play.google.com/apps/publish/delegatePrivateApp?service_account=#{credentials['client_email']}&continueUrl=#{URI.encode_www_form_component(callback_uri)}"
29
+ require 'addressable/uri'
30
+ continueUrl = Addressable::URI.encode(callback_uri)
31
+ uri = "https://play.google.com/apps/publish/delegatePrivateApp?service_account=#{credentials['client_email']}&continueUrl=#{continueUrl}"
30
32
 
31
33
  UI.message("To obtain publishing rights for custom apps on Managed Play Store, open the following URL and log in:")
32
34
  UI.message("")
@@ -23,20 +23,14 @@ module Fastlane
23
23
  [
24
24
  FastlaneCore::ConfigItem.new(key: :only_tags,
25
25
  description: "Simply pull the tags, and not bring new commits to the current branch from the remote",
26
- is_string: false,
26
+ type: Boolean,
27
27
  optional: true,
28
- default_value: false,
29
- verify_block: proc do |value|
30
- UI.user_error!("Please pass a valid value for only_tags. Use one of the following: true, false") unless value.kind_of?(TrueClass) || value.kind_of?(FalseClass)
31
- end),
28
+ default_value: false),
32
29
  FastlaneCore::ConfigItem.new(key: :rebase,
33
30
  description: "Rebase on top of the remote branch instead of merge",
34
- is_string: false,
31
+ type: Boolean,
35
32
  optional: true,
36
- default_value: false,
37
- verify_block: proc do |value|
38
- UI.user_error!("Please pass a valid value for rebase. Use one of the following: true, false") unless value.kind_of?(TrueClass) || value.kind_of?(FalseClass)
39
- end)
33
+ default_value: false)
40
34
  ]
41
35
  end
42
36
 
@@ -49,7 +49,8 @@ module Fastlane
49
49
  # Escape channel's name to guarantee it is a valid URL resource.
50
50
  # First of all we verify that the value is not already escaped,
51
51
  # escaping an escaped value will produce a wrong channel name.
52
- escaped_channel = URI.unescape(channel) == channel ? URI.escape(channel) : channel
52
+ require 'addressable/uri'
53
+ escaped_channel = Addressable::URI.encode(channel) == channel ? Addressable::URI.encode(channel) : channel
53
54
  if user?(channel)
54
55
  params = { 'message' => message, 'message_format' => message_format }
55
56
  json_headers = { 'Content-Type' => 'application/json',
@@ -13,7 +13,7 @@ module Fastlane
13
13
  app_icon: :appIcon,
14
14
  content_image: :contentImage
15
15
  }
16
- options = Hash[options.map { |k, v| [option_map.fetch(k, k), v] }]
16
+ options = options.transform_keys { |k| option_map.fetch(k, k) }
17
17
  TerminalNotifier.notify(message, options)
18
18
  end
19
19
 
@@ -305,12 +305,12 @@ module Fastlane
305
305
 
306
306
  # Normalize some values
307
307
  export_options[:teamID] = CredentialsManager::AppfileConfig.try_fetch_value(:team_id) if !export_options[:teamID] && CredentialsManager::AppfileConfig.try_fetch_value(:team_id)
308
- export_options[:onDemandResourcesAssetPacksBaseURL] = URI.escape(export_options[:onDemandResourcesAssetPacksBaseURL]) if export_options[:onDemandResourcesAssetPacksBaseURL]
308
+ export_options[:onDemandResourcesAssetPacksBaseURL] = Addressable::URI.encode(export_options[:onDemandResourcesAssetPacksBaseURL]) if export_options[:onDemandResourcesAssetPacksBaseURL]
309
309
  if export_options[:manifest]
310
- export_options[:manifest][:appURL] = URI.encode_www_form_component(export_options[:manifest][:appURL]) if export_options[:manifest][:appURL]
311
- export_options[:manifest][:displayImageURL] = URI.encode_www_form_component(export_options[:manifest][:displayImageURL]) if export_options[:manifest][:displayImageURL]
312
- export_options[:manifest][:fullSizeImageURL] = URI.encode_www_form_component(export_options[:manifest][:fullSizeImageURL]) if export_options[:manifest][:fullSizeImageURL]
313
- export_options[:manifest][:assetPackManifestURL] = URI.encode_www_form_component(export_options[:manifest][:assetPackManifestURL]) if export_options[:manifest][:assetPackManifestURL]
310
+ export_options[:manifest][:appURL] = Addressable::URI.encode(export_options[:manifest][:appURL]) if export_options[:manifest][:appURL]
311
+ export_options[:manifest][:displayImageURL] = Addressable::URI.encode(export_options[:manifest][:displayImageURL]) if export_options[:manifest][:displayImageURL]
312
+ export_options[:manifest][:fullSizeImageURL] = Addressable::URI.encode(export_options[:manifest][:fullSizeImageURL]) if export_options[:manifest][:fullSizeImageURL]
313
+ export_options[:manifest][:assetPackManifestURL] = Addressable::URI.encode(export_options[:manifest][:assetPackManifestURL]) if export_options[:manifest][:assetPackManifestURL]
314
314
  end
315
315
 
316
316
  # Saves options to plist
@@ -16,7 +16,7 @@ Gem::Specification.new do |spec|
16
16
  spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
17
17
  spec.require_paths = ['lib']
18
18
 
19
- spec.required_ruby_version = '>= 2.4'
19
+ spec.required_ruby_version = '>= 2.5'
20
20
 
21
21
  # Don't add a dependency to fastlane or fastlane_re
22
22
  # since this would cause a circular dependency
@@ -3,7 +3,7 @@ require:
3
3
  - rubocop/require_tools
4
4
  - rubocop-performance
5
5
  AllCops:
6
- TargetRubyVersion: 2.4
6
+ TargetRubyVersion: 2.5
7
7
  NewCops: enable
8
8
  Include:
9
9
  - "**/*.rb"
@@ -1,5 +1,5 @@
1
1
  module Fastlane
2
- VERSION = '2.182.0'.freeze
2
+ VERSION = '2.183.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 = '1.12.1'.freeze
@@ -17,4 +17,4 @@ public class Deliverfile: DeliverfileProtocol {
17
17
  // during the `init` process, and you won't see this message
18
18
  }
19
19
 
20
- // Generated with fastlane 2.182.0
20
+ // Generated with fastlane 2.183.0
@@ -256,4 +256,4 @@ public extension DeliverfileProtocol {
256
256
 
257
257
  // Please don't remove the lines below
258
258
  // They are used to detect outdated files
259
- // FastlaneRunnerAPIVersion [0.9.66]
259
+ // FastlaneRunnerAPIVersion [0.9.67]
@@ -3431,6 +3431,7 @@ public func createXcframework(frameworks: OptionalConfigValue<[String]?> = .fast
3431
3431
  - base: A branch/tag/commit to use as the base of the diff. [master|dev|stable]
3432
3432
  - head: A branch/tag/commit to use as the head. [master|dev|stable]
3433
3433
  - pr: Run danger on a specific pull request. e.g. "https://github.com/danger/danger/pull/518"
3434
+ - failIfNoPr: Fail Danger execution if no PR is found
3434
3435
 
3435
3436
  Formalize your Pull Request etiquette.
3436
3437
  More information: [https://github.com/danger/danger](https://github.com/danger/danger).
@@ -3445,7 +3446,8 @@ public func danger(useBundleExec: Bool = true,
3445
3446
  removePreviousComments: Bool = false,
3446
3447
  base: OptionalConfigValue<String?> = .fastlaneDefault(nil),
3447
3448
  head: OptionalConfigValue<String?> = .fastlaneDefault(nil),
3448
- pr: OptionalConfigValue<String?> = .fastlaneDefault(nil))
3449
+ pr: OptionalConfigValue<String?> = .fastlaneDefault(nil),
3450
+ failIfNoPr: Bool = false)
3449
3451
  {
3450
3452
  let useBundleExecArg = RubyCommand.Argument(name: "use_bundle_exec", value: useBundleExec, type: nil)
3451
3453
  let verboseArg = RubyCommand.Argument(name: "verbose", value: verbose, type: nil)
@@ -3458,6 +3460,7 @@ public func danger(useBundleExec: Bool = true,
3458
3460
  let baseArg = base.asRubyArgument(name: "base", type: nil)
3459
3461
  let headArg = head.asRubyArgument(name: "head", type: nil)
3460
3462
  let prArg = pr.asRubyArgument(name: "pr", type: nil)
3463
+ let failIfNoPrArg = RubyCommand.Argument(name: "fail_if_no_pr", value: failIfNoPr, type: nil)
3461
3464
  let args = [useBundleExecArg,
3462
3465
  verboseArg,
3463
3466
  dangerIdArg,
@@ -3468,7 +3471,8 @@ public func danger(useBundleExec: Bool = true,
3468
3471
  removePreviousCommentsArg,
3469
3472
  baseArg,
3470
3473
  headArg,
3471
- prArg]
3474
+ prArg,
3475
+ failIfNoPrArg]
3472
3476
  .compactMap { $0 }
3473
3477
  let command = RubyCommand(commandID: "", methodName: "danger", className: nil, args: args)
3474
3478
  _ = runner.executeCommand(command)
@@ -3984,7 +3988,7 @@ public func downloadDsyms(username: String,
3984
3988
  public func downloadFromPlayStore(packageName: String,
3985
3989
  versionName: OptionalConfigValue<String?> = .fastlaneDefault(nil),
3986
3990
  track: String = "production",
3987
- metadataPath: OptionalConfigValue<String?> = .fastlaneDefault(nil),
3991
+ metadataPath: String = "./metadata",
3988
3992
  key: OptionalConfigValue<String?> = .fastlaneDefault(nil),
3989
3993
  issuer: OptionalConfigValue<String?> = .fastlaneDefault(nil),
3990
3994
  jsonKey: OptionalConfigValue<String?> = .fastlaneDefault(nil),
@@ -3995,7 +3999,7 @@ public func downloadFromPlayStore(packageName: String,
3995
3999
  let packageNameArg = RubyCommand.Argument(name: "package_name", value: packageName, type: nil)
3996
4000
  let versionNameArg = versionName.asRubyArgument(name: "version_name", type: nil)
3997
4001
  let trackArg = RubyCommand.Argument(name: "track", value: track, type: nil)
3998
- let metadataPathArg = metadataPath.asRubyArgument(name: "metadata_path", type: nil)
4002
+ let metadataPathArg = RubyCommand.Argument(name: "metadata_path", value: metadataPath, type: nil)
3999
4003
  let keyArg = key.asRubyArgument(name: "key", type: nil)
4000
4004
  let issuerArg = issuer.asRubyArgument(name: "issuer", type: nil)
4001
4005
  let jsonKeyArg = jsonKey.asRubyArgument(name: "json_key", type: nil)
@@ -10279,7 +10283,7 @@ public func supply(packageName: String,
10279
10283
  releaseStatus: String = "completed",
10280
10284
  track: String = "production",
10281
10285
  rollout: OptionalConfigValue<String?> = .fastlaneDefault(nil),
10282
- metadataPath: OptionalConfigValue<String?> = .fastlaneDefault(nil),
10286
+ metadataPath: String = "./metadata",
10283
10287
  key: OptionalConfigValue<String?> = .fastlaneDefault(nil),
10284
10288
  issuer: OptionalConfigValue<String?> = .fastlaneDefault(nil),
10285
10289
  jsonKey: OptionalConfigValue<String?> = .fastlaneDefault(nil),
@@ -10316,7 +10320,7 @@ public func supply(packageName: String,
10316
10320
  let releaseStatusArg = RubyCommand.Argument(name: "release_status", value: releaseStatus, type: nil)
10317
10321
  let trackArg = RubyCommand.Argument(name: "track", value: track, type: nil)
10318
10322
  let rolloutArg = rollout.asRubyArgument(name: "rollout", type: nil)
10319
- let metadataPathArg = metadataPath.asRubyArgument(name: "metadata_path", type: nil)
10323
+ let metadataPathArg = RubyCommand.Argument(name: "metadata_path", value: metadataPath, type: nil)
10320
10324
  let keyArg = key.asRubyArgument(name: "key", type: nil)
10321
10325
  let issuerArg = issuer.asRubyArgument(name: "issuer", type: nil)
10322
10326
  let jsonKeyArg = jsonKey.asRubyArgument(name: "json_key", type: nil)
@@ -11841,7 +11845,7 @@ public func uploadToPlayStore(packageName: String,
11841
11845
  releaseStatus: String = "completed",
11842
11846
  track: String = "production",
11843
11847
  rollout: OptionalConfigValue<String?> = .fastlaneDefault(nil),
11844
- metadataPath: OptionalConfigValue<String?> = .fastlaneDefault(nil),
11848
+ metadataPath: String = "./metadata",
11845
11849
  key: OptionalConfigValue<String?> = .fastlaneDefault(nil),
11846
11850
  issuer: OptionalConfigValue<String?> = .fastlaneDefault(nil),
11847
11851
  jsonKey: OptionalConfigValue<String?> = .fastlaneDefault(nil),
@@ -11878,7 +11882,7 @@ public func uploadToPlayStore(packageName: String,
11878
11882
  let releaseStatusArg = RubyCommand.Argument(name: "release_status", value: releaseStatus, type: nil)
11879
11883
  let trackArg = RubyCommand.Argument(name: "track", value: track, type: nil)
11880
11884
  let rolloutArg = rollout.asRubyArgument(name: "rollout", type: nil)
11881
- let metadataPathArg = metadataPath.asRubyArgument(name: "metadata_path", type: nil)
11885
+ let metadataPathArg = RubyCommand.Argument(name: "metadata_path", value: metadataPath, type: nil)
11882
11886
  let keyArg = key.asRubyArgument(name: "key", type: nil)
11883
11887
  let issuerArg = issuer.asRubyArgument(name: "issuer", type: nil)
11884
11888
  let jsonKeyArg = jsonKey.asRubyArgument(name: "json_key", type: nil)
@@ -12702,4 +12706,4 @@ public let snapshotfile = Snapshotfile()
12702
12706
 
12703
12707
  // Please don't remove the lines below
12704
12708
  // They are used to detect outdated files
12705
- // FastlaneRunnerAPIVersion [0.9.119]
12709
+ // FastlaneRunnerAPIVersion [0.9.120]
@@ -17,4 +17,4 @@ public class Gymfile: GymfileProtocol {
17
17
  // during the `init` process, and you won't see this message
18
18
  }
19
19
 
20
- // Generated with fastlane 2.182.0
20
+ // Generated with fastlane 2.183.0
@@ -196,4 +196,4 @@ public extension GymfileProtocol {
196
196
 
197
197
  // Please don't remove the lines below
198
198
  // They are used to detect outdated files
199
- // FastlaneRunnerAPIVersion [0.9.69]
199
+ // FastlaneRunnerAPIVersion [0.9.70]
@@ -17,4 +17,4 @@ public class Matchfile: MatchfileProtocol {
17
17
  // during the `init` process, and you won't see this message
18
18
  }
19
19
 
20
- // Generated with fastlane 2.182.0
20
+ // Generated with fastlane 2.183.0
@@ -184,4 +184,4 @@ public extension MatchfileProtocol {
184
184
 
185
185
  // Please don't remove the lines below
186
186
  // They are used to detect outdated files
187
- // FastlaneRunnerAPIVersion [0.9.63]
187
+ // FastlaneRunnerAPIVersion [0.9.64]
@@ -17,4 +17,4 @@ public class Precheckfile: PrecheckfileProtocol {
17
17
  // during the `init` process, and you won't see this message
18
18
  }
19
19
 
20
- // Generated with fastlane 2.182.0
20
+ // Generated with fastlane 2.183.0
@@ -52,4 +52,4 @@ public extension PrecheckfileProtocol {
52
52
 
53
53
  // Please don't remove the lines below
54
54
  // They are used to detect outdated files
55
- // FastlaneRunnerAPIVersion [0.9.62]
55
+ // FastlaneRunnerAPIVersion [0.9.63]
@@ -17,4 +17,4 @@ public class Scanfile: ScanfileProtocol {
17
17
  // during the `init` process, and you won't see this message
18
18
  }
19
19
 
20
- // Generated with fastlane 2.182.0
20
+ // Generated with fastlane 2.183.0
@@ -292,4 +292,4 @@ public extension ScanfileProtocol {
292
292
 
293
293
  // Please don't remove the lines below
294
294
  // They are used to detect outdated files
295
- // FastlaneRunnerAPIVersion [0.9.74]
295
+ // FastlaneRunnerAPIVersion [0.9.75]
@@ -17,4 +17,4 @@ public class Screengrabfile: ScreengrabfileProtocol {
17
17
  // during the `init` process, and you won't see this message
18
18
  }
19
19
 
20
- // Generated with fastlane 2.182.0
20
+ // Generated with fastlane 2.183.0
@@ -96,4 +96,4 @@ public extension ScreengrabfileProtocol {
96
96
 
97
97
  // Please don't remove the lines below
98
98
  // They are used to detect outdated files
99
- // FastlaneRunnerAPIVersion [0.9.64]
99
+ // FastlaneRunnerAPIVersion [0.9.65]
@@ -17,4 +17,4 @@ public class Snapshotfile: SnapshotfileProtocol {
17
17
  // during the `init` process, and you won't see this message
18
18
  }
19
19
 
20
- // Generated with fastlane 2.182.0
20
+ // Generated with fastlane 2.183.0
@@ -200,4 +200,4 @@ public extension SnapshotfileProtocol {
200
200
 
201
201
  // Please don't remove the lines below
202
202
  // They are used to detect outdated files
203
- // FastlaneRunnerAPIVersion [0.9.58]
203
+ // FastlaneRunnerAPIVersion [0.9.59]
@@ -2,30 +2,30 @@
2
2
  "entries": {
3
3
  "brew": {
4
4
  "swiftformat": {
5
- "version": "0.48.0",
5
+ "version": "0.48.1",
6
6
  "bottle": {
7
7
  "rebuild": 0,
8
8
  "root_url": "https://ghcr.io/v2/homebrew/core",
9
9
  "files": {
10
10
  "arm64_big_sur": {
11
11
  "cellar": ":any_skip_relocation",
12
- "url": "https://ghcr.io/v2/homebrew/core/swiftformat/blobs/sha256:bca1fc4ac0264ff950c14eb3c72c0fa321baa99fb60178266da19b680d67147b",
13
- "sha256": "bca1fc4ac0264ff950c14eb3c72c0fa321baa99fb60178266da19b680d67147b"
12
+ "url": "https://ghcr.io/v2/homebrew/core/swiftformat/blobs/sha256:937b21c64f3aec2eaf9d0234f681013e1026f3110bafac9348a58e893305c266",
13
+ "sha256": "937b21c64f3aec2eaf9d0234f681013e1026f3110bafac9348a58e893305c266"
14
14
  },
15
15
  "big_sur": {
16
16
  "cellar": ":any_skip_relocation",
17
- "url": "https://ghcr.io/v2/homebrew/core/swiftformat/blobs/sha256:fa1af90b137298039eab4205a9a8733fbba4f9e5cf0322197674ce6f1582f0e0",
18
- "sha256": "fa1af90b137298039eab4205a9a8733fbba4f9e5cf0322197674ce6f1582f0e0"
17
+ "url": "https://ghcr.io/v2/homebrew/core/swiftformat/blobs/sha256:e5217aee36051fd378912b4620786b5892ec4b69343e06f6b94747ab08e1c0ea",
18
+ "sha256": "e5217aee36051fd378912b4620786b5892ec4b69343e06f6b94747ab08e1c0ea"
19
19
  },
20
20
  "catalina": {
21
21
  "cellar": ":any_skip_relocation",
22
- "url": "https://ghcr.io/v2/homebrew/core/swiftformat/blobs/sha256:35bc84d95bcd8e5066669c6383f999507b1d1a8a08f3aae321f89e2944ea39e2",
23
- "sha256": "35bc84d95bcd8e5066669c6383f999507b1d1a8a08f3aae321f89e2944ea39e2"
22
+ "url": "https://ghcr.io/v2/homebrew/core/swiftformat/blobs/sha256:203eaac0a2c2f18121937d3c065a867a748e7539f8a716d8e55358d626850ec3",
23
+ "sha256": "203eaac0a2c2f18121937d3c065a867a748e7539f8a716d8e55358d626850ec3"
24
24
  },
25
25
  "mojave": {
26
26
  "cellar": ":any_skip_relocation",
27
- "url": "https://ghcr.io/v2/homebrew/core/swiftformat/blobs/sha256:b5274f542e17907e806ca6e6d1ca630a538bc2e98330329bca5a1568d76a7267",
28
- "sha256": "b5274f542e17907e806ca6e6d1ca630a538bc2e98330329bca5a1568d76a7267"
27
+ "url": "https://ghcr.io/v2/homebrew/core/swiftformat/blobs/sha256:cc3176e0ed768de2ab13ed28cb41c6efa010382fa2862896c474ff54ce385bfa",
28
+ "sha256": "cc3176e0ed768de2ab13ed28cb41c6efa010382fa2862896c474ff54ce385bfa"
29
29
  }
30
30
  }
31
31
  }
@@ -35,9 +35,9 @@
35
35
  "system": {
36
36
  "macos": {
37
37
  "catalina": {
38
- "HOMEBREW_VERSION": "3.1.5-69-g70c8693",
38
+ "HOMEBREW_VERSION": "3.1.7-36-g7c68b17",
39
39
  "HOMEBREW_PREFIX": "/usr/local",
40
- "Homebrew/homebrew-core": "d4dcdecc3c226aed326813f67043b728342eec96",
40
+ "Homebrew/homebrew-core": "b29800c865a59b8b92c4b7e432e6ea736f27dacd",
41
41
  "CLT": "11.0.0.33.12",
42
42
  "Xcode": "12.4",
43
43
  "macOS": "10.15.7"
@@ -3,6 +3,9 @@ require 'spaceship/connect_api'
3
3
  require_relative 'ui/ui'
4
4
 
5
5
  module FastlaneCore
6
+ class BuildWatcherError < StandardError
7
+ end
8
+
6
9
  class BuildWatcher
7
10
  VersionMatches = Struct.new(:version, :builds)
8
11
 
@@ -78,6 +81,16 @@ module FastlaneCore
78
81
  watched_app_version_alternate = alternate_version(watched_app_version)
79
82
  versions = [watched_app_version, watched_app_version_alternate].compact
80
83
 
84
+ if versions.empty?
85
+ if select_latest
86
+ UI.message("Watched build version should not be present when there is no app version to watch") unless watched_build_version.nil?
87
+ UI.message("Searching for the latest build")
88
+ versions = [nil]
89
+ else
90
+ raise BuildWatcherError.new, "There is no app version to watch"
91
+ end
92
+ end
93
+
81
94
  version_matches = versions.map do |version|
82
95
  match = VersionMatches.new
83
96
  match.version = version
@@ -98,8 +111,8 @@ module FastlaneCore
98
111
  error_builds = matched_builds.map do |build|
99
112
  "#{build.app_version}(#{build.version}) for #{build.platform} - #{build.processing_state}"
100
113
  end.join("\n")
101
- error_message = "FastlaneCore::BuildWatcher found more than 1 matching build: \n#{error_builds}"
102
- UI.crash!(error_message)
114
+ error_message = "Found more than 1 matching build: \n#{error_builds}"
115
+ raise BuildWatcherError.new, error_message
103
116
  end
104
117
 
105
118
  version_match = version_matches.reject do |match|
@@ -118,7 +118,7 @@ module FastlaneCore
118
118
  discover_devices(child_item, device_types, discovered_device_udids)
119
119
  end
120
120
 
121
- is_supported_device = device_types.any? { |device_type| usb_item['_name'] == device_type }
121
+ is_supported_device = device_types.any?(usb_item['_name'])
122
122
  serial_num = usb_item['serial_num'] || ''
123
123
  has_serial_number = serial_num.length == 40 || serial_num.length == 24
124
124
 
@@ -145,7 +145,10 @@ module FastlaneCore
145
145
  def password(message)
146
146
  verify_interactive!(message)
147
147
 
148
- ask("#{format_string}#{message.to_s.yellow}") { |q| q.echo = "*" }
148
+ ask("#{format_string}#{message.to_s.yellow}") do |q|
149
+ q.whitespace = :chomp
150
+ q.echo = "*"
151
+ end
149
152
  end
150
153
 
151
154
  private
@@ -121,12 +121,12 @@ module Frameit
121
121
 
122
122
  def self.supported_color?(value)
123
123
  return false if value.nil?
124
- Color.all_colors.any? { |c| c == value }
124
+ Color.all_colors.any?(value)
125
125
  end
126
126
 
127
127
  def self.supported_platform?(value)
128
128
  return false if value.nil?
129
- Platform.all_platforms.any? { |c| c == value }
129
+ Platform.all_platforms.any?(value)
130
130
  end
131
131
 
132
132
  def self.supported_device?(value)
@@ -71,8 +71,9 @@ module Frameit
71
71
  def download_file(path, txt: "file")
72
72
  require 'uri'
73
73
  require 'excon'
74
+ require 'addressable/uri'
74
75
 
75
- url = File.join(HOST_URL, Frameit.frames_version, URI.escape(path))
76
+ url = File.join(HOST_URL, Frameit.frames_version, Addressable::URI.encode(path))
76
77
  UI.message("Downloading #{txt} from '#{url}' ...")
77
78
  body = Excon.get(url).body
78
79
  raise body if body.include?("<Error>")
@@ -17,8 +17,8 @@ module Gym
17
17
  final_mapping = (primary_mapping || {}).dup # for verbose output at the end of the method
18
18
  secondary_mapping ||= self.detect_project_profile_mapping # default to Xcode project
19
19
 
20
- final_mapping = Hash[final_mapping.map { |k, v| [k.to_sym, v] }]
21
- secondary_mapping = Hash[secondary_mapping.map { |k, v| [k.to_sym, v] }]
20
+ final_mapping = final_mapping.transform_keys(&:to_sym)
21
+ secondary_mapping = secondary_mapping.transform_keys(&:to_sym)
22
22
 
23
23
  # Now it's time to merge the (potentially) existing mapping
24
24
  # (e.g. coming from `provisioningProfiles` of the `export_options` or from previous match calls)
@@ -4,6 +4,7 @@
4
4
  # because of
5
5
  # `incompatible encoding regexp match (UTF-8 regexp with ASCII-8BIT string) (Encoding::CompatibilityError)`
6
6
 
7
+ require 'addressable/uri'
7
8
  require 'tempfile'
8
9
  require 'xcodeproj'
9
10
 
@@ -154,12 +155,12 @@ module Gym
154
155
 
155
156
  def normalize_export_options(hash)
156
157
  # Normalize some values
157
- hash[:onDemandResourcesAssetPacksBaseURL] = URI.escape(hash[:onDemandResourcesAssetPacksBaseURL]) if hash[:onDemandResourcesAssetPacksBaseURL]
158
+ hash[:onDemandResourcesAssetPacksBaseURL] = Addressable::URI.encode(hash[:onDemandResourcesAssetPacksBaseURL]) if hash[:onDemandResourcesAssetPacksBaseURL]
158
159
  if hash[:manifest]
159
- hash[:manifest][:appURL] = URI.escape(hash[:manifest][:appURL]) if hash[:manifest][:appURL]
160
- hash[:manifest][:displayImageURL] = URI.escape(hash[:manifest][:displayImageURL]) if hash[:manifest][:displayImageURL]
161
- hash[:manifest][:fullSizeImageURL] = URI.escape(hash[:manifest][:fullSizeImageURL]) if hash[:manifest][:fullSizeImageURL]
162
- hash[:manifest][:assetPackManifestURL] = URI.escape(hash[:manifest][:assetPackManifestURL]) if hash[:manifest][:assetPackManifestURL]
160
+ hash[:manifest][:appURL] = Addressable::URI.encode(hash[:manifest][:appURL]) if hash[:manifest][:appURL]
161
+ hash[:manifest][:displayImageURL] = Addressable::URI.encode(hash[:manifest][:displayImageURL]) if hash[:manifest][:displayImageURL]
162
+ hash[:manifest][:fullSizeImageURL] = Addressable::URI.encode(hash[:manifest][:fullSizeImageURL]) if hash[:manifest][:fullSizeImageURL]
163
+ hash[:manifest][:assetPackManifestURL] = Addressable::URI.encode(hash[:manifest][:assetPackManifestURL]) if hash[:manifest][:assetPackManifestURL]
163
164
  end
164
165
  hash
165
166
  end
@@ -447,7 +447,7 @@ module Pilot
447
447
  end
448
448
 
449
449
  def update_review_detail(build, info)
450
- info = info.collect { |k, v| [k.to_sym, v] }.to_h
450
+ info = info.transform_keys(&:to_sym)
451
451
 
452
452
  attributes = {}
453
453
  attributes[:contactEmail] = info[:contact_email] if info.key?(:contact_email)
@@ -463,7 +463,7 @@ module Pilot
463
463
  end
464
464
 
465
465
  def update_localized_app_review(build, info_by_lang, default_info: nil)
466
- info_by_lang = info_by_lang.collect { |k, v| [k.to_sym, v] }.to_h
466
+ info_by_lang = info_by_lang.transform_keys(&:to_sym)
467
467
 
468
468
  if default_info
469
469
  info_by_lang.delete(:default)
@@ -509,7 +509,7 @@ module Pilot
509
509
  end
510
510
 
511
511
  def update_localized_build_review(build, info_by_lang, default_info: nil)
512
- info_by_lang = info_by_lang.collect { |k, v| [k.to_sym, v] }.to_h
512
+ info_by_lang = info_by_lang.transform_keys(&:to_sym)
513
513
 
514
514
  if default_info
515
515
  info_by_lang.delete(:default)
@@ -122,7 +122,7 @@ module Scan
122
122
  suites = failing_tests.split(/(?=\n\s+[\w\s]+:\n)/)
123
123
 
124
124
  suites.each do |suite|
125
- suite_name = suite.match(/\s*([\w\s]+):/).captures.first
125
+ suite_name = suite.match(/\s*([\w\s\S]+):/).captures.first
126
126
 
127
127
  test_cases = suite.split(":\n").fetch(1, []).split("\n").each
128
128
  .select { |line| line.match?(/^\s+/) }
data/spaceship/README.md CHANGED
@@ -111,11 +111,11 @@ When your Apple account has 2 factor verification enabled, you'll automatically
111
111
 
112
112
  #### Web sessions
113
113
 
114
- See [Continuous Integration > Authenticating with Apple services > Method 2: Two-step or two-factor authentication > Storing a manually verified session using spaceauth](https://docs.fastlane.tools/best-practices/continuous-integration/#storing-a-manually-verified-session-using-spaceauth)
114
+ See [Best Practices > Continuous Integration > Authenticating with Apple services > Method 2: Two-step or two-factor authentication > Storing a manually verified session using spaceauth](https://docs.fastlane.tools/best-practices/continuous-integration/#storing-a-manually-verified-session-using-spaceauth)
115
115
 
116
116
  #### Transporter
117
117
 
118
- See [Getting Started > iOS > Authentication > Method 3: Application-specific passwords](https://docs.fastlane.tools/getting-started/ios/authentication/#method-3-application-specific-passwords)
118
+ See [Best Practices > Continuous Integration > Authenticating with Apple services > Method 3: Application-specific passwords](https://docs.fastlane.tools/best-practices/continuous-integration/#method-3-application-specific-passwords)
119
119
 
120
120
  ## _spaceship_ in use
121
121
 
@@ -30,7 +30,7 @@ module Spaceship
30
30
  # Creates alias for :minOsVersion to :min_os_version
31
31
  #
32
32
  def attr_mapping(attr_map)
33
- self.reverse_attr_map ||= attr_map.invert.each_with_object({}) { |(k, v), memo| memo[k.to_sym] = v; }
33
+ self.reverse_attr_map ||= attr_map.invert.transform_keys(&:to_sym)
34
34
  attr_map.each do |key, value|
35
35
  # Actual
36
36
  reader = value.to_sym
metadata CHANGED
@@ -1,37 +1,37 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: fastlane
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.182.0
4
+ version: 2.183.0
5
5
  platform: ruby
6
6
  authors:
7
+ - Max Ott
8
+ - Joshua Liebowitz
9
+ - Helmut Januschka
10
+ - Aaron Brager
11
+ - Andrew McBurney
7
12
  - Josh Holtz
8
13
  - Fumiya Nakamura
9
- - Andrew McBurney
10
- - Luka Mirosevic
11
- - Satoshi Namai
12
- - Stefan Natchev
13
- - Daniel Jankowski
14
- - Jérôme Lacoste
15
- - Olivier Halligon
16
- - Jorge Revuelta H
17
- - Kohki Miki
18
14
  - Iulian Onofrei
19
- - Jan Piotrowski
20
- - Joshua Liebowitz
21
- - Danielle Tomlinson
22
- - Aaron Brager
23
- - Felix Krause
24
- - Matthew Ellis
15
+ - Olivier Halligon
16
+ - Roger Oba
25
17
  - Manu Wallner
18
+ - Danielle Tomlinson
26
19
  - Maksym Grebenets
27
- - Helmut Januschka
28
20
  - Jimmy Dee
29
- - Roger Oba
30
- - Max Ott
21
+ - Matthew Ellis
22
+ - Felix Krause
23
+ - Jan Piotrowski
24
+ - Satoshi Namai
25
+ - Luka Mirosevic
26
+ - Kohki Miki
27
+ - Jorge Revuelta H
28
+ - Daniel Jankowski
29
+ - Stefan Natchev
30
+ - Jérôme Lacoste
31
31
  autorequire:
32
32
  bindir: bin
33
33
  cert_chain: []
34
- date: 2021-05-05 00:00:00.000000000 Z
34
+ date: 2021-05-14 00:00:00.000000000 Z
35
35
  dependencies:
36
36
  - !ruby/object:Gem::Dependency
37
37
  name: xcodeproj
@@ -584,45 +584,47 @@ dependencies:
584
584
  - !ruby/object:Gem::Version
585
585
  version: '3'
586
586
  - !ruby/object:Gem::Dependency
587
- name: google-api-client
587
+ name: google-apis-playcustomapp_v1
588
588
  requirement: !ruby/object:Gem::Requirement
589
589
  requirements:
590
- - - ">="
591
- - !ruby/object:Gem::Version
592
- version: 0.37.0
593
- - - "<"
590
+ - - "~>"
594
591
  - !ruby/object:Gem::Version
595
- version: 0.39.0
592
+ version: '0.1'
596
593
  type: :runtime
597
594
  prerelease: false
598
595
  version_requirements: !ruby/object:Gem::Requirement
599
596
  requirements:
600
- - - ">="
597
+ - - "~>"
601
598
  - !ruby/object:Gem::Version
602
- version: 0.37.0
603
- - - "<"
599
+ version: '0.1'
600
+ - !ruby/object:Gem::Dependency
601
+ name: google-apis-androidpublisher_v3
602
+ requirement: !ruby/object:Gem::Requirement
603
+ requirements:
604
+ - - "~>"
604
605
  - !ruby/object:Gem::Version
605
- version: 0.39.0
606
+ version: '0.1'
607
+ type: :runtime
608
+ prerelease: false
609
+ version_requirements: !ruby/object:Gem::Requirement
610
+ requirements:
611
+ - - "~>"
612
+ - !ruby/object:Gem::Version
613
+ version: '0.1'
606
614
  - !ruby/object:Gem::Dependency
607
615
  name: google-cloud-storage
608
616
  requirement: !ruby/object:Gem::Requirement
609
617
  requirements:
610
- - - ">="
611
- - !ruby/object:Gem::Version
612
- version: 1.15.0
613
- - - "<"
618
+ - - "~>"
614
619
  - !ruby/object:Gem::Version
615
- version: 2.0.0
620
+ version: '1.31'
616
621
  type: :runtime
617
622
  prerelease: false
618
623
  version_requirements: !ruby/object:Gem::Requirement
619
624
  requirements:
620
- - - ">="
621
- - !ruby/object:Gem::Version
622
- version: 1.15.0
623
- - - "<"
625
+ - - "~>"
624
626
  - !ruby/object:Gem::Version
625
- version: 2.0.0
627
+ version: '1.31'
626
628
  - !ruby/object:Gem::Dependency
627
629
  name: emoji_regex
628
630
  requirement: !ruby/object:Gem::Requirement
@@ -1641,6 +1643,7 @@ files:
1641
1643
  - spaceship/lib/spaceship/connect_api/client.rb
1642
1644
  - spaceship/lib/spaceship/connect_api/file_uploader.rb
1643
1645
  - spaceship/lib/spaceship/connect_api/model.rb
1646
+ - spaceship/lib/spaceship/connect_api/models/.app.rb.swp
1644
1647
  - spaceship/lib/spaceship/connect_api/models/.app_store_version_submission.rb.swp
1645
1648
  - spaceship/lib/spaceship/connect_api/models/age_rating_declaration.rb
1646
1649
  - spaceship/lib/spaceship/connect_api/models/app.rb
@@ -1851,7 +1854,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
1851
1854
  requirements:
1852
1855
  - - ">="
1853
1856
  - !ruby/object:Gem::Version
1854
- version: '2.4'
1857
+ version: '2.5'
1855
1858
  required_rubygems_version: !ruby/object:Gem::Requirement
1856
1859
  requirements:
1857
1860
  - - ">="