fastlane 2.237.0 → 2.239.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 (79) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +107 -100
  3. data/bin/fastlane +2 -2
  4. data/deliver/lib/deliver/html_generator.rb +1 -1
  5. data/deliver/lib/deliver/options.rb +9 -1
  6. data/deliver/lib/deliver/upload_metadata.rb +22 -0
  7. data/deliver/lib/deliver/upload_screenshots.rb +12 -4
  8. data/fastlane/lib/fastlane/actions/changelog_from_git_commits.rb +7 -2
  9. data/fastlane/lib/fastlane/actions/deploygate.rb +3 -2
  10. data/fastlane/lib/fastlane/actions/docs/get_push_certificate.md +6 -0
  11. data/fastlane/lib/fastlane/actions/docs/upload_to_app_store.md.erb +4 -2
  12. data/fastlane/lib/fastlane/actions/hockey.rb +3 -2
  13. data/fastlane/lib/fastlane/actions/installr.rb +3 -2
  14. data/fastlane/lib/fastlane/actions/mailgun.rb +1 -0
  15. data/fastlane/lib/fastlane/actions/notarize.rb +3 -18
  16. data/fastlane/lib/fastlane/actions/register_devices.rb +21 -5
  17. data/fastlane/lib/fastlane/actions/setup_ci.rb +7 -2
  18. data/fastlane/lib/fastlane/actions/spm.rb +6 -0
  19. data/fastlane/lib/fastlane/actions/testfairy.rb +5 -3
  20. data/fastlane/lib/fastlane/actions/tryouts.rb +3 -2
  21. data/fastlane/lib/fastlane/actions/update_project_team.rb +17 -9
  22. data/fastlane/lib/fastlane/actions/upload_symbols_to_crashlytics.rb +33 -7
  23. data/fastlane/lib/fastlane/helper/git_helper.rb +4 -2
  24. data/fastlane/lib/fastlane/helper/sh_helper.rb +9 -1
  25. data/fastlane/lib/fastlane/plugins/template/%gem_name%.gemspec.erb +1 -1
  26. data/fastlane/lib/fastlane/plugins/template/.rubocop.yml +5 -1
  27. data/fastlane/lib/fastlane/version.rb +1 -1
  28. data/fastlane/swift/Deliverfile.swift +1 -1
  29. data/fastlane/swift/DeliverfileProtocol.swift +9 -2
  30. data/fastlane/swift/Fastlane.swift +66 -20
  31. data/fastlane/swift/FastlaneSwiftRunner/FastlaneSwiftRunner.xcodeproj/project.pbxproj +1 -1
  32. data/fastlane/swift/Gymfile.swift +1 -1
  33. data/fastlane/swift/GymfileProtocol.swift +1 -1
  34. data/fastlane/swift/Matchfile.swift +1 -1
  35. data/fastlane/swift/MatchfileProtocol.swift +1 -1
  36. data/fastlane/swift/Precheckfile.swift +1 -1
  37. data/fastlane/swift/PrecheckfileProtocol.swift +1 -1
  38. data/fastlane/swift/Scanfile.swift +1 -1
  39. data/fastlane/swift/ScanfileProtocol.swift +1 -1
  40. data/fastlane/swift/Screengrabfile.swift +1 -1
  41. data/fastlane/swift/ScreengrabfileProtocol.swift +1 -1
  42. data/fastlane/swift/Snapshotfile.swift +1 -1
  43. data/fastlane/swift/SnapshotfileProtocol.swift +1 -1
  44. data/fastlane_core/lib/fastlane_core/analytics/analytics_event_builder.rb +31 -5
  45. data/fastlane_core/lib/fastlane_core/analytics/analytics_ingester_client.rb +24 -12
  46. data/fastlane_core/lib/fastlane_core/analytics/analytics_session.rb +22 -12
  47. data/fastlane_core/lib/fastlane_core/cert_checker.rb +22 -9
  48. data/fastlane_core/lib/fastlane_core/helper.rb +4 -3
  49. data/fastlane_core/lib/fastlane_core/ipa_upload_package_builder.rb +6 -2
  50. data/fastlane_core/lib/fastlane_core/pkg_upload_package_builder.rb +1 -1
  51. data/fastlane_core/lib/fastlane_core/print_table.rb +0 -16
  52. data/fastlane_core/lib/fastlane_core/queue_worker.rb +10 -1
  53. data/fastlane_core/lib/fastlane_core/video_utils.rb +4 -2
  54. data/gym/lib/gym/module.rb +20 -2
  55. data/match/lib/match/nuke.rb +2 -2
  56. data/match/lib/match/storage/git_storage.rb +1 -4
  57. data/match/lib/match/storage/google_cloud_storage.rb +6 -1
  58. data/pem/lib/pem/manager.rb +5 -1
  59. data/pem/lib/pem/options.rb +6 -0
  60. data/pilot/lib/pilot/build_manager.rb +34 -2
  61. data/pilot/lib/pilot/options.rb +10 -2
  62. data/pilot/lib/pilot/tester_manager.rb +2 -2
  63. data/precheck/lib/precheck/rules/copyright_date_rule.rb +1 -1
  64. data/precheck/lib/precheck/rules/unreachable_urls_rule.rb +2 -2
  65. data/sigh/lib/assets/resign.sh +21 -9
  66. data/snapshot/lib/snapshot/simulator_launchers/simulator_launcher_base.rb +4 -1
  67. data/spaceship/lib/spaceship/client.rb +0 -1
  68. data/spaceship/lib/spaceship/connect_api/file_uploader.rb +1 -1
  69. data/spaceship/lib/spaceship/connect_api/models/age_rating_declaration.rb +6 -0
  70. data/spaceship/lib/spaceship/connect_api/models/app_store_version.rb +16 -0
  71. data/spaceship/lib/spaceship/connect_api/models/beta_group.rb +5 -0
  72. data/spaceship/lib/spaceship/connect_api/models/routing_app_coverage.rb +75 -0
  73. data/spaceship/lib/spaceship/connect_api/token.rb +6 -1
  74. data/spaceship/lib/spaceship/connect_api/tunes/tunes.rb +45 -0
  75. data/spaceship/lib/spaceship/connect_api.rb +1 -0
  76. data/spaceship/lib/spaceship/helper/plist_middleware.rb +37 -8
  77. data/supply/lib/supply/client.rb +6 -0
  78. data/supply/lib/supply/reader.rb +15 -0
  79. metadata +79 -53
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 2b25f32992804c871d4846acd7d3661e7549ed5012323d93b02ea4d545e57513
4
- data.tar.gz: db58ec0cdc765c9ca09fde8b45771de859a1e752f30607495a008e957ea4ec95
3
+ metadata.gz: bc5b46c829520975d6ad2871bf94e7bc3df0f4d2863dcbed323e2b22c2205931
4
+ data.tar.gz: 98f468374c8356ba200173ef637157a9e33747d4a46f3b89b70d4bc407367c47
5
5
  SHA512:
6
- metadata.gz: 3e6e654e96e3c57b1e93f624e0bffb0e93a5e7e984578c4e32d2c6831ebe54982e7d4d5c1752e47451f6d15be37e71b23a59eb6db98861206697bb98c1636bdb
7
- data.tar.gz: eee3973f328a2de3105a650295ecca9c0dd682c551fe28580ff8c8cc610e9988fa17fd09188e4895145b9c822964a09a13a4e92b70c60d15fc519f6ec202be46
6
+ metadata.gz: c03a7a56e6229a7c03f053340e74c8f146c1e4b0149dc0523d75370fa5d755f77c571e0c7a974c955c42fab6fd8d1668823dde0cd031a573e2b1340105c76f69
7
+ data.tar.gz: bc86b7ea3505cf0fd59c0d22ab2ae3324f16b77170abfa4fffcae1cce948d561ea4c436b92cca599d67838e3d6ab59328e42a418be04f4abef90a1d9378b5a26
data/README.md CHANGED
@@ -36,23 +36,11 @@ If the above doesn't help, please [submit an issue](https://github.com/fastlane/
36
36
  <!-- This table is regenerated and resorted on each release -->
37
37
  <table id='team'>
38
38
  <tr>
39
- <td id='connor-tumbleson'>
40
- <a href='https://github.com/ibotpeaches'>
41
- <img src='https://github.com/ibotpeaches.png' width='140px;'>
42
- </a>
43
- <h4 align='center'><a href='https://twitter.com/ibotpeaches'>Connor Tumbleson</a></h4>
44
- </td>
45
- <td id='manu-wallner'>
46
- <a href='https://github.com/milch'>
47
- <img src='https://github.com/milch.png' width='140px;'>
48
- </a>
49
- <h4 align='center'><a href='https://twitter.com/acrooow'>Manu Wallner</a></h4>
50
- </td>
51
- <td id='matthew-ellis'>
52
- <a href='https://github.com/matthewellis'>
53
- <img src='https://github.com/matthewellis.png' width='140px;'>
39
+ <td id='helmut-januschka'>
40
+ <a href='https://github.com/hjanuschka'>
41
+ <img src='https://github.com/hjanuschka.png' width='140px;'>
54
42
  </a>
55
- <h4 align='center'><a href='https://twitter.com/mellis1995'>Matthew Ellis</a></h4>
43
+ <h4 align='center'><a href='https://twitter.com/hjanuschka'>Helmut Januschka</a></h4>
56
44
  </td>
57
45
  <td id='josh-holtz'>
58
46
  <a href='https://github.com/joshdholtz'>
@@ -60,57 +48,31 @@ If the above doesn't help, please [submit an issue](https://github.com/fastlane/
60
48
  </a>
61
49
  <h4 align='center'><a href='https://twitter.com/joshdholtz'>Josh Holtz</a></h4>
62
50
  </td>
63
- <td id='jorge-revuelta-h'>
64
- <a href='https://github.com/minuscorp'>
65
- <img src='https://github.com/minuscorp.png' width='140px;'>
66
- </a>
67
- <h4 align='center'><a href='https://twitter.com/minuscorp'>Jorge Revuelta H</a></h4>
68
- </td>
69
- </tr>
70
- <tr>
71
51
  <td id='felix-krause'>
72
52
  <a href='https://github.com/KrauseFx'>
73
53
  <img src='https://github.com/KrauseFx.png' width='140px;'>
74
54
  </a>
75
55
  <h4 align='center'><a href='https://twitter.com/KrauseFx'>Felix Krause</a></h4>
76
56
  </td>
77
- <td id='maksym-grebenets'>
78
- <a href='https://github.com/mgrebenets'>
79
- <img src='https://github.com/mgrebenets.png' width='140px;'>
80
- </a>
81
- <h4 align='center'><a href='https://twitter.com/mgrebenets'>Maksym Grebenets</a></h4>
82
- </td>
83
57
  <td id='kohki-miki'>
84
58
  <a href='https://github.com/giginet'>
85
59
  <img src='https://github.com/giginet.png' width='140px;'>
86
60
  </a>
87
61
  <h4 align='center'><a href='https://twitter.com/giginet'>Kohki Miki</a></h4>
88
62
  </td>
89
- <td id='joshua-liebowitz'>
90
- <a href='https://github.com/taquitos'>
91
- <img src='https://github.com/taquitos.png' width='140px;'>
92
- </a>
93
- <h4 align='center'><a href='https://twitter.com/taquitos'>Joshua Liebowitz</a></h4>
94
- </td>
95
- <td id='luka-mirosevic'>
96
- <a href='https://github.com/lmirosevic'>
97
- <img src='https://github.com/lmirosevic.png' width='140px;'>
63
+ <td id='andrew-mcburney'>
64
+ <a href='https://github.com/armcburney'>
65
+ <img src='https://github.com/armcburney.png' width='140px;'>
98
66
  </a>
99
- <h4 align='center'><a href='https://twitter.com/lmirosevic'>Luka Mirosevic</a></h4>
67
+ <h4 align='center'><a href='https://twitter.com/armcburney'>Andrew McBurney</a></h4>
100
68
  </td>
101
69
  </tr>
102
70
  <tr>
103
- <td id='jan-piotrowski'>
104
- <a href='https://github.com/janpio'>
105
- <img src='https://github.com/janpio.png' width='140px;'>
106
- </a>
107
- <h4 align='center'><a href='https://twitter.com/Sujan'>Jan Piotrowski</a></h4>
108
- </td>
109
- <td id='stefan-natchev'>
110
- <a href='https://github.com/snatchev'>
111
- <img src='https://github.com/snatchev.png' width='140px;'>
71
+ <td id='roger-oba'>
72
+ <a href='https://github.com/rogerluan'>
73
+ <img src='https://github.com/rogerluan.png' width='140px;'>
112
74
  </a>
113
- <h4 align='center'><a href='https://twitter.com/snatchev'>Stefan Natchev</a></h4>
75
+ <h4 align='center'><a href='https://twitter.com/rogerluan_'>Roger Oba</a></h4>
114
76
  </td>
115
77
  <td id='max-ott'>
116
78
  <a href='https://github.com/max-ott'>
@@ -118,95 +80,133 @@ If the above doesn't help, please [submit an issue](https://github.com/fastlane/
118
80
  </a>
119
81
  <h4 align='center'><a href='https://twitter.com/ott_max'>Max Ott</a></h4>
120
82
  </td>
121
- <td id='roger-oba'>
122
- <a href='https://github.com/rogerluan'>
123
- <img src='https://github.com/rogerluan.png' width='140px;'>
83
+ <td id='aaron-brager'>
84
+ <a href='https://github.com/getaaron'>
85
+ <img src='https://github.com/getaaron.png' width='140px;'>
124
86
  </a>
125
- <h4 align='center'><a href='https://twitter.com/rogerluan_'>Roger Oba</a></h4>
87
+ <h4 align='center'><a href='https://twitter.com/getaaron'>Aaron Brager</a></h4>
126
88
  </td>
127
- <td id='jérôme-lacoste'>
128
- <a href='https://github.com/lacostej'>
129
- <img src='https://github.com/lacostej.png' width='140px;'>
89
+ <td id='matthew-ellis'>
90
+ <a href='https://github.com/matthewellis'>
91
+ <img src='https://github.com/matthewellis.png' width='140px;'>
130
92
  </a>
131
- <h4 align='center'><a href='https://twitter.com/lacostej'>Jérôme Lacoste</a></h4>
93
+ <h4 align='center'><a href='https://twitter.com/mellis1995'>Matthew Ellis</a></h4>
132
94
  </td>
133
- </tr>
134
- <tr>
135
95
  <td id='iulian-onofrei'>
136
96
  <a href='https://github.com/revolter'>
137
97
  <img src='https://github.com/revolter.png' width='140px;'>
138
98
  </a>
139
99
  <h4 align='center'><a href='https://twitter.com/Revolt666'>Iulian Onofrei</a></h4>
140
100
  </td>
141
- <td id='aaron-brager'>
142
- <a href='https://github.com/getaaron'>
143
- <img src='https://github.com/getaaron.png' width='140px;'>
101
+ </tr>
102
+ <tr>
103
+ <td id='danielle-tomlinson'>
104
+ <a href='https://github.com/endocrimes'>
105
+ <img src='https://github.com/endocrimes.png' width='140px;'>
144
106
  </a>
145
- <h4 align='center'><a href='https://twitter.com/getaaron'>Aaron Brager</a></h4>
107
+ <h4 align='center'><a href='https://twitter.com/endocrimes'>Danielle Tomlinson</a></h4>
146
108
  </td>
147
- <td id='daniel-jankowski'>
148
- <a href='https://github.com/mollyIV'>
149
- <img src='https://github.com/mollyIV.png' width='140px;'>
109
+ <td id='fumiya-nakamura'>
110
+ <a href='https://github.com/nafu'>
111
+ <img src='https://github.com/nafu.png' width='140px;'>
150
112
  </a>
151
- <h4 align='center'><a href='https://twitter.com/mollyIV'>Daniel Jankowski</a></h4>
113
+ <h4 align='center'><a href='https://twitter.com/nafu003'>Fumiya Nakamura</a></h4>
152
114
  </td>
153
- <td id='manish-rathi'>
154
- <a href='https://github.com/crazymanish'>
155
- <img src='https://github.com/crazymanish.png' width='140px;'>
115
+ <td id='olivier-halligon'>
116
+ <a href='https://github.com/AliSoftware'>
117
+ <img src='https://github.com/AliSoftware.png' width='140px;'>
156
118
  </a>
157
- <h4 align='center'><a href='https://twitter.com/iammanishrathi'>Manish Rathi</a></h4>
119
+ <h4 align='center'><a href='https://twitter.com/aligatr'>Olivier Halligon</a></h4>
158
120
  </td>
159
- <td id='danielle-tomlinson'>
160
- <a href='https://github.com/endocrimes'>
161
- <img src='https://github.com/endocrimes.png' width='140px;'>
121
+ <td id='jérôme-lacoste'>
122
+ <a href='https://github.com/lacostej'>
123
+ <img src='https://github.com/lacostej.png' width='140px;'>
162
124
  </a>
163
- <h4 align='center'><a href='https://twitter.com/endocrimes'>Danielle Tomlinson</a></h4>
125
+ <h4 align='center'><a href='https://twitter.com/lacostej'>Jérôme Lacoste</a></h4>
126
+ </td>
127
+ <td id='manu-wallner'>
128
+ <a href='https://github.com/milch'>
129
+ <img src='https://github.com/milch.png' width='140px;'>
130
+ </a>
131
+ <h4 align='center'><a href='https://twitter.com/acrooow'>Manu Wallner</a></h4>
164
132
  </td>
165
133
  </tr>
166
134
  <tr>
135
+ <td id='jimmy-dee'>
136
+ <a href='https://github.com/jdee'>
137
+ <img src='https://github.com/jdee.png' width='140px;'>
138
+ </a>
139
+ <h4 align='center'>Jimmy Dee</h4>
140
+ </td>
167
141
  <td id='satoshi-namai'>
168
142
  <a href='https://github.com/ainame'>
169
143
  <img src='https://github.com/ainame.png' width='140px;'>
170
144
  </a>
171
145
  <h4 align='center'><a href='https://twitter.com/ainame'>Satoshi Namai</a></h4>
172
146
  </td>
173
- <td id='helmut-januschka'>
174
- <a href='https://github.com/hjanuschka'>
175
- <img src='https://github.com/hjanuschka.png' width='140px;'>
147
+ <td id='łukasz-grabowski'>
148
+ <a href='https://github.com/lucgrabowski'>
149
+ <img src='https://github.com/lucgrabowski.png' width='140px;'>
176
150
  </a>
177
- <h4 align='center'><a href='https://twitter.com/hjanuschka'>Helmut Januschka</a></h4>
151
+ <h4 align='center'>Łukasz Grabowski</h4>
178
152
  </td>
179
- <td id='andrew-mcburney'>
180
- <a href='https://github.com/armcburney'>
181
- <img src='https://github.com/armcburney.png' width='140px;'>
153
+ <td id='stefan-natchev'>
154
+ <a href='https://github.com/snatchev'>
155
+ <img src='https://github.com/snatchev.png' width='140px;'>
182
156
  </a>
183
- <h4 align='center'><a href='https://twitter.com/armcburney'>Andrew McBurney</a></h4>
157
+ <h4 align='center'><a href='https://twitter.com/snatchev'>Stefan Natchev</a></h4>
184
158
  </td>
185
- <td id='olivier-halligon'>
186
- <a href='https://github.com/AliSoftware'>
187
- <img src='https://github.com/AliSoftware.png' width='140px;'>
159
+ <td id='manish-rathi'>
160
+ <a href='https://github.com/crazymanish'>
161
+ <img src='https://github.com/crazymanish.png' width='140px;'>
188
162
  </a>
189
- <h4 align='center'><a href='https://twitter.com/aligatr'>Olivier Halligon</a></h4>
163
+ <h4 align='center'><a href='https://twitter.com/iammanishrathi'>Manish Rathi</a></h4>
190
164
  </td>
191
- <td id='jimmy-dee'>
192
- <a href='https://github.com/jdee'>
193
- <img src='https://github.com/jdee.png' width='140px;'>
165
+ </tr>
166
+ <tr>
167
+ <td id='joshua-liebowitz'>
168
+ <a href='https://github.com/taquitos'>
169
+ <img src='https://github.com/taquitos.png' width='140px;'>
194
170
  </a>
195
- <h4 align='center'>Jimmy Dee</h4>
171
+ <h4 align='center'><a href='https://twitter.com/taquitos'>Joshua Liebowitz</a></h4>
172
+ </td>
173
+ <td id='daniel-jankowski'>
174
+ <a href='https://github.com/mollyIV'>
175
+ <img src='https://github.com/mollyIV.png' width='140px;'>
176
+ </a>
177
+ <h4 align='center'><a href='https://twitter.com/mollyIV'>Daniel Jankowski</a></h4>
178
+ </td>
179
+ <td id='jorge-revuelta-h'>
180
+ <a href='https://github.com/minuscorp'>
181
+ <img src='https://github.com/minuscorp.png' width='140px;'>
182
+ </a>
183
+ <h4 align='center'><a href='https://twitter.com/minuscorp'>Jorge Revuelta H</a></h4>
184
+ </td>
185
+ <td id='jan-piotrowski'>
186
+ <a href='https://github.com/janpio'>
187
+ <img src='https://github.com/janpio.png' width='140px;'>
188
+ </a>
189
+ <h4 align='center'><a href='https://twitter.com/Sujan'>Jan Piotrowski</a></h4>
190
+ </td>
191
+ <td id='connor-tumbleson'>
192
+ <a href='https://github.com/ibotpeaches'>
193
+ <img src='https://github.com/ibotpeaches.png' width='140px;'>
194
+ </a>
195
+ <h4 align='center'><a href='https://twitter.com/ibotpeaches'>Connor Tumbleson</a></h4>
196
196
  </td>
197
197
  </tr>
198
198
  <tr>
199
- <td id='fumiya-nakamura'>
200
- <a href='https://github.com/nafu'>
201
- <img src='https://github.com/nafu.png' width='140px;'>
199
+ <td id='maksym-grebenets'>
200
+ <a href='https://github.com/mgrebenets'>
201
+ <img src='https://github.com/mgrebenets.png' width='140px;'>
202
202
  </a>
203
- <h4 align='center'><a href='https://twitter.com/nafu003'>Fumiya Nakamura</a></h4>
203
+ <h4 align='center'><a href='https://twitter.com/mgrebenets'>Maksym Grebenets</a></h4>
204
204
  </td>
205
- <td id='łukasz-grabowski'>
206
- <a href='https://github.com/lucgrabowski'>
207
- <img src='https://github.com/lucgrabowski.png' width='140px;'>
205
+ <td id='luka-mirosevic'>
206
+ <a href='https://github.com/lmirosevic'>
207
+ <img src='https://github.com/lmirosevic.png' width='140px;'>
208
208
  </a>
209
- <h4 align='center'>Łukasz Grabowski</h4>
209
+ <h4 align='center'><a href='https://twitter.com/lmirosevic'>Luka Mirosevic</a></h4>
210
210
  </td>
211
211
  </table>
212
212
 
@@ -226,6 +226,13 @@ _fastlane_ tracks a few key metrics to understand how developers are using the t
226
226
 
227
227
  * The number of _fastlane_ runs
228
228
  * A salted hash of the app identifier or package name, which helps us anonymously identify unique usage of _fastlane_
229
+ * How _fastlane_ is executed (Swift vs Ruby)
230
+ * The _fastlane_ version
231
+ * How _fastlane_ was installed (Homebrew, gem, bundler, etc)
232
+ * The Ruby version
233
+ * The Operating System in use
234
+ * The Xcode version
235
+ * Whether it was run in non-interactively or interactively
229
236
 
230
237
  You can easily opt-out of metrics collection by adding `opt_out_usage` at the top of your `Fastfile` or by setting the environment variable `FASTLANE_OPT_OUT_USAGE`. [Check out the metrics code on GitHub](https://github.com/fastlane/fastlane/tree/master/fastlane_core/lib/fastlane_core/analytics)
231
238
 
data/bin/fastlane CHANGED
@@ -1,7 +1,7 @@
1
1
  #!/usr/bin/env ruby
2
2
 
3
- if RUBY_VERSION < '3.0.0'
4
- abort("fastlane requires Ruby 3.0.0 or higher")
3
+ if RUBY_VERSION < '3.1.0'
4
+ abort("fastlane requires Ruby 3.1.0 or higher")
5
5
  end
6
6
 
7
7
  def self.windows?
@@ -24,7 +24,7 @@ module Deliver
24
24
  UI.important("Verifying the upload via the HTML file can be disabled by either adding")
25
25
  UI.important("`force true` to your Deliverfile or using `fastlane deliver --force`")
26
26
 
27
- system("open '#{html_path}'")
27
+ system("open", html_path)
28
28
  okay = UI.confirm("Does the Preview on path '#{html_path}' look okay for you?")
29
29
 
30
30
  if okay
@@ -326,7 +326,7 @@ module Deliver
326
326
  # rubocop:disable Layout/LineLength
327
327
  FastlaneCore::ConfigItem.new(key: :itc_provider,
328
328
  env_name: "DELIVER_ITC_PROVIDER",
329
- description: "The provider short name to be used with the iTMSTransporter to identify your team. This value will override the automatically detected provider short name. To get provider short name run `pathToXcode.app/Contents/Applications/Application\\ Loader.app/Contents/itms/bin/iTMSTransporter -m provider -u 'USERNAME' -p 'PASSWORD' -account_type itunes_connect -v off`. The short names of providers should be listed in the second column",
329
+ description: "The provider short name to be used with the iTMSTransporter to identify your team. This value will override the automatically detected provider short name. To get provider short name run `xcrun iTMSTransporter -m provider -u 'USERNAME' -p 'PASSWORD' -account_type itunes_connect -v off`. The short names of providers should be listed in the second column",
330
330
  optional: true,
331
331
  code_gen_sensitive: true,
332
332
  default_value: CredentialsManager::AppfileConfig.try_fetch_value(:itc_provider),
@@ -420,6 +420,14 @@ module Deliver
420
420
  env_name: "DELIVER_APP_REVIEW_ATTACHMENT_FILE",
421
421
  description: "Metadata: Path to the app review attachment file",
422
422
  optional: true),
423
+ FastlaneCore::ConfigItem.new(key: :routing_app_coverage_file,
424
+ env_name: "DELIVER_ROUTING_APP_COVERAGE_FILE",
425
+ description: "Metadata: Path to the routing app coverage file (`.geojson`) that is required for routing apps",
426
+ optional: true,
427
+ verify_block: proc do |value|
428
+ UI.user_error!("Could not find routing app coverage file at path '#{File.expand_path(value)}'") unless File.exist?(value)
429
+ UI.user_error!("Routing app coverage file must be a .geojson file") unless File.extname(value).casecmp(".geojson").zero?
430
+ end),
423
431
  # Localised
424
432
  FastlaneCore::ConfigItem.new(key: :description,
425
433
  description: "Metadata: The localised app description",
@@ -357,6 +357,7 @@ module Deliver
357
357
  review_information(version)
358
358
  app_clip_review_information(version)
359
359
  review_attachment_file(version)
360
+ routing_app_coverage_file(version)
360
361
  app_rating(app_info)
361
362
  end
362
363
 
@@ -766,6 +767,27 @@ module Deliver
766
767
  end
767
768
  end
768
769
 
770
+ def routing_app_coverage_file(version)
771
+ # Skip logic entirely if no coverage file passed. So status-quo stays the same.
772
+ return unless options[:routing_app_coverage_file]
773
+
774
+ routing_app_coverage =
775
+ begin
776
+ version.fetch_routing_app_coverage
777
+ rescue => error
778
+ UI.error("Error fetching routing app coverage - #{error.message}")
779
+ nil
780
+ end
781
+
782
+ if routing_app_coverage
783
+ UI.message("Removing previous routing app coverage file from App Store Connect")
784
+ routing_app_coverage.delete!
785
+ end
786
+
787
+ UI.message("Uploading routing app coverage file to App Store Connect")
788
+ version.upload_routing_app_coverage(path: options[:routing_app_coverage_file])
789
+ end
790
+
769
791
  def app_rating(app_info)
770
792
  return unless options[:app_rating_config_path]
771
793
 
@@ -171,13 +171,17 @@ module Deliver
171
171
  def wait_for_complete(iterator, timeout_seconds)
172
172
  start_time = Time.now
173
173
  loop do
174
+ # App Store Connect publishes a screenshot's `sourceFileChecksum` asynchronously,
175
+ # shortly after its state becomes COMPLETE. (#30094)
176
+ number_of_screenshots_missing_checksum = 0
174
177
  states = iterator.each_app_screenshot.map { |_, _, app_screenshot| app_screenshot }.each_with_object({}) do |app_screenshot, hash|
175
178
  state = app_screenshot.asset_delivery_state['state']
176
179
  hash[state] ||= 0
177
180
  hash[state] += 1
181
+ number_of_screenshots_missing_checksum += 1 if state == 'COMPLETE' && app_screenshot.source_file_checksum.nil?
178
182
  end
179
183
 
180
- is_processing = states.fetch('UPLOAD_COMPLETE', 0) > 0
184
+ is_processing = states.fetch('UPLOAD_COMPLETE', 0) > 0 || number_of_screenshots_missing_checksum > 0
181
185
  return states unless is_processing
182
186
 
183
187
  if Time.now - start_time > timeout_seconds
@@ -185,7 +189,11 @@ module Deliver
185
189
  return states
186
190
  end
187
191
 
188
- UI.verbose("There are still incomplete screenshots - #{states}")
192
+ if number_of_screenshots_missing_checksum > 0
193
+ UI.verbose("There are still incomplete screenshots - #{states}, missing checksum: #{number_of_screenshots_missing_checksum}")
194
+ else
195
+ UI.verbose("There are still incomplete screenshots - #{states}")
196
+ end
189
197
  sleep(5)
190
198
  end
191
199
  end
@@ -205,9 +213,9 @@ module Deliver
205
213
  UI.user_error!("Failed verification of all screenshots uploaded... #{incomplete_screenshot_count} incomplete screenshot(s) still exist")
206
214
  else
207
215
  UI.error("Failed to upload all screenshots... Tries remaining: #{tries}")
208
- # Delete bad entries before retry
216
+ # Delete bad entries before retry (not complete OR missing checksum)
209
217
  iterator.each_app_screenshot do |_, _, app_screenshot|
210
- app_screenshot.delete! unless app_screenshot.complete?
218
+ app_screenshot.delete! unless app_screenshot.complete? && !app_screenshot.source_file_checksum.nil?
211
219
  end
212
220
  upload_screenshots(localizations, screenshots_per_language, timeout_seconds, tries: tries)
213
221
  end
@@ -37,9 +37,9 @@ module Fastlane
37
37
 
38
38
  Dir.chdir(params[:path]) do
39
39
  if params[:commits_count]
40
- changelog = Actions.git_log_last_commits(params[:pretty], params[:commits_count], merge_commit_filtering, params[:date_format], params[:ancestry_path], params[:app_path])
40
+ changelog = Actions.git_log_last_commits(params[:pretty], params[:commits_count], params[:matching_pattern], merge_commit_filtering, params[:date_format], params[:ancestry_path], params[:app_path])
41
41
  else
42
- changelog = Actions.git_log_between(params[:pretty], from, to, merge_commit_filtering, params[:date_format], params[:ancestry_path], params[:app_path])
42
+ changelog = Actions.git_log_between(params[:pretty], from, to, params[:matching_pattern], merge_commit_filtering, params[:date_format], params[:ancestry_path], params[:app_path])
43
43
  end
44
44
 
45
45
  changelog = changelog.gsub("\n\n", "\n") if changelog # as there are duplicate newlines
@@ -104,6 +104,10 @@ module Fastlane
104
104
  description: 'The format applied to each commit while generating the collected value',
105
105
  optional: true,
106
106
  default_value: '%B'),
107
+ FastlaneCore::ConfigItem.new(key: :matching_pattern,
108
+ env_name: 'FL_CHANGELOG_FROM_GIT_COMMITS_MATCHING_PATTERN',
109
+ description: 'A regexp pattern to filter only the commits matching the pattern',
110
+ optional: true),
107
111
  FastlaneCore::ConfigItem.new(key: :date_format,
108
112
  env_name: 'FL_CHANGELOG_FROM_GIT_COMMITS_DATE_FORMAT',
109
113
  description: 'The date format applied to each commit while generating the collected value',
@@ -179,6 +183,7 @@ module Fastlane
179
183
  pretty: "- (%ae) %s", # Optional, lets you provide a custom format to apply to each commit when generating the changelog text
180
184
  date_format: "short", # Optional, lets you provide an additional date format to dates within the pretty-formatted string
181
185
  match_lightweight_tag: false, # Optional, lets you ignore lightweight (non-annotated) tags when searching for the last tag
186
+ matching_pattern: "[.*?].*", # Optional, lets you filter out commits not matching the regex pattern
182
187
  merge_commit_filtering: "exclude_merges" # Optional, lets you filter out merge commits
183
188
  )'
184
189
  ]
@@ -15,13 +15,14 @@ module Fastlane
15
15
 
16
16
  def self.upload_build(api_token, user_name, binary, options)
17
17
  require 'faraday'
18
- require 'faraday_middleware'
18
+ require 'faraday/multipart'
19
+ require 'faraday/follow_redirects'
19
20
 
20
21
  connection = Faraday.new(url: DEPLOYGATE_URL_BASE, request: { timeout: 120 }) do |builder|
21
22
  builder.request(:multipart)
22
23
  builder.request(:json)
23
24
  builder.response(:json, content_type: /\bjson$/)
24
- builder.use(FaradayMiddleware::FollowRedirects)
25
+ builder.response(:follow_redirects)
25
26
  builder.adapter(:net_http)
26
27
  end
27
28
 
@@ -74,6 +74,12 @@ If you want to generate a Website Push certificate:
74
74
  fastlane pem --website_push
75
75
  ```
76
76
 
77
+ If you want to generate a VoIP Services certificate (the type PushKit requires):
78
+
79
+ ```no-highlight
80
+ fastlane pem --voip_push
81
+ ```
82
+
77
83
  Set a password for your `p12` file:
78
84
 
79
85
  ```no-highlight
@@ -414,9 +414,9 @@ apple_watch_app_icon('./AppleWatchAppIcon.png')
414
414
 
415
415
  The platform of your application (a.e. ios, osx).
416
416
 
417
- This option is optional. The default value is "ios" and deliver should be able to figure out the platform from your binary.
417
+ This option is optional. The default value is "ios" and deliver will ignore this option and figure out the platform from your binary if exactly one binary is present.
418
418
 
419
- However, in the case if multiple binaries present, you can specify a platform which you want to deliver explicitly.
419
+ However, in the cases of no binaries or multiple binaries being present, you can specify a platform which you want to deliver explicitly.
420
420
 
421
421
  The available options:
422
422
 
@@ -697,6 +697,8 @@ Key | Editable While Live | Directory | Filename
697
697
  - `profanityOrCrudeHumor`
698
698
  - `sexualContentGraphicAndNudity`
699
699
  - `sexualContentOrNudity`
700
+ - `socialMedia`
701
+ - `socialMediaAgeRestricted`
700
702
  - `violenceCartoonOrFantasy`
701
703
  - `violenceRealistic`
702
704
  - `violenceRealisticProlongedGraphicOrSadistic`
@@ -9,7 +9,8 @@ module Fastlane
9
9
  class HockeyAction < Action
10
10
  def self.connection(options)
11
11
  require 'faraday'
12
- require 'faraday_middleware'
12
+ require 'faraday/multipart'
13
+ require 'faraday/follow_redirects'
13
14
 
14
15
  base_url = options.delete(:bypass_cdn) ? "https://rink.hockeyapp.net" : "https://upload.hockeyapp.net"
15
16
  foptions = {
@@ -19,7 +20,7 @@ module Fastlane
19
20
  builder.request(:multipart)
20
21
  builder.request(:url_encoded)
21
22
  builder.response(:json, content_type: /\bjson$/)
22
- builder.use(FaradayMiddleware::FollowRedirects)
23
+ builder.response(:follow_redirects)
23
24
  builder.adapter(:net_http)
24
25
  end
25
26
  end
@@ -23,14 +23,15 @@ module Fastlane
23
23
 
24
24
  def self.upload_build(params)
25
25
  require 'faraday'
26
- require 'faraday_middleware'
26
+ require 'faraday/multipart'
27
+ require 'faraday/follow_redirects'
27
28
 
28
29
  url = INSTALLR_API
29
30
  connection = Faraday.new(url) do |builder|
30
31
  builder.request(:multipart)
31
32
  builder.request(:url_encoded)
32
33
  builder.response(:json, content_type: /\bjson$/)
33
- builder.use(FaradayMiddleware::FollowRedirects)
34
+ builder.response(:follow_redirects)
34
35
  builder.adapter(:net_http)
35
36
  end
36
37
 
@@ -137,6 +137,7 @@ module Fastlane
137
137
  params.store(:attachment, attachments)
138
138
  end
139
139
 
140
+ require 'faraday/multipart'
140
141
  conn = Faraday.new(url: "https://api:#{options[:apikey]}@api.mailgun.net") do |f|
141
142
  f.request(:multipart)
142
143
  f.request(:url_encoded)
@@ -4,7 +4,6 @@ module Fastlane
4
4
  # rubocop:disable Metrics/PerceivedComplexity
5
5
  def self.run(params)
6
6
  package_path = params[:package]
7
- bundle_id = params[:bundle_id]
8
7
  skip_stapling = params[:skip_stapling]
9
8
  print_log = params[:print_log]
10
9
  verbose = params[:verbose]
@@ -15,7 +14,7 @@ module Fastlane
15
14
  end
16
15
  api_key = Spaceship::ConnectAPI::Token.from(hash: params[:api_key], filepath: params[:api_key_path])
17
16
 
18
- # Compress and read bundle identifier only for .app bundle.
17
+ # Compress only if .app bundle
19
18
  compressed_package_path = nil
20
19
  if File.extname(package_path) == '.app'
21
20
  compressed_package_path = "#{package_path}.zip"
@@ -23,22 +22,12 @@ module Fastlane
23
22
  "ditto -c -k --rsrc --keepParent \"#{package_path}\" \"#{compressed_package_path}\"",
24
23
  log: verbose
25
24
  )
26
-
27
- unless bundle_id
28
- info_plist_path = File.join(package_path, 'Contents', 'Info.plist')
29
- bundle_id = Actions.sh(
30
- "/usr/libexec/PlistBuddy -c \"Print :CFBundleIdentifier\" \"#{info_plist_path}\"",
31
- log: verbose
32
- ).strip
33
- end
34
25
  end
35
26
 
36
- UI.user_error!('Could not read bundle identifier, provide as a parameter') unless bundle_id
37
-
38
- notarytool(params, package_path, bundle_id, skip_stapling, print_log, verbose, api_key, compressed_package_path)
27
+ notarytool(params, package_path, skip_stapling, print_log, verbose, api_key, compressed_package_path)
39
28
  end
40
29
 
41
- def self.notarytool(params, package_path, bundle_id, skip_stapling, print_log, verbose, api_key, compressed_package_path)
30
+ def self.notarytool(params, package_path, skip_stapling, print_log, verbose, api_key, compressed_package_path)
42
31
  temp_file = nil
43
32
 
44
33
  # Create authorization part of command with either API Key or Apple ID
@@ -154,10 +143,6 @@ module Fastlane
154
143
  optional: true,
155
144
  default_value: false,
156
145
  type: Boolean),
157
- FastlaneCore::ConfigItem.new(key: :bundle_id,
158
- env_name: 'FL_NOTARIZE_BUNDLE_ID',
159
- description: 'Bundle identifier to uniquely identify the package',
160
- optional: true),
161
146
  FastlaneCore::ConfigItem.new(key: :username,
162
147
  env_name: 'FL_NOTARIZE_USERNAME',
163
148
  description: 'Apple ID username',