fastlane 2.191.0 → 2.192.0
Sign up to get free protection for your applications and to get access to all the features.
- 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
|
|