fastlane 2.224.0 → 2.226.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 +96 -96
- data/deliver/lib/deliver/options.rb +1 -1
- data/fastlane/lib/fastlane/actions/app_store_build_number.rb +1 -1
- data/fastlane/lib/fastlane/actions/import_from_git.rb +11 -4
- data/fastlane/lib/fastlane/actions/latest_testflight_build_number.rb +1 -1
- data/fastlane/lib/fastlane/actions/register_device.rb +1 -1
- data/fastlane/lib/fastlane/actions/register_devices.rb +1 -1
- data/fastlane/lib/fastlane/actions/testfairy.rb +36 -2
- data/fastlane/lib/fastlane/fast_file.rb +9 -6
- 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 +20 -4
- 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 +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/precheck/lib/precheck/options.rb +1 -1
- data/produce/lib/produce/options.rb +1 -1
- data/spaceship/lib/spaceship/client.rb +123 -22
- data/spaceship/lib/spaceship/errors.rb +15 -0
- data/supply/lib/supply/uploader.rb +8 -4
- metadata +36 -22
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz: '
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: '0924a4ae4adee9710990cc67bf6bd16a817bb84d849d747f725e4dea8ad29548'
|
|
4
|
+
data.tar.gz: 3ae95f0859f02531ae57cd5381b6e5a295e64c899a487cbcea074ecfa196e646
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: bd1fc74b283c81699207cfc9261827986150a2066903ab12b762acb95e6ac00c5304da48b366e8817761fbe6377169f0742e392ac8fb355905b7fb94cd2af668
|
|
7
|
+
data.tar.gz: 1671c16656f5b3a71ba26432aba6c8491339c8c205fadf8cc968ddf576ea0b9c55ecb693a47e4d1663d11c456041d9d25b27b3ca63de6b6cce61a7556124ff02
|
data/README.md
CHANGED
|
@@ -35,49 +35,17 @@ If the above doesn't help, please [submit an issue](https://github.com/fastlane/
|
|
|
35
35
|
<!-- This table is regenerated and resorted on each release -->
|
|
36
36
|
<table id='team'>
|
|
37
37
|
<tr>
|
|
38
|
-
<td id='
|
|
39
|
-
<a href='https://github.com/
|
|
40
|
-
<img src='https://github.com/
|
|
41
|
-
</a>
|
|
42
|
-
<h4 align='center'><a href='https://twitter.com/acrooow'>Manu Wallner</a></h4>
|
|
43
|
-
</td>
|
|
44
|
-
<td id='helmut-januschka'>
|
|
45
|
-
<a href='https://github.com/hjanuschka'>
|
|
46
|
-
<img src='https://github.com/hjanuschka.png' width='140px;'>
|
|
47
|
-
</a>
|
|
48
|
-
<h4 align='center'><a href='https://twitter.com/hjanuschka'>Helmut Januschka</a></h4>
|
|
49
|
-
</td>
|
|
50
|
-
<td id='max-ott'>
|
|
51
|
-
<a href='https://github.com/max-ott'>
|
|
52
|
-
<img src='https://github.com/max-ott.png' width='140px;'>
|
|
53
|
-
</a>
|
|
54
|
-
<h4 align='center'><a href='https://twitter.com/ott_max'>Max Ott</a></h4>
|
|
55
|
-
</td>
|
|
56
|
-
<td id='olivier-halligon'>
|
|
57
|
-
<a href='https://github.com/AliSoftware'>
|
|
58
|
-
<img src='https://github.com/AliSoftware.png' width='140px;'>
|
|
59
|
-
</a>
|
|
60
|
-
<h4 align='center'><a href='https://twitter.com/aligatr'>Olivier Halligon</a></h4>
|
|
61
|
-
</td>
|
|
62
|
-
<td id='felix-krause'>
|
|
63
|
-
<a href='https://github.com/KrauseFx'>
|
|
64
|
-
<img src='https://github.com/KrauseFx.png' width='140px;'>
|
|
65
|
-
</a>
|
|
66
|
-
<h4 align='center'><a href='https://twitter.com/KrauseFx'>Felix Krause</a></h4>
|
|
67
|
-
</td>
|
|
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;'>
|
|
38
|
+
<td id='jimmy-dee'>
|
|
39
|
+
<a href='https://github.com/jdee'>
|
|
40
|
+
<img src='https://github.com/jdee.png' width='140px;'>
|
|
73
41
|
</a>
|
|
74
|
-
<h4 align='center'
|
|
42
|
+
<h4 align='center'>Jimmy Dee</h4>
|
|
75
43
|
</td>
|
|
76
|
-
<td id='
|
|
77
|
-
<a href='https://github.com/
|
|
78
|
-
<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;'>
|
|
79
47
|
</a>
|
|
80
|
-
<h4 align='center'><a href='https://twitter.com/
|
|
48
|
+
<h4 align='center'><a href='https://twitter.com/snatchev'>Stefan Natchev</a></h4>
|
|
81
49
|
</td>
|
|
82
50
|
<td id='josh-holtz'>
|
|
83
51
|
<a href='https://github.com/joshdholtz'>
|
|
@@ -91,69 +59,63 @@ If the above doesn't help, please [submit an issue](https://github.com/fastlane/
|
|
|
91
59
|
</a>
|
|
92
60
|
<h4 align='center'><a href='https://twitter.com/taquitos'>Joshua Liebowitz</a></h4>
|
|
93
61
|
</td>
|
|
94
|
-
<td id='fumiya-nakamura'>
|
|
95
|
-
<a href='https://github.com/nafu'>
|
|
96
|
-
<img src='https://github.com/nafu.png' width='140px;'>
|
|
97
|
-
</a>
|
|
98
|
-
<h4 align='center'><a href='https://twitter.com/nafu003'>Fumiya Nakamura</a></h4>
|
|
99
|
-
</td>
|
|
100
|
-
</tr>
|
|
101
|
-
<tr>
|
|
102
|
-
<td id='jorge-revuelta-h'>
|
|
103
|
-
<a href='https://github.com/minuscorp'>
|
|
104
|
-
<img src='https://github.com/minuscorp.png' width='140px;'>
|
|
105
|
-
</a>
|
|
106
|
-
<h4 align='center'><a href='https://twitter.com/minuscorp'>Jorge Revuelta H</a></h4>
|
|
107
|
-
</td>
|
|
108
62
|
<td id='roger-oba'>
|
|
109
63
|
<a href='https://github.com/rogerluan'>
|
|
110
64
|
<img src='https://github.com/rogerluan.png' width='140px;'>
|
|
111
65
|
</a>
|
|
112
66
|
<h4 align='center'><a href='https://twitter.com/rogerluan_'>Roger Oba</a></h4>
|
|
113
67
|
</td>
|
|
68
|
+
</tr>
|
|
69
|
+
<tr>
|
|
114
70
|
<td id='satoshi-namai'>
|
|
115
71
|
<a href='https://github.com/ainame'>
|
|
116
72
|
<img src='https://github.com/ainame.png' width='140px;'>
|
|
117
73
|
</a>
|
|
118
74
|
<h4 align='center'><a href='https://twitter.com/ainame'>Satoshi Namai</a></h4>
|
|
119
75
|
</td>
|
|
120
|
-
<td id='
|
|
121
|
-
<a href='https://github.com/
|
|
122
|
-
<img src='https://github.com/
|
|
76
|
+
<td id='daniel-jankowski'>
|
|
77
|
+
<a href='https://github.com/mollyIV'>
|
|
78
|
+
<img src='https://github.com/mollyIV.png' width='140px;'>
|
|
123
79
|
</a>
|
|
124
|
-
<h4 align='center'><a href='https://twitter.com/
|
|
80
|
+
<h4 align='center'><a href='https://twitter.com/mollyIV'>Daniel Jankowski</a></h4>
|
|
125
81
|
</td>
|
|
126
|
-
<td id='
|
|
127
|
-
<a href='https://github.com/
|
|
128
|
-
<img src='https://github.com/
|
|
82
|
+
<td id='aaron-brager'>
|
|
83
|
+
<a href='https://github.com/getaaron'>
|
|
84
|
+
<img src='https://github.com/getaaron.png' width='140px;'>
|
|
129
85
|
</a>
|
|
130
|
-
<h4 align='center'><a href='https://twitter.com/
|
|
86
|
+
<h4 align='center'><a href='https://twitter.com/getaaron'>Aaron Brager</a></h4>
|
|
131
87
|
</td>
|
|
132
|
-
|
|
133
|
-
<
|
|
134
|
-
<
|
|
135
|
-
<a href='https://github.com/jdee'>
|
|
136
|
-
<img src='https://github.com/jdee.png' width='140px;'>
|
|
88
|
+
<td id='olivier-halligon'>
|
|
89
|
+
<a href='https://github.com/AliSoftware'>
|
|
90
|
+
<img src='https://github.com/AliSoftware.png' width='140px;'>
|
|
137
91
|
</a>
|
|
138
|
-
<h4 align='center'>
|
|
92
|
+
<h4 align='center'><a href='https://twitter.com/aligatr'>Olivier Halligon</a></h4>
|
|
139
93
|
</td>
|
|
140
|
-
<td id='
|
|
141
|
-
<a href='https://github.com/
|
|
142
|
-
<img src='https://github.com/
|
|
94
|
+
<td id='andrew-mcburney'>
|
|
95
|
+
<a href='https://github.com/armcburney'>
|
|
96
|
+
<img src='https://github.com/armcburney.png' width='140px;'>
|
|
143
97
|
</a>
|
|
144
|
-
<h4 align='center'><a href='https://twitter.com/
|
|
98
|
+
<h4 align='center'><a href='https://twitter.com/armcburney'>Andrew McBurney</a></h4>
|
|
145
99
|
</td>
|
|
146
|
-
|
|
147
|
-
<
|
|
148
|
-
<
|
|
100
|
+
</tr>
|
|
101
|
+
<tr>
|
|
102
|
+
<td id='danielle-tomlinson'>
|
|
103
|
+
<a href='https://github.com/endocrimes'>
|
|
104
|
+
<img src='https://github.com/endocrimes.png' width='140px;'>
|
|
149
105
|
</a>
|
|
150
|
-
<h4 align='center'><a href='https://twitter.com/
|
|
106
|
+
<h4 align='center'><a href='https://twitter.com/endocrimes'>Danielle Tomlinson</a></h4>
|
|
151
107
|
</td>
|
|
152
|
-
<td id='
|
|
153
|
-
<a href='https://github.com/
|
|
154
|
-
<img src='https://github.com/
|
|
108
|
+
<td id='kohki-miki'>
|
|
109
|
+
<a href='https://github.com/giginet'>
|
|
110
|
+
<img src='https://github.com/giginet.png' width='140px;'>
|
|
155
111
|
</a>
|
|
156
|
-
<h4 align='center'><a href='https://twitter.com/
|
|
112
|
+
<h4 align='center'><a href='https://twitter.com/giginet'>Kohki Miki</a></h4>
|
|
113
|
+
</td>
|
|
114
|
+
<td id='manu-wallner'>
|
|
115
|
+
<a href='https://github.com/milch'>
|
|
116
|
+
<img src='https://github.com/milch.png' width='140px;'>
|
|
117
|
+
</a>
|
|
118
|
+
<h4 align='center'><a href='https://twitter.com/acrooow'>Manu Wallner</a></h4>
|
|
157
119
|
</td>
|
|
158
120
|
<td id='luka-mirosevic'>
|
|
159
121
|
<a href='https://github.com/lmirosevic'>
|
|
@@ -161,25 +123,31 @@ If the above doesn't help, please [submit an issue](https://github.com/fastlane/
|
|
|
161
123
|
</a>
|
|
162
124
|
<h4 align='center'><a href='https://twitter.com/lmirosevic'>Luka Mirosevic</a></h4>
|
|
163
125
|
</td>
|
|
126
|
+
<td id='felix-krause'>
|
|
127
|
+
<a href='https://github.com/KrauseFx'>
|
|
128
|
+
<img src='https://github.com/KrauseFx.png' width='140px;'>
|
|
129
|
+
</a>
|
|
130
|
+
<h4 align='center'><a href='https://twitter.com/KrauseFx'>Felix Krause</a></h4>
|
|
131
|
+
</td>
|
|
164
132
|
</tr>
|
|
165
133
|
<tr>
|
|
166
|
-
<td id='
|
|
167
|
-
<a href='https://github.com/
|
|
168
|
-
<img src='https://github.com/
|
|
134
|
+
<td id='helmut-januschka'>
|
|
135
|
+
<a href='https://github.com/hjanuschka'>
|
|
136
|
+
<img src='https://github.com/hjanuschka.png' width='140px;'>
|
|
169
137
|
</a>
|
|
170
|
-
<h4 align='center'><a href='https://twitter.com/
|
|
138
|
+
<h4 align='center'><a href='https://twitter.com/hjanuschka'>Helmut Januschka</a></h4>
|
|
171
139
|
</td>
|
|
172
|
-
<td id='
|
|
173
|
-
<a href='https://github.com/
|
|
174
|
-
<img src='https://github.com/
|
|
140
|
+
<td id='max-ott'>
|
|
141
|
+
<a href='https://github.com/max-ott'>
|
|
142
|
+
<img src='https://github.com/max-ott.png' width='140px;'>
|
|
175
143
|
</a>
|
|
176
|
-
<h4 align='center'
|
|
144
|
+
<h4 align='center'><a href='https://twitter.com/ott_max'>Max Ott</a></h4>
|
|
177
145
|
</td>
|
|
178
|
-
<td id='
|
|
179
|
-
<a href='https://github.com/
|
|
180
|
-
<img src='https://github.com/
|
|
146
|
+
<td id='jorge-revuelta-h'>
|
|
147
|
+
<a href='https://github.com/minuscorp'>
|
|
148
|
+
<img src='https://github.com/minuscorp.png' width='140px;'>
|
|
181
149
|
</a>
|
|
182
|
-
<h4 align='center'><a href='https://twitter.com/
|
|
150
|
+
<h4 align='center'><a href='https://twitter.com/minuscorp'>Jorge Revuelta H</a></h4>
|
|
183
151
|
</td>
|
|
184
152
|
<td id='jan-piotrowski'>
|
|
185
153
|
<a href='https://github.com/janpio'>
|
|
@@ -187,20 +155,52 @@ If the above doesn't help, please [submit an issue](https://github.com/fastlane/
|
|
|
187
155
|
</a>
|
|
188
156
|
<h4 align='center'><a href='https://twitter.com/Sujan'>Jan Piotrowski</a></h4>
|
|
189
157
|
</td>
|
|
190
|
-
<td id='
|
|
191
|
-
<a href='https://github.com/
|
|
192
|
-
<img src='https://github.com/
|
|
158
|
+
<td id='manish-rathi'>
|
|
159
|
+
<a href='https://github.com/crazymanish'>
|
|
160
|
+
<img src='https://github.com/crazymanish.png' width='140px;'>
|
|
193
161
|
</a>
|
|
194
|
-
<h4 align='center'><a href='https://twitter.com/
|
|
162
|
+
<h4 align='center'><a href='https://twitter.com/iammanishrathi'>Manish Rathi</a></h4>
|
|
195
163
|
</td>
|
|
196
164
|
</tr>
|
|
197
165
|
<tr>
|
|
166
|
+
<td id='łukasz-grabowski'>
|
|
167
|
+
<a href='https://github.com/lucgrabowski'>
|
|
168
|
+
<img src='https://github.com/lucgrabowski.png' width='140px;'>
|
|
169
|
+
</a>
|
|
170
|
+
<h4 align='center'>Łukasz Grabowski</h4>
|
|
171
|
+
</td>
|
|
172
|
+
<td id='matthew-ellis'>
|
|
173
|
+
<a href='https://github.com/matthewellis'>
|
|
174
|
+
<img src='https://github.com/matthewellis.png' width='140px;'>
|
|
175
|
+
</a>
|
|
176
|
+
<h4 align='center'><a href='https://twitter.com/mellis1995'>Matthew Ellis</a></h4>
|
|
177
|
+
</td>
|
|
178
|
+
<td id='jérôme-lacoste'>
|
|
179
|
+
<a href='https://github.com/lacostej'>
|
|
180
|
+
<img src='https://github.com/lacostej.png' width='140px;'>
|
|
181
|
+
</a>
|
|
182
|
+
<h4 align='center'><a href='https://twitter.com/lacostej'>Jérôme Lacoste</a></h4>
|
|
183
|
+
</td>
|
|
198
184
|
<td id='maksym-grebenets'>
|
|
199
185
|
<a href='https://github.com/mgrebenets'>
|
|
200
186
|
<img src='https://github.com/mgrebenets.png' width='140px;'>
|
|
201
187
|
</a>
|
|
202
188
|
<h4 align='center'><a href='https://twitter.com/mgrebenets'>Maksym Grebenets</a></h4>
|
|
203
189
|
</td>
|
|
190
|
+
<td id='iulian-onofrei'>
|
|
191
|
+
<a href='https://github.com/revolter'>
|
|
192
|
+
<img src='https://github.com/revolter.png' width='140px;'>
|
|
193
|
+
</a>
|
|
194
|
+
<h4 align='center'><a href='https://twitter.com/Revolt666'>Iulian Onofrei</a></h4>
|
|
195
|
+
</td>
|
|
196
|
+
</tr>
|
|
197
|
+
<tr>
|
|
198
|
+
<td id='fumiya-nakamura'>
|
|
199
|
+
<a href='https://github.com/nafu'>
|
|
200
|
+
<img src='https://github.com/nafu.png' width='140px;'>
|
|
201
|
+
</a>
|
|
202
|
+
<h4 align='center'><a href='https://twitter.com/nafu003'>Fumiya Nakamura</a></h4>
|
|
203
|
+
</td>
|
|
204
204
|
</table>
|
|
205
205
|
|
|
206
206
|
Special thanks to all [contributors](https://github.com/fastlane/fastlane/graphs/contributors) for extending and improving _fastlane_.
|
|
@@ -99,7 +99,7 @@ module Deliver
|
|
|
99
99
|
optional: true,
|
|
100
100
|
default_value: "ios",
|
|
101
101
|
verify_block: proc do |value|
|
|
102
|
-
UI.user_error!("The platform can only be ios, appletvos, xros or osx") unless %(
|
|
102
|
+
UI.user_error!("The platform can only be ios, appletvos, xros or osx") unless %w(ios appletvos xros osx).include?(value)
|
|
103
103
|
end),
|
|
104
104
|
|
|
105
105
|
# live version
|
|
@@ -186,7 +186,7 @@ module Fastlane
|
|
|
186
186
|
optional: true,
|
|
187
187
|
default_value: "ios",
|
|
188
188
|
verify_block: proc do |value|
|
|
189
|
-
UI.user_error!("The platform can only be ios, appletvos, xros or osx") unless %(
|
|
189
|
+
UI.user_error!("The platform can only be ios, appletvos, xros or osx") unless %w(ios appletvos xros osx).include?(value)
|
|
190
190
|
end),
|
|
191
191
|
FastlaneCore::ConfigItem.new(key: :team_name,
|
|
192
192
|
short_option: "-e",
|
|
@@ -30,9 +30,10 @@ module Fastlane
|
|
|
30
30
|
default_value: 'HEAD',
|
|
31
31
|
optional: true),
|
|
32
32
|
FastlaneCore::ConfigItem.new(key: :dependencies,
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
33
|
+
description: "The array of additional Fastfiles in the repository",
|
|
34
|
+
default_value: [],
|
|
35
|
+
type: Array,
|
|
36
|
+
optional: true),
|
|
36
37
|
FastlaneCore::ConfigItem.new(key: :path,
|
|
37
38
|
description: "The path of the Fastfile in the repository",
|
|
38
39
|
default_value: 'fastlane/Fastfile',
|
|
@@ -43,6 +44,11 @@ module Fastlane
|
|
|
43
44
|
optional: true),
|
|
44
45
|
FastlaneCore::ConfigItem.new(key: :cache_path,
|
|
45
46
|
description: "The path to a directory where the repository should be cloned into. Defaults to `nil`, which causes the repository to be cloned on every call, to a temporary directory",
|
|
47
|
+
optional: true),
|
|
48
|
+
FastlaneCore::ConfigItem.new(key: :git_extra_headers,
|
|
49
|
+
description: "An optional list of custom HTTP headers to access the git repo (`Authorization: Basic <YOUR BASE64 KEY>`, `Cache-Control: no-cache`, etc.)",
|
|
50
|
+
default_value: [],
|
|
51
|
+
type: Array,
|
|
46
52
|
optional: true)
|
|
47
53
|
]
|
|
48
54
|
end
|
|
@@ -68,7 +74,8 @@ module Fastlane
|
|
|
68
74
|
branch: "HEAD", # The branch to checkout on the repository.
|
|
69
75
|
path: "fastlane/Fastfile", # The path of the Fastfile in the repository.
|
|
70
76
|
version: [">= 1.1.0", "< 2.0.0"], # The version to checkout on the repository. Multiple conditions can be used to select the latest version within constraints.
|
|
71
|
-
cache_path: "~/.cache/fastlane/imported" # A directory in which the repository will be added, which means that it will not be cloned again on subsequent calls.
|
|
77
|
+
cache_path: "~/.cache/fastlane/imported", # A directory in which the repository will be added, which means that it will not be cloned again on subsequent calls.
|
|
78
|
+
git_extra_headers: ["Authorization: Basic <YOUR BASE64 KEY>", "Cache-Control: no-cache"]
|
|
72
79
|
)'
|
|
73
80
|
]
|
|
74
81
|
end
|
|
@@ -83,7 +83,7 @@ module Fastlane
|
|
|
83
83
|
optional: true,
|
|
84
84
|
default_value: "ios",
|
|
85
85
|
verify_block: proc do |value|
|
|
86
|
-
UI.user_error!("The platform can only be ios, osx, xros or appletvos") unless %(
|
|
86
|
+
UI.user_error!("The platform can only be ios, osx, xros or appletvos") unless %w(osx ios appletvos xros).include?(value)
|
|
87
87
|
end),
|
|
88
88
|
FastlaneCore::ConfigItem.new(key: :initial_build_number,
|
|
89
89
|
env_name: "INITIAL_BUILD_NUMBER",
|
|
@@ -58,7 +58,7 @@ module Fastlane
|
|
|
58
58
|
optional: true,
|
|
59
59
|
default_value: platform.empty? ? "ios" : platform,
|
|
60
60
|
verify_block: proc do |value|
|
|
61
|
-
UI.user_error!("The platform can only be ios or mac") unless %(
|
|
61
|
+
UI.user_error!("The platform can only be ios or mac") unless %w(ios mac).include?(value)
|
|
62
62
|
end),
|
|
63
63
|
FastlaneCore::ConfigItem.new(key: :udid,
|
|
64
64
|
env_name: "FL_REGISTER_DEVICE_UDID",
|
|
@@ -160,7 +160,7 @@ module Fastlane
|
|
|
160
160
|
optional: true,
|
|
161
161
|
default_value: platform.empty? ? "ios" : platform,
|
|
162
162
|
verify_block: proc do |value|
|
|
163
|
-
UI.user_error!("The platform can only be ios or mac") unless %(
|
|
163
|
+
UI.user_error!("The platform can only be ios or mac") unless %w(ios mac).include?(value)
|
|
164
164
|
end)
|
|
165
165
|
]
|
|
166
166
|
end
|
|
@@ -98,6 +98,14 @@ module Fastlane
|
|
|
98
98
|
[key, value]
|
|
99
99
|
when :tags
|
|
100
100
|
[key, value.join(',')]
|
|
101
|
+
when :folder_name
|
|
102
|
+
[key, value]
|
|
103
|
+
when :landing_page_mode
|
|
104
|
+
[key, value]
|
|
105
|
+
when :upload_to_saucelabs
|
|
106
|
+
[key, value]
|
|
107
|
+
when :platform
|
|
108
|
+
[key, value]
|
|
101
109
|
else
|
|
102
110
|
UI.user_error!("Unknown parameter: #{key}")
|
|
103
111
|
end
|
|
@@ -237,7 +245,7 @@ module Fastlane
|
|
|
237
245
|
FastlaneCore::ConfigItem.new(key: :custom,
|
|
238
246
|
optional: true,
|
|
239
247
|
env_name: "FL_TESTFAIRY_CUSTOM",
|
|
240
|
-
description: "Array of custom options. Contact support
|
|
248
|
+
description: "Array of custom options. Contact support for more information",
|
|
241
249
|
default_value: ''),
|
|
242
250
|
FastlaneCore::ConfigItem.new(key: :timeout,
|
|
243
251
|
env_name: "FL_TESTFAIRY_TIMEOUT",
|
|
@@ -249,7 +257,33 @@ module Fastlane
|
|
|
249
257
|
env_name: "FL_TESTFAIRY_TAGS",
|
|
250
258
|
description: "Custom tags that can be used to organize your builds",
|
|
251
259
|
type: Array,
|
|
252
|
-
default_value: [])
|
|
260
|
+
default_value: []),
|
|
261
|
+
FastlaneCore::ConfigItem.new(key: :folder_name,
|
|
262
|
+
optional: true,
|
|
263
|
+
env_name: "FL_TESTFAIRY_FOLDER_NAME",
|
|
264
|
+
description: "Name of the dashboard folder that contains this app",
|
|
265
|
+
default_value: ''),
|
|
266
|
+
FastlaneCore::ConfigItem.new(key: :landing_page_mode,
|
|
267
|
+
optional: true,
|
|
268
|
+
env_name: "FL_TESTFAIRY_LANDING_PAGE_MODE",
|
|
269
|
+
description: "Visibility of build landing after upload. Can be 'open' or 'closed'",
|
|
270
|
+
default_value: 'open',
|
|
271
|
+
verify_block: proc do |value|
|
|
272
|
+
UI.user_error!("The landing page mode can only be open or closed") unless %w(open closed).include?(value)
|
|
273
|
+
end),
|
|
274
|
+
FastlaneCore::ConfigItem.new(key: :upload_to_saucelabs,
|
|
275
|
+
optional: true,
|
|
276
|
+
env_name: "FL_TESTFAIRY_UPLOAD_TO_SAUCELABS",
|
|
277
|
+
description: "Upload file directly to Sauce Labs. It can be 'on' or 'off'",
|
|
278
|
+
default_value: 'off',
|
|
279
|
+
verify_block: proc do |value|
|
|
280
|
+
UI.user_error!("The upload to Sauce Labs can only be on or off") unless %w(on off).include?(value)
|
|
281
|
+
end),
|
|
282
|
+
FastlaneCore::ConfigItem.new(key: :platform,
|
|
283
|
+
optional: true,
|
|
284
|
+
env_name: "FL_TESTFAIRY_PLATFORM",
|
|
285
|
+
description: "Use if upload build is not iOS or Android. Contact support for more information",
|
|
286
|
+
default_value: '')
|
|
253
287
|
]
|
|
254
288
|
end
|
|
255
289
|
|
|
@@ -278,7 +278,8 @@ module Fastlane
|
|
|
278
278
|
# @param version [String, Array] Version requirement for repo tags
|
|
279
279
|
# @param dependencies [Array] An optional array of additional Fastfiles in the repository
|
|
280
280
|
# @param cache_path [String] An optional path to a directory where the repository should be cloned into
|
|
281
|
-
|
|
281
|
+
# @param git_extra_headers [Array] An optional array of custom HTTP headers to access the git repo (`Authorization: Basic <YOUR BASE64 KEY>`, `Cache-Control: no-cache`, etc.)
|
|
282
|
+
def import_from_git(url: nil, branch: 'HEAD', path: 'fastlane/Fastfile', version: nil, dependencies: [], cache_path: nil, git_extra_headers: []) # rubocop:disable Metrics/PerceivedComplexity
|
|
282
283
|
UI.user_error!("Please pass a path to the `import_from_git` action") if url.to_s.length == 0
|
|
283
284
|
|
|
284
285
|
Actions.execute_action('import_from_git') do
|
|
@@ -297,8 +298,6 @@ module Fastlane
|
|
|
297
298
|
import_block = proc do |target_path|
|
|
298
299
|
clone_folder = File.join(target_path, repo_name)
|
|
299
300
|
|
|
300
|
-
branch_option = "--branch #{branch}" if branch != 'HEAD'
|
|
301
|
-
|
|
302
301
|
checkout_dependencies = dependencies.map(&:shellescape).join(" ")
|
|
303
302
|
|
|
304
303
|
# If the current call is eligible for caching, we check out all the
|
|
@@ -309,12 +308,16 @@ module Fastlane
|
|
|
309
308
|
if Dir[clone_folder].empty?
|
|
310
309
|
UI.message("Cloning remote git repo...")
|
|
311
310
|
Helper.with_env_values('GIT_TERMINAL_PROMPT' => '0') do
|
|
311
|
+
command = ['git', 'clone', url, clone_folder, '--no-checkout']
|
|
312
312
|
# When using cached clones, we need the entire repository history
|
|
313
313
|
# so we can switch between tags or branches instantly, or else,
|
|
314
314
|
# it would defeat the caching's purpose.
|
|
315
|
-
|
|
316
|
-
|
|
317
|
-
|
|
315
|
+
command += ['--depth', '1'] unless is_eligible_for_caching
|
|
316
|
+
command += ['--branch', branch] unless branch == 'HEAD'
|
|
317
|
+
git_extra_headers.each do |header|
|
|
318
|
+
command += ['--config', "http.extraHeader=#{header}"]
|
|
319
|
+
end
|
|
320
|
+
Actions.sh(*command)
|
|
318
321
|
end
|
|
319
322
|
end
|
|
320
323
|
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
module Fastlane
|
|
2
|
-
VERSION = '2.
|
|
2
|
+
VERSION = '2.226.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
|
|
@@ -11602,9 +11602,13 @@ public func teamName() {
|
|
|
11602
11602
|
- autoUpdate: Allows an easy upgrade of all users to the current version. To enable set to 'on'
|
|
11603
11603
|
- notify: Send email to testers
|
|
11604
11604
|
- options: Array of options (shake,video_only_wifi,anonymous)
|
|
11605
|
-
- custom: Array of custom options. Contact support
|
|
11605
|
+
- custom: Array of custom options. Contact support for more information
|
|
11606
11606
|
- timeout: Request timeout in seconds
|
|
11607
11607
|
- tags: Custom tags that can be used to organize your builds
|
|
11608
|
+
- folderName: Name of the dashboard folder that contains this app
|
|
11609
|
+
- landingPageMode: Visibility of build landing after upload. Can be 'open' or 'closed'
|
|
11610
|
+
- uploadToSaucelabs: Upload file directly to Sauce Labs. It can be 'on' or 'off'
|
|
11611
|
+
- platform: Use if upload build is not iOS or Android. Contact support for more information
|
|
11608
11612
|
|
|
11609
11613
|
You can retrieve your API key on [your settings page](https://free.testfairy.com/settings/)
|
|
11610
11614
|
*/
|
|
@@ -11621,7 +11625,11 @@ public func testfairy(apiKey: String,
|
|
|
11621
11625
|
options: [String] = [],
|
|
11622
11626
|
custom: String = "",
|
|
11623
11627
|
timeout: OptionalConfigValue<Int?> = .fastlaneDefault(nil),
|
|
11624
|
-
tags: [String] = []
|
|
11628
|
+
tags: [String] = [],
|
|
11629
|
+
folderName: String = "",
|
|
11630
|
+
landingPageMode: String = "open",
|
|
11631
|
+
uploadToSaucelabs: String = "off",
|
|
11632
|
+
platform: String = "")
|
|
11625
11633
|
{
|
|
11626
11634
|
let apiKeyArg = RubyCommand.Argument(name: "api_key", value: apiKey, type: nil)
|
|
11627
11635
|
let ipaArg = ipa.asRubyArgument(name: "ipa", type: nil)
|
|
@@ -11637,6 +11645,10 @@ public func testfairy(apiKey: String,
|
|
|
11637
11645
|
let customArg = RubyCommand.Argument(name: "custom", value: custom, type: nil)
|
|
11638
11646
|
let timeoutArg = timeout.asRubyArgument(name: "timeout", type: nil)
|
|
11639
11647
|
let tagsArg = RubyCommand.Argument(name: "tags", value: tags, type: nil)
|
|
11648
|
+
let folderNameArg = RubyCommand.Argument(name: "folder_name", value: folderName, type: nil)
|
|
11649
|
+
let landingPageModeArg = RubyCommand.Argument(name: "landing_page_mode", value: landingPageMode, type: nil)
|
|
11650
|
+
let uploadToSaucelabsArg = RubyCommand.Argument(name: "upload_to_saucelabs", value: uploadToSaucelabs, type: nil)
|
|
11651
|
+
let platformArg = RubyCommand.Argument(name: "platform", value: platform, type: nil)
|
|
11640
11652
|
let array: [RubyCommand.Argument?] = [apiKeyArg,
|
|
11641
11653
|
ipaArg,
|
|
11642
11654
|
apkArg,
|
|
@@ -11650,7 +11662,11 @@ public func testfairy(apiKey: String,
|
|
|
11650
11662
|
optionsArg,
|
|
11651
11663
|
customArg,
|
|
11652
11664
|
timeoutArg,
|
|
11653
|
-
tagsArg
|
|
11665
|
+
tagsArg,
|
|
11666
|
+
folderNameArg,
|
|
11667
|
+
landingPageModeArg,
|
|
11668
|
+
uploadToSaucelabsArg,
|
|
11669
|
+
platformArg]
|
|
11654
11670
|
let args: [RubyCommand.Argument] = array
|
|
11655
11671
|
.filter { $0?.value != nil }
|
|
11656
11672
|
.compactMap { $0 }
|
|
@@ -13861,4 +13877,4 @@ public let snapshotfile: Snapshotfile = .init()
|
|
|
13861
13877
|
|
|
13862
13878
|
// Please don't remove the lines below
|
|
13863
13879
|
// They are used to detect outdated files
|
|
13864
|
-
// FastlaneRunnerAPIVersion [0.9.
|
|
13880
|
+
// FastlaneRunnerAPIVersion [0.9.185]
|
|
@@ -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.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
|
}
|
|
@@ -84,7 +84,7 @@ module Precheck
|
|
|
84
84
|
optional: true,
|
|
85
85
|
default_value: "ios",
|
|
86
86
|
verify_block: proc do |value|
|
|
87
|
-
UI.user_error!("The platform can only be ios, appletvos, or osx") unless %(
|
|
87
|
+
UI.user_error!("The platform can only be ios, appletvos, or osx") unless %w(ios appletvos osx).include?(value)
|
|
88
88
|
end),
|
|
89
89
|
FastlaneCore::ConfigItem.new(key: :default_rule_level,
|
|
90
90
|
short_option: "-r",
|
|
@@ -54,7 +54,7 @@ module Produce
|
|
|
54
54
|
optional: true,
|
|
55
55
|
default_value: "ios",
|
|
56
56
|
verify_block: proc do |value|
|
|
57
|
-
UI.user_error!("The platform can only be ios or osx") unless %(
|
|
57
|
+
UI.user_error!("The platform can only be ios or osx") unless %w(ios osx tvos).include?(value)
|
|
58
58
|
end),
|
|
59
59
|
FastlaneCore::ConfigItem.new(key: :platforms,
|
|
60
60
|
short_option: "-J",
|
|
@@ -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
|
|
@@ -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
|
|
@@ -106,14 +106,14 @@ module Supply
|
|
|
106
106
|
end
|
|
107
107
|
end
|
|
108
108
|
|
|
109
|
-
def fetch_track_and_release!(track, version_code,
|
|
109
|
+
def fetch_track_and_release!(track, version_code, statuses = nil)
|
|
110
110
|
tracks = client.tracks(track)
|
|
111
111
|
return nil, nil if tracks.empty?
|
|
112
112
|
|
|
113
113
|
track = tracks.first
|
|
114
114
|
releases = track.releases
|
|
115
115
|
|
|
116
|
-
releases = releases.select { |r| r.status
|
|
116
|
+
releases = releases.select { |r| statuses.include?(r.status) } unless statuses.nil? || statuses.empty?
|
|
117
117
|
releases = releases.select { |r| (r.version_codes || []).map(&:to_s).include?(version_code.to_s) } if version_code
|
|
118
118
|
|
|
119
119
|
if releases.size > 1
|
|
@@ -124,7 +124,7 @@ module Supply
|
|
|
124
124
|
end
|
|
125
125
|
|
|
126
126
|
def update_rollout
|
|
127
|
-
track, release = fetch_track_and_release!(Supply.config[:track], Supply.config[:version_code], Supply::ReleaseStatus::IN_PROGRESS)
|
|
127
|
+
track, release = fetch_track_and_release!(Supply.config[:track], Supply.config[:version_code], [Supply::ReleaseStatus::IN_PROGRESS, Supply::ReleaseStatus::DRAFT])
|
|
128
128
|
UI.user_error!("Unable to find the requested track - '#{Supply.config[:track]}'") unless track
|
|
129
129
|
UI.user_error!("Unable to find the requested release on track - '#{Supply.config[:track]}'") unless release
|
|
130
130
|
|
|
@@ -135,7 +135,11 @@ module Supply
|
|
|
135
135
|
if track && release
|
|
136
136
|
completed = Supply.config[:rollout].to_f == 1
|
|
137
137
|
release.user_fraction = completed ? nil : Supply.config[:rollout]
|
|
138
|
-
|
|
138
|
+
if Supply.config[:release_status]
|
|
139
|
+
release.status = Supply.config[:release_status]
|
|
140
|
+
else
|
|
141
|
+
release.status = completed ? Supply::ReleaseStatus::COMPLETED : Supply::ReleaseStatus::IN_PROGRESS
|
|
142
|
+
end
|
|
139
143
|
|
|
140
144
|
# Deleted other version codes if completed because only allowed on completed version in a release
|
|
141
145
|
track.releases.delete_if { |r| !(r.version_codes || []).map(&:to_s).include?(version_code) } if completed
|
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.226.0
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
|
-
-
|
|
7
|
+
- Roger Oba
|
|
8
|
+
- Luka Mirosevic
|
|
9
|
+
- Daniel Jankowski
|
|
10
|
+
- Max Ott
|
|
11
|
+
- Joshua Liebowitz
|
|
12
|
+
- Jorge Revuelta H
|
|
13
|
+
- Łukasz Grabowski
|
|
14
|
+
- Danielle Tomlinson
|
|
8
15
|
- Aaron Brager
|
|
16
|
+
- Jan Piotrowski
|
|
9
17
|
- Iulian Onofrei
|
|
18
|
+
- Kohki Miki
|
|
19
|
+
- Maksym Grebenets
|
|
20
|
+
- Stefan Natchev
|
|
10
21
|
- Andrew McBurney
|
|
11
|
-
-
|
|
12
|
-
-
|
|
22
|
+
- Jimmy Dee
|
|
23
|
+
- Matthew Ellis
|
|
24
|
+
- Satoshi Namai
|
|
13
25
|
- Felix Krause
|
|
14
|
-
- Jérôme Lacoste
|
|
15
26
|
- Helmut Januschka
|
|
16
|
-
- Max Ott
|
|
17
|
-
- Satoshi Namai
|
|
18
|
-
- Josh Holtz
|
|
19
|
-
- Kohki Miki
|
|
20
27
|
- Manish Rathi
|
|
21
|
-
- Jorge Revuelta H
|
|
22
28
|
- Fumiya Nakamura
|
|
23
|
-
-
|
|
24
|
-
-
|
|
29
|
+
- Josh Holtz
|
|
30
|
+
- Jérôme Lacoste
|
|
31
|
+
- Manu Wallner
|
|
25
32
|
- Olivier Halligon
|
|
26
|
-
- Stefan Natchev
|
|
27
|
-
- Jan Piotrowski
|
|
28
|
-
- Joshua Liebowitz
|
|
29
|
-
- Luka Mirosevic
|
|
30
|
-
- Matthew Ellis
|
|
31
|
-
- Danielle Tomlinson
|
|
32
|
-
- Roger Oba
|
|
33
33
|
autorequire:
|
|
34
34
|
bindir: bin
|
|
35
35
|
cert_chain: []
|
|
36
|
-
date: 2024-10
|
|
36
|
+
date: 2024-12-10 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
|
|
@@ -713,14 +727,14 @@ dependencies:
|
|
|
713
727
|
requirements:
|
|
714
728
|
- - "~>"
|
|
715
729
|
- !ruby/object:Gem::Version
|
|
716
|
-
version: 0.
|
|
730
|
+
version: 0.4.0
|
|
717
731
|
type: :runtime
|
|
718
732
|
prerelease: false
|
|
719
733
|
version_requirements: !ruby/object:Gem::Requirement
|
|
720
734
|
requirements:
|
|
721
735
|
- - "~>"
|
|
722
736
|
- !ruby/object:Gem::Version
|
|
723
|
-
version: 0.
|
|
737
|
+
version: 0.4.0
|
|
724
738
|
description: The easiest way to automate beta deployments and releases for your iOS
|
|
725
739
|
and Android apps
|
|
726
740
|
email:
|