fastlane 2.223.1 → 2.225.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/README.md +98 -98
- data/fastlane/lib/fastlane/erb_template_helper.rb +2 -0
- 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 +1 -1
- data/fastlane/swift/Gymfile.swift +1 -1
- data/fastlane/swift/GymfileProtocol.swift +1 -1
- data/fastlane/swift/LaneFileProtocol.swift +5 -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 +1 -1
- 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/swift/formatting/Brewfile.lock.json +15 -25
- data/match/lib/match/storage/s3_storage.rb +5 -2
- data/spaceship/lib/spaceship/client.rb +123 -22
- data/spaceship/lib/spaceship/connect_api/api_client.rb +1 -1
- data/spaceship/lib/spaceship/connect_api/token.rb +2 -1
- data/spaceship/lib/spaceship/errors.rb +15 -0
- data/spaceship/lib/spaceship/stats_middleware.rb +1 -0
- metadata +34 -20
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: a1e77f8938ff5841875b3034ae791bdb74735771a039be4e5da709c92b49268b
|
|
4
|
+
data.tar.gz: 5aebfce31f8424bd6012576c361269061b0aece5040af945ef29849fcb233cd3
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: eff23b206daaf4616253f90a657b30ddc8dc135f6bb60f8a0880b21fcd5919da487d4b3aa799a024a60cc0324be9cbf556bc90f3f90e55b685f28fa3d5737a16
|
|
7
|
+
data.tar.gz: f31da0896a7cf725d9bf29e22129fd1b6f9d73b383bd5048475c01fbf206a32642f2ef93252f91e0872dbb49dd18ca9365cf4a1e4b604f4802194bcdb24663f1
|
data/README.md
CHANGED
|
@@ -35,35 +35,35 @@ 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/
|
|
38
|
+
<td id='olivier-halligon'>
|
|
39
|
+
<a href='https://github.com/AliSoftware'>
|
|
40
|
+
<img src='https://github.com/AliSoftware.png' width='140px;'>
|
|
41
41
|
</a>
|
|
42
|
-
<h4 align='center'><a href='https://twitter.com/
|
|
42
|
+
<h4 align='center'><a href='https://twitter.com/aligatr'>Olivier Halligon</a></h4>
|
|
43
43
|
</td>
|
|
44
|
-
<td id='
|
|
45
|
-
<a href='https://github.com/
|
|
46
|
-
<img src='https://github.com/
|
|
44
|
+
<td id='stefan-natchev'>
|
|
45
|
+
<a href='https://github.com/snatchev'>
|
|
46
|
+
<img src='https://github.com/snatchev.png' width='140px;'>
|
|
47
47
|
</a>
|
|
48
|
-
<h4 align='center'><a href='https://twitter.com/
|
|
48
|
+
<h4 align='center'><a href='https://twitter.com/snatchev'>Stefan Natchev</a></h4>
|
|
49
49
|
</td>
|
|
50
|
-
<td id='
|
|
51
|
-
<a href='https://github.com/
|
|
52
|
-
<img src='https://github.com/
|
|
50
|
+
<td id='felix-krause'>
|
|
51
|
+
<a href='https://github.com/KrauseFx'>
|
|
52
|
+
<img src='https://github.com/KrauseFx.png' width='140px;'>
|
|
53
53
|
</a>
|
|
54
|
-
<h4 align='center'><a href='https://twitter.com/
|
|
54
|
+
<h4 align='center'><a href='https://twitter.com/KrauseFx'>Felix Krause</a></h4>
|
|
55
55
|
</td>
|
|
56
|
-
<td id='
|
|
57
|
-
<a href='https://github.com/
|
|
58
|
-
<img src='https://github.com/
|
|
56
|
+
<td id='kohki-miki'>
|
|
57
|
+
<a href='https://github.com/giginet'>
|
|
58
|
+
<img src='https://github.com/giginet.png' width='140px;'>
|
|
59
59
|
</a>
|
|
60
|
-
<h4 align='center'><a href='https://twitter.com/
|
|
60
|
+
<h4 align='center'><a href='https://twitter.com/giginet'>Kohki Miki</a></h4>
|
|
61
61
|
</td>
|
|
62
|
-
<td id='
|
|
63
|
-
<a href='https://github.com/
|
|
64
|
-
<img src='https://github.com/
|
|
62
|
+
<td id='luka-mirosevic'>
|
|
63
|
+
<a href='https://github.com/lmirosevic'>
|
|
64
|
+
<img src='https://github.com/lmirosevic.png' width='140px;'>
|
|
65
65
|
</a>
|
|
66
|
-
<h4 align='center'><a href='https://twitter.com/
|
|
66
|
+
<h4 align='center'><a href='https://twitter.com/lmirosevic'>Luka Mirosevic</a></h4>
|
|
67
67
|
</td>
|
|
68
68
|
</tr>
|
|
69
69
|
<tr>
|
|
@@ -73,37 +73,43 @@ If the above doesn't help, please [submit an issue](https://github.com/fastlane/
|
|
|
73
73
|
</a>
|
|
74
74
|
<h4 align='center'><a href='https://twitter.com/mellis1995'>Matthew Ellis</a></h4>
|
|
75
75
|
</td>
|
|
76
|
-
<td id='
|
|
77
|
-
<a href='https://github.com/
|
|
78
|
-
<img src='https://github.com/
|
|
76
|
+
<td id='iulian-onofrei'>
|
|
77
|
+
<a href='https://github.com/revolter'>
|
|
78
|
+
<img src='https://github.com/revolter.png' width='140px;'>
|
|
79
79
|
</a>
|
|
80
|
-
<h4 align='center'><a href='https://twitter.com/
|
|
80
|
+
<h4 align='center'><a href='https://twitter.com/Revolt666'>Iulian Onofrei</a></h4>
|
|
81
81
|
</td>
|
|
82
|
-
<td id='
|
|
83
|
-
<a href='https://github.com/
|
|
84
|
-
<img src='https://github.com/
|
|
82
|
+
<td id='jérôme-lacoste'>
|
|
83
|
+
<a href='https://github.com/lacostej'>
|
|
84
|
+
<img src='https://github.com/lacostej.png' width='140px;'>
|
|
85
85
|
</a>
|
|
86
|
-
<h4 align='center'><a href='https://twitter.com/
|
|
86
|
+
<h4 align='center'><a href='https://twitter.com/lacostej'>Jérôme Lacoste</a></h4>
|
|
87
87
|
</td>
|
|
88
|
-
<td id='
|
|
89
|
-
<a href='https://github.com/
|
|
90
|
-
<img src='https://github.com/
|
|
88
|
+
<td id='fumiya-nakamura'>
|
|
89
|
+
<a href='https://github.com/nafu'>
|
|
90
|
+
<img src='https://github.com/nafu.png' width='140px;'>
|
|
91
91
|
</a>
|
|
92
|
-
<h4 align='center'><a href='https://twitter.com/
|
|
92
|
+
<h4 align='center'><a href='https://twitter.com/nafu003'>Fumiya Nakamura</a></h4>
|
|
93
93
|
</td>
|
|
94
|
-
<td id='
|
|
95
|
-
<a href='https://github.com/
|
|
96
|
-
<img src='https://github.com/
|
|
94
|
+
<td id='maksym-grebenets'>
|
|
95
|
+
<a href='https://github.com/mgrebenets'>
|
|
96
|
+
<img src='https://github.com/mgrebenets.png' width='140px;'>
|
|
97
97
|
</a>
|
|
98
|
-
<h4 align='center'><a href='https://twitter.com/
|
|
98
|
+
<h4 align='center'><a href='https://twitter.com/mgrebenets'>Maksym Grebenets</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='jimmy-dee'>
|
|
103
|
+
<a href='https://github.com/jdee'>
|
|
104
|
+
<img src='https://github.com/jdee.png' width='140px;'>
|
|
105
105
|
</a>
|
|
106
|
-
<h4 align='center'
|
|
106
|
+
<h4 align='center'>Jimmy Dee</h4>
|
|
107
|
+
</td>
|
|
108
|
+
<td id='manu-wallner'>
|
|
109
|
+
<a href='https://github.com/milch'>
|
|
110
|
+
<img src='https://github.com/milch.png' width='140px;'>
|
|
111
|
+
</a>
|
|
112
|
+
<h4 align='center'><a href='https://twitter.com/acrooow'>Manu Wallner</a></h4>
|
|
107
113
|
</td>
|
|
108
114
|
<td id='josh-holtz'>
|
|
109
115
|
<a href='https://github.com/joshdholtz'>
|
|
@@ -111,95 +117,89 @@ If the above doesn't help, please [submit an issue](https://github.com/fastlane/
|
|
|
111
117
|
</a>
|
|
112
118
|
<h4 align='center'><a href='https://twitter.com/joshdholtz'>Josh Holtz</a></h4>
|
|
113
119
|
</td>
|
|
114
|
-
<td id='
|
|
115
|
-
<a href='https://github.com/
|
|
116
|
-
<img src='https://github.com/
|
|
117
|
-
</a>
|
|
118
|
-
<h4 align='center'>Łukasz Grabowski</h4>
|
|
119
|
-
</td>
|
|
120
|
-
<td id='fumiya-nakamura'>
|
|
121
|
-
<a href='https://github.com/nafu'>
|
|
122
|
-
<img src='https://github.com/nafu.png' width='140px;'>
|
|
120
|
+
<td id='joshua-liebowitz'>
|
|
121
|
+
<a href='https://github.com/taquitos'>
|
|
122
|
+
<img src='https://github.com/taquitos.png' width='140px;'>
|
|
123
123
|
</a>
|
|
124
|
-
<h4 align='center'><a href='https://twitter.com/
|
|
124
|
+
<h4 align='center'><a href='https://twitter.com/taquitos'>Joshua Liebowitz</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/
|
|
137
|
-
</a>
|
|
138
|
-
<h4 align='center'><a href='https://twitter.com/lmirosevic'>Luka Mirosevic</a></h4>
|
|
139
|
-
</td>
|
|
140
|
-
<td id='jérôme-lacoste'>
|
|
141
|
-
<a href='https://github.com/lacostej'>
|
|
142
|
-
<img src='https://github.com/lacostej.png' width='140px;'>
|
|
134
|
+
<td id='jan-piotrowski'>
|
|
135
|
+
<a href='https://github.com/janpio'>
|
|
136
|
+
<img src='https://github.com/janpio.png' width='140px;'>
|
|
143
137
|
</a>
|
|
144
|
-
<h4 align='center'><a href='https://twitter.com/
|
|
138
|
+
<h4 align='center'><a href='https://twitter.com/Sujan'>Jan Piotrowski</a></h4>
|
|
145
139
|
</td>
|
|
146
|
-
<td id='
|
|
147
|
-
<a href='https://github.com/
|
|
148
|
-
<img src='https://github.com/
|
|
140
|
+
<td id='satoshi-namai'>
|
|
141
|
+
<a href='https://github.com/ainame'>
|
|
142
|
+
<img src='https://github.com/ainame.png' width='140px;'>
|
|
149
143
|
</a>
|
|
150
|
-
<h4 align='center'><a href='https://twitter.com/
|
|
144
|
+
<h4 align='center'><a href='https://twitter.com/ainame'>Satoshi Namai</a></h4>
|
|
151
145
|
</td>
|
|
152
|
-
<td id='
|
|
153
|
-
<a href='https://github.com/
|
|
154
|
-
<img src='https://github.com/
|
|
146
|
+
<td id='helmut-januschka'>
|
|
147
|
+
<a href='https://github.com/hjanuschka'>
|
|
148
|
+
<img src='https://github.com/hjanuschka.png' width='140px;'>
|
|
155
149
|
</a>
|
|
156
|
-
<h4 align='center'><a href='https://twitter.com/
|
|
150
|
+
<h4 align='center'><a href='https://twitter.com/hjanuschka'>Helmut Januschka</a></h4>
|
|
157
151
|
</td>
|
|
158
|
-
<td id='
|
|
159
|
-
<a href='https://github.com/
|
|
160
|
-
<img src='https://github.com/
|
|
152
|
+
<td id='manish-rathi'>
|
|
153
|
+
<a href='https://github.com/crazymanish'>
|
|
154
|
+
<img src='https://github.com/crazymanish.png' width='140px;'>
|
|
161
155
|
</a>
|
|
162
|
-
<h4 align='center'><a href='https://twitter.com/
|
|
156
|
+
<h4 align='center'><a href='https://twitter.com/iammanishrathi'>Manish Rathi</a></h4>
|
|
163
157
|
</td>
|
|
164
|
-
</tr>
|
|
165
|
-
<tr>
|
|
166
158
|
<td id='daniel-jankowski'>
|
|
167
159
|
<a href='https://github.com/mollyIV'>
|
|
168
160
|
<img src='https://github.com/mollyIV.png' width='140px;'>
|
|
169
161
|
</a>
|
|
170
162
|
<h4 align='center'><a href='https://twitter.com/mollyIV'>Daniel Jankowski</a></h4>
|
|
171
163
|
</td>
|
|
172
|
-
|
|
173
|
-
<
|
|
174
|
-
<
|
|
164
|
+
</tr>
|
|
165
|
+
<tr>
|
|
166
|
+
<td id='aaron-brager'>
|
|
167
|
+
<a href='https://github.com/getaaron'>
|
|
168
|
+
<img src='https://github.com/getaaron.png' width='140px;'>
|
|
175
169
|
</a>
|
|
176
|
-
<h4 align='center'><a href='https://twitter.com/
|
|
170
|
+
<h4 align='center'><a href='https://twitter.com/getaaron'>Aaron Brager</a></h4>
|
|
177
171
|
</td>
|
|
178
|
-
<td id='
|
|
179
|
-
<a href='https://github.com/
|
|
180
|
-
<img src='https://github.com/
|
|
172
|
+
<td id='danielle-tomlinson'>
|
|
173
|
+
<a href='https://github.com/endocrimes'>
|
|
174
|
+
<img src='https://github.com/endocrimes.png' width='140px;'>
|
|
181
175
|
</a>
|
|
182
|
-
<h4 align='center'><a href='https://twitter.com/
|
|
176
|
+
<h4 align='center'><a href='https://twitter.com/endocrimes'>Danielle Tomlinson</a></h4>
|
|
183
177
|
</td>
|
|
184
|
-
<td id='
|
|
185
|
-
<a href='https://github.com/
|
|
186
|
-
<img src='https://github.com/
|
|
178
|
+
<td id='roger-oba'>
|
|
179
|
+
<a href='https://github.com/rogerluan'>
|
|
180
|
+
<img src='https://github.com/rogerluan.png' width='140px;'>
|
|
187
181
|
</a>
|
|
188
|
-
<h4 align='center'>
|
|
182
|
+
<h4 align='center'><a href='https://twitter.com/rogerluan_'>Roger Oba</a></h4>
|
|
189
183
|
</td>
|
|
190
|
-
<td id='
|
|
191
|
-
<a href='https://github.com/
|
|
192
|
-
<img src='https://github.com/
|
|
184
|
+
<td id='łukasz-grabowski'>
|
|
185
|
+
<a href='https://github.com/lucgrabowski'>
|
|
186
|
+
<img src='https://github.com/lucgrabowski.png' width='140px;'>
|
|
193
187
|
</a>
|
|
194
|
-
<h4 align='center'
|
|
188
|
+
<h4 align='center'>Łukasz Grabowski</h4>
|
|
189
|
+
</td>
|
|
190
|
+
<td id='andrew-mcburney'>
|
|
191
|
+
<a href='https://github.com/armcburney'>
|
|
192
|
+
<img src='https://github.com/armcburney.png' width='140px;'>
|
|
193
|
+
</a>
|
|
194
|
+
<h4 align='center'><a href='https://twitter.com/armcburney'>Andrew McBurney</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='max-ott'>
|
|
199
|
+
<a href='https://github.com/max-ott'>
|
|
200
|
+
<img src='https://github.com/max-ott.png' width='140px;'>
|
|
201
201
|
</a>
|
|
202
|
-
<h4 align='center'><a href='https://twitter.com/
|
|
202
|
+
<h4 align='center'><a href='https://twitter.com/ott_max'>Max Ott</a></h4>
|
|
203
203
|
</td>
|
|
204
204
|
</table>
|
|
205
205
|
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
module Fastlane
|
|
2
|
-
VERSION = '2.
|
|
2
|
+
VERSION = '2.225.0'.freeze
|
|
3
3
|
SUMMARY = "The easiest way to build and release mobile apps.".freeze
|
|
4
4
|
DESCRIPTION = "The easiest way to automate beta deployments and releases for your iOS and Android apps".freeze
|
|
5
5
|
MINIMUM_XCODE_RELEASE = "7.0".freeze
|
|
@@ -13861,4 +13861,4 @@ public let snapshotfile: Snapshotfile = .init()
|
|
|
13861
13861
|
|
|
13862
13862
|
// Please don't remove the lines below
|
|
13863
13863
|
// They are used to detect outdated files
|
|
13864
|
-
// FastlaneRunnerAPIVersion [0.9.
|
|
13864
|
+
// FastlaneRunnerAPIVersion [0.9.184]
|
|
@@ -40,7 +40,11 @@ open class LaneFile: NSObject, LaneFileProtocol {
|
|
|
40
40
|
return String(laneName.prefix(laneName.count - 12))
|
|
41
41
|
}
|
|
42
42
|
|
|
43
|
-
|
|
43
|
+
open func beforeAll(with _: String) {}
|
|
44
|
+
|
|
45
|
+
open func afterAll(with _: String) {}
|
|
46
|
+
|
|
47
|
+
open func onError(currentLane: String, errorInfo _: String, errorClass _: String?, errorMessage _: String?) {
|
|
44
48
|
LaneFile.onErrorCalled.insert(currentLane)
|
|
45
49
|
}
|
|
46
50
|
|
|
@@ -2,50 +2,40 @@
|
|
|
2
2
|
"entries": {
|
|
3
3
|
"brew": {
|
|
4
4
|
"swiftformat": {
|
|
5
|
-
"version": "0.54.
|
|
5
|
+
"version": "0.54.6",
|
|
6
6
|
"bottle": {
|
|
7
7
|
"rebuild": 0,
|
|
8
8
|
"root_url": "https://ghcr.io/v2/homebrew/core",
|
|
9
9
|
"files": {
|
|
10
10
|
"arm64_sequoia": {
|
|
11
11
|
"cellar": ":any_skip_relocation",
|
|
12
|
-
"url": "https://ghcr.io/v2/homebrew/core/swiftformat/blobs/sha256:
|
|
13
|
-
"sha256": "
|
|
12
|
+
"url": "https://ghcr.io/v2/homebrew/core/swiftformat/blobs/sha256:fda0a46091e8c4a1a913e08e29a92159ed747d83403508e0b5408e88e68cdf0c",
|
|
13
|
+
"sha256": "fda0a46091e8c4a1a913e08e29a92159ed747d83403508e0b5408e88e68cdf0c"
|
|
14
14
|
},
|
|
15
15
|
"arm64_sonoma": {
|
|
16
16
|
"cellar": ":any_skip_relocation",
|
|
17
|
-
"url": "https://ghcr.io/v2/homebrew/core/swiftformat/blobs/sha256:
|
|
18
|
-
"sha256": "
|
|
17
|
+
"url": "https://ghcr.io/v2/homebrew/core/swiftformat/blobs/sha256:2c937e3425e9b44a73eb5ae4a83604b4476f901866014c01c1ebd3f3a8d9c198",
|
|
18
|
+
"sha256": "2c937e3425e9b44a73eb5ae4a83604b4476f901866014c01c1ebd3f3a8d9c198"
|
|
19
19
|
},
|
|
20
20
|
"arm64_ventura": {
|
|
21
21
|
"cellar": ":any_skip_relocation",
|
|
22
|
-
"url": "https://ghcr.io/v2/homebrew/core/swiftformat/blobs/sha256:
|
|
23
|
-
"sha256": "
|
|
24
|
-
},
|
|
25
|
-
"arm64_monterey": {
|
|
26
|
-
"cellar": ":any_skip_relocation",
|
|
27
|
-
"url": "https://ghcr.io/v2/homebrew/core/swiftformat/blobs/sha256:3b14b0bacb0938c650e2d0d30d1f546ea7bac4feac510be16f09a89abd9f95d4",
|
|
28
|
-
"sha256": "3b14b0bacb0938c650e2d0d30d1f546ea7bac4feac510be16f09a89abd9f95d4"
|
|
22
|
+
"url": "https://ghcr.io/v2/homebrew/core/swiftformat/blobs/sha256:d68be9490bce8cb196933f1f421f791b0b9758a759956edfaf166f88dfca78e1",
|
|
23
|
+
"sha256": "d68be9490bce8cb196933f1f421f791b0b9758a759956edfaf166f88dfca78e1"
|
|
29
24
|
},
|
|
30
25
|
"sonoma": {
|
|
31
26
|
"cellar": ":any_skip_relocation",
|
|
32
|
-
"url": "https://ghcr.io/v2/homebrew/core/swiftformat/blobs/sha256:
|
|
33
|
-
"sha256": "
|
|
27
|
+
"url": "https://ghcr.io/v2/homebrew/core/swiftformat/blobs/sha256:784d61fca33bdbbdf96f8f23db2a0ea849ef62cb251eedfe83863869db84359b",
|
|
28
|
+
"sha256": "784d61fca33bdbbdf96f8f23db2a0ea849ef62cb251eedfe83863869db84359b"
|
|
34
29
|
},
|
|
35
30
|
"ventura": {
|
|
36
31
|
"cellar": ":any_skip_relocation",
|
|
37
|
-
"url": "https://ghcr.io/v2/homebrew/core/swiftformat/blobs/sha256:
|
|
38
|
-
"sha256": "
|
|
39
|
-
},
|
|
40
|
-
"monterey": {
|
|
41
|
-
"cellar": ":any_skip_relocation",
|
|
42
|
-
"url": "https://ghcr.io/v2/homebrew/core/swiftformat/blobs/sha256:8c367a76ca05ba07ffc38a6bb2f5ee0231d363655ed982284afcb4d685fa524e",
|
|
43
|
-
"sha256": "8c367a76ca05ba07ffc38a6bb2f5ee0231d363655ed982284afcb4d685fa524e"
|
|
32
|
+
"url": "https://ghcr.io/v2/homebrew/core/swiftformat/blobs/sha256:7845bd9bf8f0f94980f38d0ac322a5ee41bde07d18ec0c93a343c4aa7d2606fe",
|
|
33
|
+
"sha256": "7845bd9bf8f0f94980f38d0ac322a5ee41bde07d18ec0c93a343c4aa7d2606fe"
|
|
44
34
|
},
|
|
45
35
|
"x86_64_linux": {
|
|
46
36
|
"cellar": "/home/linuxbrew/.linuxbrew/Cellar",
|
|
47
|
-
"url": "https://ghcr.io/v2/homebrew/core/swiftformat/blobs/sha256:
|
|
48
|
-
"sha256": "
|
|
37
|
+
"url": "https://ghcr.io/v2/homebrew/core/swiftformat/blobs/sha256:14756d1f83aedf183be980541393c3e4d9cfa47dee3dbfdb665a3461f5045e13",
|
|
38
|
+
"sha256": "14756d1f83aedf183be980541393c3e4d9cfa47dee3dbfdb665a3461f5045e13"
|
|
49
39
|
}
|
|
50
40
|
}
|
|
51
41
|
}
|
|
@@ -87,12 +77,12 @@
|
|
|
87
77
|
"macOS": "13.6"
|
|
88
78
|
},
|
|
89
79
|
"sonoma": {
|
|
90
|
-
"HOMEBREW_VERSION": "4.
|
|
80
|
+
"HOMEBREW_VERSION": "4.4.1",
|
|
91
81
|
"HOMEBREW_PREFIX": "/opt/homebrew",
|
|
92
82
|
"Homebrew/homebrew-core": "api",
|
|
93
83
|
"CLT": "16.0.0.0.1.1724870825",
|
|
94
84
|
"Xcode": "15.4",
|
|
95
|
-
"macOS": "14.
|
|
85
|
+
"macOS": "14.7"
|
|
96
86
|
}
|
|
97
87
|
}
|
|
98
88
|
}
|
|
@@ -101,8 +101,11 @@ module Match
|
|
|
101
101
|
# No existing working directory, creating a new one now
|
|
102
102
|
self.working_directory = Dir.mktmpdir
|
|
103
103
|
|
|
104
|
-
|
|
104
|
+
# If team_id is defined, use `:team/` as a prefix (appending it at the end of the `s3_object_prefix` if one provided by the user),
|
|
105
|
+
# so that we limit the download to only files that are specific to this team, and avoid downloads + decryption of unnecessary files.
|
|
106
|
+
key_prefix = team_id.nil? ? s3_object_prefix : File.join(s3_object_prefix, team_id, '').delete_prefix('/')
|
|
105
107
|
|
|
108
|
+
s3_client.find_bucket!(s3_bucket).objects(prefix: key_prefix).each do |object|
|
|
106
109
|
# Prevent download if the file path is a directory.
|
|
107
110
|
# We need to check if string ends with "/" instead of using `File.directory?` because
|
|
108
111
|
# the string represent a remote location, not a local file in disk.
|
|
@@ -181,7 +184,7 @@ module Match
|
|
|
181
184
|
end
|
|
182
185
|
|
|
183
186
|
def strip_s3_object_prefix(object_path)
|
|
184
|
-
object_path.
|
|
187
|
+
object_path.delete_prefix(s3_object_prefix.to_s).delete_prefix('/')
|
|
185
188
|
end
|
|
186
189
|
|
|
187
190
|
def sanitize_file_name(file_name)
|
|
@@ -450,6 +450,94 @@ module Spaceship
|
|
|
450
450
|
return false
|
|
451
451
|
end
|
|
452
452
|
|
|
453
|
+
def do_sirp(user, password, modified_cookie)
|
|
454
|
+
require 'fastlane-sirp'
|
|
455
|
+
require 'base64'
|
|
456
|
+
|
|
457
|
+
client = SIRP::Client.new(2048)
|
|
458
|
+
a = client.start_authentication
|
|
459
|
+
|
|
460
|
+
data = {
|
|
461
|
+
a: Base64.strict_encode64(to_byte(a)),
|
|
462
|
+
accountName: user,
|
|
463
|
+
protocols: ['s2k', 's2k_fo']
|
|
464
|
+
}
|
|
465
|
+
|
|
466
|
+
response = request(:post) do |req|
|
|
467
|
+
req.url("https://idmsa.apple.com/appleauth/auth/signin/init")
|
|
468
|
+
req.body = data.to_json
|
|
469
|
+
req.headers['Content-Type'] = 'application/json'
|
|
470
|
+
req.headers['X-Requested-With'] = 'XMLHttpRequest'
|
|
471
|
+
req.headers['X-Apple-Widget-Key'] = self.itc_service_key
|
|
472
|
+
req.headers['Accept'] = 'application/json, text/javascript'
|
|
473
|
+
req.headers["Cookie"] = modified_cookie if modified_cookie
|
|
474
|
+
end
|
|
475
|
+
|
|
476
|
+
puts("Received SIRP signin init response: #{response.body}") if Spaceship::Globals.verbose?
|
|
477
|
+
|
|
478
|
+
body = response.body
|
|
479
|
+
iterations = body["iteration"]
|
|
480
|
+
salt = Base64.strict_decode64(body["salt"])
|
|
481
|
+
b = Base64.strict_decode64(body["b"])
|
|
482
|
+
c = body["c"]
|
|
483
|
+
|
|
484
|
+
key_length = 32
|
|
485
|
+
encrypted_password = pbkdf2(password, salt, iterations, key_length)
|
|
486
|
+
|
|
487
|
+
m1 = client.process_challenge(
|
|
488
|
+
user,
|
|
489
|
+
to_hex(encrypted_password),
|
|
490
|
+
to_hex(salt),
|
|
491
|
+
to_hex(b),
|
|
492
|
+
is_password_encrypted: true
|
|
493
|
+
)
|
|
494
|
+
m2 = client.H_AMK
|
|
495
|
+
|
|
496
|
+
if m1 == false
|
|
497
|
+
puts("Error processing SIRP challenge") if Spaceship::Globals.verbose?
|
|
498
|
+
raise SIRPAuthenticationError
|
|
499
|
+
end
|
|
500
|
+
|
|
501
|
+
data = {
|
|
502
|
+
accountName: user,
|
|
503
|
+
c: c,
|
|
504
|
+
m1: Base64.encode64(to_byte(m1)).strip,
|
|
505
|
+
m2: Base64.encode64(to_byte(m2)).strip,
|
|
506
|
+
rememberMe: false
|
|
507
|
+
}
|
|
508
|
+
|
|
509
|
+
hashcash = self.fetch_hashcash
|
|
510
|
+
|
|
511
|
+
response = request(:post) do |req|
|
|
512
|
+
req.url("https://idmsa.apple.com/appleauth/auth/signin/complete?isRememberMeEnabled=false")
|
|
513
|
+
req.body = data.to_json
|
|
514
|
+
req.headers['Content-Type'] = 'application/json'
|
|
515
|
+
req.headers['X-Requested-With'] = 'XMLHttpRequest'
|
|
516
|
+
req.headers['X-Apple-Widget-Key'] = self.itc_service_key
|
|
517
|
+
req.headers['Accept'] = 'application/json, text/javascript'
|
|
518
|
+
req.headers["Cookie"] = modified_cookie if modified_cookie
|
|
519
|
+
req.headers["X-Apple-HC"] = hashcash if hashcash
|
|
520
|
+
end
|
|
521
|
+
|
|
522
|
+
puts("Completed SIRP authentication with status of #{response.status}") if Spaceship::Globals.verbose?
|
|
523
|
+
|
|
524
|
+
return response
|
|
525
|
+
end
|
|
526
|
+
|
|
527
|
+
def pbkdf2(password, salt, iterations, key_length, digest = OpenSSL::Digest::SHA256.new)
|
|
528
|
+
require 'openssl'
|
|
529
|
+
password = OpenSSL::Digest::SHA256.digest(password)
|
|
530
|
+
OpenSSL::PKCS5.pbkdf2_hmac(password, salt, iterations, key_length, digest)
|
|
531
|
+
end
|
|
532
|
+
|
|
533
|
+
def to_hex(str)
|
|
534
|
+
str.unpack1('H*')
|
|
535
|
+
end
|
|
536
|
+
|
|
537
|
+
def to_byte(str)
|
|
538
|
+
[str].pack('H*')
|
|
539
|
+
end
|
|
540
|
+
|
|
453
541
|
# This method is used for both the Apple Dev Portal and App Store Connect
|
|
454
542
|
# This will also handle 2 step verification and 2 factor authentication
|
|
455
543
|
#
|
|
@@ -465,12 +553,6 @@ module Spaceship
|
|
|
465
553
|
# If the session is valid no need to attempt to generate a new one.
|
|
466
554
|
return true if has_valid_session
|
|
467
555
|
|
|
468
|
-
data = {
|
|
469
|
-
accountName: user,
|
|
470
|
-
password: password,
|
|
471
|
-
rememberMe: true
|
|
472
|
-
}
|
|
473
|
-
|
|
474
556
|
begin
|
|
475
557
|
# The below workaround is only needed for 2 step verified machines
|
|
476
558
|
# Due to escaping of cookie values we have a little workaround here
|
|
@@ -491,22 +573,7 @@ module Spaceship
|
|
|
491
573
|
modified_cookie.gsub!(unescaped_important_cookie, escaped_important_cookie)
|
|
492
574
|
end
|
|
493
575
|
|
|
494
|
-
|
|
495
|
-
# On 2023-02-23, Apple added a custom implementation
|
|
496
|
-
# of hashcash to their auth flow
|
|
497
|
-
# hashcash = nil
|
|
498
|
-
hashcash = self.fetch_hashcash
|
|
499
|
-
|
|
500
|
-
response = request(:post) do |req|
|
|
501
|
-
req.url("https://idmsa.apple.com/appleauth/auth/signin")
|
|
502
|
-
req.body = data.to_json
|
|
503
|
-
req.headers['Content-Type'] = 'application/json'
|
|
504
|
-
req.headers['X-Requested-With'] = 'XMLHttpRequest'
|
|
505
|
-
req.headers['X-Apple-Widget-Key'] = self.itc_service_key
|
|
506
|
-
req.headers['Accept'] = 'application/json, text/javascript'
|
|
507
|
-
req.headers["Cookie"] = modified_cookie if modified_cookie
|
|
508
|
-
req.headers["X-Apple-HC"] = hashcash if hashcash
|
|
509
|
-
end
|
|
576
|
+
response = perform_login_method(user, password, modified_cookie)
|
|
510
577
|
rescue UnauthorizedAccessError
|
|
511
578
|
raise InvalidUserCredentialsError.new, "Invalid username and password combination. Used '#{user}' as the username."
|
|
512
579
|
end
|
|
@@ -552,6 +619,40 @@ module Spaceship
|
|
|
552
619
|
end
|
|
553
620
|
# rubocop:enable Metrics/PerceivedComplexity
|
|
554
621
|
|
|
622
|
+
def perform_login_method(user, password, modified_cookie)
|
|
623
|
+
do_legacy_signin = ENV['FASTLANE_USE_LEGACY_PRE_SIRP_AUTH']
|
|
624
|
+
if do_legacy_signin
|
|
625
|
+
puts("Starting legacy Apple ID login") if Spaceship::Globals.verbose?
|
|
626
|
+
|
|
627
|
+
# Fixes issue https://github.com/fastlane/fastlane/issues/21071
|
|
628
|
+
# On 2023-02-23, Apple added a custom implementation
|
|
629
|
+
# of hashcash to their auth flow
|
|
630
|
+
# hashcash = nil
|
|
631
|
+
hashcash = self.fetch_hashcash
|
|
632
|
+
|
|
633
|
+
data = {
|
|
634
|
+
accountName: user,
|
|
635
|
+
password: password,
|
|
636
|
+
rememberMe: true
|
|
637
|
+
}
|
|
638
|
+
|
|
639
|
+
return request(:post) do |req|
|
|
640
|
+
req.url("https://idmsa.apple.com/appleauth/auth/signin")
|
|
641
|
+
req.body = data.to_json
|
|
642
|
+
req.headers['Content-Type'] = 'application/json'
|
|
643
|
+
req.headers['X-Requested-With'] = 'XMLHttpRequest'
|
|
644
|
+
req.headers['X-Apple-Widget-Key'] = self.itc_service_key
|
|
645
|
+
req.headers['Accept'] = 'application/json, text/javascript'
|
|
646
|
+
req.headers["Cookie"] = modified_cookie if modified_cookie
|
|
647
|
+
req.headers["X-Apple-HC"] = hashcash if hashcash
|
|
648
|
+
end
|
|
649
|
+
else
|
|
650
|
+
# Fixes issue https://github.com/fastlane/fastlane/issues/26368#issuecomment-2424190032
|
|
651
|
+
puts("Starting SIRP Apple ID login") if Spaceship::Globals.verbose?
|
|
652
|
+
return do_sirp(user, password, modified_cookie)
|
|
653
|
+
end
|
|
654
|
+
end
|
|
655
|
+
|
|
555
656
|
def fetch_hashcash
|
|
556
657
|
response = request(:get, "https://idmsa.apple.com/appleauth/auth/signin?widgetKey=#{self.itc_service_key}")
|
|
557
658
|
headers = response.headers
|
|
@@ -69,7 +69,7 @@ module Spaceship
|
|
|
69
69
|
# Forwarding to class level if using web session.
|
|
70
70
|
def hostname
|
|
71
71
|
if @token
|
|
72
|
-
return "https://api.appstoreconnect.apple.com/"
|
|
72
|
+
return @token.in_house ? "https://api.enterprise.developer.apple.com/" : "https://api.appstoreconnect.apple.com/"
|
|
73
73
|
end
|
|
74
74
|
return self.class.hostname
|
|
75
75
|
end
|
|
@@ -29,6 +29,7 @@ module Spaceship
|
|
|
29
29
|
attr_accessor :in_house
|
|
30
30
|
|
|
31
31
|
def self.from(hash: nil, filepath: nil)
|
|
32
|
+
# FIXME: Ensure `in_house` value is a boolean.
|
|
32
33
|
api_token ||= self.create(**hash.transform_keys(&:to_sym)) if hash
|
|
33
34
|
api_token ||= self.from_json_file(filepath) if filepath
|
|
34
35
|
return api_token
|
|
@@ -101,7 +102,7 @@ module Spaceship
|
|
|
101
102
|
# Reduce the issued-at-time in case our time is slighly ahead of Apple's servers, which causes the token to be rejected.
|
|
102
103
|
iat: now.to_i - 60,
|
|
103
104
|
exp: @expiration.to_i,
|
|
104
|
-
aud: 'appstoreconnect-v1'
|
|
105
|
+
aud: @in_house ? 'apple-developer-enterprise-v1' : 'appstoreconnect-v1'
|
|
105
106
|
}
|
|
106
107
|
if issuer_id
|
|
107
108
|
payload[:iss] = issuer_id
|
|
@@ -43,6 +43,21 @@ module Spaceship
|
|
|
43
43
|
end
|
|
44
44
|
end
|
|
45
45
|
|
|
46
|
+
# User doesn't have enough permission for given action
|
|
47
|
+
class SIRPAuthenticationError < BasicPreferredInfoError
|
|
48
|
+
TITLE = 'Authentication issue validating secrets:'.freeze
|
|
49
|
+
|
|
50
|
+
def preferred_error_info
|
|
51
|
+
message ? [TITLE, message] : nil
|
|
52
|
+
end
|
|
53
|
+
|
|
54
|
+
# We don't want to show similar GitHub issues, as the error message
|
|
55
|
+
# should be pretty clear
|
|
56
|
+
def show_github_issues
|
|
57
|
+
false
|
|
58
|
+
end
|
|
59
|
+
end
|
|
60
|
+
|
|
46
61
|
# Raised when 429 is received from App Store Connect
|
|
47
62
|
class TooManyRequestsError < BasicPreferredInfoError
|
|
48
63
|
attr_reader :retry_after
|
|
@@ -18,6 +18,7 @@ module Spaceship
|
|
|
18
18
|
@services ||= [
|
|
19
19
|
ServiceOption.new("App Store Connect API (official)", "api.appstoreconnect.apple.com", "JWT"),
|
|
20
20
|
ServiceOption.new("App Store Connect API (web session)", Spaceship::ConnectAPI::TestFlight::Client.hostname.gsub("https://", ""), "Web session"),
|
|
21
|
+
ServiceOption.new("Enterprise Program API (official)", "api.enterprise.developer.apple.com", "JWT"),
|
|
21
22
|
ServiceOption.new("Legacy iTunesConnect Auth", "idmsa.apple.com", "Web session"),
|
|
22
23
|
ServiceOption.new("Legacy iTunesConnect Auth", "appstoreconnect.apple.com/olympus/v1/", "Web session"),
|
|
23
24
|
ServiceOption.new("Legacy iTunesConnect", Spaceship::TunesClient.hostname.gsub("https://", ""), "Web session"),
|
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.
|
|
4
|
+
version: 2.225.0
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
|
+
- Andrew McBurney
|
|
8
|
+
- Łukasz Grabowski
|
|
9
|
+
- Jimmy Dee
|
|
10
|
+
- Manish Rathi
|
|
11
|
+
- Aaron Brager
|
|
7
12
|
- Satoshi Namai
|
|
8
|
-
-
|
|
13
|
+
- Danielle Tomlinson
|
|
14
|
+
- Jérôme Lacoste
|
|
15
|
+
- Jorge Revuelta H
|
|
16
|
+
- Helmut Januschka
|
|
17
|
+
- Joshua Liebowitz
|
|
9
18
|
- Felix Krause
|
|
10
|
-
-
|
|
19
|
+
- Stefan Natchev
|
|
20
|
+
- Iulian Onofrei
|
|
21
|
+
- Roger Oba
|
|
22
|
+
- Manu Wallner
|
|
11
23
|
- Max Ott
|
|
12
|
-
- Jorge Revuelta H
|
|
13
|
-
- Jérôme Lacoste
|
|
14
|
-
- Aaron Brager
|
|
15
24
|
- Olivier Halligon
|
|
16
|
-
- Jimmy Dee
|
|
17
|
-
- Manish Rathi
|
|
18
|
-
- Iulian Onofrei
|
|
19
|
-
- Stefan Natchev
|
|
20
25
|
- Maksym Grebenets
|
|
21
|
-
- Roger Oba
|
|
22
26
|
- Fumiya Nakamura
|
|
23
|
-
- Matthew Ellis
|
|
24
|
-
- Łukasz Grabowski
|
|
25
|
-
- Danielle Tomlinson
|
|
26
|
-
- Josh Holtz
|
|
27
|
-
- Daniel Jankowski
|
|
28
|
-
- Andrew McBurney
|
|
29
|
-
- Joshua Liebowitz
|
|
30
27
|
- Jan Piotrowski
|
|
31
|
-
- Helmut Januschka
|
|
32
28
|
- Luka Mirosevic
|
|
29
|
+
- Josh Holtz
|
|
30
|
+
- Kohki Miki
|
|
31
|
+
- Matthew Ellis
|
|
32
|
+
- Daniel Jankowski
|
|
33
33
|
autorequire:
|
|
34
34
|
bindir: bin
|
|
35
35
|
cert_chain: []
|
|
36
|
-
date: 2024-
|
|
36
|
+
date: 2024-10-21 00:00:00.000000000 Z
|
|
37
37
|
dependencies:
|
|
38
38
|
- !ruby/object:Gem::Dependency
|
|
39
39
|
name: addressable
|
|
@@ -293,6 +293,20 @@ dependencies:
|
|
|
293
293
|
- - "<"
|
|
294
294
|
- !ruby/object:Gem::Version
|
|
295
295
|
version: 3.0.0
|
|
296
|
+
- !ruby/object:Gem::Dependency
|
|
297
|
+
name: fastlane-sirp
|
|
298
|
+
requirement: !ruby/object:Gem::Requirement
|
|
299
|
+
requirements:
|
|
300
|
+
- - ">="
|
|
301
|
+
- !ruby/object:Gem::Version
|
|
302
|
+
version: 1.0.0
|
|
303
|
+
type: :runtime
|
|
304
|
+
prerelease: false
|
|
305
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
306
|
+
requirements:
|
|
307
|
+
- - ">="
|
|
308
|
+
- !ruby/object:Gem::Version
|
|
309
|
+
version: 1.0.0
|
|
296
310
|
- !ruby/object:Gem::Dependency
|
|
297
311
|
name: gh_inspector
|
|
298
312
|
requirement: !ruby/object:Gem::Requirement
|