fastlane 2.236.1 → 2.237.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 (46) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +104 -104
  3. data/fastlane/lib/fastlane/actions/docs/upload_to_app_store.md.erb +3 -1
  4. data/fastlane/lib/fastlane/actions/swiftlint.rb +10 -1
  5. data/fastlane/lib/fastlane/helper/sh_helper.rb +7 -3
  6. data/fastlane/lib/fastlane/lane_manager.rb +0 -1
  7. data/fastlane/lib/fastlane/plugins/template/.github/workflows/test.yml +0 -7
  8. data/fastlane/lib/fastlane/plugins/template/.gitignore +0 -1
  9. data/fastlane/lib/fastlane/plugins/template/.rspec +0 -2
  10. data/fastlane/lib/fastlane/plugins/template/Gemfile.erb +0 -2
  11. data/fastlane/lib/fastlane/version.rb +1 -1
  12. data/fastlane/swift/Deliverfile.swift +1 -1
  13. data/fastlane/swift/DeliverfileProtocol.swift +1 -1
  14. data/fastlane/swift/Fastlane.swift +23 -3
  15. data/fastlane/swift/Gymfile.swift +1 -1
  16. data/fastlane/swift/GymfileProtocol.swift +1 -1
  17. data/fastlane/swift/Matchfile.swift +1 -1
  18. data/fastlane/swift/MatchfileProtocol.swift +8 -1
  19. data/fastlane/swift/Precheckfile.swift +1 -1
  20. data/fastlane/swift/PrecheckfileProtocol.swift +1 -1
  21. data/fastlane/swift/Scanfile.swift +1 -1
  22. data/fastlane/swift/ScanfileProtocol.swift +8 -1
  23. data/fastlane/swift/Screengrabfile.swift +1 -1
  24. data/fastlane/swift/ScreengrabfileProtocol.swift +1 -1
  25. data/fastlane/swift/Snapshotfile.swift +1 -1
  26. data/fastlane/swift/SnapshotfileProtocol.swift +1 -1
  27. data/fastlane_core/lib/fastlane_core/itunes_transporter.rb +3 -1
  28. data/fastlane_core/lib/fastlane_core/keychain_importer.rb +1 -1
  29. data/fastlane_core/lib/fastlane_core/project.rb +3 -1
  30. data/fastlane_core/lib/fastlane_core/ui/errors/fastlane_shell_error.rb +6 -0
  31. data/fastlane_core/lib/fastlane_core/ui/fastlane_runner.rb +1 -1
  32. data/gym/lib/gym/error_handler.rb +11 -1
  33. data/gym/lib/gym/generators/build_command_generator.rb +2 -0
  34. data/match/lib/match/options.rb +8 -0
  35. data/match/lib/match/runner.rb +4 -2
  36. data/match/lib/match/storage/git_storage.rb +18 -2
  37. data/precheck/lib/precheck/rules/copyright_date_rule.rb +15 -9
  38. data/scan/lib/scan/options.rb +5 -0
  39. data/scan/lib/scan/runner.rb +1 -0
  40. data/scan/lib/scan/test_command_generator.rb +2 -0
  41. data/spaceship/lib/spaceship/connect_api/tunes/tunes.rb +7 -2
  42. data/supply/lib/supply/uploader.rb +7 -1
  43. data/trainer/lib/trainer/xcresult/test_case.rb +21 -2
  44. data/trainer/lib/trainer/xcresult/test_plan.rb +3 -3
  45. data/trainer/lib/trainer/xcresult/test_suite.rb +28 -19
  46. metadata +24 -24
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 78572beb07948c1146ef8121ee4c3f8bcdb2ef13c8361e9e14fbf2e041372f8c
4
- data.tar.gz: 286509c211c9afab401cc2d6dbf951c59af85385ecad675bca954ed0e5a298b0
3
+ metadata.gz: 2b25f32992804c871d4846acd7d3661e7549ed5012323d93b02ea4d545e57513
4
+ data.tar.gz: db58ec0cdc765c9ca09fde8b45771de859a1e752f30607495a008e957ea4ec95
5
5
  SHA512:
6
- metadata.gz: 770641af71fdf6943d8d38c2a52fef164e79ae180faa4c136c2a16c925b6ddceb3e819d616bafb570a9067b49a0d03e4d6ff37337f5ea77fb70255e378d9eadc
7
- data.tar.gz: 4ca991f3156f0b07e179a052cbd522a9963167e46d4569feb13a8972a76ea4f6cde50f888683f4b825b8619f4dc02757c77cf9f7267b9c2af127fb43bc301b35
6
+ metadata.gz: 3e6e654e96e3c57b1e93f624e0bffb0e93a5e7e984578c4e32d2c6831ebe54982e7d4d5c1752e47451f6d15be37e71b23a59eb6db98861206697bb98c1636bdb
7
+ data.tar.gz: eee3973f328a2de3105a650295ecca9c0dd682c551fe28580ff8c8cc610e9988fa17fd09188e4895145b9c822964a09a13a4e92b70c60d15fc519f6ec202be46
data/README.md CHANGED
@@ -36,93 +36,87 @@ 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='stefan-natchev'>
40
- <a href='https://github.com/snatchev'>
41
- <img src='https://github.com/snatchev.png' width='140px;'>
39
+ <td id='connor-tumbleson'>
40
+ <a href='https://github.com/ibotpeaches'>
41
+ <img src='https://github.com/ibotpeaches.png' width='140px;'>
42
42
  </a>
43
- <h4 align='center'><a href='https://twitter.com/snatchev'>Stefan Natchev</a></h4>
43
+ <h4 align='center'><a href='https://twitter.com/ibotpeaches'>Connor Tumbleson</a></h4>
44
44
  </td>
45
- <td id='jérôme-lacoste'>
46
- <a href='https://github.com/lacostej'>
47
- <img src='https://github.com/lacostej.png' width='140px;'>
45
+ <td id='manu-wallner'>
46
+ <a href='https://github.com/milch'>
47
+ <img src='https://github.com/milch.png' width='140px;'>
48
48
  </a>
49
- <h4 align='center'><a href='https://twitter.com/lacostej'>Jérôme Lacoste</a></h4>
49
+ <h4 align='center'><a href='https://twitter.com/acrooow'>Manu Wallner</a></h4>
50
50
  </td>
51
- <td id='manish-rathi'>
52
- <a href='https://github.com/crazymanish'>
53
- <img src='https://github.com/crazymanish.png' width='140px;'>
51
+ <td id='matthew-ellis'>
52
+ <a href='https://github.com/matthewellis'>
53
+ <img src='https://github.com/matthewellis.png' width='140px;'>
54
54
  </a>
55
- <h4 align='center'><a href='https://twitter.com/iammanishrathi'>Manish Rathi</a></h4>
55
+ <h4 align='center'><a href='https://twitter.com/mellis1995'>Matthew Ellis</a></h4>
56
56
  </td>
57
- <td id='helmut-januschka'>
58
- <a href='https://github.com/hjanuschka'>
59
- <img src='https://github.com/hjanuschka.png' width='140px;'>
57
+ <td id='josh-holtz'>
58
+ <a href='https://github.com/joshdholtz'>
59
+ <img src='https://github.com/joshdholtz.png' width='140px;'>
60
60
  </a>
61
- <h4 align='center'><a href='https://twitter.com/hjanuschka'>Helmut Januschka</a></h4>
61
+ <h4 align='center'><a href='https://twitter.com/joshdholtz'>Josh Holtz</a></h4>
62
62
  </td>
63
- <td id='manu-wallner'>
64
- <a href='https://github.com/milch'>
65
- <img src='https://github.com/milch.png' width='140px;'>
63
+ <td id='jorge-revuelta-h'>
64
+ <a href='https://github.com/minuscorp'>
65
+ <img src='https://github.com/minuscorp.png' width='140px;'>
66
66
  </a>
67
- <h4 align='center'><a href='https://twitter.com/acrooow'>Manu Wallner</a></h4>
67
+ <h4 align='center'><a href='https://twitter.com/minuscorp'>Jorge Revuelta H</a></h4>
68
68
  </td>
69
69
  </tr>
70
70
  <tr>
71
- <td id='luka-mirosevic'>
72
- <a href='https://github.com/lmirosevic'>
73
- <img src='https://github.com/lmirosevic.png' width='140px;'>
71
+ <td id='felix-krause'>
72
+ <a href='https://github.com/KrauseFx'>
73
+ <img src='https://github.com/KrauseFx.png' width='140px;'>
74
74
  </a>
75
- <h4 align='center'><a href='https://twitter.com/lmirosevic'>Luka Mirosevic</a></h4>
75
+ <h4 align='center'><a href='https://twitter.com/KrauseFx'>Felix Krause</a></h4>
76
76
  </td>
77
- <td id='jimmy-dee'>
78
- <a href='https://github.com/jdee'>
79
- <img src='https://github.com/jdee.png' width='140px;'>
77
+ <td id='maksym-grebenets'>
78
+ <a href='https://github.com/mgrebenets'>
79
+ <img src='https://github.com/mgrebenets.png' width='140px;'>
80
80
  </a>
81
- <h4 align='center'>Jimmy Dee</h4>
81
+ <h4 align='center'><a href='https://twitter.com/mgrebenets'>Maksym Grebenets</a></h4>
82
82
  </td>
83
- <td id='danielle-tomlinson'>
84
- <a href='https://github.com/endocrimes'>
85
- <img src='https://github.com/endocrimes.png' width='140px;'>
83
+ <td id='kohki-miki'>
84
+ <a href='https://github.com/giginet'>
85
+ <img src='https://github.com/giginet.png' width='140px;'>
86
86
  </a>
87
- <h4 align='center'><a href='https://twitter.com/endocrimes'>Danielle Tomlinson</a></h4>
87
+ <h4 align='center'><a href='https://twitter.com/giginet'>Kohki Miki</a></h4>
88
88
  </td>
89
- <td id='jan-piotrowski'>
90
- <a href='https://github.com/janpio'>
91
- <img src='https://github.com/janpio.png' width='140px;'>
89
+ <td id='joshua-liebowitz'>
90
+ <a href='https://github.com/taquitos'>
91
+ <img src='https://github.com/taquitos.png' width='140px;'>
92
92
  </a>
93
- <h4 align='center'><a href='https://twitter.com/Sujan'>Jan Piotrowski</a></h4>
93
+ <h4 align='center'><a href='https://twitter.com/taquitos'>Joshua Liebowitz</a></h4>
94
94
  </td>
95
- <td id='aaron-brager'>
96
- <a href='https://github.com/getaaron'>
97
- <img src='https://github.com/getaaron.png' width='140px;'>
95
+ <td id='luka-mirosevic'>
96
+ <a href='https://github.com/lmirosevic'>
97
+ <img src='https://github.com/lmirosevic.png' width='140px;'>
98
98
  </a>
99
- <h4 align='center'><a href='https://twitter.com/getaaron'>Aaron Brager</a></h4>
99
+ <h4 align='center'><a href='https://twitter.com/lmirosevic'>Luka Mirosevic</a></h4>
100
100
  </td>
101
101
  </tr>
102
102
  <tr>
103
- <td id='satoshi-namai'>
104
- <a href='https://github.com/ainame'>
105
- <img src='https://github.com/ainame.png' width='140px;'>
106
- </a>
107
- <h4 align='center'><a href='https://twitter.com/ainame'>Satoshi Namai</a></h4>
108
- </td>
109
- <td id='matthew-ellis'>
110
- <a href='https://github.com/matthewellis'>
111
- <img src='https://github.com/matthewellis.png' width='140px;'>
103
+ <td id='jan-piotrowski'>
104
+ <a href='https://github.com/janpio'>
105
+ <img src='https://github.com/janpio.png' width='140px;'>
112
106
  </a>
113
- <h4 align='center'><a href='https://twitter.com/mellis1995'>Matthew Ellis</a></h4>
107
+ <h4 align='center'><a href='https://twitter.com/Sujan'>Jan Piotrowski</a></h4>
114
108
  </td>
115
- <td id='felix-krause'>
116
- <a href='https://github.com/KrauseFx'>
117
- <img src='https://github.com/KrauseFx.png' width='140px;'>
109
+ <td id='stefan-natchev'>
110
+ <a href='https://github.com/snatchev'>
111
+ <img src='https://github.com/snatchev.png' width='140px;'>
118
112
  </a>
119
- <h4 align='center'><a href='https://twitter.com/KrauseFx'>Felix Krause</a></h4>
113
+ <h4 align='center'><a href='https://twitter.com/snatchev'>Stefan Natchev</a></h4>
120
114
  </td>
121
- <td id='connor-tumbleson'>
122
- <a href='https://github.com/ibotpeaches'>
123
- <img src='https://github.com/ibotpeaches.png' width='140px;'>
115
+ <td id='max-ott'>
116
+ <a href='https://github.com/max-ott'>
117
+ <img src='https://github.com/max-ott.png' width='140px;'>
124
118
  </a>
125
- <h4 align='center'><a href='https://twitter.com/ibotpeaches'>Connor Tumbleson</a></h4>
119
+ <h4 align='center'><a href='https://twitter.com/ott_max'>Max Ott</a></h4>
126
120
  </td>
127
121
  <td id='roger-oba'>
128
122
  <a href='https://github.com/rogerluan'>
@@ -130,63 +124,63 @@ If the above doesn't help, please [submit an issue](https://github.com/fastlane/
130
124
  </a>
131
125
  <h4 align='center'><a href='https://twitter.com/rogerluan_'>Roger Oba</a></h4>
132
126
  </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;'>
130
+ </a>
131
+ <h4 align='center'><a href='https://twitter.com/lacostej'>Jérôme Lacoste</a></h4>
132
+ </td>
133
133
  </tr>
134
134
  <tr>
135
- <td id='łukasz-grabowski'>
136
- <a href='https://github.com/lucgrabowski'>
137
- <img src='https://github.com/lucgrabowski.png' width='140px;'>
135
+ <td id='iulian-onofrei'>
136
+ <a href='https://github.com/revolter'>
137
+ <img src='https://github.com/revolter.png' width='140px;'>
138
138
  </a>
139
- <h4 align='center'>Łukasz Grabowski</h4>
139
+ <h4 align='center'><a href='https://twitter.com/Revolt666'>Iulian Onofrei</a></h4>
140
140
  </td>
141
- <td id='jorge-revuelta-h'>
142
- <a href='https://github.com/minuscorp'>
143
- <img src='https://github.com/minuscorp.png' width='140px;'>
141
+ <td id='aaron-brager'>
142
+ <a href='https://github.com/getaaron'>
143
+ <img src='https://github.com/getaaron.png' width='140px;'>
144
144
  </a>
145
- <h4 align='center'><a href='https://twitter.com/minuscorp'>Jorge Revuelta H</a></h4>
145
+ <h4 align='center'><a href='https://twitter.com/getaaron'>Aaron Brager</a></h4>
146
146
  </td>
147
- <td id='kohki-miki'>
148
- <a href='https://github.com/giginet'>
149
- <img src='https://github.com/giginet.png' width='140px;'>
147
+ <td id='daniel-jankowski'>
148
+ <a href='https://github.com/mollyIV'>
149
+ <img src='https://github.com/mollyIV.png' width='140px;'>
150
150
  </a>
151
- <h4 align='center'><a href='https://twitter.com/giginet'>Kohki Miki</a></h4>
151
+ <h4 align='center'><a href='https://twitter.com/mollyIV'>Daniel Jankowski</a></h4>
152
152
  </td>
153
- <td id='iulian-onofrei'>
154
- <a href='https://github.com/revolter'>
155
- <img src='https://github.com/revolter.png' width='140px;'>
153
+ <td id='manish-rathi'>
154
+ <a href='https://github.com/crazymanish'>
155
+ <img src='https://github.com/crazymanish.png' width='140px;'>
156
156
  </a>
157
- <h4 align='center'><a href='https://twitter.com/Revolt666'>Iulian Onofrei</a></h4>
157
+ <h4 align='center'><a href='https://twitter.com/iammanishrathi'>Manish Rathi</a></h4>
158
158
  </td>
159
- <td id='fumiya-nakamura'>
160
- <a href='https://github.com/nafu'>
161
- <img src='https://github.com/nafu.png' width='140px;'>
159
+ <td id='danielle-tomlinson'>
160
+ <a href='https://github.com/endocrimes'>
161
+ <img src='https://github.com/endocrimes.png' width='140px;'>
162
162
  </a>
163
- <h4 align='center'><a href='https://twitter.com/nafu003'>Fumiya Nakamura</a></h4>
163
+ <h4 align='center'><a href='https://twitter.com/endocrimes'>Danielle Tomlinson</a></h4>
164
164
  </td>
165
165
  </tr>
166
166
  <tr>
167
- <td id='andrew-mcburney'>
168
- <a href='https://github.com/armcburney'>
169
- <img src='https://github.com/armcburney.png' width='140px;'>
170
- </a>
171
- <h4 align='center'><a href='https://twitter.com/armcburney'>Andrew McBurney</a></h4>
172
- </td>
173
- <td id='maksym-grebenets'>
174
- <a href='https://github.com/mgrebenets'>
175
- <img src='https://github.com/mgrebenets.png' width='140px;'>
167
+ <td id='satoshi-namai'>
168
+ <a href='https://github.com/ainame'>
169
+ <img src='https://github.com/ainame.png' width='140px;'>
176
170
  </a>
177
- <h4 align='center'><a href='https://twitter.com/mgrebenets'>Maksym Grebenets</a></h4>
171
+ <h4 align='center'><a href='https://twitter.com/ainame'>Satoshi Namai</a></h4>
178
172
  </td>
179
- <td id='max-ott'>
180
- <a href='https://github.com/max-ott'>
181
- <img src='https://github.com/max-ott.png' width='140px;'>
173
+ <td id='helmut-januschka'>
174
+ <a href='https://github.com/hjanuschka'>
175
+ <img src='https://github.com/hjanuschka.png' width='140px;'>
182
176
  </a>
183
- <h4 align='center'><a href='https://twitter.com/ott_max'>Max Ott</a></h4>
177
+ <h4 align='center'><a href='https://twitter.com/hjanuschka'>Helmut Januschka</a></h4>
184
178
  </td>
185
- <td id='josh-holtz'>
186
- <a href='https://github.com/joshdholtz'>
187
- <img src='https://github.com/joshdholtz.png' width='140px;'>
179
+ <td id='andrew-mcburney'>
180
+ <a href='https://github.com/armcburney'>
181
+ <img src='https://github.com/armcburney.png' width='140px;'>
188
182
  </a>
189
- <h4 align='center'><a href='https://twitter.com/joshdholtz'>Josh Holtz</a></h4>
183
+ <h4 align='center'><a href='https://twitter.com/armcburney'>Andrew McBurney</a></h4>
190
184
  </td>
191
185
  <td id='olivier-halligon'>
192
186
  <a href='https://github.com/AliSoftware'>
@@ -194,19 +188,25 @@ If the above doesn't help, please [submit an issue](https://github.com/fastlane/
194
188
  </a>
195
189
  <h4 align='center'><a href='https://twitter.com/aligatr'>Olivier Halligon</a></h4>
196
190
  </td>
191
+ <td id='jimmy-dee'>
192
+ <a href='https://github.com/jdee'>
193
+ <img src='https://github.com/jdee.png' width='140px;'>
194
+ </a>
195
+ <h4 align='center'>Jimmy Dee</h4>
196
+ </td>
197
197
  </tr>
198
198
  <tr>
199
- <td id='joshua-liebowitz'>
200
- <a href='https://github.com/taquitos'>
201
- <img src='https://github.com/taquitos.png' width='140px;'>
199
+ <td id='fumiya-nakamura'>
200
+ <a href='https://github.com/nafu'>
201
+ <img src='https://github.com/nafu.png' width='140px;'>
202
202
  </a>
203
- <h4 align='center'><a href='https://twitter.com/taquitos'>Joshua Liebowitz</a></h4>
203
+ <h4 align='center'><a href='https://twitter.com/nafu003'>Fumiya Nakamura</a></h4>
204
204
  </td>
205
- <td id='daniel-jankowski'>
206
- <a href='https://github.com/mollyIV'>
207
- <img src='https://github.com/mollyIV.png' width='140px;'>
205
+ <td id='łukasz-grabowski'>
206
+ <a href='https://github.com/lucgrabowski'>
207
+ <img src='https://github.com/lucgrabowski.png' width='140px;'>
208
208
  </a>
209
- <h4 align='center'><a href='https://twitter.com/mollyIV'>Daniel Jankowski</a></h4>
209
+ <h4 align='center'>Łukasz Grabowski</h4>
210
210
  </td>
211
211
  </table>
212
212
 
@@ -817,7 +817,9 @@ In this case, default values for keywords, urls, name and release notes are used
817
817
 
818
818
  [Starting March 20, 2019 Apple's App Store](https://developer.apple.com/news/?id=03202019a) requires 12.9-inch iPad Pro (3rd generation) screenshots additionally to the iPad Pro 2nd generation [screenshots](https://help.apple.com/app-store-connect/#/devd274dd925). As fastlane historically uses the screenshot dimensions to determine the "display family" of a screenshot, this poses a problem as both use the same dimensions and are recognized as the same device family.
819
819
 
820
- To solve this a screenshot of a 12.9-inch iPad Pro (3rd generation) must contain either the string `iPad Pro (12.9-inch) (3rd generation)`, `IPAD_PRO_3GEN_129`, or `ipadPro129` (Apple's internal naming of the display family for the 3rd generation iPad Pro) in its filename to be assigned the correct display family and to be uploaded to the correct screenshot slot in your app's metadata.
820
+ For fastlane 2.230.0 and later, screenshots with the shared 12.9-inch iPad Pro resolution are treated as 3rd generation (and later) by default. To upload to the 2nd generation slot, include either `APP_IPAD_PRO_129` or both `12.9` and `2nd generation` in the filename.
821
+
822
+ > Note: For fastlane versions earlier than 2.230.0, a screenshot of a 12.9-inch iPad Pro (3rd generation) must contain either the string `iPad Pro (12.9-inch) (3rd generation)`, `IPAD_PRO_3GEN_129`, or `ipadPro129` (Apple's internal naming of the display family for the 3rd generation iPad Pro) in its filename to be assigned the correct display family and to be uploaded to the correct screenshot slot in your app's metadata.
821
823
 
822
824
  ## Automatically create screenshots
823
825
 
@@ -37,6 +37,8 @@ module Fastlane
37
37
  command << " --use-script-input-files"
38
38
  end
39
39
 
40
+ command << path_argument(params) if params[:path]
41
+
40
42
  command << " > #{params[:output_file].shellescape}" if params[:output_file]
41
43
 
42
44
  begin
@@ -49,7 +51,6 @@ module Fastlane
49
51
 
50
52
  def self.optional_flags(params)
51
53
  command = ""
52
- command << " --path #{params[:path].shellescape}" if params[:path]
53
54
  command << supported_option_switch(params, :strict, "0.9.2", true)
54
55
  command << " --config #{params[:config_file].shellescape}" if params[:config_file]
55
56
  command << " --reporter #{params[:reporter]}" if params[:reporter]
@@ -61,6 +62,14 @@ module Fastlane
61
62
  return command
62
63
  end
63
64
 
65
+ def self.path_argument(params)
66
+ escaped_path = params[:path].shellescape
67
+ version = swiftlint_version(executable: params[:executable])
68
+ return " --path #{escaped_path}" if version < Gem::Version.new('0.48.0')
69
+
70
+ " #{escaped_path}"
71
+ end
72
+
64
73
  # Get current SwiftLint version
65
74
  def self.swiftlint_version(executable: nil)
66
75
  binary = executable || 'swiftlint'
@@ -65,12 +65,16 @@ module Fastlane
65
65
  # with previous implementations of sh and... probably portable to all
66
66
  # relevant platforms.
67
67
  if exit_status.exitstatus != 0
68
+ # Due to some output and build systems having 30-80k lines of output.
69
+ # We will truncate what we will show to recap the failure.
70
+ truncated_msg = result.length > 500 ? result[-500..-1] : result
71
+
68
72
  message = if print_command
69
- "Exit status of command '#{shell_command}' was #{exit_status.exitstatus} instead of 0."
73
+ "Exit status of command '#{shell_command}' was #{exit_status.exitstatus} instead of 0.\n"
70
74
  else
71
- "Shell command exited with exit status #{exit_status.exitstatus} instead of 0."
75
+ "Shell command exited with exit status #{exit_status.exitstatus} instead of 0.\n"
72
76
  end
73
- message += "\n#{result}" if print_command_output
77
+ message += (truncated_msg).to_s if print_command_output && !$stdout.isatty
74
78
 
75
79
  if error_callback || block_given?
76
80
  UI.error(message)
@@ -55,7 +55,6 @@ module Fastlane
55
55
 
56
56
  print_lane_context
57
57
  print_error_line(ex)
58
- UI.error(ex.to_s) if ex.kind_of?(StandardError) # we don't want to print things like 'system exit'
59
58
  e = ex
60
59
  end
61
60
 
@@ -20,10 +20,3 @@ jobs:
20
20
 
21
21
  - name: Run tests
22
22
  run: bundle exec rake
23
-
24
- - name: Upload artifact
25
- uses: actions/upload-artifact@v5
26
- if: failure()
27
- with:
28
- name: test-results-ruby-${{ matrix.ruby-version }}
29
- path: test-results
@@ -9,4 +9,3 @@ Gemfile.lock
9
9
  fastlane/README.md
10
10
  fastlane/report.xml
11
11
  coverage
12
- test-results
@@ -1,5 +1,3 @@
1
1
  --require spec_helper
2
2
  --color
3
3
  --format d
4
- --format RspecJunitFormatter
5
- --out test-results/rspec/rspec.xml
@@ -10,8 +10,6 @@ gem 'pry'
10
10
  gem 'rake'
11
11
  # Behavior-driven testing tool for Ruby.
12
12
  gem 'rspec'
13
- # Formatter for RSpec to generate JUnit compatible reports.
14
- gem 'rspec_junit_formatter'
15
13
  # A Ruby static code analyzer and formatter.
16
14
  gem 'rubocop', '<%= Fastlane::RUBOCOP_REQUIREMENT %>'
17
15
  # A collection of RuboCop cops for performance optimizations.
@@ -1,5 +1,5 @@
1
1
  module Fastlane
2
- VERSION = '2.236.1'.freeze
2
+ VERSION = '2.237.0'.freeze
3
3
  SUMMARY = "The easiest way to build and release mobile apps.".freeze
4
4
  DESCRIPTION = "The easiest way to automate beta deployments and releases for your iOS and Android apps".freeze
5
5
  MINIMUM_XCODE_RELEASE = "7.0".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.236.1
20
+ // Generated with fastlane 2.237.0
@@ -532,4 +532,4 @@ public extension DeliverfileProtocol {
532
532
 
533
533
  // Please don't remove the lines below
534
534
  // They are used to detect outdated files
535
- // FastlaneRunnerAPIVersion [0.9.150]
535
+ // FastlaneRunnerAPIVersion [0.9.151]
@@ -2958,7 +2958,7 @@ public func chatwork(apiToken: String,
2958
2958
  - curseWords: including words that might be considered objectionable
2959
2959
  - freeStuffInIap: using text indicating that your IAP is free
2960
2960
  - customText: mentioning any of the user-specified words passed to custom_text(data: [words])
2961
- - copyrightDate: using a copyright date that is any different from this current year, or missing a date
2961
+ - copyrightDate: using a copyright year in the future, or missing a copyright year
2962
2962
  - unreachableUrls: unreachable URLs in app metadata
2963
2963
 
2964
2964
  - returns: true if precheck passes, else, false
@@ -6909,6 +6909,7 @@ public func makeChangelogFromJenkins(fallbackChangelog: String = "",
6909
6909
  - includeAllCertificates: Include all matching certificates in the provisioning profile. Works only for the 'development' provisioning profile type
6910
6910
  - certificateId: Select certificate by id. Useful if multiple certificates are stored in one place
6911
6911
  - forceForNewCertificates: Renew the provisioning profiles if the certificate count on the developer portal has changed. Works only for the 'development' provisioning profile type. Requires 'include_all_certificates' option to be 'true'
6912
+ - renewExpiredCerts: Automatically renew expired certificates. Note: to renew `developer_id` and `developer_id_installer` certificates you must log in with the Account Holder account by using username and password; App Store Connect API key doesn't work in this case. The expired certificate is removed from the match storage and a new one is created, but the old certificate is not revoked on the Apple Developer Portal — run `fastlane match nuke` if you need to free up certificate slots
6912
6913
  - skipConfirmation: Disables confirmation prompts during nuke, answering them with yes
6913
6914
  - safeRemoveCerts: Remove certs from repository during nuke without revoking them on the developer portal
6914
6915
  - skipDocs: Skip generation of a README.md for the created git repository
@@ -6969,6 +6970,7 @@ public func match(type: String = matchfile.type,
6969
6970
  includeAllCertificates: OptionalConfigValue<Bool> = .fastlaneDefault(matchfile.includeAllCertificates),
6970
6971
  certificateId: OptionalConfigValue<String?> = .fastlaneDefault(matchfile.certificateId),
6971
6972
  forceForNewCertificates: OptionalConfigValue<Bool> = .fastlaneDefault(matchfile.forceForNewCertificates),
6973
+ renewExpiredCerts: OptionalConfigValue<Bool> = .fastlaneDefault(matchfile.renewExpiredCerts),
6972
6974
  skipConfirmation: OptionalConfigValue<Bool> = .fastlaneDefault(matchfile.skipConfirmation),
6973
6975
  safeRemoveCerts: OptionalConfigValue<Bool> = .fastlaneDefault(matchfile.safeRemoveCerts),
6974
6976
  skipDocs: OptionalConfigValue<Bool> = .fastlaneDefault(matchfile.skipDocs),
@@ -7027,6 +7029,7 @@ public func match(type: String = matchfile.type,
7027
7029
  let includeAllCertificatesArg = includeAllCertificates.asRubyArgument(name: "include_all_certificates", type: nil)
7028
7030
  let certificateIdArg = certificateId.asRubyArgument(name: "certificate_id", type: nil)
7029
7031
  let forceForNewCertificatesArg = forceForNewCertificates.asRubyArgument(name: "force_for_new_certificates", type: nil)
7032
+ let renewExpiredCertsArg = renewExpiredCerts.asRubyArgument(name: "renew_expired_certs", type: nil)
7030
7033
  let skipConfirmationArg = skipConfirmation.asRubyArgument(name: "skip_confirmation", type: nil)
7031
7034
  let safeRemoveCertsArg = safeRemoveCerts.asRubyArgument(name: "safe_remove_certs", type: nil)
7032
7035
  let skipDocsArg = skipDocs.asRubyArgument(name: "skip_docs", type: nil)
@@ -7084,6 +7087,7 @@ public func match(type: String = matchfile.type,
7084
7087
  includeAllCertificatesArg,
7085
7088
  certificateIdArg,
7086
7089
  forceForNewCertificatesArg,
7090
+ renewExpiredCertsArg,
7087
7091
  skipConfirmationArg,
7088
7092
  safeRemoveCertsArg,
7089
7093
  skipDocsArg,
@@ -7152,6 +7156,7 @@ public func match(type: String = matchfile.type,
7152
7156
  - includeAllCertificates: Include all matching certificates in the provisioning profile. Works only for the 'development' provisioning profile type
7153
7157
  - certificateId: Select certificate by id. Useful if multiple certificates are stored in one place
7154
7158
  - forceForNewCertificates: Renew the provisioning profiles if the certificate count on the developer portal has changed. Works only for the 'development' provisioning profile type. Requires 'include_all_certificates' option to be 'true'
7159
+ - renewExpiredCerts: Automatically renew expired certificates. Note: to renew `developer_id` and `developer_id_installer` certificates you must log in with the Account Holder account by using username and password; App Store Connect API key doesn't work in this case. The expired certificate is removed from the match storage and a new one is created, but the old certificate is not revoked on the Apple Developer Portal — run `fastlane match nuke` if you need to free up certificate slots
7155
7160
  - skipConfirmation: Disables confirmation prompts during nuke, answering them with yes
7156
7161
  - safeRemoveCerts: Remove certs from repository during nuke without revoking them on the developer portal
7157
7162
  - skipDocs: Skip generation of a README.md for the created git repository
@@ -7216,6 +7221,7 @@ public func matchNuke(type: String = "development",
7216
7221
  includeAllCertificates: OptionalConfigValue<Bool> = .fastlaneDefault(false),
7217
7222
  certificateId: OptionalConfigValue<String?> = .fastlaneDefault(nil),
7218
7223
  forceForNewCertificates: OptionalConfigValue<Bool> = .fastlaneDefault(false),
7224
+ renewExpiredCerts: OptionalConfigValue<Bool> = .fastlaneDefault(false),
7219
7225
  skipConfirmation: OptionalConfigValue<Bool> = .fastlaneDefault(false),
7220
7226
  safeRemoveCerts: OptionalConfigValue<Bool> = .fastlaneDefault(false),
7221
7227
  skipDocs: OptionalConfigValue<Bool> = .fastlaneDefault(false),
@@ -7274,6 +7280,7 @@ public func matchNuke(type: String = "development",
7274
7280
  let includeAllCertificatesArg = includeAllCertificates.asRubyArgument(name: "include_all_certificates", type: nil)
7275
7281
  let certificateIdArg = certificateId.asRubyArgument(name: "certificate_id", type: nil)
7276
7282
  let forceForNewCertificatesArg = forceForNewCertificates.asRubyArgument(name: "force_for_new_certificates", type: nil)
7283
+ let renewExpiredCertsArg = renewExpiredCerts.asRubyArgument(name: "renew_expired_certs", type: nil)
7277
7284
  let skipConfirmationArg = skipConfirmation.asRubyArgument(name: "skip_confirmation", type: nil)
7278
7285
  let safeRemoveCertsArg = safeRemoveCerts.asRubyArgument(name: "safe_remove_certs", type: nil)
7279
7286
  let skipDocsArg = skipDocs.asRubyArgument(name: "skip_docs", type: nil)
@@ -7331,6 +7338,7 @@ public func matchNuke(type: String = "development",
7331
7338
  includeAllCertificatesArg,
7332
7339
  certificateIdArg,
7333
7340
  forceForNewCertificatesArg,
7341
+ renewExpiredCertsArg,
7334
7342
  skipConfirmationArg,
7335
7343
  safeRemoveCertsArg,
7336
7344
  skipDocsArg,
@@ -8959,6 +8967,7 @@ public func rubyVersion() {
8959
8967
  - suppressXcodeOutput: Suppress the output of xcodebuild to stdout. Output is still saved in buildlog_path
8960
8968
  - xcodebuildFormatter: xcodebuild formatter to use (ex: 'xcbeautify', 'xcbeautify --quieter', 'xcpretty', 'xcpretty -test'). Use empty string (ex: '') to disable any formatter (More information: https://docs.fastlane.tools/best-practices/xcodebuild-formatters/)
8961
8969
  - outputRemoveRetryAttempts: Remove retry attempts from test results table and the JUnit report (if not using xcpretty)
8970
+ - forceLegacyXcresulttool: Force the use of the '--legacy' flag for xcresulttool instead of using the new commands
8962
8971
  - disableXcpretty: **DEPRECATED!** Use `output_style: 'raw'` instead - Disable xcpretty formatting of build, similar to `output_style='raw'` but this will also skip the test results table
8963
8972
  - formatter: **DEPRECATED!** Use 'xcpretty_formatter' instead - A custom xcpretty formatter to use
8964
8973
  - xcprettyFormatter: A custom xcpretty formatter to use
@@ -9045,6 +9054,7 @@ public func rubyVersion() {
9045
9054
  suppressXcodeOutput: OptionalConfigValue<Bool?> = .fastlaneDefault(nil),
9046
9055
  xcodebuildFormatter: String = "xcbeautify",
9047
9056
  outputRemoveRetryAttempts: OptionalConfigValue<Bool> = .fastlaneDefault(false),
9057
+ forceLegacyXcresulttool: OptionalConfigValue<Bool> = .fastlaneDefault(false),
9048
9058
  disableXcpretty: OptionalConfigValue<Bool?> = .fastlaneDefault(nil),
9049
9059
  formatter: OptionalConfigValue<String?> = .fastlaneDefault(nil),
9050
9060
  xcprettyFormatter: OptionalConfigValue<String?> = .fastlaneDefault(nil),
@@ -9127,6 +9137,7 @@ public func rubyVersion() {
9127
9137
  let suppressXcodeOutputArg = suppressXcodeOutput.asRubyArgument(name: "suppress_xcode_output", type: nil)
9128
9138
  let xcodebuildFormatterArg = RubyCommand.Argument(name: "xcodebuild_formatter", value: xcodebuildFormatter, type: nil)
9129
9139
  let outputRemoveRetryAttemptsArg = outputRemoveRetryAttempts.asRubyArgument(name: "output_remove_retry_attempts", type: nil)
9140
+ let forceLegacyXcresulttoolArg = forceLegacyXcresulttool.asRubyArgument(name: "force_legacy_xcresulttool", type: nil)
9130
9141
  let disableXcprettyArg = disableXcpretty.asRubyArgument(name: "disable_xcpretty", type: nil)
9131
9142
  let formatterArg = formatter.asRubyArgument(name: "formatter", type: nil)
9132
9143
  let xcprettyFormatterArg = xcprettyFormatter.asRubyArgument(name: "xcpretty_formatter", type: nil)
@@ -9208,6 +9219,7 @@ public func rubyVersion() {
9208
9219
  suppressXcodeOutputArg,
9209
9220
  xcodebuildFormatterArg,
9210
9221
  outputRemoveRetryAttemptsArg,
9222
+ forceLegacyXcresulttoolArg,
9211
9223
  disableXcprettyArg,
9212
9224
  formatterArg,
9213
9225
  xcprettyFormatterArg,
@@ -9402,6 +9414,7 @@ public func say(text: [String],
9402
9414
  - suppressXcodeOutput: Suppress the output of xcodebuild to stdout. Output is still saved in buildlog_path
9403
9415
  - xcodebuildFormatter: xcodebuild formatter to use (ex: 'xcbeautify', 'xcbeautify --quieter', 'xcpretty', 'xcpretty -test'). Use empty string (ex: '') to disable any formatter (More information: https://docs.fastlane.tools/best-practices/xcodebuild-formatters/)
9404
9416
  - outputRemoveRetryAttempts: Remove retry attempts from test results table and the JUnit report (if not using xcpretty)
9417
+ - forceLegacyXcresulttool: Force the use of the '--legacy' flag for xcresulttool instead of using the new commands
9405
9418
  - disableXcpretty: **DEPRECATED!** Use `output_style: 'raw'` instead - Disable xcpretty formatting of build, similar to `output_style='raw'` but this will also skip the test results table
9406
9419
  - formatter: **DEPRECATED!** Use 'xcpretty_formatter' instead - A custom xcpretty formatter to use
9407
9420
  - xcprettyFormatter: A custom xcpretty formatter to use
@@ -9488,6 +9501,7 @@ public func say(text: [String],
9488
9501
  suppressXcodeOutput: OptionalConfigValue<Bool?> = .fastlaneDefault(scanfile.suppressXcodeOutput),
9489
9502
  xcodebuildFormatter: String = scanfile.xcodebuildFormatter,
9490
9503
  outputRemoveRetryAttempts: OptionalConfigValue<Bool> = .fastlaneDefault(scanfile.outputRemoveRetryAttempts),
9504
+ forceLegacyXcresulttool: OptionalConfigValue<Bool> = .fastlaneDefault(scanfile.forceLegacyXcresulttool),
9491
9505
  disableXcpretty: OptionalConfigValue<Bool?> = .fastlaneDefault(scanfile.disableXcpretty),
9492
9506
  formatter: OptionalConfigValue<String?> = .fastlaneDefault(scanfile.formatter),
9493
9507
  xcprettyFormatter: OptionalConfigValue<String?> = .fastlaneDefault(scanfile.xcprettyFormatter),
@@ -9570,6 +9584,7 @@ public func say(text: [String],
9570
9584
  let suppressXcodeOutputArg = suppressXcodeOutput.asRubyArgument(name: "suppress_xcode_output", type: nil)
9571
9585
  let xcodebuildFormatterArg = RubyCommand.Argument(name: "xcodebuild_formatter", value: xcodebuildFormatter, type: nil)
9572
9586
  let outputRemoveRetryAttemptsArg = outputRemoveRetryAttempts.asRubyArgument(name: "output_remove_retry_attempts", type: nil)
9587
+ let forceLegacyXcresulttoolArg = forceLegacyXcresulttool.asRubyArgument(name: "force_legacy_xcresulttool", type: nil)
9573
9588
  let disableXcprettyArg = disableXcpretty.asRubyArgument(name: "disable_xcpretty", type: nil)
9574
9589
  let formatterArg = formatter.asRubyArgument(name: "formatter", type: nil)
9575
9590
  let xcprettyFormatterArg = xcprettyFormatter.asRubyArgument(name: "xcpretty_formatter", type: nil)
@@ -9651,6 +9666,7 @@ public func say(text: [String],
9651
9666
  suppressXcodeOutputArg,
9652
9667
  xcodebuildFormatterArg,
9653
9668
  outputRemoveRetryAttemptsArg,
9669
+ forceLegacyXcresulttoolArg,
9654
9670
  disableXcprettyArg,
9655
9671
  formatterArg,
9656
9672
  xcprettyFormatterArg,
@@ -11481,6 +11497,7 @@ public func swiftlint(mode: String = "lint",
11481
11497
  - includeAllCertificates: Include all matching certificates in the provisioning profile. Works only for the 'development' provisioning profile type
11482
11498
  - certificateId: Select certificate by id. Useful if multiple certificates are stored in one place
11483
11499
  - forceForNewCertificates: Renew the provisioning profiles if the certificate count on the developer portal has changed. Works only for the 'development' provisioning profile type. Requires 'include_all_certificates' option to be 'true'
11500
+ - renewExpiredCerts: Automatically renew expired certificates. Note: to renew `developer_id` and `developer_id_installer` certificates you must log in with the Account Holder account by using username and password; App Store Connect API key doesn't work in this case. The expired certificate is removed from the match storage and a new one is created, but the old certificate is not revoked on the Apple Developer Portal — run `fastlane match nuke` if you need to free up certificate slots
11484
11501
  - skipConfirmation: Disables confirmation prompts during nuke, answering them with yes
11485
11502
  - safeRemoveCerts: Remove certs from repository during nuke without revoking them on the developer portal
11486
11503
  - skipDocs: Skip generation of a README.md for the created git repository
@@ -11541,6 +11558,7 @@ public func syncCodeSigning(type: String = "development",
11541
11558
  includeAllCertificates: OptionalConfigValue<Bool> = .fastlaneDefault(false),
11542
11559
  certificateId: OptionalConfigValue<String?> = .fastlaneDefault(nil),
11543
11560
  forceForNewCertificates: OptionalConfigValue<Bool> = .fastlaneDefault(false),
11561
+ renewExpiredCerts: OptionalConfigValue<Bool> = .fastlaneDefault(false),
11544
11562
  skipConfirmation: OptionalConfigValue<Bool> = .fastlaneDefault(false),
11545
11563
  safeRemoveCerts: OptionalConfigValue<Bool> = .fastlaneDefault(false),
11546
11564
  skipDocs: OptionalConfigValue<Bool> = .fastlaneDefault(false),
@@ -11599,6 +11617,7 @@ public func syncCodeSigning(type: String = "development",
11599
11617
  let includeAllCertificatesArg = includeAllCertificates.asRubyArgument(name: "include_all_certificates", type: nil)
11600
11618
  let certificateIdArg = certificateId.asRubyArgument(name: "certificate_id", type: nil)
11601
11619
  let forceForNewCertificatesArg = forceForNewCertificates.asRubyArgument(name: "force_for_new_certificates", type: nil)
11620
+ let renewExpiredCertsArg = renewExpiredCerts.asRubyArgument(name: "renew_expired_certs", type: nil)
11602
11621
  let skipConfirmationArg = skipConfirmation.asRubyArgument(name: "skip_confirmation", type: nil)
11603
11622
  let safeRemoveCertsArg = safeRemoveCerts.asRubyArgument(name: "safe_remove_certs", type: nil)
11604
11623
  let skipDocsArg = skipDocs.asRubyArgument(name: "skip_docs", type: nil)
@@ -11656,6 +11675,7 @@ public func syncCodeSigning(type: String = "development",
11656
11675
  includeAllCertificatesArg,
11657
11676
  certificateIdArg,
11658
11677
  forceForNewCertificatesArg,
11678
+ renewExpiredCertsArg,
11659
11679
  skipConfirmationArg,
11660
11680
  safeRemoveCertsArg,
11661
11681
  skipDocsArg,
@@ -13902,7 +13922,7 @@ public func xcov(workspace: OptionalConfigValue<String?> = .fastlaneDefault(nil)
13902
13922
  coverallsServiceJobId: OptionalConfigValue<String?> = .fastlaneDefault(nil),
13903
13923
  coverallsRepoToken: OptionalConfigValue<String?> = .fastlaneDefault(nil),
13904
13924
  xcconfig: OptionalConfigValue<String?> = .fastlaneDefault(nil),
13905
- ideFoundationPath: String = "/Applications/Xcode_16.4.app/Contents/Developer/../Frameworks/IDEFoundation.framework/Versions/A/IDEFoundation",
13925
+ ideFoundationPath: String = "/Applications/Xcode_26.5.app/Contents/Developer/../Frameworks/IDEFoundation.framework/Versions/A/IDEFoundation",
13906
13926
  legacySupport: OptionalConfigValue<Bool> = .fastlaneDefault(false))
13907
13927
  {
13908
13928
  let workspaceArg = workspace.asRubyArgument(name: "workspace", type: nil)
@@ -14113,4 +14133,4 @@ public let snapshotfile: Snapshotfile = .init()
14113
14133
 
14114
14134
  // Please don't remove the lines below
14115
14135
  // They are used to detect outdated files
14116
- // FastlaneRunnerAPIVersion [0.9.203]
14136
+ // FastlaneRunnerAPIVersion [0.9.204]