fastlane 2.226.0 → 2.227.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 (67) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +96 -96
  3. data/cert/lib/cert/options.rb +7 -2
  4. data/cert/lib/cert/runner.rb +23 -11
  5. data/deliver/lib/deliver/options.rb +1 -1
  6. data/fastlane/lib/fastlane/actions/app_store_build_number.rb +1 -1
  7. data/fastlane/lib/fastlane/actions/docs/sync_code_signing.md +1 -1
  8. data/fastlane/lib/fastlane/actions/latest_testflight_build_number.rb +1 -1
  9. data/fastlane/lib/fastlane/actions/notarize.rb +4 -0
  10. data/fastlane/lib/fastlane/actions/onesignal.rb +1 -1
  11. data/fastlane/lib/fastlane/actions/setup_ci.rb +14 -4
  12. data/fastlane/lib/fastlane/actions/testfairy.rb +5 -2
  13. data/fastlane/lib/fastlane/actions/unlock_keychain.rb +6 -1
  14. data/fastlane/lib/fastlane/version.rb +1 -1
  15. data/fastlane/swift/Actions.swift +1 -1
  16. data/fastlane/swift/Appfile.swift +1 -1
  17. data/fastlane/swift/ArgumentProcessor.swift +1 -1
  18. data/fastlane/swift/Atomic.swift +1 -1
  19. data/fastlane/swift/ControlCommand.swift +1 -1
  20. data/fastlane/swift/Deliverfile.swift +2 -2
  21. data/fastlane/swift/DeliverfileProtocol.swift +2 -2
  22. data/fastlane/swift/Fastlane.swift +20 -10
  23. data/fastlane/swift/Gymfile.swift +2 -2
  24. data/fastlane/swift/GymfileProtocol.swift +2 -2
  25. data/fastlane/swift/LaneFileProtocol.swift +1 -1
  26. data/fastlane/swift/MainProcess.swift +1 -1
  27. data/fastlane/swift/Matchfile.swift +2 -2
  28. data/fastlane/swift/MatchfileProtocol.swift +2 -2
  29. data/fastlane/swift/OptionalConfigValue.swift +1 -1
  30. data/fastlane/swift/Plugins.swift +1 -1
  31. data/fastlane/swift/Precheckfile.swift +2 -2
  32. data/fastlane/swift/PrecheckfileProtocol.swift +2 -2
  33. data/fastlane/swift/RubyCommand.swift +1 -1
  34. data/fastlane/swift/RubyCommandable.swift +1 -1
  35. data/fastlane/swift/Runner.swift +1 -1
  36. data/fastlane/swift/RunnerArgument.swift +1 -1
  37. data/fastlane/swift/Scanfile.swift +2 -2
  38. data/fastlane/swift/ScanfileProtocol.swift +2 -2
  39. data/fastlane/swift/Screengrabfile.swift +2 -2
  40. data/fastlane/swift/ScreengrabfileProtocol.swift +2 -2
  41. data/fastlane/swift/Snapshotfile.swift +2 -2
  42. data/fastlane/swift/SnapshotfileProtocol.swift +2 -2
  43. data/fastlane/swift/SocketClient.swift +1 -1
  44. data/fastlane/swift/SocketClientDelegateProtocol.swift +1 -1
  45. data/fastlane/swift/SocketResponse.swift +1 -1
  46. data/fastlane/swift/main.swift +1 -1
  47. data/fastlane_core/lib/fastlane_core/helper.rb +6 -1
  48. data/match/lib/assets/READMETemplate.md +2 -2
  49. data/match/lib/match/generator.rb +2 -2
  50. data/match/lib/match/runner.rb +1 -1
  51. data/precheck/lib/precheck/options.rb +1 -1
  52. data/produce/lib/produce/options.rb +1 -1
  53. data/spaceship/lib/spaceship/connect_api/models/certificate.rb +1 -0
  54. data/supply/lib/supply/uploader.rb +19 -12
  55. data/trainer/lib/trainer/legacy_xcresult.rb +586 -0
  56. data/trainer/lib/trainer/options.rb +5 -0
  57. data/trainer/lib/trainer/plist_test_summary_parser.rb +84 -0
  58. data/trainer/lib/trainer/test_parser.rb +12 -293
  59. data/trainer/lib/trainer/xcresult/helper.rb +53 -0
  60. data/trainer/lib/trainer/xcresult/repetition.rb +39 -0
  61. data/trainer/lib/trainer/xcresult/test_case.rb +221 -0
  62. data/trainer/lib/trainer/xcresult/test_case_attributes.rb +49 -0
  63. data/trainer/lib/trainer/xcresult/test_plan.rb +91 -0
  64. data/trainer/lib/trainer/xcresult/test_suite.rb +134 -0
  65. data/trainer/lib/trainer/xcresult.rb +31 -388
  66. data/trainer/lib/trainer.rb +3 -1
  67. metadata +29 -21
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: '0924a4ae4adee9710990cc67bf6bd16a817bb84d849d747f725e4dea8ad29548'
4
- data.tar.gz: 3ae95f0859f02531ae57cd5381b6e5a295e64c899a487cbcea074ecfa196e646
3
+ metadata.gz: dd8ce422d952c22cd384e6459133d3d668178a6237168e59c2902f3e0b35fcbe
4
+ data.tar.gz: 55220418b3abab5621d41ab450f870b588f30cf566e01f71b7e4c993abc60c06
5
5
  SHA512:
6
- metadata.gz: bd1fc74b283c81699207cfc9261827986150a2066903ab12b762acb95e6ac00c5304da48b366e8817761fbe6377169f0742e392ac8fb355905b7fb94cd2af668
7
- data.tar.gz: 1671c16656f5b3a71ba26432aba6c8491339c8c205fadf8cc968ddf576ea0b9c55ecb693a47e4d1663d11c456041d9d25b27b3ca63de6b6cce61a7556124ff02
6
+ metadata.gz: d10309c76cd22469932971ad8372617ccd997e5c21b53af5ed871ba58029f75ba362ca2ff61573ec44cf5e10e19bd7b34743a955c438a7a9dbd286aa5f599865
7
+ data.tar.gz: 7da6fcdff81271b64632d11e8da1f7937249061776263b72244c925c27060d4022842953a8e78b7435e7df11ed78f34c1935b058da3dbc973ba3389e797e5973
data/README.md CHANGED
@@ -35,87 +35,49 @@ 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='jimmy-dee'>
39
- <a href='https://github.com/jdee'>
40
- <img src='https://github.com/jdee.png' width='140px;'>
41
- </a>
42
- <h4 align='center'>Jimmy Dee</h4>
43
- </td>
44
- <td id='stefan-natchev'>
45
- <a href='https://github.com/snatchev'>
46
- <img src='https://github.com/snatchev.png' width='140px;'>
47
- </a>
48
- <h4 align='center'><a href='https://twitter.com/snatchev'>Stefan Natchev</a></h4>
49
- </td>
50
- <td id='josh-holtz'>
51
- <a href='https://github.com/joshdholtz'>
52
- <img src='https://github.com/joshdholtz.png' width='140px;'>
53
- </a>
54
- <h4 align='center'><a href='https://twitter.com/joshdholtz'>Josh Holtz</a></h4>
55
- </td>
56
- <td id='joshua-liebowitz'>
57
- <a href='https://github.com/taquitos'>
58
- <img src='https://github.com/taquitos.png' width='140px;'>
59
- </a>
60
- <h4 align='center'><a href='https://twitter.com/taquitos'>Joshua Liebowitz</a></h4>
61
- </td>
62
38
  <td id='roger-oba'>
63
39
  <a href='https://github.com/rogerluan'>
64
40
  <img src='https://github.com/rogerluan.png' width='140px;'>
65
41
  </a>
66
42
  <h4 align='center'><a href='https://twitter.com/rogerluan_'>Roger Oba</a></h4>
67
43
  </td>
68
- </tr>
69
- <tr>
70
- <td id='satoshi-namai'>
71
- <a href='https://github.com/ainame'>
72
- <img src='https://github.com/ainame.png' width='140px;'>
73
- </a>
74
- <h4 align='center'><a href='https://twitter.com/ainame'>Satoshi Namai</a></h4>
75
- </td>
76
- <td id='daniel-jankowski'>
77
- <a href='https://github.com/mollyIV'>
78
- <img src='https://github.com/mollyIV.png' width='140px;'>
79
- </a>
80
- <h4 align='center'><a href='https://twitter.com/mollyIV'>Daniel Jankowski</a></h4>
81
- </td>
82
44
  <td id='aaron-brager'>
83
45
  <a href='https://github.com/getaaron'>
84
46
  <img src='https://github.com/getaaron.png' width='140px;'>
85
47
  </a>
86
48
  <h4 align='center'><a href='https://twitter.com/getaaron'>Aaron Brager</a></h4>
87
49
  </td>
88
- <td id='olivier-halligon'>
89
- <a href='https://github.com/AliSoftware'>
90
- <img src='https://github.com/AliSoftware.png' width='140px;'>
50
+ <td id='iulian-onofrei'>
51
+ <a href='https://github.com/revolter'>
52
+ <img src='https://github.com/revolter.png' width='140px;'>
91
53
  </a>
92
- <h4 align='center'><a href='https://twitter.com/aligatr'>Olivier Halligon</a></h4>
54
+ <h4 align='center'><a href='https://twitter.com/Revolt666'>Iulian Onofrei</a></h4>
93
55
  </td>
94
- <td id='andrew-mcburney'>
95
- <a href='https://github.com/armcburney'>
96
- <img src='https://github.com/armcburney.png' width='140px;'>
56
+ <td id='stefan-natchev'>
57
+ <a href='https://github.com/snatchev'>
58
+ <img src='https://github.com/snatchev.png' width='140px;'>
97
59
  </a>
98
- <h4 align='center'><a href='https://twitter.com/armcburney'>Andrew McBurney</a></h4>
60
+ <h4 align='center'><a href='https://twitter.com/snatchev'>Stefan Natchev</a></h4>
99
61
  </td>
100
- </tr>
101
- <tr>
102
- <td id='danielle-tomlinson'>
103
- <a href='https://github.com/endocrimes'>
104
- <img src='https://github.com/endocrimes.png' width='140px;'>
62
+ <td id='jimmy-dee'>
63
+ <a href='https://github.com/jdee'>
64
+ <img src='https://github.com/jdee.png' width='140px;'>
105
65
  </a>
106
- <h4 align='center'><a href='https://twitter.com/endocrimes'>Danielle Tomlinson</a></h4>
66
+ <h4 align='center'>Jimmy Dee</h4>
107
67
  </td>
108
- <td id='kohki-miki'>
109
- <a href='https://github.com/giginet'>
110
- <img src='https://github.com/giginet.png' width='140px;'>
68
+ </tr>
69
+ <tr>
70
+ <td id='manish-rathi'>
71
+ <a href='https://github.com/crazymanish'>
72
+ <img src='https://github.com/crazymanish.png' width='140px;'>
111
73
  </a>
112
- <h4 align='center'><a href='https://twitter.com/giginet'>Kohki Miki</a></h4>
74
+ <h4 align='center'><a href='https://twitter.com/iammanishrathi'>Manish Rathi</a></h4>
113
75
  </td>
114
- <td id='manu-wallner'>
115
- <a href='https://github.com/milch'>
116
- <img src='https://github.com/milch.png' width='140px;'>
76
+ <td id='fumiya-nakamura'>
77
+ <a href='https://github.com/nafu'>
78
+ <img src='https://github.com/nafu.png' width='140px;'>
117
79
  </a>
118
- <h4 align='center'><a href='https://twitter.com/acrooow'>Manu Wallner</a></h4>
80
+ <h4 align='center'><a href='https://twitter.com/nafu003'>Fumiya Nakamura</a></h4>
119
81
  </td>
120
82
  <td id='luka-mirosevic'>
121
83
  <a href='https://github.com/lmirosevic'>
@@ -129,13 +91,37 @@ If the above doesn't help, please [submit an issue](https://github.com/fastlane/
129
91
  </a>
130
92
  <h4 align='center'><a href='https://twitter.com/KrauseFx'>Felix Krause</a></h4>
131
93
  </td>
94
+ <td id='jan-piotrowski'>
95
+ <a href='https://github.com/janpio'>
96
+ <img src='https://github.com/janpio.png' width='140px;'>
97
+ </a>
98
+ <h4 align='center'><a href='https://twitter.com/Sujan'>Jan Piotrowski</a></h4>
99
+ </td>
132
100
  </tr>
133
101
  <tr>
134
- <td id='helmut-januschka'>
135
- <a href='https://github.com/hjanuschka'>
136
- <img src='https://github.com/hjanuschka.png' width='140px;'>
102
+ <td id='jérôme-lacoste'>
103
+ <a href='https://github.com/lacostej'>
104
+ <img src='https://github.com/lacostej.png' width='140px;'>
137
105
  </a>
138
- <h4 align='center'><a href='https://twitter.com/hjanuschka'>Helmut Januschka</a></h4>
106
+ <h4 align='center'><a href='https://twitter.com/lacostej'>Jérôme Lacoste</a></h4>
107
+ </td>
108
+ <td id='łukasz-grabowski'>
109
+ <a href='https://github.com/lucgrabowski'>
110
+ <img src='https://github.com/lucgrabowski.png' width='140px;'>
111
+ </a>
112
+ <h4 align='center'>Łukasz Grabowski</h4>
113
+ </td>
114
+ <td id='satoshi-namai'>
115
+ <a href='https://github.com/ainame'>
116
+ <img src='https://github.com/ainame.png' width='140px;'>
117
+ </a>
118
+ <h4 align='center'><a href='https://twitter.com/ainame'>Satoshi Namai</a></h4>
119
+ </td>
120
+ <td id='kohki-miki'>
121
+ <a href='https://github.com/giginet'>
122
+ <img src='https://github.com/giginet.png' width='140px;'>
123
+ </a>
124
+ <h4 align='center'><a href='https://twitter.com/giginet'>Kohki Miki</a></h4>
139
125
  </td>
140
126
  <td id='max-ott'>
141
127
  <a href='https://github.com/max-ott'>
@@ -143,63 +129,77 @@ If the above doesn't help, please [submit an issue](https://github.com/fastlane/
143
129
  </a>
144
130
  <h4 align='center'><a href='https://twitter.com/ott_max'>Max Ott</a></h4>
145
131
  </td>
132
+ </tr>
133
+ <tr>
146
134
  <td id='jorge-revuelta-h'>
147
135
  <a href='https://github.com/minuscorp'>
148
136
  <img src='https://github.com/minuscorp.png' width='140px;'>
149
137
  </a>
150
138
  <h4 align='center'><a href='https://twitter.com/minuscorp'>Jorge Revuelta H</a></h4>
151
139
  </td>
152
- <td id='jan-piotrowski'>
153
- <a href='https://github.com/janpio'>
154
- <img src='https://github.com/janpio.png' width='140px;'>
140
+ <td id='maksym-grebenets'>
141
+ <a href='https://github.com/mgrebenets'>
142
+ <img src='https://github.com/mgrebenets.png' width='140px;'>
155
143
  </a>
156
- <h4 align='center'><a href='https://twitter.com/Sujan'>Jan Piotrowski</a></h4>
144
+ <h4 align='center'><a href='https://twitter.com/mgrebenets'>Maksym Grebenets</a></h4>
157
145
  </td>
158
- <td id='manish-rathi'>
159
- <a href='https://github.com/crazymanish'>
160
- <img src='https://github.com/crazymanish.png' width='140px;'>
146
+ <td id='matthew-ellis'>
147
+ <a href='https://github.com/matthewellis'>
148
+ <img src='https://github.com/matthewellis.png' width='140px;'>
161
149
  </a>
162
- <h4 align='center'><a href='https://twitter.com/iammanishrathi'>Manish Rathi</a></h4>
150
+ <h4 align='center'><a href='https://twitter.com/mellis1995'>Matthew Ellis</a></h4>
151
+ </td>
152
+ <td id='joshua-liebowitz'>
153
+ <a href='https://github.com/taquitos'>
154
+ <img src='https://github.com/taquitos.png' width='140px;'>
155
+ </a>
156
+ <h4 align='center'><a href='https://twitter.com/taquitos'>Joshua Liebowitz</a></h4>
157
+ </td>
158
+ <td id='josh-holtz'>
159
+ <a href='https://github.com/joshdholtz'>
160
+ <img src='https://github.com/joshdholtz.png' width='140px;'>
161
+ </a>
162
+ <h4 align='center'><a href='https://twitter.com/joshdholtz'>Josh Holtz</a></h4>
163
163
  </td>
164
164
  </tr>
165
165
  <tr>
166
- <td id='łukasz-grabowski'>
167
- <a href='https://github.com/lucgrabowski'>
168
- <img src='https://github.com/lucgrabowski.png' width='140px;'>
166
+ <td id='danielle-tomlinson'>
167
+ <a href='https://github.com/endocrimes'>
168
+ <img src='https://github.com/endocrimes.png' width='140px;'>
169
169
  </a>
170
- <h4 align='center'>Łukasz Grabowski</h4>
170
+ <h4 align='center'><a href='https://twitter.com/endocrimes'>Danielle Tomlinson</a></h4>
171
171
  </td>
172
- <td id='matthew-ellis'>
173
- <a href='https://github.com/matthewellis'>
174
- <img src='https://github.com/matthewellis.png' width='140px;'>
172
+ <td id='andrew-mcburney'>
173
+ <a href='https://github.com/armcburney'>
174
+ <img src='https://github.com/armcburney.png' width='140px;'>
175
175
  </a>
176
- <h4 align='center'><a href='https://twitter.com/mellis1995'>Matthew Ellis</a></h4>
176
+ <h4 align='center'><a href='https://twitter.com/armcburney'>Andrew McBurney</a></h4>
177
177
  </td>
178
- <td id='jérôme-lacoste'>
179
- <a href='https://github.com/lacostej'>
180
- <img src='https://github.com/lacostej.png' width='140px;'>
178
+ <td id='daniel-jankowski'>
179
+ <a href='https://github.com/mollyIV'>
180
+ <img src='https://github.com/mollyIV.png' width='140px;'>
181
181
  </a>
182
- <h4 align='center'><a href='https://twitter.com/lacostej'>Jérôme Lacoste</a></h4>
182
+ <h4 align='center'><a href='https://twitter.com/mollyIV'>Daniel Jankowski</a></h4>
183
183
  </td>
184
- <td id='maksym-grebenets'>
185
- <a href='https://github.com/mgrebenets'>
186
- <img src='https://github.com/mgrebenets.png' width='140px;'>
184
+ <td id='helmut-januschka'>
185
+ <a href='https://github.com/hjanuschka'>
186
+ <img src='https://github.com/hjanuschka.png' width='140px;'>
187
187
  </a>
188
- <h4 align='center'><a href='https://twitter.com/mgrebenets'>Maksym Grebenets</a></h4>
188
+ <h4 align='center'><a href='https://twitter.com/hjanuschka'>Helmut Januschka</a></h4>
189
189
  </td>
190
- <td id='iulian-onofrei'>
191
- <a href='https://github.com/revolter'>
192
- <img src='https://github.com/revolter.png' width='140px;'>
190
+ <td id='olivier-halligon'>
191
+ <a href='https://github.com/AliSoftware'>
192
+ <img src='https://github.com/AliSoftware.png' width='140px;'>
193
193
  </a>
194
- <h4 align='center'><a href='https://twitter.com/Revolt666'>Iulian Onofrei</a></h4>
194
+ <h4 align='center'><a href='https://twitter.com/aligatr'>Olivier Halligon</a></h4>
195
195
  </td>
196
196
  </tr>
197
197
  <tr>
198
- <td id='fumiya-nakamura'>
199
- <a href='https://github.com/nafu'>
200
- <img src='https://github.com/nafu.png' width='140px;'>
198
+ <td id='manu-wallner'>
199
+ <a href='https://github.com/milch'>
200
+ <img src='https://github.com/milch.png' width='140px;'>
201
201
  </a>
202
- <h4 align='center'><a href='https://twitter.com/nafu003'>Fumiya Nakamura</a></h4>
202
+ <h4 align='center'><a href='https://twitter.com/acrooow'>Manu Wallner</a></h4>
203
203
  </td>
204
204
  </table>
205
205
 
@@ -100,9 +100,11 @@ module Cert
100
100
  env_name: "CERT_KEYCHAIN_PATH",
101
101
  description: "Path to a custom keychain",
102
102
  code_gen_sensitive: true,
103
- default_value: Dir["#{Dir.home}/Library/Keychains/login.keychain", "#{Dir.home}/Library/Keychains/login.keychain-db"].last,
103
+ default_value: Helper.mac? ? Dir["#{Dir.home}/Library/Keychains/login.keychain", "#{Dir.home}/Library/Keychains/login.keychain-db"].last : nil,
104
104
  default_value_dynamic: true,
105
+ optional: true,
105
106
  verify_block: proc do |value|
107
+ UI.user_error!("Keychain is not supported on platforms other than macOS") if !Helper.mac? && value
106
108
  value = File.expand_path(value)
107
109
  UI.user_error!("Keychain not found at path '#{value}'") unless File.exist?(value)
108
110
  end),
@@ -111,7 +113,10 @@ module Cert
111
113
  env_name: "CERT_KEYCHAIN_PASSWORD",
112
114
  sensitive: true,
113
115
  description: "This might be required the first time you access certificates on a new mac. For the login/default keychain this is your macOS account password",
114
- optional: true),
116
+ optional: true,
117
+ verify_block: proc do |value|
118
+ UI.user_error!("Keychain is not supported on platforms other than macOS") unless Helper.mac?
119
+ end),
115
120
  FastlaneCore::ConfigItem.new(key: :skip_set_partition_list,
116
121
  short_option: "-P",
117
122
  env_name: "CERT_SKIP_SET_PARTITION_LIST",
@@ -12,10 +12,14 @@ module Cert
12
12
  def launch
13
13
  run
14
14
 
15
- installed = FastlaneCore::CertChecker.installed?(ENV["CER_FILE_PATH"], in_keychain: ENV["CER_KEYCHAIN_PATH"])
16
- UI.message("Verifying the certificate is properly installed locally...")
17
- UI.user_error!("Could not find the newly generated certificate installed", show_github_issues: true) unless installed
18
- UI.success("Successfully installed certificate #{ENV['CER_CERTIFICATE_ID']}")
15
+ if Helper.mac?
16
+ UI.message("Verifying the certificate is properly installed locally...")
17
+ installed = FastlaneCore::CertChecker.installed?(ENV["CER_FILE_PATH"], in_keychain: ENV["CER_KEYCHAIN_PATH"])
18
+ UI.user_error!("Could not find the newly generated certificate installed", show_github_issues: true) unless installed
19
+ UI.success("Successfully installed certificate #{ENV['CER_CERTIFICATE_ID']}")
20
+ else
21
+ UI.message("Skipping verifying certificates as it would not work on this operating system.")
22
+ end
19
23
  return ENV["CER_FILE_PATH"]
20
24
  end
21
25
 
@@ -45,7 +49,7 @@ module Cert
45
49
 
46
50
  should_create = Cert.config[:force]
47
51
  unless should_create
48
- cert_path = find_existing_cert
52
+ cert_path = find_existing_cert if Helper.mac?
49
53
  should_create = cert_path.nil?
50
54
  end
51
55
 
@@ -223,17 +227,25 @@ module Cert
223
227
 
224
228
  cert_path = store_certificate(certificate, Cert.config[:filename])
225
229
 
226
- # Import all the things into the Keychain
227
- keychain = File.expand_path(Cert.config[:keychain_path])
228
- password = Cert.config[:keychain_password]
229
- FastlaneCore::KeychainImporter.import_file(private_key_path, keychain, keychain_password: password, skip_set_partition_list: Cert.config[:skip_set_partition_list])
230
- FastlaneCore::KeychainImporter.import_file(cert_path, keychain, keychain_password: password, skip_set_partition_list: Cert.config[:skip_set_partition_list])
230
+ if Helper.mac?
231
+ # Import all the things into the Keychain
232
+ keychain = File.expand_path(Cert.config[:keychain_path])
233
+ password = Cert.config[:keychain_password]
234
+ FastlaneCore::KeychainImporter.import_file(private_key_path, keychain, keychain_password: password, skip_set_partition_list: Cert.config[:skip_set_partition_list])
235
+ FastlaneCore::KeychainImporter.import_file(cert_path, keychain, keychain_password: password, skip_set_partition_list: Cert.config[:skip_set_partition_list])
236
+ else
237
+ UI.message("Skipping importing certificates as it would not work on this operating system.")
238
+ end
231
239
 
232
240
  # Environment variables for the fastlane action
233
241
  ENV["CER_CERTIFICATE_ID"] = certificate.id
234
242
  ENV["CER_FILE_PATH"] = cert_path
235
243
 
236
- UI.success("Successfully generated #{certificate.id} which was imported to the local machine.")
244
+ if Helper.mac?
245
+ UI.success("Successfully generated #{certificate.id} which was imported to the local machine.")
246
+ else
247
+ UI.success("Successfully generated #{certificate.id}")
248
+ end
237
249
 
238
250
  return cert_path
239
251
  end
@@ -99,7 +99,7 @@ module Deliver
99
99
  optional: true,
100
100
  default_value: "ios",
101
101
  verify_block: proc do |value|
102
- UI.user_error!("The platform can only be ios, appletvos, xros or osx") unless %w(ios appletvos xros osx).include?(value)
102
+ UI.user_error!("The platform can only be ios, appletvos/tvos, xros or osx") unless %w(ios appletvos tvos xros osx).include?(value)
103
103
  end),
104
104
 
105
105
  # live version
@@ -186,7 +186,7 @@ module Fastlane
186
186
  optional: true,
187
187
  default_value: "ios",
188
188
  verify_block: proc do |value|
189
- UI.user_error!("The platform can only be ios, appletvos, xros or osx") unless %w(ios appletvos xros osx).include?(value)
189
+ UI.user_error!("The platform can only be ios, appletvos/tvos, xros or osx") unless %w(ios appletvos tvos xros osx).include?(value)
190
190
  end),
191
191
  FastlaneCore::ConfigItem.new(key: :team_name,
192
192
  short_option: "-e",
@@ -564,7 +564,7 @@ What's the worst that could happen for each of the profile types?
564
564
 
565
565
  #### App Store Profiles
566
566
 
567
- An App Store profile can't be used for anything as long as it's not re-signed by Apple. The only way to get an app resigned is to submit an app for review which could take anywhere from 24 hours to a few days (checkout [appreviewtimes.com](http://appreviewtimes.com) for up-to-date expectations). Attackers could only submit an app for review, if they also got access to your App Store Connect credentials (which are not stored in git, but in your local keychain). Additionally you get an email notification every time a build gets uploaded to cancel the submission even before your app gets into the review stage.
567
+ An App Store profile can't be used for anything as long as it's not re-signed by Apple. The only way to get an app resigned is to submit an app for review which could take anywhere from 24 hours to a few days. Attackers could only submit an app for review, if they also got access to your App Store Connect credentials (which are not stored in git, but in your local keychain). Additionally you get an email notification every time a build gets uploaded to cancel the submission even before your app gets into the review stage.
568
568
 
569
569
  #### Development and Ad Hoc Profiles
570
570
 
@@ -83,7 +83,7 @@ module Fastlane
83
83
  optional: true,
84
84
  default_value: "ios",
85
85
  verify_block: proc do |value|
86
- UI.user_error!("The platform can only be ios, osx, xros or appletvos") unless %w(osx ios appletvos xros).include?(value)
86
+ UI.user_error!("The platform can only be ios, osx, xros or appletvos/tvos") unless %w(ios osx xros appletvos tvos).include?(value)
87
87
  end),
88
88
  FastlaneCore::ConfigItem.new(key: :initial_build_number,
89
89
  env_name: "INITIAL_BUILD_NUMBER",
@@ -73,6 +73,10 @@ module Fastlane
73
73
  "--wait"
74
74
  ] + auth_parts
75
75
 
76
+ if verbose
77
+ submit_command << "--verbose"
78
+ end
79
+
76
80
  submit_command = submit_parts.join(' ')
77
81
  submit_response = Actions.sh(
78
82
  submit_command,
@@ -53,7 +53,7 @@ module Fastlane
53
53
  payload["organization_id"] = organization_id unless organization_id.nil?
54
54
 
55
55
  # here's the actual lifting - POST or PUT to OneSignal
56
- json_headers = { 'Content-Type' => 'application/json', 'Authorization' => "Basic #{auth_token}" }
56
+ json_headers = { 'Content-Type' => 'application/json', 'Authorization' => "Key #{auth_token}" }
57
57
  url = +'https://api.onesignal.com/apps'
58
58
  url << '/' + app_id if is_update
59
59
  uri = URI.parse(url)
@@ -8,7 +8,7 @@ module Fastlane
8
8
  end
9
9
 
10
10
  case detect_provider(params)
11
- when 'circleci'
11
+ when 'circleci', 'codebuild'
12
12
  setup_output_paths
13
13
  end
14
14
 
@@ -20,7 +20,7 @@ module Fastlane
20
20
  end
21
21
 
22
22
  def self.detect_provider(params)
23
- params[:provider] || (Helper.is_circle_ci? ? 'circleci' : nil)
23
+ params[:provider] || (Helper.is_circle_ci? ? 'circleci' : nil) || (Helper.is_codebuild? ? 'codebuild' : nil)
24
24
  end
25
25
 
26
26
  def self.setup_keychain(params)
@@ -34,7 +34,7 @@ module Fastlane
34
34
  return
35
35
  end
36
36
 
37
- keychain_name = "fastlane_tmp_keychain"
37
+ keychain_name = params[:keychain_name]
38
38
  ENV["MATCH_KEYCHAIN_NAME"] = keychain_name
39
39
  ENV["MATCH_KEYCHAIN_PASSWORD"] = ""
40
40
 
@@ -108,7 +108,12 @@ module Fastlane
108
108
  env_name: "FL_SETUP_CI_TIMEOUT",
109
109
  description: "Set a custom timeout in seconds for keychain. Set `0` if you want to specify 'no time-out'",
110
110
  type: Integer,
111
- default_value: 3600)
111
+ default_value: 3600),
112
+ FastlaneCore::ConfigItem.new(key: :keychain_name,
113
+ env_name: "FL_SETUP_CI_KEYCHAIN_NAME",
114
+ description: "Set a custom keychain name",
115
+ type: String,
116
+ default_value: "fastlane_tmp_keychain")
112
117
  ]
113
118
  end
114
119
 
@@ -128,6 +133,11 @@ module Fastlane
128
133
  'setup_ci(
129
134
  provider: "circleci",
130
135
  timeout: 0
136
+ )',
137
+ 'setup_ci(
138
+ provider: "circleci",
139
+ timeout: 0,
140
+ keychain_name: "custom_keychain_name"
131
141
  )'
132
142
  ]
133
143
  end
@@ -151,11 +151,14 @@ module Fastlane
151
151
  private_class_method :parse_response
152
152
 
153
153
  def self.description
154
- 'Upload a new build to [TestFairy](https://www.testfairy.com/)'
154
+ 'Upload a new build to SauceLabs\' TestFairy'
155
155
  end
156
156
 
157
157
  def self.details
158
- "You can retrieve your API key on [your settings page](https://free.testfairy.com/settings/)"
158
+ <<~DETAILS
159
+ Upload a new build to [TestFairy](https://saucelabs.com/products/mobile-testing/app-betas).
160
+ You can retrieve your API key on [your settings page](https://app.testfairy.com/settings/access-key)
161
+ DETAILS
159
162
  end
160
163
 
161
164
  def self.available_options
@@ -42,7 +42,12 @@ module Fastlane
42
42
  end
43
43
 
44
44
  def self.replace_keychain_in_search_list(keychain_path)
45
- Actions.lane_context[Actions::SharedValues::ORIGINAL_DEFAULT_KEYCHAIN] = Fastlane::Actions.sh("security default-keychain", log: false).strip
45
+ begin
46
+ UI.message("Reading existing default keychain")
47
+ Actions.lane_context[Actions::SharedValues::ORIGINAL_DEFAULT_KEYCHAIN] = Fastlane::Actions.sh("security default-keychain").strip
48
+ rescue => e
49
+ raise unless e.message.include?("security: SecKeychainCopyDefault: A default keychain could not be found.")
50
+ end
46
51
  escaped_path = keychain_path.shellescape
47
52
  Fastlane::Actions.sh("security list-keychains -s #{escaped_path}", log: false)
48
53
  end
@@ -1,5 +1,5 @@
1
1
  module Fastlane
2
- VERSION = '2.226.0'.freeze
2
+ VERSION = '2.227.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,5 +1,5 @@
1
1
  // Actions.swift
2
- // Copyright (c) 2024 FastlaneTools
2
+ // Copyright (c) 2025 FastlaneTools
3
3
 
4
4
  // This autogenerated file will be overwritten or replaced when running "fastlane generate_swift"
5
5
  //
@@ -1,5 +1,5 @@
1
1
  // Appfile.swift
2
- // Copyright (c) 2024 FastlaneTools
2
+ // Copyright (c) 2025 FastlaneTools
3
3
 
4
4
  var appIdentifier: String { return "" } // The bundle identifier of your app
5
5
  var appleID: String { return "" } // Your Apple Developer Portal username
@@ -1,5 +1,5 @@
1
1
  // ArgumentProcessor.swift
2
- // Copyright (c) 2024 FastlaneTools
2
+ // Copyright (c) 2025 FastlaneTools
3
3
 
4
4
  //
5
5
  // ** NOTE **
@@ -1,5 +1,5 @@
1
1
  // Atomic.swift
2
- // Copyright (c) 2024 FastlaneTools
2
+ // Copyright (c) 2025 FastlaneTools
3
3
 
4
4
  import Foundation
5
5
 
@@ -1,5 +1,5 @@
1
1
  // ControlCommand.swift
2
- // Copyright (c) 2024 FastlaneTools
2
+ // Copyright (c) 2025 FastlaneTools
3
3
 
4
4
  //
5
5
  // ** NOTE **
@@ -1,5 +1,5 @@
1
1
  // Deliverfile.swift
2
- // Copyright (c) 2024 FastlaneTools
2
+ // Copyright (c) 2025 FastlaneTools
3
3
 
4
4
  // This class is automatically included in FastlaneRunner during build
5
5
 
@@ -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.226.0
20
+ // Generated with fastlane 2.227.0
@@ -1,5 +1,5 @@
1
1
  // DeliverfileProtocol.swift
2
- // Copyright (c) 2024 FastlaneTools
2
+ // Copyright (c) 2025 FastlaneTools
3
3
 
4
4
  public protocol DeliverfileProtocol: AnyObject {
5
5
  /// Path to your App Store Connect API Key JSON file (https://docs.fastlane.tools/app-store-connect-api/#using-fastlane-api-key-json-file)
@@ -272,4 +272,4 @@ public extension DeliverfileProtocol {
272
272
 
273
273
  // Please don't remove the lines below
274
274
  // They are used to detect outdated files
275
- // FastlaneRunnerAPIVersion [0.9.132]
275
+ // FastlaneRunnerAPIVersion [0.9.133]