fastlane 2.226.0 → 2.227.1

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 (69) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +80 -80
  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/scan/lib/scan/test_command_generator.rb +2 -2
  54. data/spaceship/lib/spaceship/connect_api/models/certificate.rb +1 -0
  55. data/spaceship/lib/spaceship/connect_api/models/device.rb +1 -2
  56. data/supply/lib/supply/uploader.rb +19 -12
  57. data/trainer/lib/trainer/legacy_xcresult.rb +586 -0
  58. data/trainer/lib/trainer/options.rb +5 -0
  59. data/trainer/lib/trainer/plist_test_summary_parser.rb +84 -0
  60. data/trainer/lib/trainer/test_parser.rb +12 -293
  61. data/trainer/lib/trainer/xcresult/helper.rb +53 -0
  62. data/trainer/lib/trainer/xcresult/repetition.rb +39 -0
  63. data/trainer/lib/trainer/xcresult/test_case.rb +221 -0
  64. data/trainer/lib/trainer/xcresult/test_case_attributes.rb +49 -0
  65. data/trainer/lib/trainer/xcresult/test_plan.rb +91 -0
  66. data/trainer/lib/trainer/xcresult/test_suite.rb +134 -0
  67. data/trainer/lib/trainer/xcresult.rb +31 -388
  68. data/trainer/lib/trainer.rb +3 -1
  69. metadata +30 -22
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: '0924a4ae4adee9710990cc67bf6bd16a817bb84d849d747f725e4dea8ad29548'
4
- data.tar.gz: 3ae95f0859f02531ae57cd5381b6e5a295e64c899a487cbcea074ecfa196e646
3
+ metadata.gz: '013957876e8538a10eb75b6a6db930df210d73ee8dbbb23fd49f372f491ae93b'
4
+ data.tar.gz: a87f6c541627a757897bf839d4cc5be2f85c6ea28fba2d3fe780c088c231c72b
5
5
  SHA512:
6
- metadata.gz: bd1fc74b283c81699207cfc9261827986150a2066903ab12b762acb95e6ac00c5304da48b366e8817761fbe6377169f0742e392ac8fb355905b7fb94cd2af668
7
- data.tar.gz: 1671c16656f5b3a71ba26432aba6c8491339c8c205fadf8cc968ddf576ea0b9c55ecb693a47e4d1663d11c456041d9d25b27b3ca63de6b6cce61a7556124ff02
6
+ metadata.gz: e87901816702b534b8f3b62712b87b8ea5a4215a2a7b9cdda8a0ffd4cc0c17faf7dd65b9492e9b3974a712a1d398166874bc0ce3f193d271b2b5f8a6db59b13e
7
+ data.tar.gz: 9e1a0956bde4a8ae72449d78a92d3acff8fccb05cf428f53d4a78beb670857bf07ce114f4ddd5fcb45eed4a42cda67b74a9c65a6fbd15150393e67ba49c4d8ba
data/README.md CHANGED
@@ -35,11 +35,17 @@ 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;'>
38
+ <td id='iulian-onofrei'>
39
+ <a href='https://github.com/revolter'>
40
+ <img src='https://github.com/revolter.png' width='140px;'>
41
41
  </a>
42
- <h4 align='center'>Jimmy Dee</h4>
42
+ <h4 align='center'><a href='https://twitter.com/Revolt666'>Iulian Onofrei</a></h4>
43
+ </td>
44
+ <td id='luka-mirosevic'>
45
+ <a href='https://github.com/lmirosevic'>
46
+ <img src='https://github.com/lmirosevic.png' width='140px;'>
47
+ </a>
48
+ <h4 align='center'><a href='https://twitter.com/lmirosevic'>Luka Mirosevic</a></h4>
43
49
  </td>
44
50
  <td id='stefan-natchev'>
45
51
  <a href='https://github.com/snatchev'>
@@ -47,24 +53,18 @@ If the above doesn't help, please [submit an issue](https://github.com/fastlane/
47
53
  </a>
48
54
  <h4 align='center'><a href='https://twitter.com/snatchev'>Stefan Natchev</a></h4>
49
55
  </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
56
  <td id='roger-oba'>
63
57
  <a href='https://github.com/rogerluan'>
64
58
  <img src='https://github.com/rogerluan.png' width='140px;'>
65
59
  </a>
66
60
  <h4 align='center'><a href='https://twitter.com/rogerluan_'>Roger Oba</a></h4>
67
61
  </td>
62
+ <td id='matthew-ellis'>
63
+ <a href='https://github.com/matthewellis'>
64
+ <img src='https://github.com/matthewellis.png' width='140px;'>
65
+ </a>
66
+ <h4 align='center'><a href='https://twitter.com/mellis1995'>Matthew Ellis</a></h4>
67
+ </td>
68
68
  </tr>
69
69
  <tr>
70
70
  <td id='satoshi-namai'>
@@ -73,37 +73,37 @@ If the above doesn't help, please [submit an issue](https://github.com/fastlane/
73
73
  </a>
74
74
  <h4 align='center'><a href='https://twitter.com/ainame'>Satoshi Namai</a></h4>
75
75
  </td>
76
- <td id='daniel-jankowski'>
77
- <a href='https://github.com/mollyIV'>
78
- <img src='https://github.com/mollyIV.png' width='140px;'>
76
+ <td id='jérôme-lacoste'>
77
+ <a href='https://github.com/lacostej'>
78
+ <img src='https://github.com/lacostej.png' width='140px;'>
79
79
  </a>
80
- <h4 align='center'><a href='https://twitter.com/mollyIV'>Daniel Jankowski</a></h4>
80
+ <h4 align='center'><a href='https://twitter.com/lacostej'>Jérôme Lacoste</a></h4>
81
81
  </td>
82
- <td id='aaron-brager'>
83
- <a href='https://github.com/getaaron'>
84
- <img src='https://github.com/getaaron.png' width='140px;'>
82
+ <td id='jimmy-dee'>
83
+ <a href='https://github.com/jdee'>
84
+ <img src='https://github.com/jdee.png' width='140px;'>
85
85
  </a>
86
- <h4 align='center'><a href='https://twitter.com/getaaron'>Aaron Brager</a></h4>
86
+ <h4 align='center'>Jimmy Dee</h4>
87
87
  </td>
88
- <td id='olivier-halligon'>
89
- <a href='https://github.com/AliSoftware'>
90
- <img src='https://github.com/AliSoftware.png' width='140px;'>
88
+ <td id='maksym-grebenets'>
89
+ <a href='https://github.com/mgrebenets'>
90
+ <img src='https://github.com/mgrebenets.png' width='140px;'>
91
91
  </a>
92
- <h4 align='center'><a href='https://twitter.com/aligatr'>Olivier Halligon</a></h4>
92
+ <h4 align='center'><a href='https://twitter.com/mgrebenets'>Maksym Grebenets</a></h4>
93
93
  </td>
94
- <td id='andrew-mcburney'>
95
- <a href='https://github.com/armcburney'>
96
- <img src='https://github.com/armcburney.png' width='140px;'>
94
+ <td id='felix-krause'>
95
+ <a href='https://github.com/KrauseFx'>
96
+ <img src='https://github.com/KrauseFx.png' width='140px;'>
97
97
  </a>
98
- <h4 align='center'><a href='https://twitter.com/armcburney'>Andrew McBurney</a></h4>
98
+ <h4 align='center'><a href='https://twitter.com/KrauseFx'>Felix Krause</a></h4>
99
99
  </td>
100
100
  </tr>
101
101
  <tr>
102
- <td id='danielle-tomlinson'>
103
- <a href='https://github.com/endocrimes'>
104
- <img src='https://github.com/endocrimes.png' width='140px;'>
102
+ <td id='aaron-brager'>
103
+ <a href='https://github.com/getaaron'>
104
+ <img src='https://github.com/getaaron.png' width='140px;'>
105
105
  </a>
106
- <h4 align='center'><a href='https://twitter.com/endocrimes'>Danielle Tomlinson</a></h4>
106
+ <h4 align='center'><a href='https://twitter.com/getaaron'>Aaron Brager</a></h4>
107
107
  </td>
108
108
  <td id='kohki-miki'>
109
109
  <a href='https://github.com/giginet'>
@@ -111,23 +111,23 @@ If the above doesn't help, please [submit an issue](https://github.com/fastlane/
111
111
  </a>
112
112
  <h4 align='center'><a href='https://twitter.com/giginet'>Kohki Miki</a></h4>
113
113
  </td>
114
- <td id='manu-wallner'>
115
- <a href='https://github.com/milch'>
116
- <img src='https://github.com/milch.png' width='140px;'>
114
+ <td id='max-ott'>
115
+ <a href='https://github.com/max-ott'>
116
+ <img src='https://github.com/max-ott.png' width='140px;'>
117
117
  </a>
118
- <h4 align='center'><a href='https://twitter.com/acrooow'>Manu Wallner</a></h4>
118
+ <h4 align='center'><a href='https://twitter.com/ott_max'>Max Ott</a></h4>
119
119
  </td>
120
- <td id='luka-mirosevic'>
121
- <a href='https://github.com/lmirosevic'>
122
- <img src='https://github.com/lmirosevic.png' width='140px;'>
120
+ <td id='daniel-jankowski'>
121
+ <a href='https://github.com/mollyIV'>
122
+ <img src='https://github.com/mollyIV.png' width='140px;'>
123
123
  </a>
124
- <h4 align='center'><a href='https://twitter.com/lmirosevic'>Luka Mirosevic</a></h4>
124
+ <h4 align='center'><a href='https://twitter.com/mollyIV'>Daniel Jankowski</a></h4>
125
125
  </td>
126
- <td id='felix-krause'>
127
- <a href='https://github.com/KrauseFx'>
128
- <img src='https://github.com/KrauseFx.png' width='140px;'>
126
+ <td id='andrew-mcburney'>
127
+ <a href='https://github.com/armcburney'>
128
+ <img src='https://github.com/armcburney.png' width='140px;'>
129
129
  </a>
130
- <h4 align='center'><a href='https://twitter.com/KrauseFx'>Felix Krause</a></h4>
130
+ <h4 align='center'><a href='https://twitter.com/armcburney'>Andrew McBurney</a></h4>
131
131
  </td>
132
132
  </tr>
133
133
  <tr>
@@ -137,17 +137,17 @@ If the above doesn't help, please [submit an issue](https://github.com/fastlane/
137
137
  </a>
138
138
  <h4 align='center'><a href='https://twitter.com/hjanuschka'>Helmut Januschka</a></h4>
139
139
  </td>
140
- <td id='max-ott'>
141
- <a href='https://github.com/max-ott'>
142
- <img src='https://github.com/max-ott.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;'>
143
143
  </a>
144
- <h4 align='center'><a href='https://twitter.com/ott_max'>Max Ott</a></h4>
144
+ <h4 align='center'>Łukasz Grabowski</h4>
145
145
  </td>
146
- <td id='jorge-revuelta-h'>
147
- <a href='https://github.com/minuscorp'>
148
- <img src='https://github.com/minuscorp.png' width='140px;'>
146
+ <td id='joshua-liebowitz'>
147
+ <a href='https://github.com/taquitos'>
148
+ <img src='https://github.com/taquitos.png' width='140px;'>
149
149
  </a>
150
- <h4 align='center'><a href='https://twitter.com/minuscorp'>Jorge Revuelta H</a></h4>
150
+ <h4 align='center'><a href='https://twitter.com/taquitos'>Joshua Liebowitz</a></h4>
151
151
  </td>
152
152
  <td id='jan-piotrowski'>
153
153
  <a href='https://github.com/janpio'>
@@ -155,43 +155,43 @@ If the above doesn't help, please [submit an issue](https://github.com/fastlane/
155
155
  </a>
156
156
  <h4 align='center'><a href='https://twitter.com/Sujan'>Jan Piotrowski</a></h4>
157
157
  </td>
158
- <td id='manish-rathi'>
159
- <a href='https://github.com/crazymanish'>
160
- <img src='https://github.com/crazymanish.png' width='140px;'>
158
+ <td id='josh-holtz'>
159
+ <a href='https://github.com/joshdholtz'>
160
+ <img src='https://github.com/joshdholtz.png' width='140px;'>
161
161
  </a>
162
- <h4 align='center'><a href='https://twitter.com/iammanishrathi'>Manish Rathi</a></h4>
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='manu-wallner'>
167
+ <a href='https://github.com/milch'>
168
+ <img src='https://github.com/milch.png' width='140px;'>
169
169
  </a>
170
- <h4 align='center'>Łukasz Grabowski</h4>
170
+ <h4 align='center'><a href='https://twitter.com/acrooow'>Manu Wallner</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='manish-rathi'>
173
+ <a href='https://github.com/crazymanish'>
174
+ <img src='https://github.com/crazymanish.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/iammanishrathi'>Manish Rathi</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='olivier-halligon'>
179
+ <a href='https://github.com/AliSoftware'>
180
+ <img src='https://github.com/AliSoftware.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/aligatr'>Olivier Halligon</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='jorge-revuelta-h'>
185
+ <a href='https://github.com/minuscorp'>
186
+ <img src='https://github.com/minuscorp.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/minuscorp'>Jorge Revuelta H</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='danielle-tomlinson'>
191
+ <a href='https://github.com/endocrimes'>
192
+ <img src='https://github.com/endocrimes.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/endocrimes'>Danielle Tomlinson</a></h4>
195
195
  </td>
196
196
  </tr>
197
197
  <tr>
@@ -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.1'.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.1
@@ -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.134]