fastlane 2.231.0 → 2.232.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 (51) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +102 -102
  3. data/bin/fastlane +2 -2
  4. data/fastlane/lib/assets/completions/completion.bash +1 -1
  5. data/fastlane/lib/assets/completions/completion.sh +2 -2
  6. data/fastlane/lib/fastlane/actions/app_store_build_number.rb +15 -14
  7. data/fastlane/lib/fastlane/actions/appium.rb +1 -1
  8. data/fastlane/lib/fastlane/actions/import_certificate.rb +9 -1
  9. data/fastlane/lib/fastlane/actions/latest_testflight_build_number.rb +1 -1
  10. data/fastlane/lib/fastlane/erb_template_helper.rb +1 -7
  11. data/fastlane/lib/fastlane/plugins/template/%gem_name%.gemspec.erb +1 -1
  12. data/fastlane/lib/fastlane/plugins/template/.rubocop.yml +1 -1
  13. data/fastlane/lib/fastlane/version.rb +1 -1
  14. data/fastlane/swift/Appfile.swift +12 -4
  15. data/fastlane/swift/ControlCommand.swift +4 -3
  16. data/fastlane/swift/Deliverfile.swift +1 -1
  17. data/fastlane/swift/DeliverfileProtocol.swift +264 -67
  18. data/fastlane/swift/Fastlane.swift +55 -17
  19. data/fastlane/swift/FastlaneSwiftRunner/FastlaneSwiftRunner.xcodeproj/project.pbxproj +3 -1
  20. data/fastlane/swift/Gymfile.swift +1 -1
  21. data/fastlane/swift/GymfileProtocol.swift +220 -55
  22. data/fastlane/swift/LaneFileProtocol.swift +6 -4
  23. data/fastlane/swift/Matchfile.swift +1 -1
  24. data/fastlane/swift/MatchfileProtocol.swift +224 -57
  25. data/fastlane/swift/Precheckfile.swift +1 -1
  26. data/fastlane/swift/PrecheckfileProtocol.swift +44 -12
  27. data/fastlane/swift/RubyCommand.swift +5 -6
  28. data/fastlane/swift/Runner.swift +1 -1
  29. data/fastlane/swift/Scanfile.swift +1 -1
  30. data/fastlane/swift/ScanfileProtocol.swift +328 -82
  31. data/fastlane/swift/Screengrabfile.swift +1 -1
  32. data/fastlane/swift/ScreengrabfileProtocol.swift +88 -23
  33. data/fastlane/swift/Snapshotfile.swift +1 -1
  34. data/fastlane/swift/SnapshotfileProtocol.swift +212 -53
  35. data/fastlane/swift/SocketClient.swift +1 -1
  36. data/fastlane_core/lib/fastlane_core/cert_checker.rb +10 -0
  37. data/fastlane_core/lib/fastlane_core/keychain_importer.rb +3 -1
  38. data/fastlane_core/lib/fastlane_core/project.rb +4 -0
  39. data/gym/lib/assets/wrap_xcodebuild/xcbuild-safe.sh +1 -0
  40. data/gym/lib/gym/options.rb +6 -1
  41. data/scan/lib/scan/options.rb +6 -1
  42. data/sigh/lib/assets/resign.sh +7 -5
  43. data/snapshot/lib/snapshot/options.rb +8 -1
  44. data/spaceship/lib/spaceship/connect_api/models/build_upload.rb +42 -0
  45. data/spaceship/lib/spaceship/connect_api/testflight/testflight.rb +9 -0
  46. data/spaceship/lib/spaceship/connect_api.rb +1 -0
  47. data/spaceship/lib/spaceship/spaceauth_runner.rb +5 -15
  48. data/trainer/lib/trainer/legacy_xcresult.rb +1 -1
  49. data/trainer/lib/trainer/test_parser.rb +1 -1
  50. data/trainer/lib/trainer/xcresult/helper.rb +11 -1
  51. metadata +58 -29
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 44a87944557f94ec2374051b97892e602fcb8b252095b0cf4c62963539752a4e
4
- data.tar.gz: 1d23fe92dd1145213c3535254474c702de7ae4e15c47bd706d6480e5759e0d7d
3
+ metadata.gz: 2622d3578122878982a9b7d811fe4a292ed99929665c6260ad5f16dc687394ef
4
+ data.tar.gz: 6b0ea9b956f1aa5e1cadad14947045227e23d7dfe06d878b570ba70a6cf5f8ff
5
5
  SHA512:
6
- metadata.gz: ae62bb9230d04fdfdd471f189e8b754b595c7aa42823b3cf1aa84ef2f2632a37a8818d5456c34d849ab875920cf3063541ab3ebd56819ee22ba47eb49ffb831f
7
- data.tar.gz: 66e154fac81ff509954cd35b5951e5b24d62d9053b93b8dbac329a81f4cfdf3ac0452d98e101438393cc9d65c5090523734b96d786000383ba564c4bf95b2c88
6
+ metadata.gz: 660e9e37dbf36f1894fbc6a813c794b12e3201428812777d2a287b9cf22911ea6b0fc8c004da7050c1ba1ebb4922b1006f7fdb39bda8b41548f38dd2320c3a3f
7
+ data.tar.gz: bf7c1b8f65cbb1faba9242d21e37c595ae2f3e3651db49b9e8af32a8360a993d60783a947681bb0fa5ed13069aa3337354c136bf70d63c96c854ffa15d11f050
data/README.md CHANGED
@@ -35,113 +35,145 @@ If the above doesn't help, please [submit an issue](https://github.com/fastlane/
35
35
  <!-- This table is regenerated and resorted on each release -->
36
36
  <table id='team'>
37
37
  <tr>
38
- <td id='max-ott'>
39
- <a href='https://github.com/max-ott'>
40
- <img src='https://github.com/max-ott.png' width='140px;'>
38
+ <td id='jan-piotrowski'>
39
+ <a href='https://github.com/janpio'>
40
+ <img src='https://github.com/janpio.png' width='140px;'>
41
41
  </a>
42
- <h4 align='center'><a href='https://twitter.com/ott_max'>Max Ott</a></h4>
42
+ <h4 align='center'><a href='https://twitter.com/Sujan'>Jan Piotrowski</a></h4>
43
43
  </td>
44
- <td id='connor-tumbleson'>
45
- <a href='https://github.com/ibotpeaches'>
46
- <img src='https://github.com/ibotpeaches.png' width='140px;'>
44
+ <td id='kohki-miki'>
45
+ <a href='https://github.com/giginet'>
46
+ <img src='https://github.com/giginet.png' width='140px;'>
47
47
  </a>
48
- <h4 align='center'><a href='https://twitter.com/ibotpeaches'>Connor Tumbleson</a></h4>
48
+ <h4 align='center'><a href='https://twitter.com/giginet'>Kohki Miki</a></h4>
49
49
  </td>
50
- <td id='satoshi-namai'>
51
- <a href='https://github.com/ainame'>
52
- <img src='https://github.com/ainame.png' width='140px;'>
50
+ <td id='felix-krause'>
51
+ <a href='https://github.com/KrauseFx'>
52
+ <img src='https://github.com/KrauseFx.png' width='140px;'>
53
53
  </a>
54
- <h4 align='center'><a href='https://twitter.com/ainame'>Satoshi Namai</a></h4>
54
+ <h4 align='center'><a href='https://twitter.com/KrauseFx'>Felix Krause</a></h4>
55
55
  </td>
56
- <td id='matthew-ellis'>
57
- <a href='https://github.com/matthewellis'>
58
- <img src='https://github.com/matthewellis.png' width='140px;'>
56
+ <td id='helmut-januschka'>
57
+ <a href='https://github.com/hjanuschka'>
58
+ <img src='https://github.com/hjanuschka.png' width='140px;'>
59
59
  </a>
60
- <h4 align='center'><a href='https://twitter.com/mellis1995'>Matthew Ellis</a></h4>
60
+ <h4 align='center'><a href='https://twitter.com/hjanuschka'>Helmut Januschka</a></h4>
61
61
  </td>
62
- <td id='kohki-miki'>
63
- <a href='https://github.com/giginet'>
64
- <img src='https://github.com/giginet.png' width='140px;'>
62
+ <td id='josh-holtz'>
63
+ <a href='https://github.com/joshdholtz'>
64
+ <img src='https://github.com/joshdholtz.png' width='140px;'>
65
65
  </a>
66
- <h4 align='center'><a href='https://twitter.com/giginet'>Kohki Miki</a></h4>
66
+ <h4 align='center'><a href='https://twitter.com/joshdholtz'>Josh Holtz</a></h4>
67
67
  </td>
68
68
  </tr>
69
69
  <tr>
70
+ <td id='daniel-jankowski'>
71
+ <a href='https://github.com/mollyIV'>
72
+ <img src='https://github.com/mollyIV.png' width='140px;'>
73
+ </a>
74
+ <h4 align='center'><a href='https://twitter.com/mollyIV'>Daniel Jankowski</a></h4>
75
+ </td>
76
+ <td id='jimmy-dee'>
77
+ <a href='https://github.com/jdee'>
78
+ <img src='https://github.com/jdee.png' width='140px;'>
79
+ </a>
80
+ <h4 align='center'>Jimmy Dee</h4>
81
+ </td>
82
+ <td id='matthew-ellis'>
83
+ <a href='https://github.com/matthewellis'>
84
+ <img src='https://github.com/matthewellis.png' width='140px;'>
85
+ </a>
86
+ <h4 align='center'><a href='https://twitter.com/mellis1995'>Matthew Ellis</a></h4>
87
+ </td>
70
88
  <td id='maksym-grebenets'>
71
89
  <a href='https://github.com/mgrebenets'>
72
90
  <img src='https://github.com/mgrebenets.png' width='140px;'>
73
91
  </a>
74
92
  <h4 align='center'><a href='https://twitter.com/mgrebenets'>Maksym Grebenets</a></h4>
75
93
  </td>
94
+ <td id='olivier-halligon'>
95
+ <a href='https://github.com/AliSoftware'>
96
+ <img src='https://github.com/AliSoftware.png' width='140px;'>
97
+ </a>
98
+ <h4 align='center'><a href='https://twitter.com/aligatr'>Olivier Halligon</a></h4>
99
+ </td>
100
+ </tr>
101
+ <tr>
102
+ <td id='andrew-mcburney'>
103
+ <a href='https://github.com/armcburney'>
104
+ <img src='https://github.com/armcburney.png' width='140px;'>
105
+ </a>
106
+ <h4 align='center'><a href='https://twitter.com/armcburney'>Andrew McBurney</a></h4>
107
+ </td>
108
+ <td id='manish-rathi'>
109
+ <a href='https://github.com/crazymanish'>
110
+ <img src='https://github.com/crazymanish.png' width='140px;'>
111
+ </a>
112
+ <h4 align='center'><a href='https://twitter.com/iammanishrathi'>Manish Rathi</a></h4>
113
+ </td>
76
114
  <td id='danielle-tomlinson'>
77
115
  <a href='https://github.com/endocrimes'>
78
116
  <img src='https://github.com/endocrimes.png' width='140px;'>
79
117
  </a>
80
118
  <h4 align='center'><a href='https://twitter.com/endocrimes'>Danielle Tomlinson</a></h4>
81
119
  </td>
82
- <td id='luka-mirosevic'>
83
- <a href='https://github.com/lmirosevic'>
84
- <img src='https://github.com/lmirosevic.png' width='140px;'>
85
- </a>
86
- <h4 align='center'><a href='https://twitter.com/lmirosevic'>Luka Mirosevic</a></h4>
87
- </td>
88
- <td id='aaron-brager'>
89
- <a href='https://github.com/getaaron'>
90
- <img src='https://github.com/getaaron.png' width='140px;'>
120
+ <td id='fumiya-nakamura'>
121
+ <a href='https://github.com/nafu'>
122
+ <img src='https://github.com/nafu.png' width='140px;'>
91
123
  </a>
92
- <h4 align='center'><a href='https://twitter.com/getaaron'>Aaron Brager</a></h4>
124
+ <h4 align='center'><a href='https://twitter.com/nafu003'>Fumiya Nakamura</a></h4>
93
125
  </td>
94
- <td id='josh-holtz'>
95
- <a href='https://github.com/joshdholtz'>
96
- <img src='https://github.com/joshdholtz.png' width='140px;'>
126
+ <td id='iulian-onofrei'>
127
+ <a href='https://github.com/revolter'>
128
+ <img src='https://github.com/revolter.png' width='140px;'>
97
129
  </a>
98
- <h4 align='center'><a href='https://twitter.com/joshdholtz'>Josh Holtz</a></h4>
130
+ <h4 align='center'><a href='https://twitter.com/Revolt666'>Iulian Onofrei</a></h4>
99
131
  </td>
100
132
  </tr>
101
133
  <tr>
102
- <td id='łukasz-grabowski'>
103
- <a href='https://github.com/lucgrabowski'>
104
- <img src='https://github.com/lucgrabowski.png' width='140px;'>
105
- </a>
106
- <h4 align='center'>Łukasz Grabowski</h4>
107
- </td>
108
134
  <td id='jérôme-lacoste'>
109
135
  <a href='https://github.com/lacostej'>
110
136
  <img src='https://github.com/lacostej.png' width='140px;'>
111
137
  </a>
112
138
  <h4 align='center'><a href='https://twitter.com/lacostej'>Jérôme Lacoste</a></h4>
113
139
  </td>
114
- <td id='andrew-mcburney'>
115
- <a href='https://github.com/armcburney'>
116
- <img src='https://github.com/armcburney.png' width='140px;'>
140
+ <td id='łukasz-grabowski'>
141
+ <a href='https://github.com/lucgrabowski'>
142
+ <img src='https://github.com/lucgrabowski.png' width='140px;'>
117
143
  </a>
118
- <h4 align='center'><a href='https://twitter.com/armcburney'>Andrew McBurney</a></h4>
144
+ <h4 align='center'>Łukasz Grabowski</h4>
119
145
  </td>
120
- <td id='manish-rathi'>
121
- <a href='https://github.com/crazymanish'>
122
- <img src='https://github.com/crazymanish.png' width='140px;'>
146
+ <td id='aaron-brager'>
147
+ <a href='https://github.com/getaaron'>
148
+ <img src='https://github.com/getaaron.png' width='140px;'>
123
149
  </a>
124
- <h4 align='center'><a href='https://twitter.com/iammanishrathi'>Manish Rathi</a></h4>
150
+ <h4 align='center'><a href='https://twitter.com/getaaron'>Aaron Brager</a></h4>
125
151
  </td>
126
- <td id='joshua-liebowitz'>
127
- <a href='https://github.com/taquitos'>
128
- <img src='https://github.com/taquitos.png' width='140px;'>
152
+ <td id='max-ott'>
153
+ <a href='https://github.com/max-ott'>
154
+ <img src='https://github.com/max-ott.png' width='140px;'>
129
155
  </a>
130
- <h4 align='center'><a href='https://twitter.com/taquitos'>Joshua Liebowitz</a></h4>
156
+ <h4 align='center'><a href='https://twitter.com/ott_max'>Max Ott</a></h4>
131
157
  </td>
132
- </tr>
133
- <tr>
134
158
  <td id='manu-wallner'>
135
159
  <a href='https://github.com/milch'>
136
160
  <img src='https://github.com/milch.png' width='140px;'>
137
161
  </a>
138
162
  <h4 align='center'><a href='https://twitter.com/acrooow'>Manu Wallner</a></h4>
139
163
  </td>
140
- <td id='jorge-revuelta-h'>
141
- <a href='https://github.com/minuscorp'>
142
- <img src='https://github.com/minuscorp.png' width='140px;'>
164
+ </tr>
165
+ <tr>
166
+ <td id='joshua-liebowitz'>
167
+ <a href='https://github.com/taquitos'>
168
+ <img src='https://github.com/taquitos.png' width='140px;'>
143
169
  </a>
144
- <h4 align='center'><a href='https://twitter.com/minuscorp'>Jorge Revuelta H</a></h4>
170
+ <h4 align='center'><a href='https://twitter.com/taquitos'>Joshua Liebowitz</a></h4>
171
+ </td>
172
+ <td id='satoshi-namai'>
173
+ <a href='https://github.com/ainame'>
174
+ <img src='https://github.com/ainame.png' width='140px;'>
175
+ </a>
176
+ <h4 align='center'><a href='https://twitter.com/ainame'>Satoshi Namai</a></h4>
145
177
  </td>
146
178
  <td id='roger-oba'>
147
179
  <a href='https://github.com/rogerluan'>
@@ -149,63 +181,31 @@ If the above doesn't help, please [submit an issue](https://github.com/fastlane/
149
181
  </a>
150
182
  <h4 align='center'><a href='https://twitter.com/rogerluan_'>Roger Oba</a></h4>
151
183
  </td>
152
- <td id='olivier-halligon'>
153
- <a href='https://github.com/AliSoftware'>
154
- <img src='https://github.com/AliSoftware.png' width='140px;'>
184
+ <td id='luka-mirosevic'>
185
+ <a href='https://github.com/lmirosevic'>
186
+ <img src='https://github.com/lmirosevic.png' width='140px;'>
155
187
  </a>
156
- <h4 align='center'><a href='https://twitter.com/aligatr'>Olivier Halligon</a></h4>
188
+ <h4 align='center'><a href='https://twitter.com/lmirosevic'>Luka Mirosevic</a></h4>
157
189
  </td>
158
- <td id='jan-piotrowski'>
159
- <a href='https://github.com/janpio'>
160
- <img src='https://github.com/janpio.png' width='140px;'>
190
+ <td id='connor-tumbleson'>
191
+ <a href='https://github.com/ibotpeaches'>
192
+ <img src='https://github.com/ibotpeaches.png' width='140px;'>
161
193
  </a>
162
- <h4 align='center'><a href='https://twitter.com/Sujan'>Jan Piotrowski</a></h4>
194
+ <h4 align='center'><a href='https://twitter.com/ibotpeaches'>Connor Tumbleson</a></h4>
163
195
  </td>
164
196
  </tr>
165
197
  <tr>
166
- <td id='jimmy-dee'>
167
- <a href='https://github.com/jdee'>
168
- <img src='https://github.com/jdee.png' width='140px;'>
169
- </a>
170
- <h4 align='center'>Jimmy Dee</h4>
171
- </td>
172
- <td id='iulian-onofrei'>
173
- <a href='https://github.com/revolter'>
174
- <img src='https://github.com/revolter.png' width='140px;'>
175
- </a>
176
- <h4 align='center'><a href='https://twitter.com/Revolt666'>Iulian Onofrei</a></h4>
177
- </td>
178
- <td id='helmut-januschka'>
179
- <a href='https://github.com/hjanuschka'>
180
- <img src='https://github.com/hjanuschka.png' width='140px;'>
181
- </a>
182
- <h4 align='center'><a href='https://twitter.com/hjanuschka'>Helmut Januschka</a></h4>
183
- </td>
184
- <td id='daniel-jankowski'>
185
- <a href='https://github.com/mollyIV'>
186
- <img src='https://github.com/mollyIV.png' width='140px;'>
187
- </a>
188
- <h4 align='center'><a href='https://twitter.com/mollyIV'>Daniel Jankowski</a></h4>
189
- </td>
190
198
  <td id='stefan-natchev'>
191
199
  <a href='https://github.com/snatchev'>
192
200
  <img src='https://github.com/snatchev.png' width='140px;'>
193
201
  </a>
194
202
  <h4 align='center'><a href='https://twitter.com/snatchev'>Stefan Natchev</a></h4>
195
203
  </td>
196
- </tr>
197
- <tr>
198
- <td id='fumiya-nakamura'>
199
- <a href='https://github.com/nafu'>
200
- <img src='https://github.com/nafu.png' width='140px;'>
201
- </a>
202
- <h4 align='center'><a href='https://twitter.com/nafu003'>Fumiya Nakamura</a></h4>
203
- </td>
204
- <td id='felix-krause'>
205
- <a href='https://github.com/KrauseFx'>
206
- <img src='https://github.com/KrauseFx.png' width='140px;'>
204
+ <td id='jorge-revuelta-h'>
205
+ <a href='https://github.com/minuscorp'>
206
+ <img src='https://github.com/minuscorp.png' width='140px;'>
207
207
  </a>
208
- <h4 align='center'><a href='https://twitter.com/KrauseFx'>Felix Krause</a></h4>
208
+ <h4 align='center'><a href='https://twitter.com/minuscorp'>Jorge Revuelta H</a></h4>
209
209
  </td>
210
210
  </table>
211
211
 
data/bin/fastlane CHANGED
@@ -1,7 +1,7 @@
1
1
  #!/usr/bin/env ruby
2
2
 
3
- if RUBY_VERSION < '2.0.0'
4
- abort("fastlane requires Ruby 2.0.0 or higher")
3
+ if RUBY_VERSION < '2.7.0'
4
+ abort("fastlane requires Ruby 2.7.0 or higher")
5
5
  end
6
6
 
7
7
  def self.windows?
@@ -21,6 +21,6 @@ _fastlane_complete() {
21
21
  completions="$(sed -En 's/^[ ]*lane +:([^ ]+).*$/\1/p' "$file")"
22
22
  completions="$completions update_fastlane"
23
23
 
24
- COMPREPLY=( $(compgen -W "$completions" -- "$word") )
24
+ mapfile -t COMPREPLY < <(compgen -W "$completions" -- "$word")
25
25
  }
26
26
 
@@ -4,9 +4,9 @@
4
4
  # shellcheck disable=SC2039
5
5
 
6
6
  if [ -n "$BASH_VERSION" ]; then
7
- source ~/.fastlane/completions/completion.bash
7
+ . ~/.fastlane/completions/completion.bash
8
8
  elif [ -n "$ZSH_VERSION" ]; then
9
- source ~/.fastlane/completions/completion.zsh
9
+ . ~/.fastlane/completions/completion.zsh
10
10
  fi
11
11
 
12
12
  # Do not remove v0.0.1
@@ -66,17 +66,17 @@ module Fastlane
66
66
  version_number = params[:version]
67
67
  platform = params[:platform]
68
68
 
69
- # Create filter for get_builds with optional version number
70
- filter = { app: app.id }
69
+ # Create filter for get_build_uploads with optional version number
70
+ filter = {}
71
71
  if version_number
72
- filter["preReleaseVersion.version"] = version_number
72
+ filter["cfBundleShortVersionString"] = version_number
73
73
  version_number_message = "version #{version_number}"
74
74
  else
75
75
  version_number_message = "any version"
76
76
  end
77
77
 
78
78
  if platform
79
- filter["preReleaseVersion.platform"] = Spaceship::ConnectAPI::Platform.map(platform)
79
+ filter["platform"] = Spaceship::ConnectAPI::Platform.map(platform)
80
80
  platform_message = "#{platform} platform"
81
81
  else
82
82
  platform_message = "any platform"
@@ -84,19 +84,20 @@ module Fastlane
84
84
 
85
85
  UI.message("Fetching the latest build number for #{version_number_message}")
86
86
 
87
- # Get latest build for optional version number and return build number if found
88
- build = Spaceship::ConnectAPI.get_builds(filter: filter, sort: "-uploadedDate", includes: "preReleaseVersion", limit: 1).first
89
- if build
90
- build_nr = build.version
91
- UI.message("Latest upload for version #{build.app_version} on #{platform_message} is build: #{build_nr}")
92
- return OpenStruct.new({ build_nr: build_nr, build_v: build.app_version })
87
+ # Get latest build upload for optional version number and return build number if found
88
+ build_upload = Spaceship::ConnectAPI.get_build_uploads(app_id: app.id, filter: filter, sort: "-cfBundleVersion", limit: 1).first
89
+ if build_upload
90
+ build_nr = build_upload.cf_build_version
91
+ build_v = build_upload.cf_build_short_version_string
92
+ UI.message("Latest upload for version #{build_v} on #{platform_message} is build: #{build_nr}")
93
+ return OpenStruct.new({ build_nr: build_nr, build_v: build_v })
93
94
  end
94
95
 
95
- # Let user know that build couldn't be found
96
- UI.important("Could not find a build for #{version_number_message} on #{platform_message} on App Store Connect")
96
+ # Let user know that build upload couldn't be found
97
+ UI.important("Could not find a build upload for #{version_number_message} on #{platform_message} on App Store Connect")
97
98
 
98
99
  if params[:initial_build_number].nil?
99
- UI.user_error!("Could not find a build on App Store Connect - and 'initial_build_number' option is not set")
100
+ UI.user_error!("Could not find a build upload on App Store Connect - and 'initial_build_number' option is not set")
100
101
  else
101
102
  build_nr = params[:initial_build_number]
102
103
  UI.message("Using initial build number of #{build_nr}")
@@ -140,7 +141,7 @@ module Fastlane
140
141
  conflicting_options: [:api_key_path]),
141
142
  FastlaneCore::ConfigItem.new(key: :initial_build_number,
142
143
  env_name: "INITIAL_BUILD_NUMBER",
143
- description: "sets the build number to given value if no build is in current train",
144
+ description: "sets the build number to given value if no build (upload) is in current train",
144
145
  skip_type_validation: true), # as we also allow integers, which we convert to strings anyway
145
146
  FastlaneCore::ConfigItem.new(key: :app_identifier,
146
147
  short_option: "-a",
@@ -90,7 +90,7 @@ module Fastlane
90
90
  port: params[:port],
91
91
  appium_lib: appium_lib
92
92
  ).start_driver
93
- Appium.promote_appium_methods(RSpec::Core::ExampleGroup)
93
+ Appium.promote_appium_methods(RSpec::Core::ExampleGroup, @driver)
94
94
  end
95
95
 
96
96
  c.after(:each) do
@@ -6,7 +6,7 @@ module Fastlane
6
6
  def self.run(params)
7
7
  keychain_path = params[:keychain_path] || FastlaneCore::Helper.keychain_path(params[:keychain_name])
8
8
 
9
- FastlaneCore::KeychainImporter.import_file(params[:certificate_path], keychain_path, keychain_password: params[:keychain_password], certificate_password: params[:certificate_password], output: params[:log_output])
9
+ FastlaneCore::KeychainImporter.import_file(params[:certificate_path], keychain_path, keychain_password: params[:keychain_password], certificate_password: params[:certificate_password], certificate_format: params[:certificate_format], output: params[:log_output])
10
10
  end
11
11
 
12
12
  def self.description
@@ -23,6 +23,9 @@ module Fastlane
23
23
  sensitive: true,
24
24
  default_value: "",
25
25
  optional: true),
26
+ FastlaneCore::ConfigItem.new(key: :certificate_format,
27
+ description: "Format of the certificate. Check the '-f' switch from 'security import --help' command",
28
+ optional: true),
26
29
  FastlaneCore::ConfigItem.new(key: :keychain_name,
27
30
  env_name: "KEYCHAIN_NAME",
28
31
  description: "Keychain the items should be imported to",
@@ -65,6 +68,11 @@ module Fastlane
65
68
  )',
66
69
  'import_certificate(
67
70
  certificate_path: "certs/development.cer"
71
+ )',
72
+ 'import_certificate(
73
+ certificate_path: "certs/dist.p12",
74
+ certificate_password: ENV["CERTIFICATE_PASSWORD"] || "default",
75
+ certificate_format: "pkcs12"
68
76
  )'
69
77
  ]
70
78
  end
@@ -87,7 +87,7 @@ module Fastlane
87
87
  end),
88
88
  FastlaneCore::ConfigItem.new(key: :initial_build_number,
89
89
  env_name: "INITIAL_BUILD_NUMBER",
90
- description: "sets the build number to given value if no build is in current train",
90
+ description: "sets the build number to given value if no build (upload) is in current train",
91
91
  default_value: 1,
92
92
  skip_type_validation: true), # allow Integer, String
93
93
  FastlaneCore::ConfigItem.new(key: :team_id,
@@ -26,13 +26,7 @@ module Fastlane
26
26
  end
27
27
 
28
28
  def render(template)
29
- # From Ruby 2.6, ERB.new takes keyword arguments and positional ones are deprecated
30
- # https://bugs.ruby-lang.org/issues/14256
31
- if Gem::Version.new(RUBY_VERSION) >= Gem::Version.new("2.6.0")
32
- ERB.new(template, trim_mode: @trim_mode).result(binding)
33
- else
34
- ERB.new(template, nil, @trim_mode).result(binding)
35
- end
29
+ ERB.new(template, trim_mode: @trim_mode).result(binding)
36
30
  end
37
31
  end
38
32
  end
@@ -15,7 +15,7 @@ Gem::Specification.new do |spec|
15
15
  spec.files = Dir["lib/**/*"] + %w(README.md LICENSE)
16
16
  spec.require_paths = ['lib']
17
17
  spec.metadata['rubygems_mfa_required'] = 'true'
18
- spec.required_ruby_version = '>= 2.6'
18
+ spec.required_ruby_version = '>= 2.7'
19
19
 
20
20
  # Don't add a dependency to fastlane or fastlane_re
21
21
  # since this would cause a circular dependency
@@ -3,7 +3,7 @@ require:
3
3
  - rubocop/require_tools
4
4
  - rubocop-performance
5
5
  AllCops:
6
- TargetRubyVersion: 2.6
6
+ TargetRubyVersion: 2.7
7
7
  NewCops: enable
8
8
  Include:
9
9
  - "**/*.rb"
@@ -1,5 +1,5 @@
1
1
  module Fastlane
2
- VERSION = '2.231.0'.freeze
2
+ VERSION = '2.232.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
@@ -1,11 +1,19 @@
1
1
  // Appfile.swift
2
2
  // Copyright (c) 2026 FastlaneTools
3
3
 
4
- var appIdentifier: String { return "" } // The bundle identifier of your app
5
- var appleID: String { return "" } // Your Apple Developer Portal username
4
+ var appIdentifier: String {
5
+ return ""
6
+ } // The bundle identifier of your app
7
+ var appleID: String {
8
+ return ""
9
+ } // Your Apple Developer Portal username
6
10
 
7
- var teamID: String { return "" } // Developer Portal Team ID
8
- var itcTeam: String? { return nil } // App Store Connect Team ID (may be nil if no team)
11
+ var teamID: String {
12
+ return ""
13
+ } // Developer Portal Team ID
14
+ var itcTeam: String? {
15
+ return nil
16
+ } // App Store Connect Team ID (may be nil if no team)
9
17
 
10
18
  // you can even provide different app identifiers, Apple IDs and team names per lane:
11
19
  // More information: https://docs.fastlane.tools/advanced/#appfile
@@ -12,7 +12,9 @@ import Foundation
12
12
 
13
13
  struct ControlCommand: RubyCommandable {
14
14
  static let commandKey = "command"
15
- var type: CommandType { return .control }
15
+ var type: CommandType {
16
+ return .control
17
+ }
16
18
 
17
19
  enum ShutdownCommandType {
18
20
  static let userMessageKey: String = "userMessage"
@@ -59,8 +61,7 @@ struct ControlCommand: RubyCommandable {
59
61
  }
60
62
 
61
63
  let jsonData = try! JSONSerialization.data(withJSONObject: jsonDictionary, options: [])
62
- let jsonString = String(data: jsonData, encoding: .utf8)!
63
- return jsonString
64
+ return String(data: jsonData, encoding: .utf8)!
64
65
  }
65
66
 
66
67
  init(commandType: ShutdownCommandType, message: String? = nil) {
@@ -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.231.0
20
+ // Generated with fastlane 2.232.0