fastlane 2.227.0 → 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: dd8ce422d952c22cd384e6459133d3d668178a6237168e59c2902f3e0b35fcbe
4
- data.tar.gz: 55220418b3abab5621d41ab450f870b588f30cf566e01f71b7e4c993abc60c06
3
+ metadata.gz: cd14fd455663793f0e298e12c9c71376ce47cc2c659a8234fbb7154b464fda43
4
+ data.tar.gz: f4fcbc50151986926db37b5af08c925dd1bbe80ba8156981ca06f68efa2f61f5
5
5
  SHA512:
6
- metadata.gz: d10309c76cd22469932971ad8372617ccd997e5c21b53af5ed871ba58029f75ba362ca2ff61573ec44cf5e10e19bd7b34743a955c438a7a9dbd286aa5f599865
7
- data.tar.gz: 7da6fcdff81271b64632d11e8da1f7937249061776263b72244c925c27060d4022842953a8e78b7435e7df11ed78f34c1935b058da3dbc973ba3389e797e5973
6
+ metadata.gz: ecf0d5bacb42638c297e9aeb99289976e87763437cff51bf3f084695b19a44b51fad10cf228a152684477f9377999edd976732141a584fb3c977c9f8d9e72159
7
+ data.tar.gz: bf10d3d90929b38106d9cea055e4e8b41c61709d3b35ce04179b4d6e41f8fccd358e8c3635759f073df3ec68e9442040db52d0bd09ffa52fb076d30e04a16228
data/README.md CHANGED
@@ -35,11 +35,23 @@ 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='roger-oba'>
39
- <a href='https://github.com/rogerluan'>
40
- <img src='https://github.com/rogerluan.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;'>
41
41
  </a>
42
- <h4 align='center'><a href='https://twitter.com/rogerluan_'>Roger Oba</a></h4>
42
+ <h4 align='center'><a href='https://twitter.com/mgrebenets'>Maksym Grebenets</a></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='andrew-mcburney'>
51
+ <a href='https://github.com/armcburney'>
52
+ <img src='https://github.com/armcburney.png' width='140px;'>
53
+ </a>
54
+ <h4 align='center'><a href='https://twitter.com/armcburney'>Andrew McBurney</a></h4>
43
55
  </td>
44
56
  <td id='aaron-brager'>
45
57
  <a href='https://github.com/getaaron'>
@@ -47,17 +59,19 @@ If the above doesn't help, please [submit an issue](https://github.com/fastlane/
47
59
  </a>
48
60
  <h4 align='center'><a href='https://twitter.com/getaaron'>Aaron Brager</a></h4>
49
61
  </td>
50
- <td id='iulian-onofrei'>
51
- <a href='https://github.com/revolter'>
52
- <img src='https://github.com/revolter.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;'>
53
65
  </a>
54
- <h4 align='center'><a href='https://twitter.com/Revolt666'>Iulian Onofrei</a></h4>
66
+ <h4 align='center'><a href='https://twitter.com/giginet'>Kohki Miki</a></h4>
55
67
  </td>
56
- <td id='stefan-natchev'>
57
- <a href='https://github.com/snatchev'>
58
- <img src='https://github.com/snatchev.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;'>
59
73
  </a>
60
- <h4 align='center'><a href='https://twitter.com/snatchev'>Stefan Natchev</a></h4>
74
+ <h4 align='center'><a href='https://twitter.com/endocrimes'>Danielle Tomlinson</a></h4>
61
75
  </td>
62
76
  <td id='jimmy-dee'>
63
77
  <a href='https://github.com/jdee'>
@@ -65,89 +79,81 @@ If the above doesn't help, please [submit an issue](https://github.com/fastlane/
65
79
  </a>
66
80
  <h4 align='center'>Jimmy Dee</h4>
67
81
  </td>
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;'>
82
+ <td id='max-ott'>
83
+ <a href='https://github.com/max-ott'>
84
+ <img src='https://github.com/max-ott.png' width='140px;'>
73
85
  </a>
74
- <h4 align='center'><a href='https://twitter.com/iammanishrathi'>Manish Rathi</a></h4>
86
+ <h4 align='center'><a href='https://twitter.com/ott_max'>Max Ott</a></h4>
75
87
  </td>
76
- <td id='fumiya-nakamura'>
77
- <a href='https://github.com/nafu'>
78
- <img src='https://github.com/nafu.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;'>
79
91
  </a>
80
- <h4 align='center'><a href='https://twitter.com/nafu003'>Fumiya Nakamura</a></h4>
92
+ <h4 align='center'><a href='https://twitter.com/ainame'>Satoshi Namai</a></h4>
81
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
+ </td>
100
+ </tr>
101
+ <tr>
82
102
  <td id='luka-mirosevic'>
83
103
  <a href='https://github.com/lmirosevic'>
84
104
  <img src='https://github.com/lmirosevic.png' width='140px;'>
85
105
  </a>
86
106
  <h4 align='center'><a href='https://twitter.com/lmirosevic'>Luka Mirosevic</a></h4>
87
107
  </td>
88
- <td id='felix-krause'>
89
- <a href='https://github.com/KrauseFx'>
90
- <img src='https://github.com/KrauseFx.png' width='140px;'>
91
- </a>
92
- <h4 align='center'><a href='https://twitter.com/KrauseFx'>Felix Krause</a></h4>
93
- </td>
94
108
  <td id='jan-piotrowski'>
95
109
  <a href='https://github.com/janpio'>
96
110
  <img src='https://github.com/janpio.png' width='140px;'>
97
111
  </a>
98
112
  <h4 align='center'><a href='https://twitter.com/Sujan'>Jan Piotrowski</a></h4>
99
113
  </td>
100
- </tr>
101
- <tr>
102
- <td id='jérôme-lacoste'>
103
- <a href='https://github.com/lacostej'>
104
- <img src='https://github.com/lacostej.png' width='140px;'>
105
- </a>
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;'>
114
+ <td id='iulian-onofrei'>
115
+ <a href='https://github.com/revolter'>
116
+ <img src='https://github.com/revolter.png' width='140px;'>
123
117
  </a>
124
- <h4 align='center'><a href='https://twitter.com/giginet'>Kohki Miki</a></h4>
118
+ <h4 align='center'><a href='https://twitter.com/Revolt666'>Iulian Onofrei</a></h4>
125
119
  </td>
126
- <td id='max-ott'>
127
- <a href='https://github.com/max-ott'>
128
- <img src='https://github.com/max-ott.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;'>
129
123
  </a>
130
- <h4 align='center'><a href='https://twitter.com/ott_max'>Max Ott</a></h4>
124
+ <h4 align='center'><a href='https://twitter.com/mellis1995'>Matthew Ellis</a></h4>
131
125
  </td>
132
- </tr>
133
- <tr>
134
126
  <td id='jorge-revuelta-h'>
135
127
  <a href='https://github.com/minuscorp'>
136
128
  <img src='https://github.com/minuscorp.png' width='140px;'>
137
129
  </a>
138
130
  <h4 align='center'><a href='https://twitter.com/minuscorp'>Jorge Revuelta H</a></h4>
139
131
  </td>
140
- <td id='maksym-grebenets'>
141
- <a href='https://github.com/mgrebenets'>
142
- <img src='https://github.com/mgrebenets.png' width='140px;'>
132
+ </tr>
133
+ <tr>
134
+ <td id='olivier-halligon'>
135
+ <a href='https://github.com/AliSoftware'>
136
+ <img src='https://github.com/AliSoftware.png' width='140px;'>
143
137
  </a>
144
- <h4 align='center'><a href='https://twitter.com/mgrebenets'>Maksym Grebenets</a></h4>
138
+ <h4 align='center'><a href='https://twitter.com/aligatr'>Olivier Halligon</a></h4>
145
139
  </td>
146
- <td id='matthew-ellis'>
147
- <a href='https://github.com/matthewellis'>
148
- <img src='https://github.com/matthewellis.png' width='140px;'>
140
+ <td id='josh-holtz'>
141
+ <a href='https://github.com/joshdholtz'>
142
+ <img src='https://github.com/joshdholtz.png' width='140px;'>
149
143
  </a>
150
- <h4 align='center'><a href='https://twitter.com/mellis1995'>Matthew Ellis</a></h4>
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>
151
+ </td>
152
+ <td id='łukasz-grabowski'>
153
+ <a href='https://github.com/lucgrabowski'>
154
+ <img src='https://github.com/lucgrabowski.png' width='140px;'>
155
+ </a>
156
+ <h4 align='center'>Łukasz Grabowski</h4>
151
157
  </td>
152
158
  <td id='joshua-liebowitz'>
153
159
  <a href='https://github.com/taquitos'>
@@ -155,25 +161,19 @@ If the above doesn't help, please [submit an issue](https://github.com/fastlane/
155
161
  </a>
156
162
  <h4 align='center'><a href='https://twitter.com/taquitos'>Joshua Liebowitz</a></h4>
157
163
  </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
- </td>
164
164
  </tr>
165
165
  <tr>
166
- <td id='danielle-tomlinson'>
167
- <a href='https://github.com/endocrimes'>
168
- <img src='https://github.com/endocrimes.png' width='140px;'>
166
+ <td id='roger-oba'>
167
+ <a href='https://github.com/rogerluan'>
168
+ <img src='https://github.com/rogerluan.png' width='140px;'>
169
169
  </a>
170
- <h4 align='center'><a href='https://twitter.com/endocrimes'>Danielle Tomlinson</a></h4>
170
+ <h4 align='center'><a href='https://twitter.com/rogerluan_'>Roger Oba</a></h4>
171
171
  </td>
172
- <td id='andrew-mcburney'>
173
- <a href='https://github.com/armcburney'>
174
- <img src='https://github.com/armcburney.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;'>
175
175
  </a>
176
- <h4 align='center'><a href='https://twitter.com/armcburney'>Andrew McBurney</a></h4>
176
+ <h4 align='center'><a href='https://twitter.com/KrauseFx'>Felix Krause</a></h4>
177
177
  </td>
178
178
  <td id='daniel-jankowski'>
179
179
  <a href='https://github.com/mollyIV'>
@@ -181,18 +181,18 @@ If the above doesn't help, please [submit an issue](https://github.com/fastlane/
181
181
  </a>
182
182
  <h4 align='center'><a href='https://twitter.com/mollyIV'>Daniel Jankowski</a></h4>
183
183
  </td>
184
+ <td id='manish-rathi'>
185
+ <a href='https://github.com/crazymanish'>
186
+ <img src='https://github.com/crazymanish.png' width='140px;'>
187
+ </a>
188
+ <h4 align='center'><a href='https://twitter.com/iammanishrathi'>Manish Rathi</a></h4>
189
+ </td>
184
190
  <td id='helmut-januschka'>
185
191
  <a href='https://github.com/hjanuschka'>
186
192
  <img src='https://github.com/hjanuschka.png' width='140px;'>
187
193
  </a>
188
194
  <h4 align='center'><a href='https://twitter.com/hjanuschka'>Helmut Januschka</a></h4>
189
195
  </td>
190
- <td id='olivier-halligon'>
191
- <a href='https://github.com/AliSoftware'>
192
- <img src='https://github.com/AliSoftware.png' width='140px;'>
193
- </a>
194
- <h4 align='center'><a href='https://twitter.com/aligatr'>Olivier Halligon</a></h4>
195
- </td>
196
196
  </tr>
197
197
  <tr>
198
198
  <td id='manu-wallner'>
@@ -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.0'.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.0
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.133]
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.186]
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.0
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.136]
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.0
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.130]
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.0
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.129]
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.0
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.141]
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.0
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.131]
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.0
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.125]
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|
@@ -54,10 +54,10 @@ module Scan
54
54
  options << "-scmProvider system"
55
55
  end
56
56
  if config[:result_bundle_path]
57
- options << "-resultBundlePath '#{config[:result_bundle_path].shellescape}'"
57
+ options << "-resultBundlePath #{config[:result_bundle_path].shellescape}"
58
58
  Scan.cache[:result_bundle_path] = config[:result_bundle_path]
59
59
  elsif config[:result_bundle]
60
- options << "-resultBundlePath '#{result_bundle_path(true)}'"
60
+ options << "-resultBundlePath #{result_bundle_path(true).shellescape}"
61
61
  end
62
62
  if FastlaneCore::Helper.xcode_at_least?(10)
63
63
  options << "-parallel-testing-enabled #{config[:parallel_testing] ? 'YES' : 'NO'}" unless config[:parallel_testing].nil?
@@ -77,8 +77,7 @@ module Spaceship
77
77
  end
78
78
 
79
79
  device_platforms = [
80
- device_platform,
81
- 'UNIVERSAL' # Universal Bundle ID platform is undocumented as of Oct 4, 2023.
80
+ device_platform
82
81
  ]
83
82
 
84
83
  device_classes =
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.0
4
+ version: 2.227.2
5
5
  platform: ruby
6
6
  authors:
7
- - Maksym Grebenets
7
+ - Satoshi Namai
8
+ - Manish Rathi
8
9
  - Felix Krause
9
- - Matthew Ellis
10
+ - Jimmy Dee
11
+ - Andrew McBurney
10
12
  - Stefan Natchev
11
- - Iulian Onofrei
13
+ - Kohki Miki
14
+ - Matthew Ellis
15
+ - Roger Oba
12
16
  - Aaron Brager
13
- - Helmut Januschka
14
- - Jimmy Dee
17
+ - Maksym Grebenets
18
+ - Josh Holtz
19
+ - Daniel Jankowski
15
20
  - Jorge Revuelta H
16
- - Danielle Tomlinson
21
+ - Joshua Liebowitz
17
22
  - Olivier Halligon
18
23
  - Luka Mirosevic
24
+ - Jérôme Lacoste
25
+ - Helmut Januschka
19
26
  - Manu Wallner
20
27
  - Jan Piotrowski
21
- - Joshua Liebowitz
22
28
  - Fumiya Nakamura
23
- - Kohki Miki
24
- - Łukasz Grabowski
25
- - Andrew McBurney
26
- - Josh Holtz
27
- - Roger Oba
28
29
  - Max Ott
29
- - Daniel Jankowski
30
- - Manish Rathi
31
- - Jérôme Lacoste
32
- - Satoshi Namai
30
+ - Łukasz Grabowski
31
+ - Danielle Tomlinson
32
+ - Iulian Onofrei
33
33
  autorequire:
34
34
  bindir: bin
35
35
  cert_chain: []
36
- date: 2025-03-13 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
@@ -727,14 +727,14 @@ dependencies:
727
727
  requirements:
728
728
  - - "~>"
729
729
  - !ruby/object:Gem::Version
730
- version: 0.4.0
730
+ version: 0.4.1
731
731
  type: :runtime
732
732
  prerelease: false
733
733
  version_requirements: !ruby/object:Gem::Requirement
734
734
  requirements:
735
735
  - - "~>"
736
736
  - !ruby/object:Gem::Version
737
- version: 0.4.0
737
+ version: 0.4.1
738
738
  description: The easiest way to automate beta deployments and releases for your iOS
739
739
  and Android apps
740
740
  email: