fastlane 2.227.1 → 2.227.2

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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: '013957876e8538a10eb75b6a6db930df210d73ee8dbbb23fd49f372f491ae93b'
4
- data.tar.gz: a87f6c541627a757897bf839d4cc5be2f85c6ea28fba2d3fe780c088c231c72b
3
+ metadata.gz: cd14fd455663793f0e298e12c9c71376ce47cc2c659a8234fbb7154b464fda43
4
+ data.tar.gz: f4fcbc50151986926db37b5af08c925dd1bbe80ba8156981ca06f68efa2f61f5
5
5
  SHA512:
6
- metadata.gz: e87901816702b534b8f3b62712b87b8ea5a4215a2a7b9cdda8a0ffd4cc0c17faf7dd65b9492e9b3974a712a1d398166874bc0ce3f193d271b2b5f8a6db59b13e
7
- data.tar.gz: 9e1a0956bde4a8ae72449d78a92d3acff8fccb05cf428f53d4a78beb670857bf07ce114f4ddd5fcb45eed4a42cda67b74a9c65a6fbd15150393e67ba49c4d8ba
6
+ metadata.gz: ecf0d5bacb42638c297e9aeb99289976e87763437cff51bf3f084695b19a44b51fad10cf228a152684477f9377999edd976732141a584fb3c977c9f8d9e72159
7
+ data.tar.gz: bf10d3d90929b38106d9cea055e4e8b41c61709d3b35ce04179b4d6e41f8fccd358e8c3635759f073df3ec68e9442040db52d0bd09ffa52fb076d30e04a16228
data/README.md CHANGED
@@ -35,17 +35,11 @@ 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='iulian-onofrei'>
39
- <a href='https://github.com/revolter'>
40
- <img src='https://github.com/revolter.png' width='140px;'>
41
- </a>
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;'>
38
+ <td id='maksym-grebenets'>
39
+ <a href='https://github.com/mgrebenets'>
40
+ <img src='https://github.com/mgrebenets.png' width='140px;'>
47
41
  </a>
48
- <h4 align='center'><a href='https://twitter.com/lmirosevic'>Luka Mirosevic</a></h4>
42
+ <h4 align='center'><a href='https://twitter.com/mgrebenets'>Maksym Grebenets</a></h4>
49
43
  </td>
50
44
  <td id='stefan-natchev'>
51
45
  <a href='https://github.com/snatchev'>
@@ -53,31 +47,31 @@ If the above doesn't help, please [submit an issue](https://github.com/fastlane/
53
47
  </a>
54
48
  <h4 align='center'><a href='https://twitter.com/snatchev'>Stefan Natchev</a></h4>
55
49
  </td>
56
- <td id='roger-oba'>
57
- <a href='https://github.com/rogerluan'>
58
- <img src='https://github.com/rogerluan.png' width='140px;'>
50
+ <td id='andrew-mcburney'>
51
+ <a href='https://github.com/armcburney'>
52
+ <img src='https://github.com/armcburney.png' width='140px;'>
59
53
  </a>
60
- <h4 align='center'><a href='https://twitter.com/rogerluan_'>Roger Oba</a></h4>
54
+ <h4 align='center'><a href='https://twitter.com/armcburney'>Andrew McBurney</a></h4>
61
55
  </td>
62
- <td id='matthew-ellis'>
63
- <a href='https://github.com/matthewellis'>
64
- <img src='https://github.com/matthewellis.png' width='140px;'>
56
+ <td id='aaron-brager'>
57
+ <a href='https://github.com/getaaron'>
58
+ <img src='https://github.com/getaaron.png' width='140px;'>
65
59
  </a>
66
- <h4 align='center'><a href='https://twitter.com/mellis1995'>Matthew Ellis</a></h4>
60
+ <h4 align='center'><a href='https://twitter.com/getaaron'>Aaron Brager</a></h4>
67
61
  </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;'>
62
+ <td id='kohki-miki'>
63
+ <a href='https://github.com/giginet'>
64
+ <img src='https://github.com/giginet.png' width='140px;'>
73
65
  </a>
74
- <h4 align='center'><a href='https://twitter.com/ainame'>Satoshi Namai</a></h4>
66
+ <h4 align='center'><a href='https://twitter.com/giginet'>Kohki Miki</a></h4>
75
67
  </td>
76
- <td id='jérôme-lacoste'>
77
- <a href='https://github.com/lacostej'>
78
- <img src='https://github.com/lacostej.png' width='140px;'>
68
+ </tr>
69
+ <tr>
70
+ <td id='danielle-tomlinson'>
71
+ <a href='https://github.com/endocrimes'>
72
+ <img src='https://github.com/endocrimes.png' width='140px;'>
79
73
  </a>
80
- <h4 align='center'><a href='https://twitter.com/lacostej'>Jérôme Lacoste</a></h4>
74
+ <h4 align='center'><a href='https://twitter.com/endocrimes'>Danielle Tomlinson</a></h4>
81
75
  </td>
82
76
  <td id='jimmy-dee'>
83
77
  <a href='https://github.com/jdee'>
@@ -85,57 +79,75 @@ If the above doesn't help, please [submit an issue](https://github.com/fastlane/
85
79
  </a>
86
80
  <h4 align='center'>Jimmy Dee</h4>
87
81
  </td>
88
- <td id='maksym-grebenets'>
89
- <a href='https://github.com/mgrebenets'>
90
- <img src='https://github.com/mgrebenets.png' width='140px;'>
82
+ <td id='max-ott'>
83
+ <a href='https://github.com/max-ott'>
84
+ <img src='https://github.com/max-ott.png' width='140px;'>
91
85
  </a>
92
- <h4 align='center'><a href='https://twitter.com/mgrebenets'>Maksym Grebenets</a></h4>
86
+ <h4 align='center'><a href='https://twitter.com/ott_max'>Max Ott</a></h4>
93
87
  </td>
94
- <td id='felix-krause'>
95
- <a href='https://github.com/KrauseFx'>
96
- <img src='https://github.com/KrauseFx.png' width='140px;'>
88
+ <td id='satoshi-namai'>
89
+ <a href='https://github.com/ainame'>
90
+ <img src='https://github.com/ainame.png' width='140px;'>
97
91
  </a>
98
- <h4 align='center'><a href='https://twitter.com/KrauseFx'>Felix Krause</a></h4>
92
+ <h4 align='center'><a href='https://twitter.com/ainame'>Satoshi Namai</a></h4>
93
+ </td>
94
+ <td id='jérôme-lacoste'>
95
+ <a href='https://github.com/lacostej'>
96
+ <img src='https://github.com/lacostej.png' width='140px;'>
97
+ </a>
98
+ <h4 align='center'><a href='https://twitter.com/lacostej'>Jérôme Lacoste</a></h4>
99
99
  </td>
100
100
  </tr>
101
101
  <tr>
102
- <td id='aaron-brager'>
103
- <a href='https://github.com/getaaron'>
104
- <img src='https://github.com/getaaron.png' width='140px;'>
102
+ <td id='luka-mirosevic'>
103
+ <a href='https://github.com/lmirosevic'>
104
+ <img src='https://github.com/lmirosevic.png' width='140px;'>
105
105
  </a>
106
- <h4 align='center'><a href='https://twitter.com/getaaron'>Aaron Brager</a></h4>
106
+ <h4 align='center'><a href='https://twitter.com/lmirosevic'>Luka Mirosevic</a></h4>
107
107
  </td>
108
- <td id='kohki-miki'>
109
- <a href='https://github.com/giginet'>
110
- <img src='https://github.com/giginet.png' width='140px;'>
108
+ <td id='jan-piotrowski'>
109
+ <a href='https://github.com/janpio'>
110
+ <img src='https://github.com/janpio.png' width='140px;'>
111
111
  </a>
112
- <h4 align='center'><a href='https://twitter.com/giginet'>Kohki Miki</a></h4>
112
+ <h4 align='center'><a href='https://twitter.com/Sujan'>Jan Piotrowski</a></h4>
113
113
  </td>
114
- <td id='max-ott'>
115
- <a href='https://github.com/max-ott'>
116
- <img src='https://github.com/max-ott.png' width='140px;'>
114
+ <td id='iulian-onofrei'>
115
+ <a href='https://github.com/revolter'>
116
+ <img src='https://github.com/revolter.png' width='140px;'>
117
117
  </a>
118
- <h4 align='center'><a href='https://twitter.com/ott_max'>Max Ott</a></h4>
118
+ <h4 align='center'><a href='https://twitter.com/Revolt666'>Iulian Onofrei</a></h4>
119
119
  </td>
120
- <td id='daniel-jankowski'>
121
- <a href='https://github.com/mollyIV'>
122
- <img src='https://github.com/mollyIV.png' width='140px;'>
120
+ <td id='matthew-ellis'>
121
+ <a href='https://github.com/matthewellis'>
122
+ <img src='https://github.com/matthewellis.png' width='140px;'>
123
123
  </a>
124
- <h4 align='center'><a href='https://twitter.com/mollyIV'>Daniel Jankowski</a></h4>
124
+ <h4 align='center'><a href='https://twitter.com/mellis1995'>Matthew Ellis</a></h4>
125
125
  </td>
126
- <td id='andrew-mcburney'>
127
- <a href='https://github.com/armcburney'>
128
- <img src='https://github.com/armcburney.png' width='140px;'>
126
+ <td id='jorge-revuelta-h'>
127
+ <a href='https://github.com/minuscorp'>
128
+ <img src='https://github.com/minuscorp.png' width='140px;'>
129
129
  </a>
130
- <h4 align='center'><a href='https://twitter.com/armcburney'>Andrew McBurney</a></h4>
130
+ <h4 align='center'><a href='https://twitter.com/minuscorp'>Jorge Revuelta H</a></h4>
131
131
  </td>
132
132
  </tr>
133
133
  <tr>
134
- <td id='helmut-januschka'>
135
- <a href='https://github.com/hjanuschka'>
136
- <img src='https://github.com/hjanuschka.png' width='140px;'>
134
+ <td id='olivier-halligon'>
135
+ <a href='https://github.com/AliSoftware'>
136
+ <img src='https://github.com/AliSoftware.png' width='140px;'>
137
137
  </a>
138
- <h4 align='center'><a href='https://twitter.com/hjanuschka'>Helmut Januschka</a></h4>
138
+ <h4 align='center'><a href='https://twitter.com/aligatr'>Olivier Halligon</a></h4>
139
+ </td>
140
+ <td id='josh-holtz'>
141
+ <a href='https://github.com/joshdholtz'>
142
+ <img src='https://github.com/joshdholtz.png' width='140px;'>
143
+ </a>
144
+ <h4 align='center'><a href='https://twitter.com/joshdholtz'>Josh Holtz</a></h4>
145
+ </td>
146
+ <td id='fumiya-nakamura'>
147
+ <a href='https://github.com/nafu'>
148
+ <img src='https://github.com/nafu.png' width='140px;'>
149
+ </a>
150
+ <h4 align='center'><a href='https://twitter.com/nafu003'>Fumiya Nakamura</a></h4>
139
151
  </td>
140
152
  <td id='łukasz-grabowski'>
141
153
  <a href='https://github.com/lucgrabowski'>
@@ -149,25 +161,25 @@ If the above doesn't help, please [submit an issue](https://github.com/fastlane/
149
161
  </a>
150
162
  <h4 align='center'><a href='https://twitter.com/taquitos'>Joshua Liebowitz</a></h4>
151
163
  </td>
152
- <td id='jan-piotrowski'>
153
- <a href='https://github.com/janpio'>
154
- <img src='https://github.com/janpio.png' width='140px;'>
164
+ </tr>
165
+ <tr>
166
+ <td id='roger-oba'>
167
+ <a href='https://github.com/rogerluan'>
168
+ <img src='https://github.com/rogerluan.png' width='140px;'>
155
169
  </a>
156
- <h4 align='center'><a href='https://twitter.com/Sujan'>Jan Piotrowski</a></h4>
170
+ <h4 align='center'><a href='https://twitter.com/rogerluan_'>Roger Oba</a></h4>
157
171
  </td>
158
- <td id='josh-holtz'>
159
- <a href='https://github.com/joshdholtz'>
160
- <img src='https://github.com/joshdholtz.png' width='140px;'>
172
+ <td id='felix-krause'>
173
+ <a href='https://github.com/KrauseFx'>
174
+ <img src='https://github.com/KrauseFx.png' width='140px;'>
161
175
  </a>
162
- <h4 align='center'><a href='https://twitter.com/joshdholtz'>Josh Holtz</a></h4>
176
+ <h4 align='center'><a href='https://twitter.com/KrauseFx'>Felix Krause</a></h4>
163
177
  </td>
164
- </tr>
165
- <tr>
166
- <td id='manu-wallner'>
167
- <a href='https://github.com/milch'>
168
- <img src='https://github.com/milch.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;'>
169
181
  </a>
170
- <h4 align='center'><a href='https://twitter.com/acrooow'>Manu Wallner</a></h4>
182
+ <h4 align='center'><a href='https://twitter.com/mollyIV'>Daniel Jankowski</a></h4>
171
183
  </td>
172
184
  <td id='manish-rathi'>
173
185
  <a href='https://github.com/crazymanish'>
@@ -175,31 +187,19 @@ If the above doesn't help, please [submit an issue](https://github.com/fastlane/
175
187
  </a>
176
188
  <h4 align='center'><a href='https://twitter.com/iammanishrathi'>Manish Rathi</a></h4>
177
189
  </td>
178
- <td id='olivier-halligon'>
179
- <a href='https://github.com/AliSoftware'>
180
- <img src='https://github.com/AliSoftware.png' width='140px;'>
181
- </a>
182
- <h4 align='center'><a href='https://twitter.com/aligatr'>Olivier Halligon</a></h4>
183
- </td>
184
- <td id='jorge-revuelta-h'>
185
- <a href='https://github.com/minuscorp'>
186
- <img src='https://github.com/minuscorp.png' width='140px;'>
187
- </a>
188
- <h4 align='center'><a href='https://twitter.com/minuscorp'>Jorge Revuelta H</a></h4>
189
- </td>
190
- <td id='danielle-tomlinson'>
191
- <a href='https://github.com/endocrimes'>
192
- <img src='https://github.com/endocrimes.png' width='140px;'>
190
+ <td id='helmut-januschka'>
191
+ <a href='https://github.com/hjanuschka'>
192
+ <img src='https://github.com/hjanuschka.png' width='140px;'>
193
193
  </a>
194
- <h4 align='center'><a href='https://twitter.com/endocrimes'>Danielle Tomlinson</a></h4>
194
+ <h4 align='center'><a href='https://twitter.com/hjanuschka'>Helmut Januschka</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
 
@@ -107,7 +107,7 @@ module Deliver
107
107
  begin
108
108
  precheck_success = Precheck::Runner.new.run
109
109
  rescue => ex
110
- UI.error("fastlane precheck just tried to inspect your app's metadata for App Store guideline violations and ran into a problem. We're not sure what the problem was, but precheck failed to finished. You can run it in verbose mode if you want to see the whole error. We'll have a fix out soon 🚀")
110
+ UI.error("fastlane precheck just tried to inspect your app's metadata for App Store guideline violations and ran into a problem. We're not sure what the problem was, but precheck failed to finish. You can run it in verbose mode if you want to see the whole error. We'll have a fix out soon 🚀")
111
111
  UI.verbose(ex.inspect)
112
112
  UI.verbose(ex.backtrace.join("\n"))
113
113
  end
@@ -77,7 +77,17 @@ _pilot_ does all kinds of magic for you:
77
77
  - Automatically detects the bundle identifier from your `ipa` file
78
78
  - Automatically fetch the AppID of your app based on the bundle identifier
79
79
 
80
- _pilot_ uses [_spaceship_](https://spaceship.airforce) to submit the build metadata and the iTunes Transporter to upload the binary. Because iTunes Transporter's upload capability is only supported on OS X, `pilot upload` does not work on Linux, as described [in this issue](https://github.com/fastlane/fastlane/issues/5789)
80
+ _pilot_ uses [_spaceship_](https://spaceship.airforce) to submit the build metadata and the iTunes Transporter to upload the binary.
81
+
82
+ ### Upload from Linux
83
+
84
+ To upload binaries from Linux:
85
+ - make sure you have [Transporter on Linux](https://help.apple.com/itc/transporteruserguide/en.lproj/static.html) installed
86
+ - set the following environment variables:
87
+ - `FASTLANE_ITUNES_TRANSPORTER_USE_SHELL_SCRIPT=true`
88
+ - `FASTLANE_ITUNES_TRANSPORTER_PATH=/usr/local/itms` (_or the path where Transporter is installed_)
89
+
90
+ _Note: fastlane will temporarily save the upload credentials in `$HOME/.appstoreconnect/private_keys/`. Any other files in that directory will be deleted upon upload completion._
81
91
 
82
92
  ## List builds
83
93
 
@@ -1,5 +1,5 @@
1
1
  module Fastlane
2
- VERSION = '2.227.1'.freeze
2
+ VERSION = '2.227.2'.freeze
3
3
  SUMMARY = "The easiest way to build and release mobile apps.".freeze
4
4
  DESCRIPTION = "The easiest way to automate beta deployments and releases for your iOS and Android apps".freeze
5
5
  MINIMUM_XCODE_RELEASE = "7.0".freeze
@@ -17,4 +17,4 @@ public class Deliverfile: DeliverfileProtocol {
17
17
  // during the `init` process, and you won't see this message
18
18
  }
19
19
 
20
- // Generated with fastlane 2.227.1
20
+ // Generated with fastlane 2.227.2
@@ -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.134]
275
+ // FastlaneRunnerAPIVersion [0.9.135]
@@ -8826,8 +8826,8 @@ public func rubyVersion() {
8826
8826
  - prelaunchSimulator: Enabling this option will launch the first simulator prior to calling any xcodebuild command
8827
8827
  - reinstallApp: Enabling this option will automatically uninstall the application before running it
8828
8828
  - appIdentifier: The bundle identifier of the app to uninstall (only needed when enabling reinstall_app)
8829
- - onlyTesting: Array of strings matching Test Bundle/Test Suite/Test Cases to run
8830
- - skipTesting: Array of strings matching Test Bundle/Test Suite/Test Cases to skip
8829
+ - onlyTesting: Array of test identifiers to run. Expected format: TestTarget[/TestSuite[/TestCase]]
8830
+ - skipTesting: Array of test identifiers to skip. Expected format: TestTarget[/TestSuite[/TestCase]]
8831
8831
  - testplan: The testplan associated with the scheme that should be used for testing
8832
8832
  - onlyTestConfigurations: Array of strings matching test plan configurations to run
8833
8833
  - skipTestConfigurations: Array of strings matching test plan configurations to skip
@@ -9261,8 +9261,8 @@ public func say(text: [String],
9261
9261
  - prelaunchSimulator: Enabling this option will launch the first simulator prior to calling any xcodebuild command
9262
9262
  - reinstallApp: Enabling this option will automatically uninstall the application before running it
9263
9263
  - appIdentifier: The bundle identifier of the app to uninstall (only needed when enabling reinstall_app)
9264
- - onlyTesting: Array of strings matching Test Bundle/Test Suite/Test Cases to run
9265
- - skipTesting: Array of strings matching Test Bundle/Test Suite/Test Cases to skip
9264
+ - onlyTesting: Array of test identifiers to run. Expected format: TestTarget[/TestSuite[/TestCase]]
9265
+ - skipTesting: Array of test identifiers to skip. Expected format: TestTarget[/TestSuite[/TestCase]]
9266
9266
  - testplan: The testplan associated with the scheme that should be used for testing
9267
9267
  - onlyTestConfigurations: Array of strings matching test plan configurations to run
9268
9268
  - skipTestConfigurations: Array of strings matching test plan configurations to skip
@@ -13887,4 +13887,4 @@ public let snapshotfile: Snapshotfile = .init()
13887
13887
 
13888
13888
  // Please don't remove the lines below
13889
13889
  // They are used to detect outdated files
13890
- // FastlaneRunnerAPIVersion [0.9.187]
13890
+ // FastlaneRunnerAPIVersion [0.9.188]
@@ -17,4 +17,4 @@ public class Gymfile: GymfileProtocol {
17
17
  // during the `init` process, and you won't see this message
18
18
  }
19
19
 
20
- // Generated with fastlane 2.227.1
20
+ // Generated with fastlane 2.227.2
@@ -212,4 +212,4 @@ public extension GymfileProtocol {
212
212
 
213
213
  // Please don't remove the lines below
214
214
  // They are used to detect outdated files
215
- // FastlaneRunnerAPIVersion [0.9.137]
215
+ // FastlaneRunnerAPIVersion [0.9.138]
@@ -17,4 +17,4 @@ public class Matchfile: MatchfileProtocol {
17
17
  // during the `init` process, and you won't see this message
18
18
  }
19
19
 
20
- // Generated with fastlane 2.227.1
20
+ // Generated with fastlane 2.227.2
@@ -232,4 +232,4 @@ public extension MatchfileProtocol {
232
232
 
233
233
  // Please don't remove the lines below
234
234
  // They are used to detect outdated files
235
- // FastlaneRunnerAPIVersion [0.9.131]
235
+ // FastlaneRunnerAPIVersion [0.9.132]
@@ -17,4 +17,4 @@ public class Precheckfile: PrecheckfileProtocol {
17
17
  // during the `init` process, and you won't see this message
18
18
  }
19
19
 
20
- // Generated with fastlane 2.227.1
20
+ // Generated with fastlane 2.227.2
@@ -52,4 +52,4 @@ public extension PrecheckfileProtocol {
52
52
 
53
53
  // Please don't remove the lines below
54
54
  // They are used to detect outdated files
55
- // FastlaneRunnerAPIVersion [0.9.130]
55
+ // FastlaneRunnerAPIVersion [0.9.131]
@@ -17,4 +17,4 @@ public class Scanfile: ScanfileProtocol {
17
17
  // during the `init` process, and you won't see this message
18
18
  }
19
19
 
20
- // Generated with fastlane 2.227.1
20
+ // Generated with fastlane 2.227.2
@@ -44,10 +44,10 @@ public protocol ScanfileProtocol: AnyObject {
44
44
  /// The bundle identifier of the app to uninstall (only needed when enabling reinstall_app)
45
45
  var appIdentifier: String? { get }
46
46
 
47
- /// Array of strings matching Test Bundle/Test Suite/Test Cases to run
47
+ /// Array of test identifiers to run. Expected format: TestTarget[/TestSuite[/TestCase]]
48
48
  var onlyTesting: String? { get }
49
49
 
50
- /// Array of strings matching Test Bundle/Test Suite/Test Cases to skip
50
+ /// Array of test identifiers to skip. Expected format: TestTarget[/TestSuite[/TestCase]]
51
51
  var skipTesting: String? { get }
52
52
 
53
53
  /// The testplan associated with the scheme that should be used for testing
@@ -324,4 +324,4 @@ public extension ScanfileProtocol {
324
324
 
325
325
  // Please don't remove the lines below
326
326
  // They are used to detect outdated files
327
- // FastlaneRunnerAPIVersion [0.9.142]
327
+ // FastlaneRunnerAPIVersion [0.9.143]
@@ -17,4 +17,4 @@ public class Screengrabfile: ScreengrabfileProtocol {
17
17
  // during the `init` process, and you won't see this message
18
18
  }
19
19
 
20
- // Generated with fastlane 2.227.1
20
+ // Generated with fastlane 2.227.2
@@ -96,4 +96,4 @@ public extension ScreengrabfileProtocol {
96
96
 
97
97
  // Please don't remove the lines below
98
98
  // They are used to detect outdated files
99
- // FastlaneRunnerAPIVersion [0.9.132]
99
+ // FastlaneRunnerAPIVersion [0.9.133]
@@ -17,4 +17,4 @@ public class Snapshotfile: SnapshotfileProtocol {
17
17
  // during the `init` process, and you won't see this message
18
18
  }
19
19
 
20
- // Generated with fastlane 2.227.1
20
+ // Generated with fastlane 2.227.2
@@ -208,4 +208,4 @@ public extension SnapshotfileProtocol {
208
208
 
209
209
  // Please don't remove the lines below
210
210
  // They are used to detect outdated files
211
- // FastlaneRunnerAPIVersion [0.9.126]
211
+ // FastlaneRunnerAPIVersion [0.9.127]
@@ -1,6 +1,10 @@
1
1
  <?xml version="1.0" encoding="UTF-8"?>
2
2
  <package xmlns="http://apple.com/itunes/importer" version="software5.4">
3
- <software_assets apple_id="<%= @data[:apple_id] %>" app_platform="<%= @data[:platform] %>">
3
+ <software_assets apple_id="<%= @data[:apple_id] %>" app_platform="<%= @data[:platform] %>"
4
+ <%= %Q[bundle_short_version_string="#{@data[:short_version]}"] if @data&.key?(:short_version) %>
5
+ <%= %Q[bundle_version="#{@data[:bundle_version]}"] if @data&.key?(:bundle_version) %>
6
+ <%= %Q[bundle_identifier="#{@data[:app_identifier]}"] if @data&.key?(:app_identifier) %>
7
+ >
4
8
  <asset type="<%= @data[:archive_type] %>">
5
9
  <data_file>
6
10
  <size><%= @data[:file_size] %></size>
@@ -77,8 +77,10 @@ module FastlaneCore
77
77
 
78
78
  # Exit status for build command, should be 0 if build succeeded
79
79
  if status != 0
80
+ is_output_already_printed = print_all && !suppress_output
80
81
  o = output.join("\n")
81
- puts(o) unless suppress_output # the user has the right to see the raw output
82
+ puts(o) unless is_output_already_printed
83
+
82
84
  UI.error("Exit status: #{status}")
83
85
  if error
84
86
  error.call(o, status)
@@ -1,4 +1,5 @@
1
1
  require 'open3'
2
+ require 'stringio'
2
3
  require 'zip'
3
4
 
4
5
  require_relative 'core_ext/cfpropertylist'
@@ -46,21 +47,10 @@ module FastlaneCore
46
47
  end
47
48
  return nil if plist_data.nil?
48
49
 
49
- # Creates a temporary directory with a unique name tagged with 'fastlane'
50
- # The directory is deleted automatically at the end of the block
51
- Dir.mktmpdir("fastlane") do |tmp|
52
- # The XML file has to be properly unpacked first
53
- tmp_path = File.join(tmp, "Info.plist")
54
- File.open(tmp_path, 'wb') do |output|
55
- output.write(plist_data)
56
- end
57
- result = CFPropertyList.native_types(CFPropertyList::List.new(file: tmp_path).value)
58
-
59
- if result['CFBundleIdentifier'] || result['CFBundleVersion']
60
- return result
61
- end
50
+ result = CFPropertyList.native_types(CFPropertyList::List.new(data: plist_data).value)
51
+ if result['CFBundleIdentifier'] || result['CFBundleVersion']
52
+ return result
62
53
  end
63
-
64
54
  return nil
65
55
  end
66
56
 
@@ -12,7 +12,7 @@ module FastlaneCore
12
12
 
13
13
  attr_accessor :package_path
14
14
 
15
- def generate(app_id: nil, ipa_path: nil, package_path: nil, platform: nil)
15
+ def generate(app_id: nil, ipa_path: nil, package_path: nil, platform: nil, app_identifier: nil, short_version: nil, bundle_version: nil)
16
16
  self.package_path = File.join(package_path, "#{app_id}-#{SecureRandom.uuid}.itmsp")
17
17
  FileUtils.rm_rf(self.package_path) if File.directory?(self.package_path)
18
18
  FileUtils.mkdir_p(self.package_path)
@@ -24,7 +24,10 @@ module FastlaneCore
24
24
  ipa_path: File.basename(ipa_path), # this is only the base name as the ipa is inside the package
25
25
  md5: Digest::MD5.file(ipa_path).hexdigest,
26
26
  archive_type: "bundle",
27
- platform: (platform || "ios") # pass "appletvos" for Apple TV's IPA
27
+ platform: (platform || "ios"), # pass "appletvos" for Apple TV's IPA
28
+ app_identifier: app_identifier,
29
+ short_version: short_version,
30
+ bundle_version: bundle_version
28
31
  }
29
32
 
30
33
  xml_path = File.join(FastlaneCore::ROOT, "lib/assets/XMLTemplate.xml.erb")
@@ -51,6 +51,45 @@ module FastlaneCore
51
51
  not_implemented(__method__)
52
52
  end
53
53
 
54
+ # Builds a string array of credentials parameters based on the provided authentication details.
55
+ #
56
+ # @param username [String, nil] The username for authentication (optional).
57
+ # @param password [String, nil] The password for authentication (optional).
58
+ # @param jwt [String, nil] A JSON Web Token for token-based authentication (optional).
59
+ # @param api_key [Hash, nil] An API key for authentication (optional).
60
+ #
61
+ # @return [String] A string containing the appropriate credentials for authentication.
62
+ def build_credential_params(username = nil, password = nil, jwt = nil, api_key = nil)
63
+ not_implemented(__method__)
64
+ end
65
+
66
+ # Runs preparations before executing any command from the executor.
67
+ #
68
+ # @param original_api_key [Hash] api key containing the issuer id and private key
69
+ # @return [Hash] copy of `api_key` which includes an extra `key_dir` with the location of the .p8 file on disk
70
+ def prepare(original_api_key:)
71
+ return if original_api_key.nil?
72
+ # Create .p8 file from api_key and provide api key info which contains .p8 file path
73
+ api_key = original_api_key.dup
74
+ if self.kind_of?(ShellScriptTransporterExecutor)
75
+ # as of Transporter v3.3.0, the app is unable to detect the private keys under the 'private_keys' folder in current directory
76
+ # so we must rely on the other search paths in the Home dir:
77
+ # https://help.apple.com/itc/transporteruserguide/en.lproj/static.html#itc803b7be80
78
+ private_keys_dir = File.join(Dir.home, ".appstoreconnect/private_keys")
79
+ unless Dir.exist?(private_keys_dir)
80
+ FileUtils.mkdir_p(private_keys_dir)
81
+ end
82
+ api_key[:key_dir] = private_keys_dir
83
+ else
84
+ api_key[:key_dir] = Dir.mktmpdir("deliver-")
85
+ end
86
+ # Specified p8 needs to be generated to call altool or iTMSTransporter
87
+ File.open(File.join(api_key[:key_dir], "AuthKey_#{api_key[:key_id]}.p8"), "wb") do |p8|
88
+ p8.write(api_key[:key])
89
+ end
90
+ api_key
91
+ end
92
+
54
93
  def execute(command, hide_output)
55
94
  if Helper.test?
56
95
  yield(nil) if block_given?
@@ -249,21 +288,7 @@ module FastlaneCore
249
288
  @errors << "-1 indicates altool exited abnormally; try retrying (see https://github.com/fastlane/fastlane/issues/21535)" if exit_status == -1
250
289
 
251
290
  unless @errors.empty? || @all_lines.empty?
252
- # Print the last lines that appear after the last error from the logs
253
- # If error text is not detected, it will be 20 lines
254
- # This is key for non-verbose mode
255
-
256
- # The format of altool's result with error is like below
257
- # > *** Error: Error uploading '...'.
258
- # > *** Error: ...
259
- # > {
260
- # > NSLocalizedDescription = "...",
261
- # > ...
262
- # > }
263
- # So this line tries to find the line which has "*** Error:" prefix from bottom of log
264
- error_line_index = @all_lines.rindex { |line| ERROR_REGEX.match?(line) }
265
-
266
- @all_lines[(error_line_index || -20)..-1].each do |line|
291
+ @all_lines.each do |line|
267
292
  UI.important("[altool] #{line}")
268
293
  end
269
294
  UI.message("Application Loader output above ^")
@@ -274,16 +299,21 @@ module FastlaneCore
274
299
  exit_status.zero?
275
300
  end
276
301
 
302
+ def build_credential_params(username = nil, password = nil, jwt = nil, api_key = nil)
303
+ if !username.nil? && !password.nil? && api_key.nil?
304
+ "-u #{username.shellescape} -p #{password.shellescape}"
305
+ elsif !api_key.nil?
306
+ "--apiKey #{api_key[:key_id]} --apiIssuer #{api_key[:issuer_id]}"
307
+ end
308
+ end
309
+
277
310
  def build_upload_command(username, password, source = "/tmp", provider_short_name = "", jwt = nil, platform = nil, api_key = nil)
278
311
  use_api_key = !api_key.nil?
279
312
  [
280
313
  ("API_PRIVATE_KEYS_DIR=#{api_key[:key_dir]}" if use_api_key),
281
314
  "xcrun altool",
282
315
  "--upload-app",
283
- ("-u #{username.shellescape}" unless use_api_key),
284
- ("-p #{password.shellescape}" unless use_api_key),
285
- ("--apiKey #{api_key[:key_id]}" if use_api_key),
286
- ("--apiIssuer #{api_key[:issuer_id]}" if use_api_key),
316
+ build_credential_params(username, password, jwt, api_key),
287
317
  ("--asc-provider #{provider_short_name}" unless use_api_key || provider_short_name.to_s.empty?),
288
318
  platform_option(platform),
289
319
  file_upload_option(source),
@@ -298,10 +328,7 @@ module FastlaneCore
298
328
  ("API_PRIVATE_KEYS_DIR=#{api_key[:key_dir]}" if use_api_key),
299
329
  "xcrun altool",
300
330
  "--list-providers",
301
- ("-u #{username.shellescape}" unless use_api_key),
302
- ("-p #{password.shellescape}" unless use_api_key),
303
- ("--apiKey #{api_key[:key_id]}" if use_api_key),
304
- ("--apiIssuer #{api_key[:issuer_id]}" if use_api_key),
331
+ build_credential_params(username, password, jwt, api_key),
305
332
  "--output-format json"
306
333
  ].compact.join(' ')
307
334
  end
@@ -318,10 +345,7 @@ module FastlaneCore
318
345
  ("API_PRIVATE_KEYS_DIR=#{api_key[:key_dir]}" if use_api_key),
319
346
  "xcrun altool",
320
347
  "--validate-app",
321
- ("-u #{username.shellescape}" unless use_api_key),
322
- ("-p #{password.shellescape}" unless use_api_key),
323
- ("--apiKey #{api_key[:key_id]}" if use_api_key),
324
- ("--apiIssuer #{api_key[:issuer_id]}" if use_api_key),
348
+ build_credential_params(username, password, nil, api_key),
325
349
  ("--asc-provider #{provider_short_name}" unless use_api_key || provider_short_name.to_s.empty?),
326
350
  platform_option(platform),
327
351
  file_upload_option(source)
@@ -385,14 +409,21 @@ module FastlaneCore
385
409
 
386
410
  # Generates commands and executes the iTMSTransporter through the shell script it provides by the same name
387
411
  class ShellScriptTransporterExecutor < TransporterExecutor
412
+ def build_credential_params(username = nil, password = nil, jwt = nil, api_key = nil)
413
+ if !(username.nil? || password.nil?) && (jwt.nil? && api_key.nil?)
414
+ "-u #{username.shellescape} -p #{shell_escaped_password(password)}"
415
+ elsif !jwt.nil? && api_key.nil?
416
+ "-jwt #{jwt}"
417
+ elsif !api_key.nil?
418
+ "-apiIssuer #{api_key[:issuer_id]} -apiKey #{api_key[:key_id]}"
419
+ end
420
+ end
421
+
388
422
  def build_upload_command(username, password, source = "/tmp", provider_short_name = "", jwt = nil, platform = nil, api_key = nil)
389
- use_jwt = !jwt.to_s.empty?
390
423
  [
391
424
  '"' + Helper.transporter_path + '"',
392
425
  "-m upload",
393
- ("-u #{username.shellescape}" unless use_jwt),
394
- ("-p #{shell_escaped_password(password)}" unless use_jwt),
395
- ("-jwt #{jwt}" if use_jwt),
426
+ build_credential_params(username, password, jwt, api_key),
396
427
  file_upload_option(source),
397
428
  additional_upload_parameters, # that's here, because the user might overwrite the -t option
398
429
  "-k 100000",
@@ -402,13 +433,10 @@ module FastlaneCore
402
433
  end
403
434
 
404
435
  def build_download_command(username, password, apple_id, destination = "/tmp", provider_short_name = "", jwt = nil)
405
- use_jwt = !jwt.to_s.empty?
406
436
  [
407
437
  '"' + Helper.transporter_path + '"',
408
438
  "-m lookupMetadata",
409
- ("-u #{username.shellescape}" unless use_jwt),
410
- ("-p #{shell_escaped_password(password)}" unless use_jwt),
411
- ("-jwt #{jwt}" if use_jwt),
439
+ build_credential_params(username, password, jwt),
412
440
  "-apple_id #{apple_id}",
413
441
  "-destination '#{destination}'",
414
442
  ("-itc_provider #{provider_short_name}" if jwt.nil? && !provider_short_name.to_s.empty?)
@@ -416,25 +444,19 @@ module FastlaneCore
416
444
  end
417
445
 
418
446
  def build_provider_ids_command(username, password, jwt = nil, api_key = nil)
419
- use_jwt = !jwt.to_s.empty?
420
447
  [
421
448
  '"' + Helper.transporter_path + '"',
422
449
  '-m provider',
423
- ("-u \"#{username.shellescape}\"" unless use_jwt),
424
- ("-p #{shell_escaped_password(password)}" unless use_jwt),
425
- ("-jwt #{jwt}" if use_jwt)
450
+ build_credential_params(username, password, jwt, api_key)
426
451
  ].compact.join(' ')
427
452
  end
428
453
 
429
454
  def build_verify_command(username, password, source = "/tmp", provider_short_name = "", **kwargs)
430
455
  jwt = kwargs[:jwt]
431
- use_jwt = !jwt.to_s.empty?
432
456
  [
433
457
  '"' + Helper.transporter_path + '"',
434
458
  '-m verify',
435
- ("-u #{username.shellescape}" unless use_jwt),
436
- ("-p #{shell_escaped_password(password)}" unless use_jwt),
437
- ("-jwt #{jwt}" if use_jwt),
459
+ build_credential_params(username, password, jwt),
438
460
  "-f #{source.shellescape}",
439
461
  ("-WONoPause true" if Helper.windows?), # Windows only: process instantly returns instead of waiting for key press
440
462
  ("-itc_provider #{provider_short_name}" if jwt.nil? && !provider_short_name.to_s.empty?)
@@ -482,16 +504,26 @@ module FastlaneCore
482
504
  # Generates commands and executes the iTMSTransporter by invoking its Java app directly, to avoid the crazy parameter
483
505
  # escaping problems in its accompanying shell script.
484
506
  class JavaTransporterExecutor < TransporterExecutor
507
+ def build_credential_params(username = nil, password = nil, jwt = nil, api_key = nil, is_password_from_env = false)
508
+ if !username.nil? && jwt.to_s.empty?
509
+ if is_password_from_env
510
+ "-u #{username.shellescape} -p @env:ITMS_TRANSPORTER_PASSWORD"
511
+ elsif !password.nil?
512
+ "-u #{username.shellescape} -p #{password.shellescape}"
513
+ end
514
+ elsif !jwt.to_s.empty?
515
+ "-jwt #{jwt}"
516
+ end
517
+ end
518
+
485
519
  def build_upload_command(username, password, source = "/tmp", provider_short_name = "", jwt = nil, platform = nil, api_key = nil)
486
- use_jwt = !jwt.to_s.empty?
487
- if !Helper.user_defined_itms_path? && Helper.mac? && Helper.xcode_at_least?(11)
520
+ credential_params = build_credential_params(username, password, jwt, api_key, is_default_itms_on_xcode_11?)
521
+ if is_default_itms_on_xcode_11?
488
522
  [
489
- ("ITMS_TRANSPORTER_PASSWORD=#{password.shellescape}" unless use_jwt),
523
+ ("ITMS_TRANSPORTER_PASSWORD=#{password.shellescape}" if jwt.to_s.empty?),
490
524
  'xcrun iTMSTransporter',
491
525
  '-m upload',
492
- ("-u #{username.shellescape}" unless use_jwt),
493
- ("-p @env:ITMS_TRANSPORTER_PASSWORD" unless use_jwt),
494
- ("-jwt #{jwt}" if use_jwt),
526
+ credential_params,
495
527
  file_upload_option(source),
496
528
  additional_upload_parameters, # that's here, because the user might overwrite the -t option
497
529
  '-k 100000',
@@ -510,9 +542,7 @@ module FastlaneCore
510
542
  '-Dsun.net.http.retryPost=false',
511
543
  java_code_option,
512
544
  '-m upload',
513
- ("-u #{username.shellescape}" unless use_jwt),
514
- ("-p #{password.shellescape}" unless use_jwt),
515
- ("-jwt #{jwt}" if use_jwt),
545
+ credential_params,
516
546
  file_upload_option(source),
517
547
  additional_upload_parameters, # that's here, because the user might overwrite the -t option
518
548
  '-k 100000',
@@ -524,15 +554,13 @@ module FastlaneCore
524
554
 
525
555
  def build_verify_command(username, password, source = "/tmp", provider_short_name = "", **kwargs)
526
556
  jwt = kwargs[:jwt]
527
- use_jwt = !jwt.to_s.empty?
528
- if !Helper.user_defined_itms_path? && Helper.mac? && Helper.xcode_at_least?(11)
557
+ credential_params = build_credential_params(username, password, jwt, nil, is_default_itms_on_xcode_11?)
558
+ if is_default_itms_on_xcode_11?
529
559
  [
530
- ("ITMS_TRANSPORTER_PASSWORD=#{password.shellescape}" unless use_jwt),
560
+ ("ITMS_TRANSPORTER_PASSWORD=#{password.shellescape}" if jwt.to_s.empty?),
531
561
  'xcrun iTMSTransporter',
532
562
  '-m verify',
533
- ("-u #{username.shellescape}" unless use_jwt),
534
- ("-p @env:ITMS_TRANSPORTER_PASSWORD" unless use_jwt),
535
- ("-jwt #{jwt}" if use_jwt),
563
+ credential_params,
536
564
  "-f #{source.shellescape}",
537
565
  ("-itc_provider #{provider_short_name}" if jwt.nil? && !provider_short_name.to_s.empty?),
538
566
  '2>&1' # cause stderr to be written to stdout
@@ -549,9 +577,7 @@ module FastlaneCore
549
577
  '-Dsun.net.http.retryPost=false',
550
578
  java_code_option,
551
579
  '-m verify',
552
- ("-u #{username.shellescape}" unless use_jwt),
553
- ("-p #{password.shellescape}" unless use_jwt),
554
- ("-jwt #{jwt}" if use_jwt),
580
+ credential_params,
555
581
  "-f #{source.shellescape}",
556
582
  ("-itc_provider #{provider_short_name}" if jwt.nil? && !provider_short_name.to_s.empty?),
557
583
  '2>&1' # cause stderr to be written to stdout
@@ -560,15 +586,13 @@ module FastlaneCore
560
586
  end
561
587
 
562
588
  def build_download_command(username, password, apple_id, destination = "/tmp", provider_short_name = "", jwt = nil)
563
- use_jwt = !jwt.to_s.empty?
564
- if !Helper.user_defined_itms_path? && Helper.mac? && Helper.xcode_at_least?(11)
589
+ credential_params = build_credential_params(username, password, jwt, nil, is_default_itms_on_xcode_11?)
590
+ if is_default_itms_on_xcode_11?
565
591
  [
566
- ("ITMS_TRANSPORTER_PASSWORD=#{password.shellescape}" unless use_jwt),
592
+ ("ITMS_TRANSPORTER_PASSWORD=#{password.shellescape}" if jwt.to_s.empty?),
567
593
  'xcrun iTMSTransporter',
568
594
  '-m lookupMetadata',
569
- ("-u #{username.shellescape}" unless use_jwt),
570
- ("-p @env:ITMS_TRANSPORTER_PASSWORD" unless use_jwt),
571
- ("-jwt #{jwt}" if use_jwt),
595
+ credential_params,
572
596
  "-apple_id #{apple_id.shellescape}",
573
597
  "-destination #{destination.shellescape}",
574
598
  ("-itc_provider #{provider_short_name}" if jwt.nil? && !provider_short_name.to_s.empty?),
@@ -586,9 +610,7 @@ module FastlaneCore
586
610
  '-Dsun.net.http.retryPost=false',
587
611
  java_code_option,
588
612
  '-m lookupMetadata',
589
- ("-u #{username.shellescape}" unless use_jwt),
590
- ("-p #{password.shellescape}" unless use_jwt),
591
- ("-jwt #{jwt}" if use_jwt),
613
+ credential_params,
592
614
  "-apple_id #{apple_id.shellescape}",
593
615
  "-destination #{destination.shellescape}",
594
616
  ("-itc_provider #{provider_short_name}" if jwt.nil? && !provider_short_name.to_s.empty?),
@@ -598,15 +620,13 @@ module FastlaneCore
598
620
  end
599
621
 
600
622
  def build_provider_ids_command(username, password, jwt = nil, api_key = nil)
601
- use_jwt = !jwt.to_s.empty?
602
- if !Helper.user_defined_itms_path? && Helper.mac? && Helper.xcode_at_least?(11)
623
+ credential_params = build_credential_params(username, password, jwt, api_key, is_default_itms_on_xcode_11?)
624
+ if is_default_itms_on_xcode_11?
603
625
  [
604
- ("ITMS_TRANSPORTER_PASSWORD=#{password.shellescape}" unless use_jwt),
626
+ ("ITMS_TRANSPORTER_PASSWORD=#{password.shellescape}" if jwt.to_s.empty?),
605
627
  'xcrun iTMSTransporter',
606
628
  '-m provider',
607
- ("-u #{username.shellescape}" unless use_jwt),
608
- ("-p @env:ITMS_TRANSPORTER_PASSWORD" unless use_jwt),
609
- ("-jwt #{jwt}" if use_jwt),
629
+ credential_params,
610
630
  '2>&1' # cause stderr to be written to stdout
611
631
  ].compact.join(' ')
612
632
  else
@@ -621,14 +641,16 @@ module FastlaneCore
621
641
  '-Dsun.net.http.retryPost=false',
622
642
  java_code_option,
623
643
  '-m provider',
624
- ("-u #{username.shellescape}" unless use_jwt),
625
- ("-p #{password.shellescape}" unless use_jwt),
626
- ("-jwt #{jwt}" if use_jwt),
644
+ credential_params,
627
645
  '2>&1' # cause stderr to be written to stdout
628
646
  ].compact.join(' ')
629
647
  end
630
648
  end
631
649
 
650
+ def is_default_itms_on_xcode_11?
651
+ !Helper.user_defined_itms_path? && Helper.mac? && Helper.xcode_at_least?(11)
652
+ end
653
+
632
654
  def java_code_option
633
655
  if Helper.mac? && Helper.xcode_at_least?(9)
634
656
  return "-jar #{Helper.transporter_java_jar_path.shellescape}"
@@ -686,7 +708,7 @@ module FastlaneCore
686
708
  use_shell_script ||= Helper.windows?
687
709
  use_shell_script ||= Feature.enabled?('FASTLANE_ITUNES_TRANSPORTER_USE_SHELL_SCRIPT')
688
710
 
689
- if jwt.to_s.empty?
711
+ if jwt.to_s.empty? && api_key.nil?
690
712
  @user = user
691
713
  @password = password || load_password_for_transporter
692
714
  end
@@ -783,9 +805,7 @@ module FastlaneCore
783
805
  # Handle AppStore Connect API
784
806
  use_api_key = !@api_key.nil?
785
807
  api_key_placeholder = use_api_key ? { key_id: "YourKeyID", issuer_id: "YourIssuerID", key_dir: "YourTmpP8KeyDir" } : nil
786
-
787
- api_key = nil
788
- api_key = api_key_with_p8_file_path(@api_key) if use_api_key
808
+ api_key = @transporter_executor.prepare(original_api_key: @api_key)
789
809
 
790
810
  command = @transporter_executor.build_upload_command(@user, @password, actual_dir, @provider_short_name, @jwt, platform, api_key)
791
811
  UI.verbose(@transporter_executor.build_upload_command(@user, password_placeholder, actual_dir, @provider_short_name, jwt_placeholder, platform, api_key_placeholder))
@@ -846,8 +866,7 @@ module FastlaneCore
846
866
 
847
867
  # Masking credentials for verbose outputs
848
868
  api_key_placeholder = use_api_key ? { key_id: "YourKeyID", issuer_id: "YourIssuerID", key_dir: "YourTmpP8KeyDir" } : nil
849
-
850
- api_key = api_key_with_p8_file_path(@api_key) if use_api_key
869
+ api_key = @transporter_executor.prepare(original_api_key: @api_key)
851
870
 
852
871
  command = @transporter_executor.build_verify_command(@user, @password, actual_dir, @provider_short_name, jwt: @jwt, platform: platform, api_key: api_key)
853
872
  UI.verbose(@transporter_executor.build_verify_command(@user, password_placeholder, actual_dir, @provider_short_name, jwt: jwt_placeholder, platform: platform, api_key: api_key_placeholder))
@@ -882,8 +901,7 @@ module FastlaneCore
882
901
  use_api_key = !@api_key.nil?
883
902
  api_key_placeholder = use_api_key ? { key_id: "YourKeyID", issuer_id: "YourIssuerID", key_dir: "YourTmpP8KeyDir" } : nil
884
903
 
885
- api_key = nil
886
- api_key = api_key_with_p8_file_path(@api_key) if use_api_key
904
+ api_key = @transporter_executor.prepare(original_api_key: @api_key)
887
905
 
888
906
  command = @transporter_executor.build_provider_ids_command(@user, @password, @jwt, api_key)
889
907
  UI.verbose(@transporter_executor.build_provider_ids_command(@user, password_placeholder, jwt_placeholder, api_key_placeholder))
@@ -908,17 +926,6 @@ module FastlaneCore
908
926
 
909
927
  TWO_FACTOR_ENV_VARIABLE = "FASTLANE_APPLE_APPLICATION_SPECIFIC_PASSWORD"
910
928
 
911
- # Create .p8 file from api_key and provide api key info which contains .p8 file path
912
- def api_key_with_p8_file_path(original_api_key)
913
- api_key = original_api_key.dup
914
- api_key[:key_dir] = Dir.mktmpdir("deliver-")
915
- # Specified p8 needs to be generated to call altool
916
- File.open(File.join(api_key[:key_dir], "AuthKey_#{api_key[:key_id]}.p8"), "wb") do |p8|
917
- p8.write(api_key[:key])
918
- end
919
- api_key
920
- end
921
-
922
929
  # Returns whether altool should be used or ItunesTransporter should be used
923
930
  def should_use_altool?(altool_compatible_command, use_shell_script)
924
931
  # Xcode 14 no longer supports iTMSTransporter. Use altool instead
@@ -33,10 +33,16 @@ module Pilot
33
33
  ipa_path = options[:ipa]
34
34
  if ipa_path && platform != 'osx'
35
35
  asset_path = ipa_path
36
+ app_identifier = config[:app_identifier] || fetch_app_identifier
37
+ short_version = config[:app_version] || FastlaneCore::IpaFileAnalyser.fetch_app_version(ipa_path)
38
+ bundle_version = config[:build_number] || FastlaneCore::IpaFileAnalyser.fetch_app_build(ipa_path)
36
39
  package_path = FastlaneCore::IpaUploadPackageBuilder.new.generate(app_id: fetch_app_id,
37
40
  ipa_path: ipa_path,
38
41
  package_path: dir,
39
- platform: platform)
42
+ platform: platform,
43
+ app_identifier: app_identifier,
44
+ short_version: short_version,
45
+ bundle_version: bundle_version)
40
46
  else
41
47
  pkg_path = options[:pkg]
42
48
  asset_path = pkg_path
@@ -125,7 +125,7 @@ module Scan
125
125
  # tests to run
126
126
  FastlaneCore::ConfigItem.new(key: :only_testing,
127
127
  env_name: "SCAN_ONLY_TESTING",
128
- description: "Array of strings matching Test Bundle/Test Suite/Test Cases to run",
128
+ description: "Array of test identifiers to run. Expected format: TestTarget[/TestSuite[/TestCase]]",
129
129
  optional: true,
130
130
  is_string: false,
131
131
  verify_block: proc do |value|
@@ -133,7 +133,7 @@ module Scan
133
133
  end),
134
134
  FastlaneCore::ConfigItem.new(key: :skip_testing,
135
135
  env_name: "SCAN_SKIP_TESTING",
136
- description: "Array of strings matching Test Bundle/Test Suite/Test Cases to skip",
136
+ description: "Array of test identifiers to skip. Expected format: TestTarget[/TestSuite[/TestCase]]",
137
137
  optional: true,
138
138
  is_string: false,
139
139
  verify_block: proc do |value|
metadata CHANGED
@@ -1,39 +1,39 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: fastlane
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.227.1
4
+ version: 2.227.2
5
5
  platform: ruby
6
6
  authors:
7
- - Danielle Tomlinson
8
- - Łukasz Grabowski
9
- - Maksym Grebenets
10
- - Jorge Revuelta H
7
+ - Satoshi Namai
11
8
  - Manish Rathi
12
- - Roger Oba
13
- - Fumiya Nakamura
9
+ - Felix Krause
10
+ - Jimmy Dee
11
+ - Andrew McBurney
12
+ - Stefan Natchev
14
13
  - Kohki Miki
15
- - Luka Mirosevic
16
- - Satoshi Namai
17
- - Max Ott
18
- - Daniel Jankowski
14
+ - Matthew Ellis
15
+ - Roger Oba
16
+ - Aaron Brager
17
+ - Maksym Grebenets
19
18
  - Josh Holtz
19
+ - Daniel Jankowski
20
+ - Jorge Revuelta H
21
+ - Joshua Liebowitz
20
22
  - Olivier Halligon
23
+ - Luka Mirosevic
21
24
  - Jérôme Lacoste
22
- - Joshua Liebowitz
23
- - Stefan Natchev
24
- - Aaron Brager
25
25
  - Helmut Januschka
26
- - Felix Krause
27
- - Iulian Onofrei
28
- - Matthew Ellis
29
- - Jimmy Dee
30
26
  - Manu Wallner
31
27
  - Jan Piotrowski
32
- - Andrew McBurney
28
+ - Fumiya Nakamura
29
+ - Max Ott
30
+ - Łukasz Grabowski
31
+ - Danielle Tomlinson
32
+ - Iulian Onofrei
33
33
  autorequire:
34
34
  bindir: bin
35
35
  cert_chain: []
36
- date: 2025-04-09 00:00:00.000000000 Z
36
+ date: 2025-05-05 00:00:00.000000000 Z
37
37
  dependencies:
38
38
  - !ruby/object:Gem::Dependency
39
39
  name: addressable