fastlane 2.236.1 → 2.238.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 (81) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +109 -102
  3. data/deliver/lib/deliver/options.rb +1 -1
  4. data/fastlane/lib/fastlane/actions/deploygate.rb +3 -2
  5. data/fastlane/lib/fastlane/actions/docs/upload_to_app_store.md.erb +7 -3
  6. data/fastlane/lib/fastlane/actions/hockey.rb +3 -2
  7. data/fastlane/lib/fastlane/actions/installr.rb +3 -2
  8. data/fastlane/lib/fastlane/actions/mailgun.rb +1 -0
  9. data/fastlane/lib/fastlane/actions/notarize.rb +3 -18
  10. data/fastlane/lib/fastlane/actions/register_devices.rb +21 -5
  11. data/fastlane/lib/fastlane/actions/setup_ci.rb +7 -2
  12. data/fastlane/lib/fastlane/actions/spm.rb +6 -0
  13. data/fastlane/lib/fastlane/actions/swiftlint.rb +10 -1
  14. data/fastlane/lib/fastlane/actions/testfairy.rb +5 -3
  15. data/fastlane/lib/fastlane/actions/tryouts.rb +3 -2
  16. data/fastlane/lib/fastlane/actions/update_project_team.rb +17 -9
  17. data/fastlane/lib/fastlane/actions/upload_symbols_to_crashlytics.rb +33 -7
  18. data/fastlane/lib/fastlane/helper/sh_helper.rb +7 -3
  19. data/fastlane/lib/fastlane/lane_manager.rb +0 -1
  20. data/fastlane/lib/fastlane/plugins/template/.github/workflows/test.yml +0 -7
  21. data/fastlane/lib/fastlane/plugins/template/.gitignore +0 -1
  22. data/fastlane/lib/fastlane/plugins/template/.rspec +0 -2
  23. data/fastlane/lib/fastlane/plugins/template/Gemfile.erb +0 -2
  24. data/fastlane/lib/fastlane/version.rb +1 -1
  25. data/fastlane/swift/Deliverfile.swift +1 -1
  26. data/fastlane/swift/DeliverfileProtocol.swift +2 -2
  27. data/fastlane/swift/Fastlane.swift +50 -20
  28. data/fastlane/swift/FastlaneSwiftRunner/FastlaneSwiftRunner.xcodeproj/project.pbxproj +1 -1
  29. data/fastlane/swift/Gymfile.swift +1 -1
  30. data/fastlane/swift/GymfileProtocol.swift +1 -1
  31. data/fastlane/swift/Matchfile.swift +1 -1
  32. data/fastlane/swift/MatchfileProtocol.swift +8 -1
  33. data/fastlane/swift/Precheckfile.swift +1 -1
  34. data/fastlane/swift/PrecheckfileProtocol.swift +1 -1
  35. data/fastlane/swift/Scanfile.swift +1 -1
  36. data/fastlane/swift/ScanfileProtocol.swift +8 -1
  37. data/fastlane/swift/Screengrabfile.swift +1 -1
  38. data/fastlane/swift/ScreengrabfileProtocol.swift +1 -1
  39. data/fastlane/swift/Snapshotfile.swift +1 -1
  40. data/fastlane/swift/SnapshotfileProtocol.swift +1 -1
  41. data/fastlane_core/lib/fastlane_core/analytics/analytics_event_builder.rb +31 -5
  42. data/fastlane_core/lib/fastlane_core/analytics/analytics_ingester_client.rb +24 -12
  43. data/fastlane_core/lib/fastlane_core/analytics/analytics_session.rb +22 -12
  44. data/fastlane_core/lib/fastlane_core/cert_checker.rb +22 -9
  45. data/fastlane_core/lib/fastlane_core/helper.rb +4 -3
  46. data/fastlane_core/lib/fastlane_core/ipa_upload_package_builder.rb +6 -2
  47. data/fastlane_core/lib/fastlane_core/itunes_transporter.rb +3 -1
  48. data/fastlane_core/lib/fastlane_core/keychain_importer.rb +1 -1
  49. data/fastlane_core/lib/fastlane_core/pkg_upload_package_builder.rb +1 -1
  50. data/fastlane_core/lib/fastlane_core/print_table.rb +0 -16
  51. data/fastlane_core/lib/fastlane_core/project.rb +3 -1
  52. data/fastlane_core/lib/fastlane_core/queue_worker.rb +10 -1
  53. data/fastlane_core/lib/fastlane_core/ui/errors/fastlane_shell_error.rb +6 -0
  54. data/fastlane_core/lib/fastlane_core/ui/fastlane_runner.rb +1 -1
  55. data/fastlane_core/lib/fastlane_core/video_utils.rb +4 -2
  56. data/gym/lib/gym/error_handler.rb +11 -1
  57. data/gym/lib/gym/generators/build_command_generator.rb +2 -0
  58. data/gym/lib/gym/module.rb +20 -2
  59. data/match/lib/match/options.rb +8 -0
  60. data/match/lib/match/runner.rb +4 -2
  61. data/match/lib/match/storage/git_storage.rb +18 -2
  62. data/pilot/lib/pilot/build_manager.rb +2 -2
  63. data/pilot/lib/pilot/options.rb +2 -2
  64. data/pilot/lib/pilot/tester_manager.rb +2 -2
  65. data/precheck/lib/precheck/rules/copyright_date_rule.rb +16 -10
  66. data/precheck/lib/precheck/rules/unreachable_urls_rule.rb +2 -2
  67. data/scan/lib/scan/options.rb +5 -0
  68. data/scan/lib/scan/runner.rb +1 -0
  69. data/scan/lib/scan/test_command_generator.rb +2 -0
  70. data/snapshot/lib/snapshot/simulator_launchers/simulator_launcher_base.rb +4 -1
  71. data/spaceship/lib/spaceship/client.rb +0 -1
  72. data/spaceship/lib/spaceship/connect_api/file_uploader.rb +1 -1
  73. data/spaceship/lib/spaceship/connect_api/models/age_rating_declaration.rb +6 -0
  74. data/spaceship/lib/spaceship/connect_api/models/beta_group.rb +5 -0
  75. data/spaceship/lib/spaceship/connect_api/tunes/tunes.rb +7 -2
  76. data/spaceship/lib/spaceship/helper/plist_middleware.rb +37 -8
  77. data/supply/lib/supply/uploader.rb +7 -1
  78. data/trainer/lib/trainer/xcresult/test_case.rb +21 -2
  79. data/trainer/lib/trainer/xcresult/test_plan.rb +3 -3
  80. data/trainer/lib/trainer/xcresult/test_suite.rb +28 -19
  81. metadata +74 -32
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 78572beb07948c1146ef8121ee4c3f8bcdb2ef13c8361e9e14fbf2e041372f8c
4
- data.tar.gz: 286509c211c9afab401cc2d6dbf951c59af85385ecad675bca954ed0e5a298b0
3
+ metadata.gz: b83a11ad4335b1a3c678c4a6d0f1aea9f6eb7ccd2fdda1392621a24be1ebc1b9
4
+ data.tar.gz: 40445027ea32c6b0a7d7c761f3aaa148ada6ac0d868f9d1212e68b1c0ff99940
5
5
  SHA512:
6
- metadata.gz: 770641af71fdf6943d8d38c2a52fef164e79ae180faa4c136c2a16c925b6ddceb3e819d616bafb570a9067b49a0d03e4d6ff37337f5ea77fb70255e378d9eadc
7
- data.tar.gz: 4ca991f3156f0b07e179a052cbd522a9963167e46d4569feb13a8972a76ea4f6cde50f888683f4b825b8619f4dc02757c77cf9f7267b9c2af127fb43bc301b35
6
+ metadata.gz: 915bb8bfd75b4e65b00c6213c861261aaa0b7e3b4ec5aaadc2c4029d90386d8682240628434983ec8891f5399798e584be4410ed1f37a11deb22d24cf61549e4
7
+ data.tar.gz: 206b83080b67e0feadc08b65e59e577ee63be8972826a17dc80ac102aeede7da6b11fe67f9b9c53c2ec6052ded492ae2850b78baecb8faa321dbe8904d079e74
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='stefan-natchev'>
40
- <a href='https://github.com/snatchev'>
41
- <img src='https://github.com/snatchev.png' width='140px;'>
42
- </a>
43
- <h4 align='center'><a href='https://twitter.com/snatchev'>Stefan Natchev</a></h4>
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;'>
48
- </a>
49
- <h4 align='center'><a href='https://twitter.com/lacostej'>Jérôme Lacoste</a></h4>
50
- </td>
51
- <td id='manish-rathi'>
52
- <a href='https://github.com/crazymanish'>
53
- <img src='https://github.com/crazymanish.png' width='140px;'>
39
+ <td id='iulian-onofrei'>
40
+ <a href='https://github.com/revolter'>
41
+ <img src='https://github.com/revolter.png' width='140px;'>
54
42
  </a>
55
- <h4 align='center'><a href='https://twitter.com/iammanishrathi'>Manish Rathi</a></h4>
43
+ <h4 align='center'><a href='https://twitter.com/Revolt666'>Iulian Onofrei</a></h4>
56
44
  </td>
57
45
  <td id='helmut-januschka'>
58
46
  <a href='https://github.com/hjanuschka'>
@@ -60,51 +48,75 @@ 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/hjanuschka'>Helmut Januschka</a></h4>
62
50
  </td>
63
- <td id='manu-wallner'>
64
- <a href='https://github.com/milch'>
65
- <img src='https://github.com/milch.png' width='140px;'>
51
+ <td id='kohki-miki'>
52
+ <a href='https://github.com/giginet'>
53
+ <img src='https://github.com/giginet.png' width='140px;'>
66
54
  </a>
67
- <h4 align='center'><a href='https://twitter.com/acrooow'>Manu Wallner</a></h4>
55
+ <h4 align='center'><a href='https://twitter.com/giginet'>Kohki Miki</a></h4>
56
+ </td>
57
+ <td id='felix-krause'>
58
+ <a href='https://github.com/KrauseFx'>
59
+ <img src='https://github.com/KrauseFx.png' width='140px;'>
60
+ </a>
61
+ <h4 align='center'><a href='https://twitter.com/KrauseFx'>Felix Krause</a></h4>
62
+ </td>
63
+ <td id='olivier-halligon'>
64
+ <a href='https://github.com/AliSoftware'>
65
+ <img src='https://github.com/AliSoftware.png' width='140px;'>
66
+ </a>
67
+ <h4 align='center'><a href='https://twitter.com/aligatr'>Olivier Halligon</a></h4>
68
68
  </td>
69
69
  </tr>
70
70
  <tr>
71
+ <td id='stefan-natchev'>
72
+ <a href='https://github.com/snatchev'>
73
+ <img src='https://github.com/snatchev.png' width='140px;'>
74
+ </a>
75
+ <h4 align='center'><a href='https://twitter.com/snatchev'>Stefan Natchev</a></h4>
76
+ </td>
77
+ <td id='łukasz-grabowski'>
78
+ <a href='https://github.com/lucgrabowski'>
79
+ <img src='https://github.com/lucgrabowski.png' width='140px;'>
80
+ </a>
81
+ <h4 align='center'>Łukasz Grabowski</h4>
82
+ </td>
71
83
  <td id='luka-mirosevic'>
72
84
  <a href='https://github.com/lmirosevic'>
73
85
  <img src='https://github.com/lmirosevic.png' width='140px;'>
74
86
  </a>
75
87
  <h4 align='center'><a href='https://twitter.com/lmirosevic'>Luka Mirosevic</a></h4>
76
88
  </td>
77
- <td id='jimmy-dee'>
78
- <a href='https://github.com/jdee'>
79
- <img src='https://github.com/jdee.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;'>
80
92
  </a>
81
- <h4 align='center'>Jimmy Dee</h4>
93
+ <h4 align='center'><a href='https://twitter.com/taquitos'>Joshua Liebowitz</a></h4>
82
94
  </td>
83
- <td id='danielle-tomlinson'>
84
- <a href='https://github.com/endocrimes'>
85
- <img src='https://github.com/endocrimes.png' width='140px;'>
95
+ <td id='daniel-jankowski'>
96
+ <a href='https://github.com/mollyIV'>
97
+ <img src='https://github.com/mollyIV.png' width='140px;'>
86
98
  </a>
87
- <h4 align='center'><a href='https://twitter.com/endocrimes'>Danielle Tomlinson</a></h4>
99
+ <h4 align='center'><a href='https://twitter.com/mollyIV'>Daniel Jankowski</a></h4>
88
100
  </td>
89
- <td id='jan-piotrowski'>
90
- <a href='https://github.com/janpio'>
91
- <img src='https://github.com/janpio.png' width='140px;'>
101
+ </tr>
102
+ <tr>
103
+ <td id='fumiya-nakamura'>
104
+ <a href='https://github.com/nafu'>
105
+ <img src='https://github.com/nafu.png' width='140px;'>
92
106
  </a>
93
- <h4 align='center'><a href='https://twitter.com/Sujan'>Jan Piotrowski</a></h4>
107
+ <h4 align='center'><a href='https://twitter.com/nafu003'>Fumiya Nakamura</a></h4>
94
108
  </td>
95
- <td id='aaron-brager'>
96
- <a href='https://github.com/getaaron'>
97
- <img src='https://github.com/getaaron.png' width='140px;'>
109
+ <td id='manish-rathi'>
110
+ <a href='https://github.com/crazymanish'>
111
+ <img src='https://github.com/crazymanish.png' width='140px;'>
98
112
  </a>
99
- <h4 align='center'><a href='https://twitter.com/getaaron'>Aaron Brager</a></h4>
113
+ <h4 align='center'><a href='https://twitter.com/iammanishrathi'>Manish Rathi</a></h4>
100
114
  </td>
101
- </tr>
102
- <tr>
103
- <td id='satoshi-namai'>
104
- <a href='https://github.com/ainame'>
105
- <img src='https://github.com/ainame.png' width='140px;'>
115
+ <td id='maksym-grebenets'>
116
+ <a href='https://github.com/mgrebenets'>
117
+ <img src='https://github.com/mgrebenets.png' width='140px;'>
106
118
  </a>
107
- <h4 align='center'><a href='https://twitter.com/ainame'>Satoshi Namai</a></h4>
119
+ <h4 align='center'><a href='https://twitter.com/mgrebenets'>Maksym Grebenets</a></h4>
108
120
  </td>
109
121
  <td id='matthew-ellis'>
110
122
  <a href='https://github.com/matthewellis'>
@@ -112,31 +124,37 @@ If the above doesn't help, please [submit an issue](https://github.com/fastlane/
112
124
  </a>
113
125
  <h4 align='center'><a href='https://twitter.com/mellis1995'>Matthew Ellis</a></h4>
114
126
  </td>
115
- <td id='felix-krause'>
116
- <a href='https://github.com/KrauseFx'>
117
- <img src='https://github.com/KrauseFx.png' width='140px;'>
127
+ <td id='satoshi-namai'>
128
+ <a href='https://github.com/ainame'>
129
+ <img src='https://github.com/ainame.png' width='140px;'>
118
130
  </a>
119
- <h4 align='center'><a href='https://twitter.com/KrauseFx'>Felix Krause</a></h4>
131
+ <h4 align='center'><a href='https://twitter.com/ainame'>Satoshi Namai</a></h4>
120
132
  </td>
121
- <td id='connor-tumbleson'>
122
- <a href='https://github.com/ibotpeaches'>
123
- <img src='https://github.com/ibotpeaches.png' width='140px;'>
133
+ </tr>
134
+ <tr>
135
+ <td id='jimmy-dee'>
136
+ <a href='https://github.com/jdee'>
137
+ <img src='https://github.com/jdee.png' width='140px;'>
124
138
  </a>
125
- <h4 align='center'><a href='https://twitter.com/ibotpeaches'>Connor Tumbleson</a></h4>
139
+ <h4 align='center'>Jimmy Dee</h4>
126
140
  </td>
127
- <td id='roger-oba'>
128
- <a href='https://github.com/rogerluan'>
129
- <img src='https://github.com/rogerluan.png' width='140px;'>
141
+ <td id='manu-wallner'>
142
+ <a href='https://github.com/milch'>
143
+ <img src='https://github.com/milch.png' width='140px;'>
130
144
  </a>
131
- <h4 align='center'><a href='https://twitter.com/rogerluan_'>Roger Oba</a></h4>
145
+ <h4 align='center'><a href='https://twitter.com/acrooow'>Manu Wallner</a></h4>
132
146
  </td>
133
- </tr>
134
- <tr>
135
- <td id='łukasz-grabowski'>
136
- <a href='https://github.com/lucgrabowski'>
137
- <img src='https://github.com/lucgrabowski.png' width='140px;'>
147
+ <td id='andrew-mcburney'>
148
+ <a href='https://github.com/armcburney'>
149
+ <img src='https://github.com/armcburney.png' width='140px;'>
138
150
  </a>
139
- <h4 align='center'>Łukasz Grabowski</h4>
151
+ <h4 align='center'><a href='https://twitter.com/armcburney'>Andrew McBurney</a></h4>
152
+ </td>
153
+ <td id='jan-piotrowski'>
154
+ <a href='https://github.com/janpio'>
155
+ <img src='https://github.com/janpio.png' width='140px;'>
156
+ </a>
157
+ <h4 align='center'><a href='https://twitter.com/Sujan'>Jan Piotrowski</a></h4>
140
158
  </td>
141
159
  <td id='jorge-revuelta-h'>
142
160
  <a href='https://github.com/minuscorp'>
@@ -144,37 +162,31 @@ If the above doesn't help, please [submit an issue](https://github.com/fastlane/
144
162
  </a>
145
163
  <h4 align='center'><a href='https://twitter.com/minuscorp'>Jorge Revuelta H</a></h4>
146
164
  </td>
147
- <td id='kohki-miki'>
148
- <a href='https://github.com/giginet'>
149
- <img src='https://github.com/giginet.png' width='140px;'>
150
- </a>
151
- <h4 align='center'><a href='https://twitter.com/giginet'>Kohki Miki</a></h4>
152
- </td>
153
- <td id='iulian-onofrei'>
154
- <a href='https://github.com/revolter'>
155
- <img src='https://github.com/revolter.png' width='140px;'>
165
+ </tr>
166
+ <tr>
167
+ <td id='jérôme-lacoste'>
168
+ <a href='https://github.com/lacostej'>
169
+ <img src='https://github.com/lacostej.png' width='140px;'>
156
170
  </a>
157
- <h4 align='center'><a href='https://twitter.com/Revolt666'>Iulian Onofrei</a></h4>
171
+ <h4 align='center'><a href='https://twitter.com/lacostej'>Jérôme Lacoste</a></h4>
158
172
  </td>
159
- <td id='fumiya-nakamura'>
160
- <a href='https://github.com/nafu'>
161
- <img src='https://github.com/nafu.png' width='140px;'>
173
+ <td id='connor-tumbleson'>
174
+ <a href='https://github.com/ibotpeaches'>
175
+ <img src='https://github.com/ibotpeaches.png' width='140px;'>
162
176
  </a>
163
- <h4 align='center'><a href='https://twitter.com/nafu003'>Fumiya Nakamura</a></h4>
177
+ <h4 align='center'><a href='https://twitter.com/ibotpeaches'>Connor Tumbleson</a></h4>
164
178
  </td>
165
- </tr>
166
- <tr>
167
- <td id='andrew-mcburney'>
168
- <a href='https://github.com/armcburney'>
169
- <img src='https://github.com/armcburney.png' width='140px;'>
179
+ <td id='roger-oba'>
180
+ <a href='https://github.com/rogerluan'>
181
+ <img src='https://github.com/rogerluan.png' width='140px;'>
170
182
  </a>
171
- <h4 align='center'><a href='https://twitter.com/armcburney'>Andrew McBurney</a></h4>
183
+ <h4 align='center'><a href='https://twitter.com/rogerluan_'>Roger Oba</a></h4>
172
184
  </td>
173
- <td id='maksym-grebenets'>
174
- <a href='https://github.com/mgrebenets'>
175
- <img src='https://github.com/mgrebenets.png' width='140px;'>
185
+ <td id='aaron-brager'>
186
+ <a href='https://github.com/getaaron'>
187
+ <img src='https://github.com/getaaron.png' width='140px;'>
176
188
  </a>
177
- <h4 align='center'><a href='https://twitter.com/mgrebenets'>Maksym Grebenets</a></h4>
189
+ <h4 align='center'><a href='https://twitter.com/getaaron'>Aaron Brager</a></h4>
178
190
  </td>
179
191
  <td id='max-ott'>
180
192
  <a href='https://github.com/max-ott'>
@@ -182,31 +194,19 @@ If the above doesn't help, please [submit an issue](https://github.com/fastlane/
182
194
  </a>
183
195
  <h4 align='center'><a href='https://twitter.com/ott_max'>Max Ott</a></h4>
184
196
  </td>
197
+ </tr>
198
+ <tr>
185
199
  <td id='josh-holtz'>
186
200
  <a href='https://github.com/joshdholtz'>
187
201
  <img src='https://github.com/joshdholtz.png' width='140px;'>
188
202
  </a>
189
203
  <h4 align='center'><a href='https://twitter.com/joshdholtz'>Josh Holtz</a></h4>
190
204
  </td>
191
- <td id='olivier-halligon'>
192
- <a href='https://github.com/AliSoftware'>
193
- <img src='https://github.com/AliSoftware.png' width='140px;'>
194
- </a>
195
- <h4 align='center'><a href='https://twitter.com/aligatr'>Olivier Halligon</a></h4>
196
- </td>
197
- </tr>
198
- <tr>
199
- <td id='joshua-liebowitz'>
200
- <a href='https://github.com/taquitos'>
201
- <img src='https://github.com/taquitos.png' width='140px;'>
202
- </a>
203
- <h4 align='center'><a href='https://twitter.com/taquitos'>Joshua Liebowitz</a></h4>
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='danielle-tomlinson'>
206
+ <a href='https://github.com/endocrimes'>
207
+ <img src='https://github.com/endocrimes.png' width='140px;'>
208
208
  </a>
209
- <h4 align='center'><a href='https://twitter.com/mollyIV'>Daniel Jankowski</a></h4>
209
+ <h4 align='center'><a href='https://twitter.com/endocrimes'>Danielle Tomlinson</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
 
@@ -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),
@@ -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
 
@@ -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`
@@ -817,7 +819,9 @@ In this case, default values for keywords, urls, name and release notes are used
817
819
 
818
820
  [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
821
 
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.
822
+ 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.
823
+
824
+ > 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
825
 
822
826
  ## Automatically create screenshots
823
827
 
@@ -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',
@@ -11,6 +11,10 @@ module Fastlane
11
11
  ['Device ID', 'Device Name', 'Device Platform']
12
12
  end
13
13
 
14
+ def self.ignored_line?(row)
15
+ row.all? { |value| value.to_s.strip.empty? } || row.first.to_s.strip.start_with?('#')
16
+ end
17
+
14
18
  def self.run(params)
15
19
  platform = Spaceship::ConnectAPI::BundleIdPlatform.map(params[:platform])
16
20
 
@@ -22,6 +26,7 @@ module Fastlane
22
26
  require 'csv'
23
27
 
24
28
  devices_file = CSV.read(File.expand_path(File.join(params[:devices_file])), col_sep: "\t")
29
+ devices_file = devices_file.reject { |row| ignored_line?(row) }
25
30
  unless devices_file.first == file_column_headers.first(2) || devices_file.first == file_column_headers
26
31
  UI.user_error!("Please provide a file according to the Apple Sample UDID file (https://developer.apple.com/account/resources/downloads/Multiple-Upload-Samples.zip)")
27
32
  end
@@ -55,8 +60,14 @@ module Fastlane
55
60
  existing_devices = Spaceship::ConnectAPI::Device.all
56
61
 
57
62
  device_objs = new_devices.map do |device|
58
- if existing_devices.map(&:udid).map(&:downcase).include?(device[0].downcase)
59
- UI.verbose("UDID #{device[0]} already exists - Skipping...")
63
+ normalized_udid = device[0].tr("-", "")
64
+ existing_device = existing_devices.find do |ed|
65
+ ed.udid.tr("-", "").casecmp(normalized_udid).zero?
66
+ end
67
+
68
+ if existing_device
69
+ UI.verbose("UDID #{existing_device.udid} already exists - Skipping...")
70
+
60
71
  next
61
72
  end
62
73
 
@@ -74,8 +85,12 @@ module Fastlane
74
85
  try_create_device(name: device[1], platform: device_platform, udid: device[0])
75
86
  end
76
87
 
77
- UI.success("Successfully registered new devices.")
78
- return device_objs
88
+ if device_objs.compact.empty?
89
+ UI.success("No new devices to register")
90
+ else
91
+ UI.success("Successfully registered new devices.")
92
+ end
93
+ return device_objs.compact
79
94
  end
80
95
 
81
96
  def self.try_create_device(name: nil, platform: nil, udid: nil)
@@ -169,7 +184,8 @@ module Fastlane
169
184
  [
170
185
  "This will register iOS/Mac devices with the Developer Portal so that you can include them in your provisioning profiles.",
171
186
  "This is an optimistic action, in that it will only ever add new devices to the member center, and never remove devices. If a device which has already been registered within the member center is not passed to this action, it will be left alone in the member center and continue to work.",
172
- "The action will connect to the Apple Developer Portal using the username you specified in your `Appfile` with `apple_id`, but you can override it using the `username` option, or by setting the env variable `ENV['DELIVER_USER']`."
187
+ "The action will connect to the Apple Developer Portal using the username you specified in your `Appfile` with `apple_id`, but you can override it using the `username` option, or by setting the env variable `ENV['DELIVER_USER']`.",
188
+ "When using `devices_file`, blank lines and lines starting with `#` are ignored, so you can group devices, add notes, or comment out a device row without removing it."
173
189
  ].join("\n")
174
190
  end
175
191
 
@@ -41,7 +41,7 @@ module Fastlane
41
41
  UI.message("Creating temporary keychain: \"#{keychain_name}\".")
42
42
  Actions::CreateKeychainAction.run(
43
43
  name: keychain_name,
44
- default_keychain: true,
44
+ default_keychain: params[:set_default_keychain],
45
45
  unlock: true,
46
46
  timeout: params[:timeout],
47
47
  lock_when_sleeps: true,
@@ -113,7 +113,12 @@ module Fastlane
113
113
  env_name: "FL_SETUP_CI_KEYCHAIN_NAME",
114
114
  description: "Set a custom keychain name",
115
115
  type: String,
116
- default_value: "fastlane_tmp_keychain")
116
+ default_value: "fastlane_tmp_keychain"),
117
+ FastlaneCore::ConfigItem.new(key: :set_default_keychain,
118
+ env_name: "FL_SETUP_CI_SET_DEFAULT_KEYCHAIN",
119
+ description: "Set the temporary keychain as the system default",
120
+ type: Boolean,
121
+ default_value: true)
117
122
  ]
118
123
  end
119
124
 
@@ -10,6 +10,7 @@ module Fastlane
10
10
  cmd << "--package-path #{params[:package_path]}" if params[:package_path]
11
11
  cmd << "--configuration #{params[:configuration]}" if params[:configuration]
12
12
  cmd << "--disable-sandbox" if params[:disable_sandbox]
13
+ cmd << "--skip-update" if params[:skip_update]
13
14
  cmd << "--verbose" if params[:verbose]
14
15
  cmd << "--very-verbose" if params[:very_verbose]
15
16
  if params[:simulator]
@@ -113,6 +114,11 @@ module Fastlane
113
114
  description: "Pass in xcpretty additional command line arguments (e.g. '--test --no-color' or '--tap --no-utf'), requires xcpretty_output to be specified also",
114
115
  type: String,
115
116
  optional: true),
117
+ FastlaneCore::ConfigItem.new(key: :skip_update,
118
+ env_name: "FL_SPM_SKIP_UPDATE",
119
+ description: "Skip updating dependencies from their remote during a resolution",
120
+ type: Boolean,
121
+ default_value: false),
116
122
  FastlaneCore::ConfigItem.new(key: :verbose,
117
123
  short_option: "-v",
118
124
  env_name: "FL_SPM_VERBOSE",
@@ -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'
@@ -9,16 +9,18 @@ module Fastlane
9
9
  class TestfairyAction < Action
10
10
  def self.upload_build(upload_url, ipa, options, timeout)
11
11
  require 'faraday'
12
- require 'faraday_middleware'
12
+ require 'faraday/multipart'
13
+ require 'faraday/retry'
14
+ require 'faraday/follow_redirects'
13
15
 
14
16
  UI.success("Uploading to #{upload_url}...")
15
17
 
16
18
  connection = Faraday.new(url: upload_url) do |builder|
17
19
  builder.request(:multipart)
18
20
  builder.request(:url_encoded)
19
- builder.request(:retry, max: 3, interval: 5)
21
+ builder.request(:retry, { max: 3, interval: 5 })
20
22
  builder.response(:json, content_type: /\bjson$/)
21
- builder.use(FaradayMiddleware::FollowRedirects)
23
+ builder.response(:follow_redirects)
22
24
  builder.adapter(:net_http)
23
25
  end
24
26