fastlane 2.191.0 → 2.192.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 +92 -92
- data/fastlane/lib/assets/completions/completion.bash +4 -1
- data/fastlane/lib/assets/completions/completion.zsh +6 -5
- data/fastlane/lib/fastlane/actions/create_xcframework.rb +97 -17
- data/fastlane/lib/fastlane/actions/notarize.rb +77 -1
- data/fastlane/lib/fastlane/actions/push_git_tags.rb +1 -1
- data/fastlane/lib/fastlane/actions/zip.rb +3 -3
- 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 +48 -10
- 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 +6 -6
- data/fastlane_core/lib/fastlane_core/ui/fastlane_runner.rb +41 -0
- data/pilot/lib/pilot/build_manager.rb +0 -1
- data/produce/lib/produce/service.rb +1 -1
- data/spaceship/lib/spaceship/connect_api/api_client.rb +15 -1
- data/spaceship/lib/spaceship/connect_api/models/app.rb +2 -1
- data/spaceship/lib/spaceship/connect_api/testflight/.testflight.rb.swp +0 -0
- data/spaceship/lib/spaceship/connect_api/testflight/testflight.rb +7 -5
- data/spaceship/lib/spaceship/connect_api/token.rb +2 -0
- data/supply/lib/supply/client.rb +38 -5
- data/supply/lib/supply/options.rb +7 -0
- metadata +35 -20
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: f1c0c051ec3343adfcc8dcc927954b9fe5e76bf56d813be5d4f0823695dcb835
|
|
4
|
+
data.tar.gz: 328239727a6f80cca28a6524784cb2f4e1b39454f0c6f2e2cf036735c26f6811
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: c430d54e72ceb927d096d02ac12578e196194405a6398768656ded1b0274d6fdb1988487d400b6c3e7434e02b82f372ac200959f524afaa9374d385a4ab00a46
|
|
7
|
+
data.tar.gz: 3800cfae6b4add96d08f98fa780c721d2444c4e81e1bf24e437e5e7e9f455682b198a7bc63246738fd758da7f0437dfb311d410632b0d22faa4af0e58e7d0301
|
data/README.md
CHANGED
|
@@ -35,11 +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/
|
|
38
|
+
<td id='stefan-natchev'>
|
|
39
|
+
<a href='https://github.com/snatchev'>
|
|
40
|
+
<img src='https://github.com/snatchev.png' width='140px;'>
|
|
41
41
|
</a>
|
|
42
|
-
<h4 align='center'><a href='https://twitter.com/
|
|
42
|
+
<h4 align='center'><a href='https://twitter.com/snatchev'>Stefan Natchev</a></h4>
|
|
43
|
+
</td>
|
|
44
|
+
<td id='maksym-grebenets'>
|
|
45
|
+
<a href='https://github.com/mgrebenets'>
|
|
46
|
+
<img src='https://github.com/mgrebenets.png' width='140px;'>
|
|
47
|
+
</a>
|
|
48
|
+
<h4 align='center'><a href='https://twitter.com/mgrebenets'>Maksym Grebenets</a></h4>
|
|
43
49
|
</td>
|
|
44
50
|
<td id='aaron-brager'>
|
|
45
51
|
<a href='https://github.com/getaaron'>
|
|
@@ -47,69 +53,69 @@ If the above doesn't help, please [submit an issue](https://github.com/fastlane/
|
|
|
47
53
|
</a>
|
|
48
54
|
<h4 align='center'><a href='https://twitter.com/getaaron'>Aaron Brager</a></h4>
|
|
49
55
|
</td>
|
|
50
|
-
<td id='daniel-jankowski'>
|
|
51
|
-
<a href='https://github.com/mollyIV'>
|
|
52
|
-
<img src='https://github.com/mollyIV.png' width='140px;'>
|
|
53
|
-
</a>
|
|
54
|
-
<h4 align='center'><a href='https://twitter.com/mollyIV'>Daniel Jankowski</a></h4>
|
|
55
|
-
</td>
|
|
56
|
-
<td id='luka-mirosevic'>
|
|
57
|
-
<a href='https://github.com/lmirosevic'>
|
|
58
|
-
<img src='https://github.com/lmirosevic.png' width='140px;'>
|
|
59
|
-
</a>
|
|
60
|
-
<h4 align='center'><a href='https://twitter.com/lmirosevic'>Luka Mirosevic</a></h4>
|
|
61
|
-
</td>
|
|
62
56
|
<td id='satoshi-namai'>
|
|
63
57
|
<a href='https://github.com/ainame'>
|
|
64
58
|
<img src='https://github.com/ainame.png' width='140px;'>
|
|
65
59
|
</a>
|
|
66
60
|
<h4 align='center'><a href='https://twitter.com/ainame'>Satoshi Namai</a></h4>
|
|
67
61
|
</td>
|
|
62
|
+
<td id='jorge-revuelta-h'>
|
|
63
|
+
<a href='https://github.com/minuscorp'>
|
|
64
|
+
<img src='https://github.com/minuscorp.png' width='140px;'>
|
|
65
|
+
</a>
|
|
66
|
+
<h4 align='center'><a href='https://twitter.com/minuscorp'>Jorge Revuelta H</a></h4>
|
|
67
|
+
</td>
|
|
68
68
|
</tr>
|
|
69
69
|
<tr>
|
|
70
|
-
<td id='
|
|
71
|
-
<a href='https://github.com/
|
|
72
|
-
<img src='https://github.com/
|
|
70
|
+
<td id='olivier-halligon'>
|
|
71
|
+
<a href='https://github.com/AliSoftware'>
|
|
72
|
+
<img src='https://github.com/AliSoftware.png' width='140px;'>
|
|
73
73
|
</a>
|
|
74
|
-
<h4 align='center'><a href='https://twitter.com/
|
|
74
|
+
<h4 align='center'><a href='https://twitter.com/aligatr'>Olivier Halligon</a></h4>
|
|
75
75
|
</td>
|
|
76
|
-
<td id='
|
|
77
|
-
<a href='https://github.com/
|
|
78
|
-
<img src='https://github.com/
|
|
76
|
+
<td id='manu-wallner'>
|
|
77
|
+
<a href='https://github.com/milch'>
|
|
78
|
+
<img src='https://github.com/milch.png' width='140px;'>
|
|
79
79
|
</a>
|
|
80
|
-
<h4 align='center'><a href='https://twitter.com/
|
|
80
|
+
<h4 align='center'><a href='https://twitter.com/acrooow'>Manu Wallner</a></h4>
|
|
81
81
|
</td>
|
|
82
|
-
<td id='
|
|
83
|
-
<a href='https://github.com/
|
|
84
|
-
<img src='https://github.com/
|
|
82
|
+
<td id='joshua-liebowitz'>
|
|
83
|
+
<a href='https://github.com/taquitos'>
|
|
84
|
+
<img src='https://github.com/taquitos.png' width='140px;'>
|
|
85
85
|
</a>
|
|
86
|
-
<h4 align='center'><a href='https://twitter.com/
|
|
86
|
+
<h4 align='center'><a href='https://twitter.com/taquitos'>Joshua Liebowitz</a></h4>
|
|
87
87
|
</td>
|
|
88
|
-
<td id='
|
|
89
|
-
<a href='https://github.com/
|
|
90
|
-
<img src='https://github.com/
|
|
88
|
+
<td id='luka-mirosevic'>
|
|
89
|
+
<a href='https://github.com/lmirosevic'>
|
|
90
|
+
<img src='https://github.com/lmirosevic.png' width='140px;'>
|
|
91
91
|
</a>
|
|
92
|
-
<h4 align='center'><a href='https://twitter.com/
|
|
92
|
+
<h4 align='center'><a href='https://twitter.com/lmirosevic'>Luka Mirosevic</a></h4>
|
|
93
93
|
</td>
|
|
94
|
-
<td id='
|
|
95
|
-
<a href='https://github.com/
|
|
96
|
-
<img src='https://github.com/
|
|
94
|
+
<td id='jan-piotrowski'>
|
|
95
|
+
<a href='https://github.com/janpio'>
|
|
96
|
+
<img src='https://github.com/janpio.png' width='140px;'>
|
|
97
97
|
</a>
|
|
98
|
-
<h4 align='center'><a href='https://twitter.com/
|
|
98
|
+
<h4 align='center'><a href='https://twitter.com/Sujan'>Jan Piotrowski</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='daniel-jankowski'>
|
|
103
|
+
<a href='https://github.com/mollyIV'>
|
|
104
|
+
<img src='https://github.com/mollyIV.png' width='140px;'>
|
|
105
105
|
</a>
|
|
106
|
-
<h4 align='center'>
|
|
106
|
+
<h4 align='center'><a href='https://twitter.com/mollyIV'>Daniel Jankowski</a></h4>
|
|
107
107
|
</td>
|
|
108
|
-
<td id='
|
|
109
|
-
<a href='https://github.com/
|
|
110
|
-
<img src='https://github.com/
|
|
108
|
+
<td id='helmut-januschka'>
|
|
109
|
+
<a href='https://github.com/hjanuschka'>
|
|
110
|
+
<img src='https://github.com/hjanuschka.png' width='140px;'>
|
|
111
111
|
</a>
|
|
112
|
-
<h4 align='center'><a href='https://twitter.com/
|
|
112
|
+
<h4 align='center'><a href='https://twitter.com/hjanuschka'>Helmut Januschka</a></h4>
|
|
113
|
+
</td>
|
|
114
|
+
<td id='jérôme-lacoste'>
|
|
115
|
+
<a href='https://github.com/lacostej'>
|
|
116
|
+
<img src='https://github.com/lacostej.png' width='140px;'>
|
|
117
|
+
</a>
|
|
118
|
+
<h4 align='center'><a href='https://twitter.com/lacostej'>Jérôme Lacoste</a></h4>
|
|
113
119
|
</td>
|
|
114
120
|
<td id='matthew-ellis'>
|
|
115
121
|
<a href='https://github.com/matthewellis'>
|
|
@@ -117,81 +123,75 @@ If the above doesn't help, please [submit an issue](https://github.com/fastlane/
|
|
|
117
123
|
</a>
|
|
118
124
|
<h4 align='center'><a href='https://twitter.com/mellis1995'>Matthew Ellis</a></h4>
|
|
119
125
|
</td>
|
|
120
|
-
<td id='
|
|
121
|
-
<a href='https://github.com/
|
|
122
|
-
<img src='https://github.com/
|
|
123
|
-
</a>
|
|
124
|
-
<h4 align='center'><a href='https://twitter.com/minuscorp'>Jorge Revuelta H</a></h4>
|
|
125
|
-
</td>
|
|
126
|
-
<td id='jan-piotrowski'>
|
|
127
|
-
<a href='https://github.com/janpio'>
|
|
128
|
-
<img src='https://github.com/janpio.png' width='140px;'>
|
|
126
|
+
<td id='fumiya-nakamura'>
|
|
127
|
+
<a href='https://github.com/nafu'>
|
|
128
|
+
<img src='https://github.com/nafu.png' width='140px;'>
|
|
129
129
|
</a>
|
|
130
|
-
<h4 align='center'><a href='https://twitter.com/
|
|
130
|
+
<h4 align='center'><a href='https://twitter.com/nafu003'>Fumiya Nakamura</a></h4>
|
|
131
131
|
</td>
|
|
132
132
|
</tr>
|
|
133
133
|
<tr>
|
|
134
|
-
<td id='manish-rathi'>
|
|
135
|
-
<a href='https://github.com/crazymanish'>
|
|
136
|
-
<img src='https://github.com/crazymanish.png' width='140px;'>
|
|
137
|
-
</a>
|
|
138
|
-
<h4 align='center'><a href='https://twitter.com/iammanishrathi'>Manish Rathi</a></h4>
|
|
139
|
-
</td>
|
|
140
134
|
<td id='danielle-tomlinson'>
|
|
141
135
|
<a href='https://github.com/endocrimes'>
|
|
142
136
|
<img src='https://github.com/endocrimes.png' width='140px;'>
|
|
143
137
|
</a>
|
|
144
138
|
<h4 align='center'><a href='https://twitter.com/endocrimes'>Danielle Tomlinson</a></h4>
|
|
145
139
|
</td>
|
|
146
|
-
<td id='
|
|
147
|
-
<a href='https://github.com/
|
|
148
|
-
<img src='https://github.com/
|
|
140
|
+
<td id='roger-oba'>
|
|
141
|
+
<a href='https://github.com/rogerluan'>
|
|
142
|
+
<img src='https://github.com/rogerluan.png' width='140px;'>
|
|
149
143
|
</a>
|
|
150
|
-
<h4 align='center'><a href='https://twitter.com/
|
|
144
|
+
<h4 align='center'><a href='https://twitter.com/rogerluan_'>Roger Oba</a></h4>
|
|
151
145
|
</td>
|
|
152
|
-
<td id='
|
|
153
|
-
<a href='https://github.com/
|
|
154
|
-
<img src='https://github.com/
|
|
146
|
+
<td id='iulian-onofrei'>
|
|
147
|
+
<a href='https://github.com/revolter'>
|
|
148
|
+
<img src='https://github.com/revolter.png' width='140px;'>
|
|
155
149
|
</a>
|
|
156
|
-
<h4 align='center'><a href='https://twitter.com/
|
|
150
|
+
<h4 align='center'><a href='https://twitter.com/Revolt666'>Iulian Onofrei</a></h4>
|
|
157
151
|
</td>
|
|
158
|
-
<td id='
|
|
159
|
-
<a href='https://github.com/
|
|
160
|
-
<img src='https://github.com/
|
|
152
|
+
<td id='jimmy-dee'>
|
|
153
|
+
<a href='https://github.com/jdee'>
|
|
154
|
+
<img src='https://github.com/jdee.png' width='140px;'>
|
|
161
155
|
</a>
|
|
162
|
-
<h4 align='center'
|
|
156
|
+
<h4 align='center'>Jimmy Dee</h4>
|
|
157
|
+
</td>
|
|
158
|
+
<td id='felix-krause'>
|
|
159
|
+
<a href='https://github.com/KrauseFx'>
|
|
160
|
+
<img src='https://github.com/KrauseFx.png' width='140px;'>
|
|
161
|
+
</a>
|
|
162
|
+
<h4 align='center'><a href='https://twitter.com/KrauseFx'>Felix Krause</a></h4>
|
|
163
163
|
</td>
|
|
164
164
|
</tr>
|
|
165
165
|
<tr>
|
|
166
|
-
<td id='
|
|
167
|
-
<a href='https://github.com/
|
|
168
|
-
<img src='https://github.com/
|
|
166
|
+
<td id='max-ott'>
|
|
167
|
+
<a href='https://github.com/max-ott'>
|
|
168
|
+
<img src='https://github.com/max-ott.png' width='140px;'>
|
|
169
169
|
</a>
|
|
170
|
-
<h4 align='center'><a href='https://twitter.com/
|
|
170
|
+
<h4 align='center'><a href='https://twitter.com/ott_max'>Max Ott</a></h4>
|
|
171
171
|
</td>
|
|
172
|
-
<td id='
|
|
173
|
-
<a href='https://github.com/
|
|
174
|
-
<img src='https://github.com/
|
|
172
|
+
<td id='manish-rathi'>
|
|
173
|
+
<a href='https://github.com/crazymanish'>
|
|
174
|
+
<img src='https://github.com/crazymanish.png' width='140px;'>
|
|
175
175
|
</a>
|
|
176
|
-
<h4 align='center'><a href='https://twitter.com/
|
|
176
|
+
<h4 align='center'><a href='https://twitter.com/iammanishrathi'>Manish Rathi</a></h4>
|
|
177
177
|
</td>
|
|
178
|
-
<td id='
|
|
179
|
-
<a href='https://github.com/
|
|
180
|
-
<img src='https://github.com/
|
|
178
|
+
<td id='kohki-miki'>
|
|
179
|
+
<a href='https://github.com/giginet'>
|
|
180
|
+
<img src='https://github.com/giginet.png' width='140px;'>
|
|
181
181
|
</a>
|
|
182
|
-
<h4 align='center'><a href='https://twitter.com/
|
|
182
|
+
<h4 align='center'><a href='https://twitter.com/giginet'>Kohki Miki</a></h4>
|
|
183
183
|
</td>
|
|
184
|
-
<td id='
|
|
185
|
-
<a href='https://github.com/
|
|
186
|
-
<img src='https://github.com/
|
|
184
|
+
<td id='andrew-mcburney'>
|
|
185
|
+
<a href='https://github.com/armcburney'>
|
|
186
|
+
<img src='https://github.com/armcburney.png' width='140px;'>
|
|
187
187
|
</a>
|
|
188
|
-
<h4 align='center'><a href='https://twitter.com/
|
|
188
|
+
<h4 align='center'><a href='https://twitter.com/armcburney'>Andrew McBurney</a></h4>
|
|
189
189
|
</td>
|
|
190
|
-
<td id='
|
|
191
|
-
<a href='https://github.com/
|
|
192
|
-
<img src='https://github.com/
|
|
190
|
+
<td id='josh-holtz'>
|
|
191
|
+
<a href='https://github.com/joshdholtz'>
|
|
192
|
+
<img src='https://github.com/joshdholtz.png' width='140px;'>
|
|
193
193
|
</a>
|
|
194
|
-
<h4 align='center'><a href='https://twitter.com/
|
|
194
|
+
<h4 align='center'><a href='https://twitter.com/joshdholtz'>Josh Holtz</a></h4>
|
|
195
195
|
</td>
|
|
196
196
|
</tr>
|
|
197
197
|
</table>
|
|
@@ -4,6 +4,7 @@ _fastlane_complete() {
|
|
|
4
4
|
COMPREPLY=()
|
|
5
5
|
local word="${COMP_WORDS[COMP_CWORD]}"
|
|
6
6
|
local completions=""
|
|
7
|
+
local file
|
|
7
8
|
|
|
8
9
|
# look for Fastfile either in this directory or fastlane/ then grab the lane names
|
|
9
10
|
if [[ -e "Fastfile" ]]; then
|
|
@@ -12,10 +13,12 @@ _fastlane_complete() {
|
|
|
12
13
|
file="fastlane/Fastfile"
|
|
13
14
|
elif [[ -e ".fastlane/Fastfile" ]]; then
|
|
14
15
|
file=".fastlane/Fastfile"
|
|
16
|
+
else
|
|
17
|
+
return 1
|
|
15
18
|
fi
|
|
16
19
|
|
|
17
20
|
# parse 'beta' out of 'lane :beta do', etc
|
|
18
|
-
completions
|
|
21
|
+
completions="$(sed -En 's/^[ ]*lane +:([^ ]+).*$/\1/p' "$file")"
|
|
19
22
|
completions="$completions update_fastlane"
|
|
20
23
|
|
|
21
24
|
COMPREPLY=( $(compgen -W "$completions" -- "$word") )
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
#!/bin/zsh
|
|
2
2
|
|
|
3
3
|
_fastlane_complete() {
|
|
4
|
-
local word completions
|
|
4
|
+
local word completions file
|
|
5
5
|
word="$1"
|
|
6
6
|
|
|
7
7
|
# look for Fastfile either in this directory or fastlane/ then grab the lane names
|
|
@@ -11,13 +11,14 @@ _fastlane_complete() {
|
|
|
11
11
|
file="fastlane/Fastfile"
|
|
12
12
|
elif [[ -e ".fastlane/Fastfile" ]] then
|
|
13
13
|
file=".fastlane/Fastfile"
|
|
14
|
+
else
|
|
15
|
+
return 1
|
|
14
16
|
fi
|
|
15
17
|
|
|
16
18
|
# parse 'beta' out of 'lane :beta do', etc
|
|
17
|
-
completions
|
|
18
|
-
completions="$completions
|
|
19
|
-
update_fastlane"
|
|
19
|
+
completions="$(sed -En 's/^[ ]*lane +:([^ ]+).*$/\1/p' "$file")"
|
|
20
|
+
completions="$completions update_fastlane"
|
|
20
21
|
|
|
21
|
-
reply=( "${
|
|
22
|
+
reply=( "${=completions}" )
|
|
22
23
|
}
|
|
23
24
|
|
|
@@ -5,12 +5,19 @@ module Fastlane
|
|
|
5
5
|
end
|
|
6
6
|
|
|
7
7
|
class CreateXcframeworkAction < Action
|
|
8
|
+
PARAMETERS_TO_OPTIONS = { headers: '-headers', dsyms: '-debug-symbols' }
|
|
9
|
+
|
|
8
10
|
def self.run(params)
|
|
9
|
-
|
|
11
|
+
artifacts = normalized_artifact_info(params[:frameworks], [:dsyms]) ||
|
|
12
|
+
normalized_artifact_info(params[:frameworks_with_dsyms], [:dsyms]) ||
|
|
13
|
+
normalized_artifact_info(params[:libraries], [:headers, :dsyms]) ||
|
|
14
|
+
normalized_artifact_info(params[:libraries_with_headers_or_dsyms], [:headers, :dsyms])
|
|
15
|
+
|
|
16
|
+
UI.user_error!("Please provide either :frameworks, :frameworks_with_dsyms, :libraries or :libraries_with_headers_or_dsyms to be packaged into the xcframework") unless artifacts
|
|
10
17
|
|
|
18
|
+
artifacts_type = params[:frameworks] || params[:frameworks_with_dsyms] ? '-framework' : '-library'
|
|
11
19
|
create_command = ['xcodebuild', '-create-xcframework']
|
|
12
|
-
create_command <<
|
|
13
|
-
create_command << params[:libraries].map { |library, headers| ['-library', "\"#{library}\""] + (headers.empty? ? [] : ['-headers', "\"#{headers}\""]) } if params[:libraries]
|
|
20
|
+
create_command << artifacts.map { |artifact, artifact_info| [artifacts_type, "\"#{artifact}\""] + artifact_info_as_options(artifact_info) }.flatten
|
|
14
21
|
create_command << ['-output', "\"#{params[:output]}\""]
|
|
15
22
|
create_command << ['-allow-internal-distribution'] if params[:allow_internal_distribution]
|
|
16
23
|
|
|
@@ -24,6 +31,32 @@ module Fastlane
|
|
|
24
31
|
sh(create_command)
|
|
25
32
|
end
|
|
26
33
|
|
|
34
|
+
def self.normalized_artifact_info(artifacts_with_info, valid_info)
|
|
35
|
+
case artifacts_with_info
|
|
36
|
+
when Array
|
|
37
|
+
artifacts_with_info.map { |artifact| [artifact, {}] }.to_h
|
|
38
|
+
when Hash
|
|
39
|
+
# Convert keys of artifact info to symbols ('dsyms' to :dsyms) and only keep keys we are interested in
|
|
40
|
+
# For example with valid_info = [:dsyms]
|
|
41
|
+
# { 'FrameworkA.framework' => { 'dsyms' => 'FrameworkA.framework.dSYM', 'foo' => bar } }
|
|
42
|
+
# gets converted to
|
|
43
|
+
# { 'FrameworkA.framework' => { dsyms: 'FrameworkA.framework.dSYM' } }
|
|
44
|
+
artifacts_with_info.transform_values { |artifact_info| artifact_info.transform_keys(&:to_sym).slice(*valid_info) }
|
|
45
|
+
else
|
|
46
|
+
artifacts_with_info
|
|
47
|
+
end
|
|
48
|
+
end
|
|
49
|
+
|
|
50
|
+
def self.artifact_info_as_options(artifact_info)
|
|
51
|
+
artifact_info.map { |type, file| [PARAMETERS_TO_OPTIONS[type], "\"#{file}\""] }.flatten
|
|
52
|
+
end
|
|
53
|
+
|
|
54
|
+
def self.check_artifact_info(artifact_info)
|
|
55
|
+
UI.user_error!("Headers and dSYMs information should be a hash") unless artifact_info.kind_of?(Hash)
|
|
56
|
+
UI.user_error!("#{artifact_info[:headers]} doesn't exist or is not a directory") if artifact_info[:headers] && !File.directory?(artifact_info[:headers])
|
|
57
|
+
UI.user_error!("#{artifact_info[:dsyms]} doesn't seem to be a dSYM archive") if artifact_info[:dsyms] && !File.directory?(artifact_info[:dsyms])
|
|
58
|
+
end
|
|
59
|
+
|
|
27
60
|
#####################################################
|
|
28
61
|
# @!group Documentation
|
|
29
62
|
#####################################################
|
|
@@ -37,13 +70,31 @@ module Fastlane
|
|
|
37
70
|
Utility for packaging multiple build configurations of a given library
|
|
38
71
|
or framework into a single xcframework.
|
|
39
72
|
|
|
40
|
-
If you want to package several frameworks just provide
|
|
41
|
-
|
|
73
|
+
If you want to package several frameworks just provide one of:
|
|
74
|
+
|
|
75
|
+
* An array containing the list of frameworks using the :frameworks parameter
|
|
76
|
+
(if they have no associated dSYMs):
|
|
77
|
+
['FrameworkA.framework', 'FrameworkB.framework']
|
|
78
|
+
|
|
79
|
+
* A hash containing the list of frameworks with their dSYMs using the
|
|
80
|
+
:frameworks_with_dsyms parameter:
|
|
81
|
+
{
|
|
82
|
+
'FrameworkA.framework' => {},
|
|
83
|
+
'FrameworkB.framework' => { dsyms: 'FrameworkB.framework.dSYM' }
|
|
84
|
+
}
|
|
42
85
|
|
|
43
|
-
If you want to package several libraries
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
86
|
+
If you want to package several libraries just provide one of:
|
|
87
|
+
|
|
88
|
+
* An array containing the list of libraries using the :libraries parameter
|
|
89
|
+
(if they have no associated headers or dSYMs):
|
|
90
|
+
['LibraryA.so', 'LibraryB.so']
|
|
91
|
+
|
|
92
|
+
* A hash containing the list of libraries with their headers and dSYMs
|
|
93
|
+
using the :libraries_with_headers_or_dsyms parameter:
|
|
94
|
+
{
|
|
95
|
+
'LibraryA.so' => { dsyms: 'libraryA.so.dSYM' },
|
|
96
|
+
'LibraryB.so' => { headers: 'headers' }
|
|
97
|
+
}
|
|
47
98
|
|
|
48
99
|
Finally specify the location of the xcframework to be generated using the :output
|
|
49
100
|
parameter.
|
|
@@ -54,27 +105,54 @@ module Fastlane
|
|
|
54
105
|
[
|
|
55
106
|
FastlaneCore::ConfigItem.new(key: :frameworks,
|
|
56
107
|
env_name: "FL_CREATE_XCFRAMEWORK_FRAMEWORKS",
|
|
57
|
-
description: "Frameworks to add to the target xcframework",
|
|
108
|
+
description: "Frameworks (without dSYMs) to add to the target xcframework",
|
|
58
109
|
type: Array,
|
|
59
110
|
optional: true,
|
|
60
|
-
conflicting_options: [:libraries],
|
|
111
|
+
conflicting_options: [:frameworks_with_dsyms, :libraries, :libraries_with_headers_or_dsyms],
|
|
61
112
|
verify_block: proc do |value|
|
|
62
|
-
value.each do |framework|
|
|
113
|
+
normalized_artifact_info(value, [:dsyms]).each do |framework, framework_info|
|
|
63
114
|
UI.user_error!("#{framework} doesn't end with '.framework'. Is this really a framework?") unless framework.end_with?('.framework')
|
|
64
115
|
UI.user_error!("Couldn't find framework at #{framework}") unless File.exist?(framework)
|
|
65
116
|
UI.user_error!("#{framework} doesn't seem to be a framework") unless File.directory?(framework)
|
|
117
|
+
check_artifact_info(framework_info)
|
|
118
|
+
end
|
|
119
|
+
end),
|
|
120
|
+
FastlaneCore::ConfigItem.new(key: :frameworks_with_dsyms,
|
|
121
|
+
env_name: "FL_CREATE_XCFRAMEWORK_FRAMEWORKS_WITH_DSYMS",
|
|
122
|
+
description: "Frameworks (with dSYMs) to add to the target xcframework",
|
|
123
|
+
type: Hash,
|
|
124
|
+
optional: true,
|
|
125
|
+
conflicting_options: [:frameworks, :libraries, :libraries_with_headers_or_dsyms],
|
|
126
|
+
verify_block: proc do |value|
|
|
127
|
+
normalized_artifact_info(value, [:dsyms]).each do |framework, framework_info|
|
|
128
|
+
UI.user_error!("#{framework} doesn't end with '.framework'. Is this really a framework?") unless framework.end_with?('.framework')
|
|
129
|
+
UI.user_error!("Couldn't find framework at #{framework}") unless File.exist?(framework)
|
|
130
|
+
UI.user_error!("#{framework} doesn't seem to be a framework") unless File.directory?(framework)
|
|
131
|
+
check_artifact_info(framework_info)
|
|
66
132
|
end
|
|
67
133
|
end),
|
|
68
134
|
FastlaneCore::ConfigItem.new(key: :libraries,
|
|
69
135
|
env_name: "FL_CREATE_XCFRAMEWORK_LIBRARIES",
|
|
70
|
-
description: "Libraries to add to the target xcframework
|
|
136
|
+
description: "Libraries (without headers or dSYMs) to add to the target xcframework",
|
|
137
|
+
type: Array,
|
|
138
|
+
optional: true,
|
|
139
|
+
conflicting_options: [:frameworks, :frameworks_with_dsyms, :libraries_with_headers_or_dsyms],
|
|
140
|
+
verify_block: proc do |value|
|
|
141
|
+
normalized_artifact_info(value, [:headers, :dsyms]).each do |library, library_info|
|
|
142
|
+
UI.user_error!("Couldn't find library at #{library}") unless File.exist?(library)
|
|
143
|
+
check_artifact_info(library_info)
|
|
144
|
+
end
|
|
145
|
+
end),
|
|
146
|
+
FastlaneCore::ConfigItem.new(key: :libraries_with_headers_or_dsyms,
|
|
147
|
+
env_name: "FL_CREATE_XCFRAMEWORK_LIBRARIES_WITH_HEADERS_OR_DSYMS",
|
|
148
|
+
description: "Libraries (with headers or dSYMs) to add to the target xcframework",
|
|
71
149
|
type: Hash,
|
|
72
150
|
optional: true,
|
|
73
|
-
conflicting_options: [:frameworks],
|
|
151
|
+
conflicting_options: [:frameworks, :frameworks_with_dsyms, :libraries],
|
|
74
152
|
verify_block: proc do |value|
|
|
75
|
-
value.each do |library,
|
|
153
|
+
normalized_artifact_info(value, [:headers, :dsyms]).each do |library, library_info|
|
|
76
154
|
UI.user_error!("Couldn't find library at #{library}") unless File.exist?(library)
|
|
77
|
-
|
|
155
|
+
check_artifact_info(library_info)
|
|
78
156
|
end
|
|
79
157
|
end),
|
|
80
158
|
FastlaneCore::ConfigItem.new(key: :output,
|
|
@@ -103,7 +181,9 @@ module Fastlane
|
|
|
103
181
|
def self.example_code
|
|
104
182
|
[
|
|
105
183
|
"create_xcframework(frameworks: ['FrameworkA.framework', 'FrameworkB.framework'], output: 'UniversalFramework.xcframework')",
|
|
106
|
-
"create_xcframework(
|
|
184
|
+
"create_xcframework(frameworks_with_dsyms: {'FrameworkA.framework' => {}, 'FrameworkB.framework' => { dsyms: 'FrameworkB.framework.dSYM' } }, output: 'UniversalFramework.xcframework')",
|
|
185
|
+
"create_xcframework(libraries: ['LibraryA.so', 'LibraryB.so'], output: 'UniversalFramework.xcframework')",
|
|
186
|
+
"create_xcframework(libraries_with_headers_or_dsyms: { 'LibraryA.so' => { dsyms: 'libraryA.so.dSYM' }, 'LibraryB.so' => { headers: 'LibraryBHeaders' } }, output: 'UniversalFramework.xcframework')"
|
|
107
187
|
]
|
|
108
188
|
end
|
|
109
189
|
|