fastlane 2.191.0 → 2.194.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 +84 -84
- data/cert/lib/cert/options.rb +1 -1
- data/deliver/lib/deliver/options.rb +1 -1
- data/fastlane/lib/assets/completions/completion.bash +4 -1
- data/fastlane/lib/assets/completions/completion.zsh +6 -5
- data/fastlane/lib/fastlane/actions/.notarize.rb.swp +0 -0
- data/fastlane/lib/fastlane/actions/app_store_build_number.rb +1 -1
- data/fastlane/lib/fastlane/actions/create_xcframework.rb +97 -17
- data/fastlane/lib/fastlane/actions/get_provisioning_profile.rb +1 -1
- data/fastlane/lib/fastlane/actions/gradle.rb +1 -1
- data/fastlane/lib/fastlane/actions/latest_testflight_build_number.rb +1 -1
- data/fastlane/lib/fastlane/actions/notarize.rb +97 -12
- data/fastlane/lib/fastlane/actions/push_git_tags.rb +1 -1
- data/fastlane/lib/fastlane/actions/register_device.rb +1 -1
- data/fastlane/lib/fastlane/actions/register_devices.rb +1 -1
- data/fastlane/lib/fastlane/actions/set_changelog.rb +1 -1
- data/fastlane/lib/fastlane/actions/slather.rb +6 -0
- data/fastlane/lib/fastlane/actions/sync_code_signing.rb +1 -1
- data/fastlane/lib/fastlane/actions/upload_to_testflight.rb +3 -1
- data/fastlane/lib/fastlane/actions/zip.rb +5 -5
- data/fastlane/lib/fastlane/documentation/markdown_docs_generator.rb +11 -5
- data/fastlane/lib/fastlane/version.rb +1 -1
- data/fastlane/swift/Deliverfile.swift +1 -1
- data/fastlane/swift/DeliverfileProtocol.swift +2 -2
- data/fastlane/swift/Fastlane.swift +101 -43
- 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 +3 -3
- data/fastlane/swift/Precheckfile.swift +1 -1
- data/fastlane/swift/PrecheckfileProtocol.swift +2 -2
- 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 +10 -10
- data/fastlane_core/lib/fastlane_core/build_watcher.rb +25 -6
- data/fastlane_core/lib/fastlane_core/pkg_file_analyser.rb +5 -0
- data/fastlane_core/lib/fastlane_core/ui/fastlane_runner.rb +41 -0
- data/match/lib/match/options.rb +2 -2
- data/match/lib/match/runner.rb +10 -9
- data/pilot/lib/pilot/build_manager.rb +14 -4
- data/pilot/lib/pilot/manager.rb +3 -1
- data/pilot/lib/pilot/options.rb +21 -2
- data/precheck/lib/precheck/options.rb +1 -1
- data/produce/lib/produce/service.rb +1 -1
- data/sigh/lib/assets/resign.sh +1 -1
- data/sigh/lib/sigh/options.rb +1 -1
- data/snapshot/lib/snapshot/simulator_launchers/simulator_launcher_base.rb +2 -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/models/app_store_version.rb +1 -1
- data/spaceship/lib/spaceship/connect_api/models/build.rb +4 -0
- data/spaceship/lib/spaceship/connect_api/models/build_beta_detail.rb +4 -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
- data/supply/lib/supply/uploader.rb +9 -6
- 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: 89364e66ffaf19316585dfb22f851fbaea4f5c592942a06b90ac4e1301b6eac1
|
4
|
+
data.tar.gz: a968f9c694a148943ff821d8ece6dc7874558638f1b3ae80637bbcc12483e0fa
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 0200da5a0b1fc50d082ad63f87b62a80047041014c31a0f786dd5bb713c4e257c3e1d4e1be5e5a6bbf250db09a1ecd19cbbde83b1329a0179a06c584d03eab1e
|
7
|
+
data.tar.gz: '0692862a0ad1e6ae72c8c8e7e59473fc2d2871d252f891e22bb0353844dee71b47b44d2ef9c9541500c5e3458c1ce05cceb9ee89af7d3a672d752daf72c39108'
|
data/README.md
CHANGED
@@ -35,17 +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='manu-wallner'>
|
39
|
+
<a href='https://github.com/milch'>
|
40
|
+
<img src='https://github.com/milch.png' width='140px;'>
|
41
41
|
</a>
|
42
|
-
<h4 align='center'><a href='https://twitter.com/
|
42
|
+
<h4 align='center'><a href='https://twitter.com/acrooow'>Manu Wallner</a></h4>
|
43
43
|
</td>
|
44
|
-
<td id='
|
45
|
-
<a href='https://github.com/
|
46
|
-
<img src='https://github.com/
|
44
|
+
<td id='max-ott'>
|
45
|
+
<a href='https://github.com/max-ott'>
|
46
|
+
<img src='https://github.com/max-ott.png' width='140px;'>
|
47
47
|
</a>
|
48
|
-
<h4 align='center'><a href='https://twitter.com/
|
48
|
+
<h4 align='center'><a href='https://twitter.com/ott_max'>Max Ott</a></h4>
|
49
49
|
</td>
|
50
50
|
<td id='daniel-jankowski'>
|
51
51
|
<a href='https://github.com/mollyIV'>
|
@@ -53,25 +53,31 @@ If the above doesn't help, please [submit an issue](https://github.com/fastlane/
|
|
53
53
|
</a>
|
54
54
|
<h4 align='center'><a href='https://twitter.com/mollyIV'>Daniel Jankowski</a></h4>
|
55
55
|
</td>
|
56
|
-
<td id='
|
57
|
-
<a href='https://github.com/
|
58
|
-
<img src='https://github.com/
|
56
|
+
<td id='josh-holtz'>
|
57
|
+
<a href='https://github.com/joshdholtz'>
|
58
|
+
<img src='https://github.com/joshdholtz.png' width='140px;'>
|
59
59
|
</a>
|
60
|
-
<h4 align='center'><a href='https://twitter.com/
|
60
|
+
<h4 align='center'><a href='https://twitter.com/joshdholtz'>Josh Holtz</a></h4>
|
61
61
|
</td>
|
62
|
-
<td id='
|
63
|
-
<a href='https://github.com/
|
64
|
-
<img src='https://github.com/
|
62
|
+
<td id='jimmy-dee'>
|
63
|
+
<a href='https://github.com/jdee'>
|
64
|
+
<img src='https://github.com/jdee.png' width='140px;'>
|
65
65
|
</a>
|
66
|
-
<h4 align='center'
|
66
|
+
<h4 align='center'>Jimmy Dee</h4>
|
67
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
|
+
</td>
|
76
|
+
<td id='andrew-mcburney'>
|
77
|
+
<a href='https://github.com/armcburney'>
|
78
|
+
<img src='https://github.com/armcburney.png' width='140px;'>
|
79
|
+
</a>
|
80
|
+
<h4 align='center'><a href='https://twitter.com/armcburney'>Andrew McBurney</a></h4>
|
75
81
|
</td>
|
76
82
|
<td id='maksym-grebenets'>
|
77
83
|
<a href='https://github.com/mgrebenets'>
|
@@ -79,37 +85,43 @@ If the above doesn't help, please [submit an issue](https://github.com/fastlane/
|
|
79
85
|
</a>
|
80
86
|
<h4 align='center'><a href='https://twitter.com/mgrebenets'>Maksym Grebenets</a></h4>
|
81
87
|
</td>
|
88
|
+
<td id='stefan-natchev'>
|
89
|
+
<a href='https://github.com/snatchev'>
|
90
|
+
<img src='https://github.com/snatchev.png' width='140px;'>
|
91
|
+
</a>
|
92
|
+
<h4 align='center'><a href='https://twitter.com/snatchev'>Stefan Natchev</a></h4>
|
93
|
+
</td>
|
82
94
|
<td id='felix-krause'>
|
83
95
|
<a href='https://github.com/KrauseFx'>
|
84
96
|
<img src='https://github.com/KrauseFx.png' width='140px;'>
|
85
97
|
</a>
|
86
98
|
<h4 align='center'><a href='https://twitter.com/KrauseFx'>Felix Krause</a></h4>
|
87
99
|
</td>
|
88
|
-
|
89
|
-
<
|
90
|
-
<img src='https://github.com/giginet.png' width='140px;'>
|
91
|
-
</a>
|
92
|
-
<h4 align='center'><a href='https://twitter.com/giginet'>Kohki Miki</a></h4>
|
93
|
-
</td>
|
100
|
+
</tr>
|
101
|
+
<tr>
|
94
102
|
<td id='helmut-januschka'>
|
95
103
|
<a href='https://github.com/hjanuschka'>
|
96
104
|
<img src='https://github.com/hjanuschka.png' width='140px;'>
|
97
105
|
</a>
|
98
106
|
<h4 align='center'><a href='https://twitter.com/hjanuschka'>Helmut Januschka</a></h4>
|
99
107
|
</td>
|
100
|
-
|
101
|
-
<
|
102
|
-
<
|
103
|
-
<a href='https://github.com/jdee'>
|
104
|
-
<img src='https://github.com/jdee.png' width='140px;'>
|
108
|
+
<td id='iulian-onofrei'>
|
109
|
+
<a href='https://github.com/revolter'>
|
110
|
+
<img src='https://github.com/revolter.png' width='140px;'>
|
105
111
|
</a>
|
106
|
-
<h4 align='center'>
|
112
|
+
<h4 align='center'><a href='https://twitter.com/Revolt666'>Iulian Onofrei</a></h4>
|
107
113
|
</td>
|
108
|
-
<td id='
|
109
|
-
<a href='https://github.com/
|
110
|
-
<img src='https://github.com/
|
114
|
+
<td id='jan-piotrowski'>
|
115
|
+
<a href='https://github.com/janpio'>
|
116
|
+
<img src='https://github.com/janpio.png' width='140px;'>
|
111
117
|
</a>
|
112
|
-
<h4 align='center'><a href='https://twitter.com/
|
118
|
+
<h4 align='center'><a href='https://twitter.com/Sujan'>Jan Piotrowski</a></h4>
|
119
|
+
</td>
|
120
|
+
<td id='joshua-liebowitz'>
|
121
|
+
<a href='https://github.com/taquitos'>
|
122
|
+
<img src='https://github.com/taquitos.png' width='140px;'>
|
123
|
+
</a>
|
124
|
+
<h4 align='center'><a href='https://twitter.com/taquitos'>Joshua Liebowitz</a></h4>
|
113
125
|
</td>
|
114
126
|
<td id='matthew-ellis'>
|
115
127
|
<a href='https://github.com/matthewellis'>
|
@@ -117,25 +129,13 @@ If the above doesn't help, please [submit an issue](https://github.com/fastlane/
|
|
117
129
|
</a>
|
118
130
|
<h4 align='center'><a href='https://twitter.com/mellis1995'>Matthew Ellis</a></h4>
|
119
131
|
</td>
|
120
|
-
<td id='jorge-revuelta-h'>
|
121
|
-
<a href='https://github.com/minuscorp'>
|
122
|
-
<img src='https://github.com/minuscorp.png' width='140px;'>
|
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;'>
|
129
|
-
</a>
|
130
|
-
<h4 align='center'><a href='https://twitter.com/Sujan'>Jan Piotrowski</a></h4>
|
131
|
-
</td>
|
132
132
|
</tr>
|
133
133
|
<tr>
|
134
|
-
<td id='
|
135
|
-
<a href='https://github.com/
|
136
|
-
<img src='https://github.com/
|
134
|
+
<td id='fumiya-nakamura'>
|
135
|
+
<a href='https://github.com/nafu'>
|
136
|
+
<img src='https://github.com/nafu.png' width='140px;'>
|
137
137
|
</a>
|
138
|
-
<h4 align='center'><a href='https://twitter.com/
|
138
|
+
<h4 align='center'><a href='https://twitter.com/nafu003'>Fumiya Nakamura</a></h4>
|
139
139
|
</td>
|
140
140
|
<td id='danielle-tomlinson'>
|
141
141
|
<a href='https://github.com/endocrimes'>
|
@@ -143,55 +143,55 @@ If the above doesn't help, please [submit an issue](https://github.com/fastlane/
|
|
143
143
|
</a>
|
144
144
|
<h4 align='center'><a href='https://twitter.com/endocrimes'>Danielle Tomlinson</a></h4>
|
145
145
|
</td>
|
146
|
-
<td id='
|
147
|
-
<a href='https://github.com/
|
148
|
-
<img src='https://github.com/
|
146
|
+
<td id='kohki-miki'>
|
147
|
+
<a href='https://github.com/giginet'>
|
148
|
+
<img src='https://github.com/giginet.png' width='140px;'>
|
149
149
|
</a>
|
150
|
-
<h4 align='center'><a href='https://twitter.com/
|
150
|
+
<h4 align='center'><a href='https://twitter.com/giginet'>Kohki Miki</a></h4>
|
151
151
|
</td>
|
152
|
-
<td id='
|
153
|
-
<a href='https://github.com/
|
154
|
-
<img src='https://github.com/
|
152
|
+
<td id='manish-rathi'>
|
153
|
+
<a href='https://github.com/crazymanish'>
|
154
|
+
<img src='https://github.com/crazymanish.png' width='140px;'>
|
155
155
|
</a>
|
156
|
-
<h4 align='center'><a href='https://twitter.com/
|
156
|
+
<h4 align='center'><a href='https://twitter.com/iammanishrathi'>Manish Rathi</a></h4>
|
157
157
|
</td>
|
158
|
-
<td id='
|
159
|
-
<a href='https://github.com/
|
160
|
-
<img src='https://github.com/
|
158
|
+
<td id='jorge-revuelta-h'>
|
159
|
+
<a href='https://github.com/minuscorp'>
|
160
|
+
<img src='https://github.com/minuscorp.png' width='140px;'>
|
161
161
|
</a>
|
162
|
-
<h4 align='center'><a href='https://twitter.com/
|
162
|
+
<h4 align='center'><a href='https://twitter.com/minuscorp'>Jorge Revuelta H</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='roger-oba'>
|
167
|
+
<a href='https://github.com/rogerluan'>
|
168
|
+
<img src='https://github.com/rogerluan.png' width='140px;'>
|
169
169
|
</a>
|
170
|
-
<h4 align='center'><a href='https://twitter.com/
|
170
|
+
<h4 align='center'><a href='https://twitter.com/rogerluan_'>Roger Oba</a></h4>
|
171
171
|
</td>
|
172
|
-
<td id='
|
173
|
-
<a href='https://github.com/
|
174
|
-
<img src='https://github.com/
|
172
|
+
<td id='satoshi-namai'>
|
173
|
+
<a href='https://github.com/ainame'>
|
174
|
+
<img src='https://github.com/ainame.png' width='140px;'>
|
175
175
|
</a>
|
176
|
-
<h4 align='center'><a href='https://twitter.com/
|
176
|
+
<h4 align='center'><a href='https://twitter.com/ainame'>Satoshi Namai</a></h4>
|
177
177
|
</td>
|
178
|
-
<td id='
|
179
|
-
<a href='https://github.com/
|
180
|
-
<img src='https://github.com/
|
178
|
+
<td id='jérôme-lacoste'>
|
179
|
+
<a href='https://github.com/lacostej'>
|
180
|
+
<img src='https://github.com/lacostej.png' width='140px;'>
|
181
181
|
</a>
|
182
|
-
<h4 align='center'><a href='https://twitter.com/
|
182
|
+
<h4 align='center'><a href='https://twitter.com/lacostej'>Jérôme Lacoste</a></h4>
|
183
183
|
</td>
|
184
|
-
<td id='
|
185
|
-
<a href='https://github.com/
|
186
|
-
<img src='https://github.com/
|
184
|
+
<td id='aaron-brager'>
|
185
|
+
<a href='https://github.com/getaaron'>
|
186
|
+
<img src='https://github.com/getaaron.png' width='140px;'>
|
187
187
|
</a>
|
188
|
-
<h4 align='center'><a href='https://twitter.com/
|
188
|
+
<h4 align='center'><a href='https://twitter.com/getaaron'>Aaron Brager</a></h4>
|
189
189
|
</td>
|
190
|
-
<td id='
|
191
|
-
<a href='https://github.com/
|
192
|
-
<img src='https://github.com/
|
190
|
+
<td id='luka-mirosevic'>
|
191
|
+
<a href='https://github.com/lmirosevic'>
|
192
|
+
<img src='https://github.com/lmirosevic.png' width='140px;'>
|
193
193
|
</a>
|
194
|
-
<h4 align='center'><a href='https://twitter.com/
|
194
|
+
<h4 align='center'><a href='https://twitter.com/lmirosevic'>Luka Mirosevic</a></h4>
|
195
195
|
</td>
|
196
196
|
</tr>
|
197
197
|
</table>
|
data/cert/lib/cert/options.rb
CHANGED
@@ -47,7 +47,7 @@ module Cert
|
|
47
47
|
end),
|
48
48
|
FastlaneCore::ConfigItem.new(key: :api_key,
|
49
49
|
env_names: ["CERT_API_KEY", "DELIVER_API_KEY", "APP_STORE_CONNECT_API_KEY"],
|
50
|
-
description: "Your App Store Connect API Key information (https://docs.fastlane.tools/app-store-connect-api/#
|
50
|
+
description: "Your App Store Connect API Key information (https://docs.fastlane.tools/app-store-connect-api/#using-fastlane-api-key-hash-option)",
|
51
51
|
type: Hash,
|
52
52
|
optional: true,
|
53
53
|
sensitive: true,
|
@@ -22,7 +22,7 @@ module Deliver
|
|
22
22
|
end),
|
23
23
|
FastlaneCore::ConfigItem.new(key: :api_key,
|
24
24
|
env_names: ["DELIVER_API_KEY", "APP_STORE_CONNECT_API_KEY"],
|
25
|
-
description: "Your App Store Connect API Key information (https://docs.fastlane.tools/app-store-connect-api/#
|
25
|
+
description: "Your App Store Connect API Key information (https://docs.fastlane.tools/app-store-connect-api/#using-fastlane-api-key-hash-option)",
|
26
26
|
type: Hash,
|
27
27
|
optional: true,
|
28
28
|
sensitive: true,
|
@@ -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
|
|
Binary file
|
@@ -125,7 +125,7 @@ module Fastlane
|
|
125
125
|
end),
|
126
126
|
FastlaneCore::ConfigItem.new(key: :api_key,
|
127
127
|
env_names: ["APPSTORE_BUILD_NUMBER_API_KEY", "APP_STORE_CONNECT_API_KEY"],
|
128
|
-
description: "Your App Store Connect API Key information (https://docs.fastlane.tools/app-store-connect-api/#
|
128
|
+
description: "Your App Store Connect API Key information (https://docs.fastlane.tools/app-store-connect-api/#using-fastlane-api-key-hash-option)",
|
129
129
|
type: Hash,
|
130
130
|
default_value: Fastlane::Actions.lane_context[Fastlane::Actions::SharedValues::APP_STORE_CONNECT_API_KEY],
|
131
131
|
default_value_dynamic: true,
|
@@ -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
|
|