fastlane 2.235.0 → 2.236.1
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 +102 -102
- data/fastlane/lib/fastlane/actions/update_app_age_rating.rb +210 -0
- data/fastlane/lib/fastlane/documentation/markdown_docs_generator.rb +1 -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 +58 -1
- 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 +8 -1
- data/snapshot/lib/snapshot/options.rb +5 -0
- data/snapshot/lib/snapshot/test_command_generator.rb +8 -6
- data/snapshot/lib/snapshot/test_command_generator_base.rb +4 -0
- data/spaceship/lib/spaceship/commands_generator.rb +9 -2
- data/spaceship/lib/spaceship/portal/portal_client.rb +1 -1
- metadata +38 -23
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 78572beb07948c1146ef8121ee4c3f8bcdb2ef13c8361e9e14fbf2e041372f8c
|
|
4
|
+
data.tar.gz: 286509c211c9afab401cc2d6dbf951c59af85385ecad675bca954ed0e5a298b0
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 770641af71fdf6943d8d38c2a52fef164e79ae180faa4c136c2a16c925b6ddceb3e819d616bafb570a9067b49a0d03e4d6ff37337f5ea77fb70255e378d9eadc
|
|
7
|
+
data.tar.gz: 4ca991f3156f0b07e179a052cbd522a9963167e46d4569feb13a8972a76ea4f6cde50f888683f4b825b8619f4dc02757c77cf9f7267b9c2af127fb43bc301b35
|
data/README.md
CHANGED
|
@@ -36,11 +36,11 @@ If the above doesn't help, please [submit an issue](https://github.com/fastlane/
|
|
|
36
36
|
<!-- This table is regenerated and resorted on each release -->
|
|
37
37
|
<table id='team'>
|
|
38
38
|
<tr>
|
|
39
|
-
<td id='
|
|
40
|
-
<a href='https://github.com/
|
|
41
|
-
<img src='https://github.com/
|
|
39
|
+
<td id='stefan-natchev'>
|
|
40
|
+
<a href='https://github.com/snatchev'>
|
|
41
|
+
<img src='https://github.com/snatchev.png' width='140px;'>
|
|
42
42
|
</a>
|
|
43
|
-
<h4 align='center'>
|
|
43
|
+
<h4 align='center'><a href='https://twitter.com/snatchev'>Stefan Natchev</a></h4>
|
|
44
44
|
</td>
|
|
45
45
|
<td id='jérôme-lacoste'>
|
|
46
46
|
<a href='https://github.com/lacostej'>
|
|
@@ -48,165 +48,165 @@ If the above doesn't help, please [submit an issue](https://github.com/fastlane/
|
|
|
48
48
|
</a>
|
|
49
49
|
<h4 align='center'><a href='https://twitter.com/lacostej'>Jérôme Lacoste</a></h4>
|
|
50
50
|
</td>
|
|
51
|
-
<td id='
|
|
52
|
-
<a href='https://github.com/
|
|
53
|
-
<img src='https://github.com/
|
|
54
|
-
</a>
|
|
55
|
-
<h4 align='center'><a href='https://twitter.com/snatchev'>Stefan Natchev</a></h4>
|
|
56
|
-
</td>
|
|
57
|
-
<td id='kohki-miki'>
|
|
58
|
-
<a href='https://github.com/giginet'>
|
|
59
|
-
<img src='https://github.com/giginet.png' width='140px;'>
|
|
51
|
+
<td id='manish-rathi'>
|
|
52
|
+
<a href='https://github.com/crazymanish'>
|
|
53
|
+
<img src='https://github.com/crazymanish.png' width='140px;'>
|
|
60
54
|
</a>
|
|
61
|
-
<h4 align='center'><a href='https://twitter.com/
|
|
55
|
+
<h4 align='center'><a href='https://twitter.com/iammanishrathi'>Manish Rathi</a></h4>
|
|
62
56
|
</td>
|
|
63
|
-
<td id='
|
|
64
|
-
<a href='https://github.com/
|
|
65
|
-
<img src='https://github.com/
|
|
57
|
+
<td id='helmut-januschka'>
|
|
58
|
+
<a href='https://github.com/hjanuschka'>
|
|
59
|
+
<img src='https://github.com/hjanuschka.png' width='140px;'>
|
|
66
60
|
</a>
|
|
67
|
-
<h4 align='center'><a href='https://twitter.com/
|
|
61
|
+
<h4 align='center'><a href='https://twitter.com/hjanuschka'>Helmut Januschka</a></h4>
|
|
68
62
|
</td>
|
|
69
|
-
</tr>
|
|
70
|
-
<tr>
|
|
71
63
|
<td id='manu-wallner'>
|
|
72
64
|
<a href='https://github.com/milch'>
|
|
73
65
|
<img src='https://github.com/milch.png' width='140px;'>
|
|
74
66
|
</a>
|
|
75
67
|
<h4 align='center'><a href='https://twitter.com/acrooow'>Manu Wallner</a></h4>
|
|
76
68
|
</td>
|
|
77
|
-
|
|
78
|
-
<
|
|
79
|
-
<
|
|
69
|
+
</tr>
|
|
70
|
+
<tr>
|
|
71
|
+
<td id='luka-mirosevic'>
|
|
72
|
+
<a href='https://github.com/lmirosevic'>
|
|
73
|
+
<img src='https://github.com/lmirosevic.png' width='140px;'>
|
|
80
74
|
</a>
|
|
81
|
-
<h4 align='center'><a href='https://twitter.com/
|
|
75
|
+
<h4 align='center'><a href='https://twitter.com/lmirosevic'>Luka Mirosevic</a></h4>
|
|
82
76
|
</td>
|
|
83
|
-
<td id='
|
|
84
|
-
<a href='https://github.com/
|
|
85
|
-
<img src='https://github.com/
|
|
77
|
+
<td id='jimmy-dee'>
|
|
78
|
+
<a href='https://github.com/jdee'>
|
|
79
|
+
<img src='https://github.com/jdee.png' width='140px;'>
|
|
86
80
|
</a>
|
|
87
|
-
<h4 align='center'
|
|
81
|
+
<h4 align='center'>Jimmy Dee</h4>
|
|
88
82
|
</td>
|
|
89
|
-
<td id='
|
|
90
|
-
<a href='https://github.com/
|
|
91
|
-
<img src='https://github.com/
|
|
83
|
+
<td id='danielle-tomlinson'>
|
|
84
|
+
<a href='https://github.com/endocrimes'>
|
|
85
|
+
<img src='https://github.com/endocrimes.png' width='140px;'>
|
|
92
86
|
</a>
|
|
93
|
-
<h4 align='center'><a href='https://twitter.com/
|
|
87
|
+
<h4 align='center'><a href='https://twitter.com/endocrimes'>Danielle Tomlinson</a></h4>
|
|
94
88
|
</td>
|
|
95
|
-
<td id='
|
|
96
|
-
<a href='https://github.com/
|
|
97
|
-
<img src='https://github.com/
|
|
89
|
+
<td id='jan-piotrowski'>
|
|
90
|
+
<a href='https://github.com/janpio'>
|
|
91
|
+
<img src='https://github.com/janpio.png' width='140px;'>
|
|
98
92
|
</a>
|
|
99
|
-
<h4 align='center'><a href='https://twitter.com/
|
|
93
|
+
<h4 align='center'><a href='https://twitter.com/Sujan'>Jan Piotrowski</a></h4>
|
|
94
|
+
</td>
|
|
95
|
+
<td id='aaron-brager'>
|
|
96
|
+
<a href='https://github.com/getaaron'>
|
|
97
|
+
<img src='https://github.com/getaaron.png' width='140px;'>
|
|
98
|
+
</a>
|
|
99
|
+
<h4 align='center'><a href='https://twitter.com/getaaron'>Aaron Brager</a></h4>
|
|
100
100
|
</td>
|
|
101
101
|
</tr>
|
|
102
102
|
<tr>
|
|
103
|
-
<td id='
|
|
104
|
-
<a href='https://github.com/
|
|
105
|
-
<img src='https://github.com/
|
|
103
|
+
<td id='satoshi-namai'>
|
|
104
|
+
<a href='https://github.com/ainame'>
|
|
105
|
+
<img src='https://github.com/ainame.png' width='140px;'>
|
|
106
106
|
</a>
|
|
107
|
-
<h4 align='center'><a href='https://twitter.com/
|
|
107
|
+
<h4 align='center'><a href='https://twitter.com/ainame'>Satoshi Namai</a></h4>
|
|
108
108
|
</td>
|
|
109
|
-
<td id='
|
|
110
|
-
<a href='https://github.com/
|
|
111
|
-
<img src='https://github.com/
|
|
109
|
+
<td id='matthew-ellis'>
|
|
110
|
+
<a href='https://github.com/matthewellis'>
|
|
111
|
+
<img src='https://github.com/matthewellis.png' width='140px;'>
|
|
112
112
|
</a>
|
|
113
|
-
<h4 align='center'><a href='https://twitter.com/
|
|
113
|
+
<h4 align='center'><a href='https://twitter.com/mellis1995'>Matthew Ellis</a></h4>
|
|
114
114
|
</td>
|
|
115
|
-
<td id='
|
|
116
|
-
<a href='https://github.com/
|
|
117
|
-
<img src='https://github.com/
|
|
115
|
+
<td id='felix-krause'>
|
|
116
|
+
<a href='https://github.com/KrauseFx'>
|
|
117
|
+
<img src='https://github.com/KrauseFx.png' width='140px;'>
|
|
118
118
|
</a>
|
|
119
|
-
<h4 align='center'><a href='https://twitter.com/
|
|
119
|
+
<h4 align='center'><a href='https://twitter.com/KrauseFx'>Felix Krause</a></h4>
|
|
120
120
|
</td>
|
|
121
|
-
<td id='
|
|
122
|
-
<a href='https://github.com/
|
|
123
|
-
<img src='https://github.com/
|
|
121
|
+
<td id='connor-tumbleson'>
|
|
122
|
+
<a href='https://github.com/ibotpeaches'>
|
|
123
|
+
<img src='https://github.com/ibotpeaches.png' width='140px;'>
|
|
124
124
|
</a>
|
|
125
|
-
<h4 align='center'><a href='https://twitter.com/
|
|
125
|
+
<h4 align='center'><a href='https://twitter.com/ibotpeaches'>Connor Tumbleson</a></h4>
|
|
126
126
|
</td>
|
|
127
|
-
<td id='
|
|
128
|
-
<a href='https://github.com/
|
|
129
|
-
<img src='https://github.com/
|
|
127
|
+
<td id='roger-oba'>
|
|
128
|
+
<a href='https://github.com/rogerluan'>
|
|
129
|
+
<img src='https://github.com/rogerluan.png' width='140px;'>
|
|
130
130
|
</a>
|
|
131
|
-
<h4 align='center'><a href='https://twitter.com/
|
|
131
|
+
<h4 align='center'><a href='https://twitter.com/rogerluan_'>Roger Oba</a></h4>
|
|
132
132
|
</td>
|
|
133
133
|
</tr>
|
|
134
134
|
<tr>
|
|
135
|
+
<td id='łukasz-grabowski'>
|
|
136
|
+
<a href='https://github.com/lucgrabowski'>
|
|
137
|
+
<img src='https://github.com/lucgrabowski.png' width='140px;'>
|
|
138
|
+
</a>
|
|
139
|
+
<h4 align='center'>Łukasz Grabowski</h4>
|
|
140
|
+
</td>
|
|
135
141
|
<td id='jorge-revuelta-h'>
|
|
136
142
|
<a href='https://github.com/minuscorp'>
|
|
137
143
|
<img src='https://github.com/minuscorp.png' width='140px;'>
|
|
138
144
|
</a>
|
|
139
145
|
<h4 align='center'><a href='https://twitter.com/minuscorp'>Jorge Revuelta H</a></h4>
|
|
140
146
|
</td>
|
|
141
|
-
<td id='
|
|
142
|
-
<a href='https://github.com/
|
|
143
|
-
<img src='https://github.com/
|
|
144
|
-
</a>
|
|
145
|
-
<h4 align='center'><a href='https://twitter.com/getaaron'>Aaron Brager</a></h4>
|
|
146
|
-
</td>
|
|
147
|
-
<td id='josh-holtz'>
|
|
148
|
-
<a href='https://github.com/joshdholtz'>
|
|
149
|
-
<img src='https://github.com/joshdholtz.png' width='140px;'>
|
|
147
|
+
<td id='kohki-miki'>
|
|
148
|
+
<a href='https://github.com/giginet'>
|
|
149
|
+
<img src='https://github.com/giginet.png' width='140px;'>
|
|
150
150
|
</a>
|
|
151
|
-
<h4 align='center'><a href='https://twitter.com/
|
|
151
|
+
<h4 align='center'><a href='https://twitter.com/giginet'>Kohki Miki</a></h4>
|
|
152
152
|
</td>
|
|
153
|
-
<td id='
|
|
154
|
-
<a href='https://github.com/
|
|
155
|
-
<img src='https://github.com/
|
|
153
|
+
<td id='iulian-onofrei'>
|
|
154
|
+
<a href='https://github.com/revolter'>
|
|
155
|
+
<img src='https://github.com/revolter.png' width='140px;'>
|
|
156
156
|
</a>
|
|
157
|
-
<h4 align='center'><a href='https://twitter.com/
|
|
157
|
+
<h4 align='center'><a href='https://twitter.com/Revolt666'>Iulian Onofrei</a></h4>
|
|
158
158
|
</td>
|
|
159
|
-
<td id='
|
|
160
|
-
<a href='https://github.com/
|
|
161
|
-
<img src='https://github.com/
|
|
159
|
+
<td id='fumiya-nakamura'>
|
|
160
|
+
<a href='https://github.com/nafu'>
|
|
161
|
+
<img src='https://github.com/nafu.png' width='140px;'>
|
|
162
162
|
</a>
|
|
163
|
-
<h4 align='center'><a href='https://twitter.com/
|
|
163
|
+
<h4 align='center'><a href='https://twitter.com/nafu003'>Fumiya Nakamura</a></h4>
|
|
164
164
|
</td>
|
|
165
165
|
</tr>
|
|
166
166
|
<tr>
|
|
167
|
-
<td id='
|
|
168
|
-
<a href='https://github.com/
|
|
169
|
-
<img src='https://github.com/
|
|
167
|
+
<td id='andrew-mcburney'>
|
|
168
|
+
<a href='https://github.com/armcburney'>
|
|
169
|
+
<img src='https://github.com/armcburney.png' width='140px;'>
|
|
170
170
|
</a>
|
|
171
|
-
<h4 align='center'><a href='https://twitter.com/
|
|
171
|
+
<h4 align='center'><a href='https://twitter.com/armcburney'>Andrew McBurney</a></h4>
|
|
172
172
|
</td>
|
|
173
|
-
<td id='
|
|
174
|
-
<a href='https://github.com/
|
|
175
|
-
<img src='https://github.com/
|
|
173
|
+
<td id='maksym-grebenets'>
|
|
174
|
+
<a href='https://github.com/mgrebenets'>
|
|
175
|
+
<img src='https://github.com/mgrebenets.png' width='140px;'>
|
|
176
176
|
</a>
|
|
177
|
-
<h4 align='center'><a href='https://twitter.com/
|
|
177
|
+
<h4 align='center'><a href='https://twitter.com/mgrebenets'>Maksym Grebenets</a></h4>
|
|
178
178
|
</td>
|
|
179
|
-
<td id='
|
|
180
|
-
<a href='https://github.com/
|
|
181
|
-
<img src='https://github.com/
|
|
179
|
+
<td id='max-ott'>
|
|
180
|
+
<a href='https://github.com/max-ott'>
|
|
181
|
+
<img src='https://github.com/max-ott.png' width='140px;'>
|
|
182
182
|
</a>
|
|
183
|
-
<h4 align='center'><a href='https://twitter.com/
|
|
183
|
+
<h4 align='center'><a href='https://twitter.com/ott_max'>Max Ott</a></h4>
|
|
184
184
|
</td>
|
|
185
|
-
<td id='
|
|
186
|
-
<a href='https://github.com/
|
|
187
|
-
<img src='https://github.com/
|
|
185
|
+
<td id='josh-holtz'>
|
|
186
|
+
<a href='https://github.com/joshdholtz'>
|
|
187
|
+
<img src='https://github.com/joshdholtz.png' width='140px;'>
|
|
188
188
|
</a>
|
|
189
|
-
<h4 align='center'><a href='https://twitter.com/
|
|
189
|
+
<h4 align='center'><a href='https://twitter.com/joshdholtz'>Josh Holtz</a></h4>
|
|
190
190
|
</td>
|
|
191
|
-
<td id='
|
|
192
|
-
<a href='https://github.com/
|
|
193
|
-
<img src='https://github.com/
|
|
191
|
+
<td id='olivier-halligon'>
|
|
192
|
+
<a href='https://github.com/AliSoftware'>
|
|
193
|
+
<img src='https://github.com/AliSoftware.png' width='140px;'>
|
|
194
194
|
</a>
|
|
195
|
-
<h4 align='center'><a href='https://twitter.com/
|
|
195
|
+
<h4 align='center'><a href='https://twitter.com/aligatr'>Olivier Halligon</a></h4>
|
|
196
196
|
</td>
|
|
197
197
|
</tr>
|
|
198
198
|
<tr>
|
|
199
|
-
<td id='
|
|
200
|
-
<a href='https://github.com/
|
|
201
|
-
<img src='https://github.com/
|
|
199
|
+
<td id='joshua-liebowitz'>
|
|
200
|
+
<a href='https://github.com/taquitos'>
|
|
201
|
+
<img src='https://github.com/taquitos.png' width='140px;'>
|
|
202
202
|
</a>
|
|
203
|
-
<h4 align='center'><a href='https://twitter.com/
|
|
203
|
+
<h4 align='center'><a href='https://twitter.com/taquitos'>Joshua Liebowitz</a></h4>
|
|
204
204
|
</td>
|
|
205
|
-
<td id='
|
|
206
|
-
<a href='https://github.com/
|
|
207
|
-
<img src='https://github.com/
|
|
205
|
+
<td id='daniel-jankowski'>
|
|
206
|
+
<a href='https://github.com/mollyIV'>
|
|
207
|
+
<img src='https://github.com/mollyIV.png' width='140px;'>
|
|
208
208
|
</a>
|
|
209
|
-
<h4 align='center'
|
|
209
|
+
<h4 align='center'><a href='https://twitter.com/mollyIV'>Daniel Jankowski</a></h4>
|
|
210
210
|
</td>
|
|
211
211
|
</table>
|
|
212
212
|
|
|
@@ -0,0 +1,210 @@
|
|
|
1
|
+
module Fastlane
|
|
2
|
+
module Actions
|
|
3
|
+
class UpdateAppAgeRatingAction < Action
|
|
4
|
+
def self.description
|
|
5
|
+
"Update your app's age rating on App Store Connect"
|
|
6
|
+
end
|
|
7
|
+
|
|
8
|
+
def self.details
|
|
9
|
+
"Updates only the age rating of your app on App Store Connect without touching " \
|
|
10
|
+
"any other metadata, screenshots, or binaries. Useful for CI pipelines that need " \
|
|
11
|
+
"to update age ratings independently of an app release. Supports both API key " \
|
|
12
|
+
"and Apple ID authentication."
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
def self.available_options
|
|
16
|
+
[
|
|
17
|
+
FastlaneCore::ConfigItem.new(
|
|
18
|
+
key: :api_key_path,
|
|
19
|
+
env_names: ["DELIVER_API_KEY_PATH", "APP_STORE_CONNECT_API_KEY_PATH"],
|
|
20
|
+
description: "Path to your App Store Connect API Key JSON file (https://docs.fastlane.tools/app-store-connect-api/)",
|
|
21
|
+
optional: true,
|
|
22
|
+
conflicting_options: %i[api_key],
|
|
23
|
+
verify_block: proc do |value|
|
|
24
|
+
UI.user_error!("Couldn't find API key JSON file at path '#{value}'") unless File.exist?(value)
|
|
25
|
+
end
|
|
26
|
+
),
|
|
27
|
+
FastlaneCore::ConfigItem.new(
|
|
28
|
+
key: :api_key,
|
|
29
|
+
env_names: ["DELIVER_API_KEY", "APP_STORE_CONNECT_API_KEY"],
|
|
30
|
+
description: "Your App Store Connect API Key information (https://docs.fastlane.tools/app-store-connect-api/)",
|
|
31
|
+
optional: true,
|
|
32
|
+
conflicting_options: %i[api_key_path],
|
|
33
|
+
sensitive: true,
|
|
34
|
+
type: Hash
|
|
35
|
+
),
|
|
36
|
+
FastlaneCore::ConfigItem.new(
|
|
37
|
+
key: :app_identifier,
|
|
38
|
+
env_name: "DELIVER_APP_IDENTIFIER",
|
|
39
|
+
description: "The bundle identifier of your app",
|
|
40
|
+
optional: false,
|
|
41
|
+
type: String,
|
|
42
|
+
code_gen_sensitive: true
|
|
43
|
+
),
|
|
44
|
+
FastlaneCore::ConfigItem.new(
|
|
45
|
+
key: :username,
|
|
46
|
+
env_name: "DELIVER_USER",
|
|
47
|
+
description: "Your Apple ID username",
|
|
48
|
+
optional: true,
|
|
49
|
+
type: String
|
|
50
|
+
),
|
|
51
|
+
FastlaneCore::ConfigItem.new(
|
|
52
|
+
key: :age_rating_config_path,
|
|
53
|
+
env_name: "DELIVER_AGE_RATING_CONFIG_PATH",
|
|
54
|
+
description: "Path to the JSON file containing the age rating configuration",
|
|
55
|
+
optional: false,
|
|
56
|
+
type: String,
|
|
57
|
+
verify_block: proc do |value|
|
|
58
|
+
UI.user_error!("Age rating configuration file not found at: '#{value}'") unless File.exist?(value)
|
|
59
|
+
end
|
|
60
|
+
),
|
|
61
|
+
FastlaneCore::ConfigItem.new(
|
|
62
|
+
key: :team_id,
|
|
63
|
+
env_name: "FASTLANE_TEAM_ID",
|
|
64
|
+
description: "The ID of your App Store Connect team if you're in multiple teams",
|
|
65
|
+
optional: true,
|
|
66
|
+
type: String,
|
|
67
|
+
code_gen_sensitive: true
|
|
68
|
+
),
|
|
69
|
+
FastlaneCore::ConfigItem.new(
|
|
70
|
+
key: :team_name,
|
|
71
|
+
env_name: "FASTLANE_TEAM_NAME",
|
|
72
|
+
description: "The name of your App Store Connect team if you're in multiple teams",
|
|
73
|
+
optional: true,
|
|
74
|
+
type: String
|
|
75
|
+
)
|
|
76
|
+
]
|
|
77
|
+
end
|
|
78
|
+
|
|
79
|
+
def self.run(params)
|
|
80
|
+
require 'spaceship'
|
|
81
|
+
require 'json'
|
|
82
|
+
|
|
83
|
+
# Honour an API key that was set by app_store_connect_api_key earlier in the lane
|
|
84
|
+
params[:api_key] ||= Actions.lane_context[SharedValues::APP_STORE_CONNECT_API_KEY]
|
|
85
|
+
|
|
86
|
+
# Authenticate: API key takes priority, falls back to Apple ID session
|
|
87
|
+
token = Spaceship::ConnectAPI::Token.from(
|
|
88
|
+
hash: params[:api_key],
|
|
89
|
+
filepath: params[:api_key_path]
|
|
90
|
+
)
|
|
91
|
+
|
|
92
|
+
if token
|
|
93
|
+
UI.message("Creating authorization token for App Store Connect API")
|
|
94
|
+
Spaceship::ConnectAPI.token = token
|
|
95
|
+
else
|
|
96
|
+
UI.message("Login to App Store Connect (#{params[:username]})")
|
|
97
|
+
Spaceship::ConnectAPI.login(
|
|
98
|
+
params[:username],
|
|
99
|
+
nil,
|
|
100
|
+
use_portal: false,
|
|
101
|
+
use_tunes: true,
|
|
102
|
+
team_id: params[:team_id],
|
|
103
|
+
team_name: params[:team_name]
|
|
104
|
+
)
|
|
105
|
+
end
|
|
106
|
+
|
|
107
|
+
# Find the app by bundle identifier
|
|
108
|
+
app = Spaceship::ConnectAPI::App.find(params[:app_identifier])
|
|
109
|
+
UI.user_error!("Could not find app with identifier '#{params[:app_identifier]}'") unless app
|
|
110
|
+
|
|
111
|
+
# Fetch the editable app info
|
|
112
|
+
app_info = app.fetch_edit_app_info
|
|
113
|
+
unless app_info
|
|
114
|
+
UI.user_error!(
|
|
115
|
+
"Could not fetch editable app info for '#{params[:app_identifier]}'. " \
|
|
116
|
+
"Ensure the app is in an editable state in App Store Connect."
|
|
117
|
+
)
|
|
118
|
+
end
|
|
119
|
+
|
|
120
|
+
# Parse age rating config and map ITC keys to ASC keys
|
|
121
|
+
config_json = parse_config(params[:age_rating_config_path])
|
|
122
|
+
attributes = build_attributes(config_json)
|
|
123
|
+
|
|
124
|
+
# Fetch and update the age rating declaration
|
|
125
|
+
age_rating = app_info.fetch_age_rating_declaration
|
|
126
|
+
UI.user_error!("Could not fetch age rating declaration for '#{params[:app_identifier]}'") unless age_rating
|
|
127
|
+
|
|
128
|
+
UI.message("Updating age rating for '#{params[:app_identifier]}'...")
|
|
129
|
+
age_rating.update(attributes: attributes)
|
|
130
|
+
UI.success("Successfully updated age rating for '#{params[:app_identifier]}'")
|
|
131
|
+
|
|
132
|
+
true
|
|
133
|
+
end
|
|
134
|
+
|
|
135
|
+
#####################################################
|
|
136
|
+
# @!group Documentation
|
|
137
|
+
#####################################################
|
|
138
|
+
|
|
139
|
+
def self.example_code
|
|
140
|
+
[
|
|
141
|
+
'# Using App Store Connect API key (recommended for CI)
|
|
142
|
+
update_app_age_rating(
|
|
143
|
+
api_key_path: "fastlane/api_key.json",
|
|
144
|
+
app_identifier: "com.example.app",
|
|
145
|
+
age_rating_config_path: "fastlane/metadata/age_rating.json"
|
|
146
|
+
)',
|
|
147
|
+
'# Using Apple ID
|
|
148
|
+
update_app_age_rating(
|
|
149
|
+
username: "user@example.com",
|
|
150
|
+
app_identifier: "com.example.app",
|
|
151
|
+
age_rating_config_path: "fastlane/metadata/age_rating.json",
|
|
152
|
+
team_id: "ABC123456"
|
|
153
|
+
)',
|
|
154
|
+
'# Using the api_key hash returned by app_store_connect_api_key action
|
|
155
|
+
api_key = app_store_connect_api_key(
|
|
156
|
+
key_id: "D383SF739",
|
|
157
|
+
issuer_id: "6053b7fe-68a8-4acb-89be-165aa6465141",
|
|
158
|
+
key_filepath: "./AuthKey_D383SF739.p8"
|
|
159
|
+
)
|
|
160
|
+
update_app_age_rating(
|
|
161
|
+
api_key: api_key,
|
|
162
|
+
app_identifier: "com.example.app",
|
|
163
|
+
age_rating_config_path: "fastlane/metadata/age_rating.json"
|
|
164
|
+
)'
|
|
165
|
+
]
|
|
166
|
+
end
|
|
167
|
+
|
|
168
|
+
def self.category
|
|
169
|
+
:app_store_connect
|
|
170
|
+
end
|
|
171
|
+
|
|
172
|
+
def self.authors
|
|
173
|
+
["PratikPatil131"]
|
|
174
|
+
end
|
|
175
|
+
|
|
176
|
+
def self.return_value
|
|
177
|
+
"Returns true if the age rating was successfully updated"
|
|
178
|
+
end
|
|
179
|
+
|
|
180
|
+
def self.is_supported?(platform) # rubocop:disable Naming/PredicateName
|
|
181
|
+
# fastlane's Action interface mandates the method name `is_supported?`
|
|
182
|
+
%i[ios mac tvos].include?(platform)
|
|
183
|
+
end
|
|
184
|
+
|
|
185
|
+
#####################################################
|
|
186
|
+
# @!group Private helpers
|
|
187
|
+
#####################################################
|
|
188
|
+
|
|
189
|
+
def self.parse_config(config_path)
|
|
190
|
+
JSON.parse(File.read(config_path))
|
|
191
|
+
rescue JSON::ParserError => ex
|
|
192
|
+
UI.user_error!("Invalid JSON in age rating configuration file '#{config_path}': #{ex.message}")
|
|
193
|
+
rescue StandardError => ex
|
|
194
|
+
UI.user_error!("Could not read age rating configuration file '#{config_path}': #{ex.message}")
|
|
195
|
+
end
|
|
196
|
+
private_class_method :parse_config
|
|
197
|
+
|
|
198
|
+
def self.build_attributes(config_json)
|
|
199
|
+
attributes = config_json.each_with_object({}) do |(key, value), attrs|
|
|
200
|
+
new_key = Spaceship::ConnectAPI::AgeRatingDeclaration.map_key_from_itc(key)
|
|
201
|
+
new_value = Spaceship::ConnectAPI::AgeRatingDeclaration.map_value_from_itc(new_key, value)
|
|
202
|
+
attrs[new_key] = new_value
|
|
203
|
+
end
|
|
204
|
+
attributes, = Spaceship::ConnectAPI::AgeRatingDeclaration.map_deprecation_if_possible(attributes)
|
|
205
|
+
attributes
|
|
206
|
+
end
|
|
207
|
+
private_class_method :build_attributes
|
|
208
|
+
end
|
|
209
|
+
end
|
|
210
|
+
end
|
|
@@ -188,7 +188,7 @@ module Fastlane
|
|
|
188
188
|
File.write(mkdocs_yml_path, mkdocs_yml.to_yaml)
|
|
189
189
|
|
|
190
190
|
# Copy over the assets from the `actions/docs/assets` directory
|
|
191
|
-
Dir[File.join(custom_action_docs_path, "assets", "*")].each do |current_asset_path|
|
|
191
|
+
Dir[File.join(Fastlane::ROOT, custom_action_docs_path, "assets", "*")].each do |current_asset_path|
|
|
192
192
|
UI.message("Copying asset #{current_asset_path}")
|
|
193
193
|
FileUtils.cp(current_asset_path, File.join(docs_dir, "img", "actions", File.basename(current_asset_path)))
|
|
194
194
|
end
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
module Fastlane
|
|
2
|
-
VERSION = '2.
|
|
2
|
+
VERSION = '2.236.1'.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
|
|
@@ -2260,6 +2260,7 @@ public func captureAndroidScreenshots(androidHome: OptionalConfigValue<String?>
|
|
|
2260
2260
|
- testplan: The testplan associated with the scheme that should be used for testing
|
|
2261
2261
|
- onlyTesting: Array of strings matching Test Bundle/Test Suite/Test Cases to run
|
|
2262
2262
|
- skipTesting: Array of strings matching Test Bundle/Test Suite/Test Cases to skip
|
|
2263
|
+
- runRosettaSimulator: Run simulator in a Rosetta mode
|
|
2263
2264
|
- xcodebuildFormatter: xcodebuild formatter to use (ex: 'xcbeautify', 'xcbeautify --quieter', 'xcpretty', 'xcpretty -test'). Use empty string (ex: '') to disable any formatter (More information: https://docs.fastlane.tools/best-practices/xcodebuild-formatters/)
|
|
2264
2265
|
- xcprettyArgs: **DEPRECATED!** Use `xcodebuild_formatter: ''` instead - Additional xcpretty arguments
|
|
2265
2266
|
- disableXcpretty: Disable xcpretty formatting of build
|
|
@@ -2313,6 +2314,7 @@ public func captureIosScreenshots(workspace: OptionalConfigValue<String?> = .fas
|
|
|
2313
2314
|
testplan: OptionalConfigValue<String?> = .fastlaneDefault(nil),
|
|
2314
2315
|
onlyTesting: Any? = nil,
|
|
2315
2316
|
skipTesting: Any? = nil,
|
|
2317
|
+
runRosettaSimulator: OptionalConfigValue<Bool> = .fastlaneDefault(false),
|
|
2316
2318
|
xcodebuildFormatter: String = "xcbeautify",
|
|
2317
2319
|
xcprettyArgs: OptionalConfigValue<String?> = .fastlaneDefault(nil),
|
|
2318
2320
|
disableXcpretty: OptionalConfigValue<Bool?> = .fastlaneDefault(nil),
|
|
@@ -2366,6 +2368,7 @@ public func captureIosScreenshots(workspace: OptionalConfigValue<String?> = .fas
|
|
|
2366
2368
|
let testplanArg = testplan.asRubyArgument(name: "testplan", type: nil)
|
|
2367
2369
|
let onlyTestingArg = RubyCommand.Argument(name: "only_testing", value: onlyTesting, type: nil)
|
|
2368
2370
|
let skipTestingArg = RubyCommand.Argument(name: "skip_testing", value: skipTesting, type: nil)
|
|
2371
|
+
let runRosettaSimulatorArg = runRosettaSimulator.asRubyArgument(name: "run_rosetta_simulator", type: nil)
|
|
2369
2372
|
let xcodebuildFormatterArg = RubyCommand.Argument(name: "xcodebuild_formatter", value: xcodebuildFormatter, type: nil)
|
|
2370
2373
|
let xcprettyArgsArg = xcprettyArgs.asRubyArgument(name: "xcpretty_args", type: nil)
|
|
2371
2374
|
let disableXcprettyArg = disableXcpretty.asRubyArgument(name: "disable_xcpretty", type: nil)
|
|
@@ -2418,6 +2421,7 @@ public func captureIosScreenshots(workspace: OptionalConfigValue<String?> = .fas
|
|
|
2418
2421
|
testplanArg,
|
|
2419
2422
|
onlyTestingArg,
|
|
2420
2423
|
skipTestingArg,
|
|
2424
|
+
runRosettaSimulatorArg,
|
|
2421
2425
|
xcodebuildFormatterArg,
|
|
2422
2426
|
xcprettyArgsArg,
|
|
2423
2427
|
disableXcprettyArg,
|
|
@@ -2481,6 +2485,7 @@ public func captureIosScreenshots(workspace: OptionalConfigValue<String?> = .fas
|
|
|
2481
2485
|
- testplan: The testplan associated with the scheme that should be used for testing
|
|
2482
2486
|
- onlyTesting: Array of strings matching Test Bundle/Test Suite/Test Cases to run
|
|
2483
2487
|
- skipTesting: Array of strings matching Test Bundle/Test Suite/Test Cases to skip
|
|
2488
|
+
- runRosettaSimulator: Run simulator in a Rosetta mode
|
|
2484
2489
|
- xcodebuildFormatter: xcodebuild formatter to use (ex: 'xcbeautify', 'xcbeautify --quieter', 'xcpretty', 'xcpretty -test'). Use empty string (ex: '') to disable any formatter (More information: https://docs.fastlane.tools/best-practices/xcodebuild-formatters/)
|
|
2485
2490
|
- xcprettyArgs: **DEPRECATED!** Use `xcodebuild_formatter: ''` instead - Additional xcpretty arguments
|
|
2486
2491
|
- disableXcpretty: Disable xcpretty formatting of build
|
|
@@ -2534,6 +2539,7 @@ public func captureScreenshots(workspace: OptionalConfigValue<String?> = .fastla
|
|
|
2534
2539
|
testplan: OptionalConfigValue<String?> = .fastlaneDefault(nil),
|
|
2535
2540
|
onlyTesting: Any? = nil,
|
|
2536
2541
|
skipTesting: Any? = nil,
|
|
2542
|
+
runRosettaSimulator: OptionalConfigValue<Bool> = .fastlaneDefault(false),
|
|
2537
2543
|
xcodebuildFormatter: String = "xcbeautify",
|
|
2538
2544
|
xcprettyArgs: OptionalConfigValue<String?> = .fastlaneDefault(nil),
|
|
2539
2545
|
disableXcpretty: OptionalConfigValue<Bool?> = .fastlaneDefault(nil),
|
|
@@ -2587,6 +2593,7 @@ public func captureScreenshots(workspace: OptionalConfigValue<String?> = .fastla
|
|
|
2587
2593
|
let testplanArg = testplan.asRubyArgument(name: "testplan", type: nil)
|
|
2588
2594
|
let onlyTestingArg = RubyCommand.Argument(name: "only_testing", value: onlyTesting, type: nil)
|
|
2589
2595
|
let skipTestingArg = RubyCommand.Argument(name: "skip_testing", value: skipTesting, type: nil)
|
|
2596
|
+
let runRosettaSimulatorArg = runRosettaSimulator.asRubyArgument(name: "run_rosetta_simulator", type: nil)
|
|
2590
2597
|
let xcodebuildFormatterArg = RubyCommand.Argument(name: "xcodebuild_formatter", value: xcodebuildFormatter, type: nil)
|
|
2591
2598
|
let xcprettyArgsArg = xcprettyArgs.asRubyArgument(name: "xcpretty_args", type: nil)
|
|
2592
2599
|
let disableXcprettyArg = disableXcpretty.asRubyArgument(name: "disable_xcpretty", type: nil)
|
|
@@ -2639,6 +2646,7 @@ public func captureScreenshots(workspace: OptionalConfigValue<String?> = .fastla
|
|
|
2639
2646
|
testplanArg,
|
|
2640
2647
|
onlyTestingArg,
|
|
2641
2648
|
skipTestingArg,
|
|
2649
|
+
runRosettaSimulatorArg,
|
|
2642
2650
|
xcodebuildFormatterArg,
|
|
2643
2651
|
xcprettyArgsArg,
|
|
2644
2652
|
disableXcprettyArg,
|
|
@@ -10637,6 +10645,7 @@ public func slather(buildDirectory: OptionalConfigValue<String?> = .fastlaneDefa
|
|
|
10637
10645
|
- testplan: The testplan associated with the scheme that should be used for testing
|
|
10638
10646
|
- onlyTesting: Array of strings matching Test Bundle/Test Suite/Test Cases to run
|
|
10639
10647
|
- skipTesting: Array of strings matching Test Bundle/Test Suite/Test Cases to skip
|
|
10648
|
+
- runRosettaSimulator: Run simulator in a Rosetta mode
|
|
10640
10649
|
- xcodebuildFormatter: xcodebuild formatter to use (ex: 'xcbeautify', 'xcbeautify --quieter', 'xcpretty', 'xcpretty -test'). Use empty string (ex: '') to disable any formatter (More information: https://docs.fastlane.tools/best-practices/xcodebuild-formatters/)
|
|
10641
10650
|
- xcprettyArgs: **DEPRECATED!** Use `xcodebuild_formatter: ''` instead - Additional xcpretty arguments
|
|
10642
10651
|
- disableXcpretty: Disable xcpretty formatting of build
|
|
@@ -10690,6 +10699,7 @@ public func snapshot(workspace: OptionalConfigValue<String?> = .fastlaneDefault(
|
|
|
10690
10699
|
testplan: OptionalConfigValue<String?> = .fastlaneDefault(snapshotfile.testplan),
|
|
10691
10700
|
onlyTesting: Any? = snapshotfile.onlyTesting,
|
|
10692
10701
|
skipTesting: Any? = snapshotfile.skipTesting,
|
|
10702
|
+
runRosettaSimulator: OptionalConfigValue<Bool> = .fastlaneDefault(snapshotfile.runRosettaSimulator),
|
|
10693
10703
|
xcodebuildFormatter: String = snapshotfile.xcodebuildFormatter,
|
|
10694
10704
|
xcprettyArgs: OptionalConfigValue<String?> = .fastlaneDefault(snapshotfile.xcprettyArgs),
|
|
10695
10705
|
disableXcpretty: OptionalConfigValue<Bool?> = .fastlaneDefault(snapshotfile.disableXcpretty),
|
|
@@ -10743,6 +10753,7 @@ public func snapshot(workspace: OptionalConfigValue<String?> = .fastlaneDefault(
|
|
|
10743
10753
|
let testplanArg = testplan.asRubyArgument(name: "testplan", type: nil)
|
|
10744
10754
|
let onlyTestingArg = RubyCommand.Argument(name: "only_testing", value: onlyTesting, type: nil)
|
|
10745
10755
|
let skipTestingArg = RubyCommand.Argument(name: "skip_testing", value: skipTesting, type: nil)
|
|
10756
|
+
let runRosettaSimulatorArg = runRosettaSimulator.asRubyArgument(name: "run_rosetta_simulator", type: nil)
|
|
10746
10757
|
let xcodebuildFormatterArg = RubyCommand.Argument(name: "xcodebuild_formatter", value: xcodebuildFormatter, type: nil)
|
|
10747
10758
|
let xcprettyArgsArg = xcprettyArgs.asRubyArgument(name: "xcpretty_args", type: nil)
|
|
10748
10759
|
let disableXcprettyArg = disableXcpretty.asRubyArgument(name: "disable_xcpretty", type: nil)
|
|
@@ -10795,6 +10806,7 @@ public func snapshot(workspace: OptionalConfigValue<String?> = .fastlaneDefault(
|
|
|
10795
10806
|
testplanArg,
|
|
10796
10807
|
onlyTestingArg,
|
|
10797
10808
|
skipTestingArg,
|
|
10809
|
+
runRosettaSimulatorArg,
|
|
10798
10810
|
xcodebuildFormatterArg,
|
|
10799
10811
|
xcprettyArgsArg,
|
|
10800
10812
|
disableXcprettyArg,
|
|
@@ -12125,6 +12137,51 @@ public func unlockKeychain(path: String = "login",
|
|
|
12125
12137
|
_ = runner.executeCommand(command)
|
|
12126
12138
|
}
|
|
12127
12139
|
|
|
12140
|
+
/**
|
|
12141
|
+
Update your app's age rating on App Store Connect
|
|
12142
|
+
|
|
12143
|
+
- parameters:
|
|
12144
|
+
- apiKeyPath: Path to your App Store Connect API Key JSON file (https://docs.fastlane.tools/app-store-connect-api/)
|
|
12145
|
+
- apiKey: Your App Store Connect API Key information (https://docs.fastlane.tools/app-store-connect-api/)
|
|
12146
|
+
- appIdentifier: The bundle identifier of your app
|
|
12147
|
+
- username: Your Apple ID username
|
|
12148
|
+
- ageRatingConfigPath: Path to the JSON file containing the age rating configuration
|
|
12149
|
+
- teamId: The ID of your App Store Connect team if you're in multiple teams
|
|
12150
|
+
- teamName: The name of your App Store Connect team if you're in multiple teams
|
|
12151
|
+
|
|
12152
|
+
- returns: Returns true if the age rating was successfully updated
|
|
12153
|
+
|
|
12154
|
+
Updates only the age rating of your app on App Store Connect without touching any other metadata, screenshots, or binaries. Useful for CI pipelines that need to update age ratings independently of an app release. Supports both API key and Apple ID authentication.
|
|
12155
|
+
*/
|
|
12156
|
+
public func updateAppAgeRating(apiKeyPath: OptionalConfigValue<String?> = .fastlaneDefault(nil),
|
|
12157
|
+
apiKey: OptionalConfigValue<[String: Any]?> = .fastlaneDefault(nil),
|
|
12158
|
+
appIdentifier: String,
|
|
12159
|
+
username: OptionalConfigValue<String?> = .fastlaneDefault(nil),
|
|
12160
|
+
ageRatingConfigPath: String,
|
|
12161
|
+
teamId: OptionalConfigValue<String?> = .fastlaneDefault(nil),
|
|
12162
|
+
teamName: OptionalConfigValue<String?> = .fastlaneDefault(nil))
|
|
12163
|
+
{
|
|
12164
|
+
let apiKeyPathArg = apiKeyPath.asRubyArgument(name: "api_key_path", type: nil)
|
|
12165
|
+
let apiKeyArg = apiKey.asRubyArgument(name: "api_key", type: nil)
|
|
12166
|
+
let appIdentifierArg = RubyCommand.Argument(name: "app_identifier", value: appIdentifier, type: nil)
|
|
12167
|
+
let usernameArg = username.asRubyArgument(name: "username", type: nil)
|
|
12168
|
+
let ageRatingConfigPathArg = RubyCommand.Argument(name: "age_rating_config_path", value: ageRatingConfigPath, type: nil)
|
|
12169
|
+
let teamIdArg = teamId.asRubyArgument(name: "team_id", type: nil)
|
|
12170
|
+
let teamNameArg = teamName.asRubyArgument(name: "team_name", type: nil)
|
|
12171
|
+
let array: [RubyCommand.Argument?] = [apiKeyPathArg,
|
|
12172
|
+
apiKeyArg,
|
|
12173
|
+
appIdentifierArg,
|
|
12174
|
+
usernameArg,
|
|
12175
|
+
ageRatingConfigPathArg,
|
|
12176
|
+
teamIdArg,
|
|
12177
|
+
teamNameArg]
|
|
12178
|
+
let args: [RubyCommand.Argument] = array
|
|
12179
|
+
.filter { $0?.value != nil }
|
|
12180
|
+
.compactMap { $0 }
|
|
12181
|
+
let command = RubyCommand(commandID: "", methodName: "update_app_age_rating", className: nil, args: args)
|
|
12182
|
+
_ = runner.executeCommand(command)
|
|
12183
|
+
}
|
|
12184
|
+
|
|
12128
12185
|
/**
|
|
12129
12186
|
This action changes the app group identifiers in the entitlements file
|
|
12130
12187
|
|
|
@@ -14056,4 +14113,4 @@ public let snapshotfile: Snapshotfile = .init()
|
|
|
14056
14113
|
|
|
14057
14114
|
// Please don't remove the lines below
|
|
14058
14115
|
// They are used to detect outdated files
|
|
14059
|
-
// FastlaneRunnerAPIVersion [0.9.
|
|
14116
|
+
// FastlaneRunnerAPIVersion [0.9.203]
|
|
@@ -143,6 +143,9 @@ public protocol SnapshotfileProtocol: AnyObject {
|
|
|
143
143
|
/// Array of strings matching Test Bundle/Test Suite/Test Cases to skip
|
|
144
144
|
var skipTesting: String? { get }
|
|
145
145
|
|
|
146
|
+
/// Run simulator in a Rosetta mode
|
|
147
|
+
var runRosettaSimulator: Bool { get }
|
|
148
|
+
|
|
146
149
|
/// xcodebuild formatter to use (ex: 'xcbeautify', 'xcbeautify --quieter', 'xcpretty', 'xcpretty -test'). Use empty string (ex: '') to disable any formatter (More information: https://docs.fastlane.tools/best-practices/xcodebuild-formatters/)
|
|
147
150
|
var xcodebuildFormatter: String { get }
|
|
148
151
|
|
|
@@ -348,6 +351,10 @@ public extension SnapshotfileProtocol {
|
|
|
348
351
|
return nil
|
|
349
352
|
}
|
|
350
353
|
|
|
354
|
+
var runRosettaSimulator: Bool {
|
|
355
|
+
return false
|
|
356
|
+
}
|
|
357
|
+
|
|
351
358
|
var xcodebuildFormatter: String {
|
|
352
359
|
return "xcbeautify"
|
|
353
360
|
}
|
|
@@ -371,4 +378,4 @@ public extension SnapshotfileProtocol {
|
|
|
371
378
|
|
|
372
379
|
// Please don't remove the lines below
|
|
373
380
|
// They are used to detect outdated files
|
|
374
|
-
// FastlaneRunnerAPIVersion [0.9.
|
|
381
|
+
// FastlaneRunnerAPIVersion [0.9.142]
|
|
@@ -308,6 +308,11 @@ module Snapshot
|
|
|
308
308
|
verify_block: proc do |value|
|
|
309
309
|
verify_type('skip_testing', [Array, String], value)
|
|
310
310
|
end),
|
|
311
|
+
FastlaneCore::ConfigItem.new(key: :run_rosetta_simulator,
|
|
312
|
+
env_name: "SNAPSHOT_RUN_ROSETTA_SIMULATOR",
|
|
313
|
+
description: "Run simulator in a Rosetta mode",
|
|
314
|
+
type: Boolean,
|
|
315
|
+
default_value: false),
|
|
311
316
|
|
|
312
317
|
FastlaneCore::ConfigItem.new(key: :xcodebuild_formatter,
|
|
313
318
|
env_names: ["SNAPSHOT_XCODEBUILD_FORMATTER", "FASTLANE_XCODEBUILD_FORMATTER"],
|
|
@@ -89,16 +89,18 @@ module Snapshot
|
|
|
89
89
|
os = 'iOS'
|
|
90
90
|
end
|
|
91
91
|
|
|
92
|
-
|
|
92
|
+
requested_os_version = Snapshot.config[:ios_version]
|
|
93
93
|
|
|
94
94
|
destinations = devices.map do |d|
|
|
95
|
-
device = find_device(d,
|
|
95
|
+
device = find_device(d, requested_os_version)
|
|
96
96
|
if device.nil?
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
UI.
|
|
97
|
+
message = "No device found named '#{d}'"
|
|
98
|
+
message += " for version '#{requested_os_version}'" if requested_os_version
|
|
99
|
+
UI.user_error!(message)
|
|
100
|
+
elsif requested_os_version && device.os_version != requested_os_version
|
|
101
|
+
UI.important("Using device named '#{device.name}' with version '#{device.os_version}' because no match was found for version '#{requested_os_version}'")
|
|
100
102
|
end
|
|
101
|
-
"-destination 'platform=#{os} Simulator,
|
|
103
|
+
"-destination 'platform=#{os} Simulator,id=#{device.udid}'"
|
|
102
104
|
end
|
|
103
105
|
|
|
104
106
|
return [destinations.join(' ')]
|
|
@@ -37,6 +37,10 @@ module Snapshot
|
|
|
37
37
|
# they are present at all
|
|
38
38
|
options += config[:only_testing].map { |test_id| "-only-testing:#{test_id.shellescape}" } if config[:only_testing]
|
|
39
39
|
options += config[:skip_testing].map { |test_id| "-skip-testing:#{test_id.shellescape}" } if config[:skip_testing]
|
|
40
|
+
|
|
41
|
+
# Explicitly run simulator in Rosetta (needed for Xcode 14.3 and up)
|
|
42
|
+
options << "ARCHS=x86_64" if config[:run_rosetta_simulator]
|
|
43
|
+
|
|
40
44
|
return options
|
|
41
45
|
end
|
|
42
46
|
|
|
@@ -40,10 +40,17 @@ module Spaceship
|
|
|
40
40
|
command :spaceauth do |c|
|
|
41
41
|
c.syntax = 'fastlane spaceship spaceauth'
|
|
42
42
|
c.description = 'Authentication helper for spaceship/fastlane to work with Apple 2-Step/2FA'
|
|
43
|
-
c.option('--copy_to_clipboard', 'Whether the session string should be copied to clipboard. For more info see https://docs.fastlane.tools/best-practices/continuous-integration/#storing-a-manually-verified-session-using-spaceauth`')
|
|
43
|
+
c.option('--copy_to_clipboard VALUE', 'Whether the session string should be copied to clipboard (true/false). For more info see https://docs.fastlane.tools/best-practices/continuous-integration/#storing-a-manually-verified-session-using-spaceauth`')
|
|
44
44
|
c.option('--check_session', 'Check to see if there is a valid session (either in the cache or via FASTLANE_SESSION). Sets the exit code to 0 if the session is valid or 1 if not.') { Spaceship::Globals.check_session = true }
|
|
45
45
|
c.action do |args, options|
|
|
46
|
-
|
|
46
|
+
copy_to_clipboard = if options.copy_to_clipboard.nil?
|
|
47
|
+
nil
|
|
48
|
+
elsif %w(yes YES true TRUE on ON).include?(options.copy_to_clipboard.to_s)
|
|
49
|
+
true
|
|
50
|
+
elsif %w(no NO false FALSE off OFF).include?(options.copy_to_clipboard.to_s)
|
|
51
|
+
false
|
|
52
|
+
end
|
|
53
|
+
Spaceship::SpaceauthRunner.new(username: options.user, copy_to_clipboard: copy_to_clipboard).run
|
|
47
54
|
end
|
|
48
55
|
end
|
|
49
56
|
|
|
@@ -190,7 +190,7 @@ module Spaceship
|
|
|
190
190
|
|
|
191
191
|
def valid_name_for(input)
|
|
192
192
|
latinized = input.to_slug.transliterate
|
|
193
|
-
latinized = latinized.gsub(/[^[:ascii:]]|[
|
|
193
|
+
latinized = latinized.gsub(/[^[:ascii:]]|[\.@&*"]/, '') # remove non-valid characters
|
|
194
194
|
# Check if the input string was modified, since it might be empty now
|
|
195
195
|
# (if it only contained non-latin symbols) or the duplicate of another app
|
|
196
196
|
if latinized != input
|
metadata
CHANGED
|
@@ -1,40 +1,40 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: fastlane
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 2.
|
|
4
|
+
version: 2.236.1
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
|
-
- Jorge Revuelta H
|
|
8
|
-
- Fumiya Nakamura
|
|
9
7
|
- Manish Rathi
|
|
10
|
-
- Olivier Halligon
|
|
11
|
-
- Danielle Tomlinson
|
|
12
|
-
- Matthew Ellis
|
|
13
|
-
- Kohki Miki
|
|
14
|
-
- Luka Mirosevic
|
|
15
|
-
- Manu Wallner
|
|
16
|
-
- Connor Tumbleson
|
|
17
|
-
- Jan Piotrowski
|
|
18
8
|
- Max Ott
|
|
19
|
-
-
|
|
20
|
-
-
|
|
9
|
+
- Jan Piotrowski
|
|
10
|
+
- Matthew Ellis
|
|
11
|
+
- Maksym Grebenets
|
|
12
|
+
- Felix Krause
|
|
13
|
+
- Jimmy Dee
|
|
21
14
|
- Łukasz Grabowski
|
|
15
|
+
- Helmut Januschka
|
|
16
|
+
- Jérôme Lacoste
|
|
17
|
+
- Connor Tumbleson
|
|
18
|
+
- Luka Mirosevic
|
|
22
19
|
- Satoshi Namai
|
|
23
|
-
-
|
|
20
|
+
- Roger Oba
|
|
21
|
+
- Jorge Revuelta H
|
|
24
22
|
- Andrew McBurney
|
|
25
|
-
- Jimmy Dee
|
|
26
|
-
- Felix Krause
|
|
27
|
-
- Maksym Grebenets
|
|
28
|
-
- Stefan Natchev
|
|
29
23
|
- Joshua Liebowitz
|
|
30
|
-
- Helmut Januschka
|
|
31
|
-
- Iulian Onofrei
|
|
32
24
|
- Daniel Jankowski
|
|
25
|
+
- Stefan Natchev
|
|
26
|
+
- Fumiya Nakamura
|
|
27
|
+
- Olivier Halligon
|
|
28
|
+
- Danielle Tomlinson
|
|
29
|
+
- Iulian Onofrei
|
|
30
|
+
- Manu Wallner
|
|
33
31
|
- Aaron Brager
|
|
32
|
+
- Kohki Miki
|
|
33
|
+
- Josh Holtz
|
|
34
34
|
autorequire:
|
|
35
35
|
bindir: bin
|
|
36
36
|
cert_chain: []
|
|
37
|
-
date: 2026-
|
|
37
|
+
date: 2026-06-11 00:00:00.000000000 Z
|
|
38
38
|
dependencies:
|
|
39
39
|
- !ruby/object:Gem::Dependency
|
|
40
40
|
name: addressable
|
|
@@ -438,7 +438,7 @@ dependencies:
|
|
|
438
438
|
requirements:
|
|
439
439
|
- - ">="
|
|
440
440
|
- !ruby/object:Gem::Version
|
|
441
|
-
version: 2.
|
|
441
|
+
version: 2.10.3
|
|
442
442
|
- - "<"
|
|
443
443
|
- !ruby/object:Gem::Version
|
|
444
444
|
version: '4'
|
|
@@ -448,7 +448,7 @@ dependencies:
|
|
|
448
448
|
requirements:
|
|
449
449
|
- - ">="
|
|
450
450
|
- !ruby/object:Gem::Version
|
|
451
|
-
version: 2.
|
|
451
|
+
version: 2.10.3
|
|
452
452
|
- - "<"
|
|
453
453
|
- !ruby/object:Gem::Version
|
|
454
454
|
version: '4'
|
|
@@ -472,6 +472,20 @@ dependencies:
|
|
|
472
472
|
- - "<"
|
|
473
473
|
- !ruby/object:Gem::Version
|
|
474
474
|
version: 5.0.0
|
|
475
|
+
- !ruby/object:Gem::Dependency
|
|
476
|
+
name: multi_json
|
|
477
|
+
requirement: !ruby/object:Gem::Requirement
|
|
478
|
+
requirements:
|
|
479
|
+
- - "~>"
|
|
480
|
+
- !ruby/object:Gem::Version
|
|
481
|
+
version: '1.12'
|
|
482
|
+
type: :runtime
|
|
483
|
+
prerelease: false
|
|
484
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
485
|
+
requirements:
|
|
486
|
+
- - "~>"
|
|
487
|
+
- !ruby/object:Gem::Version
|
|
488
|
+
version: '1.12'
|
|
475
489
|
- !ruby/object:Gem::Dependency
|
|
476
490
|
name: multipart-post
|
|
477
491
|
requirement: !ruby/object:Gem::Requirement
|
|
@@ -1149,6 +1163,7 @@ files:
|
|
|
1149
1163
|
- fastlane/lib/fastlane/actions/twitter.rb
|
|
1150
1164
|
- fastlane/lib/fastlane/actions/typetalk.rb
|
|
1151
1165
|
- fastlane/lib/fastlane/actions/unlock_keychain.rb
|
|
1166
|
+
- fastlane/lib/fastlane/actions/update_app_age_rating.rb
|
|
1152
1167
|
- fastlane/lib/fastlane/actions/update_app_group_identifiers.rb
|
|
1153
1168
|
- fastlane/lib/fastlane/actions/update_app_identifier.rb
|
|
1154
1169
|
- fastlane/lib/fastlane/actions/update_code_signing_settings.rb
|