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 +4 -4
- data/README.md +94 -94
- data/deliver/lib/deliver/runner.rb +1 -1
- data/fastlane/lib/fastlane/actions/docs/upload_to_testflight.md +11 -1
- data/fastlane/lib/fastlane/version.rb +1 -1
- data/fastlane/swift/Deliverfile.swift +1 -1
- data/fastlane/swift/DeliverfileProtocol.swift +1 -1
- data/fastlane/swift/Fastlane.swift +5 -5
- data/fastlane/swift/Gymfile.swift +1 -1
- data/fastlane/swift/GymfileProtocol.swift +1 -1
- data/fastlane/swift/Matchfile.swift +1 -1
- data/fastlane/swift/MatchfileProtocol.swift +1 -1
- data/fastlane/swift/Precheckfile.swift +1 -1
- data/fastlane/swift/PrecheckfileProtocol.swift +1 -1
- data/fastlane/swift/Scanfile.swift +1 -1
- data/fastlane/swift/ScanfileProtocol.swift +3 -3
- data/fastlane/swift/Screengrabfile.swift +1 -1
- data/fastlane/swift/ScreengrabfileProtocol.swift +1 -1
- data/fastlane/swift/Snapshotfile.swift +1 -1
- data/fastlane/swift/SnapshotfileProtocol.swift +1 -1
- data/fastlane_core/lib/assets/XMLTemplate.xml.erb +5 -1
- data/fastlane_core/lib/fastlane_core/command_executor.rb +3 -1
- data/fastlane_core/lib/fastlane_core/ipa_file_analyser.rb +4 -14
- data/fastlane_core/lib/fastlane_core/ipa_upload_package_builder.rb +5 -2
- data/fastlane_core/lib/fastlane_core/itunes_transporter.rb +105 -98
- data/pilot/lib/pilot/build_manager.rb +7 -1
- data/scan/lib/scan/options.rb +2 -2
- metadata +20 -20
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: cd14fd455663793f0e298e12c9c71376ce47cc2c659a8234fbb7154b464fda43
|
4
|
+
data.tar.gz: f4fcbc50151986926db37b5af08c925dd1bbe80ba8156981ca06f68efa2f61f5
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
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='
|
39
|
-
<a href='https://github.com/
|
40
|
-
<img src='https://github.com/
|
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/
|
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='
|
57
|
-
<a href='https://github.com/
|
58
|
-
<img src='https://github.com/
|
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/
|
54
|
+
<h4 align='center'><a href='https://twitter.com/armcburney'>Andrew McBurney</a></h4>
|
61
55
|
</td>
|
62
|
-
<td id='
|
63
|
-
<a href='https://github.com/
|
64
|
-
<img src='https://github.com/
|
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/
|
60
|
+
<h4 align='center'><a href='https://twitter.com/getaaron'>Aaron Brager</a></h4>
|
67
61
|
</td>
|
68
|
-
|
69
|
-
<
|
70
|
-
<
|
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/
|
66
|
+
<h4 align='center'><a href='https://twitter.com/giginet'>Kohki Miki</a></h4>
|
75
67
|
</td>
|
76
|
-
|
77
|
-
<
|
78
|
-
<
|
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/
|
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='
|
89
|
-
<a href='https://github.com/
|
90
|
-
<img src='https://github.com/
|
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/
|
86
|
+
<h4 align='center'><a href='https://twitter.com/ott_max'>Max Ott</a></h4>
|
93
87
|
</td>
|
94
|
-
<td id='
|
95
|
-
<a href='https://github.com/
|
96
|
-
<img src='https://github.com/
|
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/
|
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='
|
103
|
-
<a href='https://github.com/
|
104
|
-
<img src='https://github.com/
|
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/
|
106
|
+
<h4 align='center'><a href='https://twitter.com/lmirosevic'>Luka Mirosevic</a></h4>
|
107
107
|
</td>
|
108
|
-
<td id='
|
109
|
-
<a href='https://github.com/
|
110
|
-
<img src='https://github.com/
|
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/
|
112
|
+
<h4 align='center'><a href='https://twitter.com/Sujan'>Jan Piotrowski</a></h4>
|
113
113
|
</td>
|
114
|
-
<td id='
|
115
|
-
<a href='https://github.com/
|
116
|
-
<img src='https://github.com/
|
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/
|
118
|
+
<h4 align='center'><a href='https://twitter.com/Revolt666'>Iulian Onofrei</a></h4>
|
119
119
|
</td>
|
120
|
-
<td id='
|
121
|
-
<a href='https://github.com/
|
122
|
-
<img src='https://github.com/
|
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/
|
124
|
+
<h4 align='center'><a href='https://twitter.com/mellis1995'>Matthew Ellis</a></h4>
|
125
125
|
</td>
|
126
|
-
<td id='
|
127
|
-
<a href='https://github.com/
|
128
|
-
<img src='https://github.com/
|
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/
|
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='
|
135
|
-
<a href='https://github.com/
|
136
|
-
<img src='https://github.com/
|
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/
|
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
|
-
|
153
|
-
<
|
154
|
-
<
|
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/
|
170
|
+
<h4 align='center'><a href='https://twitter.com/rogerluan_'>Roger Oba</a></h4>
|
157
171
|
</td>
|
158
|
-
<td id='
|
159
|
-
<a href='https://github.com/
|
160
|
-
<img src='https://github.com/
|
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/
|
176
|
+
<h4 align='center'><a href='https://twitter.com/KrauseFx'>Felix Krause</a></h4>
|
163
177
|
</td>
|
164
|
-
|
165
|
-
<
|
166
|
-
<
|
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/
|
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='
|
179
|
-
<a href='https://github.com/
|
180
|
-
<img src='https://github.com/
|
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/
|
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='
|
199
|
-
<a href='https://github.com/
|
200
|
-
<img src='https://github.com/
|
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/
|
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
|
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.
|
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.
|
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
|
@@ -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
|
8830
|
-
- skipTesting: Array of
|
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
|
9265
|
-
- skipTesting: Array of
|
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.
|
13890
|
+
// FastlaneRunnerAPIVersion [0.9.188]
|
@@ -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
|
47
|
+
/// Array of test identifiers to run. Expected format: TestTarget[/TestSuite[/TestCase]]
|
48
48
|
var onlyTesting: String? { get }
|
49
49
|
|
50
|
-
/// Array of
|
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.
|
327
|
+
// FastlaneRunnerAPIVersion [0.9.143]
|
@@ -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
|
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
|
-
|
50
|
-
|
51
|
-
|
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
|
-
|
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
|
-
(
|
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
|
-
(
|
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
|
-
(
|
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
|
-
(
|
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
|
-
(
|
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
|
-
(
|
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
|
-
(
|
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
|
-
|
487
|
-
if
|
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}"
|
523
|
+
("ITMS_TRANSPORTER_PASSWORD=#{password.shellescape}" if jwt.to_s.empty?),
|
490
524
|
'xcrun iTMSTransporter',
|
491
525
|
'-m upload',
|
492
|
-
|
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
|
-
|
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
|
-
|
528
|
-
if
|
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}"
|
560
|
+
("ITMS_TRANSPORTER_PASSWORD=#{password.shellescape}" if jwt.to_s.empty?),
|
531
561
|
'xcrun iTMSTransporter',
|
532
562
|
'-m verify',
|
533
|
-
|
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
|
-
|
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
|
-
|
564
|
-
if
|
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}"
|
592
|
+
("ITMS_TRANSPORTER_PASSWORD=#{password.shellescape}" if jwt.to_s.empty?),
|
567
593
|
'xcrun iTMSTransporter',
|
568
594
|
'-m lookupMetadata',
|
569
|
-
|
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
|
-
|
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
|
-
|
602
|
-
if
|
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}"
|
626
|
+
("ITMS_TRANSPORTER_PASSWORD=#{password.shellescape}" if jwt.to_s.empty?),
|
605
627
|
'xcrun iTMSTransporter',
|
606
628
|
'-m provider',
|
607
|
-
|
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
|
-
|
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 =
|
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
|
data/scan/lib/scan/options.rb
CHANGED
@@ -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
|
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
|
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.
|
4
|
+
version: 2.227.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
|
-
-
|
8
|
-
- Łukasz Grabowski
|
9
|
-
- Maksym Grebenets
|
10
|
-
- Jorge Revuelta H
|
7
|
+
- Satoshi Namai
|
11
8
|
- Manish Rathi
|
12
|
-
-
|
13
|
-
-
|
9
|
+
- Felix Krause
|
10
|
+
- Jimmy Dee
|
11
|
+
- Andrew McBurney
|
12
|
+
- Stefan Natchev
|
14
13
|
- Kohki Miki
|
15
|
-
-
|
16
|
-
-
|
17
|
-
-
|
18
|
-
-
|
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
|
-
-
|
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-
|
36
|
+
date: 2025-05-05 00:00:00.000000000 Z
|
37
37
|
dependencies:
|
38
38
|
- !ruby/object:Gem::Dependency
|
39
39
|
name: addressable
|