fastlane 2.182.0 → 2.183.0

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