fastlane 2.191.0 → 2.192.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (36) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +92 -92
  3. data/fastlane/lib/assets/completions/completion.bash +4 -1
  4. data/fastlane/lib/assets/completions/completion.zsh +6 -5
  5. data/fastlane/lib/fastlane/actions/create_xcframework.rb +97 -17
  6. data/fastlane/lib/fastlane/actions/notarize.rb +77 -1
  7. data/fastlane/lib/fastlane/actions/push_git_tags.rb +1 -1
  8. data/fastlane/lib/fastlane/actions/zip.rb +3 -3
  9. data/fastlane/lib/fastlane/version.rb +1 -1
  10. data/fastlane/swift/Deliverfile.swift +1 -1
  11. data/fastlane/swift/DeliverfileProtocol.swift +1 -1
  12. data/fastlane/swift/Fastlane.swift +48 -10
  13. data/fastlane/swift/Gymfile.swift +1 -1
  14. data/fastlane/swift/GymfileProtocol.swift +1 -1
  15. data/fastlane/swift/Matchfile.swift +1 -1
  16. data/fastlane/swift/MatchfileProtocol.swift +1 -1
  17. data/fastlane/swift/Precheckfile.swift +1 -1
  18. data/fastlane/swift/PrecheckfileProtocol.swift +1 -1
  19. data/fastlane/swift/Scanfile.swift +1 -1
  20. data/fastlane/swift/ScanfileProtocol.swift +1 -1
  21. data/fastlane/swift/Screengrabfile.swift +1 -1
  22. data/fastlane/swift/ScreengrabfileProtocol.swift +1 -1
  23. data/fastlane/swift/Snapshotfile.swift +1 -1
  24. data/fastlane/swift/SnapshotfileProtocol.swift +1 -1
  25. data/fastlane/swift/formatting/Brewfile.lock.json +6 -6
  26. data/fastlane_core/lib/fastlane_core/ui/fastlane_runner.rb +41 -0
  27. data/pilot/lib/pilot/build_manager.rb +0 -1
  28. data/produce/lib/produce/service.rb +1 -1
  29. data/spaceship/lib/spaceship/connect_api/api_client.rb +15 -1
  30. data/spaceship/lib/spaceship/connect_api/models/app.rb +2 -1
  31. data/spaceship/lib/spaceship/connect_api/testflight/.testflight.rb.swp +0 -0
  32. data/spaceship/lib/spaceship/connect_api/testflight/testflight.rb +7 -5
  33. data/spaceship/lib/spaceship/connect_api/token.rb +2 -0
  34. data/supply/lib/supply/client.rb +38 -5
  35. data/supply/lib/supply/options.rb +7 -0
  36. metadata +35 -20
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 191c5f2f91fe567ba6f0c35848e69c0b921480ef1f2076bd531b774b6773bada
4
- data.tar.gz: 6cf068574ea7ea72ac092791021fc78c2d1486d9e6f03772cc9564420e98a989
3
+ metadata.gz: f1c0c051ec3343adfcc8dcc927954b9fe5e76bf56d813be5d4f0823695dcb835
4
+ data.tar.gz: 328239727a6f80cca28a6524784cb2f4e1b39454f0c6f2e2cf036735c26f6811
5
5
  SHA512:
6
- metadata.gz: aacb03423627e0dc324915167515f0a4c8faebd6349c9a989320332baa668782f7dfbd0c20899e0905fcffc3d3ad3f8e254e05f75b30facff9744636b37c3c00
7
- data.tar.gz: fa30c4044f3e3dffa7b53ed4a48d9e6fa2805649538077e2134f41eeada06e9bc66f4821124a5e59fb29542727aa8df9b278660ae522fbab134bee4427c6bc13
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='josh-holtz'>
39
- <a href='https://github.com/joshdholtz'>
40
- <img src='https://github.com/joshdholtz.png' width='140px;'>
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/joshdholtz'>Josh Holtz</a></h4>
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='max-ott'>
71
- <a href='https://github.com/max-ott'>
72
- <img src='https://github.com/max-ott.png' width='140px;'>
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/ott_max'>Max Ott</a></h4>
74
+ <h4 align='center'><a href='https://twitter.com/aligatr'>Olivier Halligon</a></h4>
75
75
  </td>
76
- <td id='maksym-grebenets'>
77
- <a href='https://github.com/mgrebenets'>
78
- <img src='https://github.com/mgrebenets.png' width='140px;'>
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/mgrebenets'>Maksym Grebenets</a></h4>
80
+ <h4 align='center'><a href='https://twitter.com/acrooow'>Manu Wallner</a></h4>
81
81
  </td>
82
- <td id='felix-krause'>
83
- <a href='https://github.com/KrauseFx'>
84
- <img src='https://github.com/KrauseFx.png' width='140px;'>
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/KrauseFx'>Felix Krause</a></h4>
86
+ <h4 align='center'><a href='https://twitter.com/taquitos'>Joshua Liebowitz</a></h4>
87
87
  </td>
88
- <td id='kohki-miki'>
89
- <a href='https://github.com/giginet'>
90
- <img src='https://github.com/giginet.png' width='140px;'>
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/giginet'>Kohki Miki</a></h4>
92
+ <h4 align='center'><a href='https://twitter.com/lmirosevic'>Luka Mirosevic</a></h4>
93
93
  </td>
94
- <td id='helmut-januschka'>
95
- <a href='https://github.com/hjanuschka'>
96
- <img src='https://github.com/hjanuschka.png' width='140px;'>
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/hjanuschka'>Helmut Januschka</a></h4>
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='jimmy-dee'>
103
- <a href='https://github.com/jdee'>
104
- <img src='https://github.com/jdee.png' width='140px;'>
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'>Jimmy Dee</h4>
106
+ <h4 align='center'><a href='https://twitter.com/mollyIV'>Daniel Jankowski</a></h4>
107
107
  </td>
108
- <td id='roger-oba'>
109
- <a href='https://github.com/rogerluan'>
110
- <img src='https://github.com/rogerluan.png' width='140px;'>
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/rogerluan_'>Roger Oba</a></h4>
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='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;'>
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/Sujan'>Jan Piotrowski</a></h4>
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='joshua-liebowitz'>
147
- <a href='https://github.com/taquitos'>
148
- <img src='https://github.com/taquitos.png' width='140px;'>
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/taquitos'>Joshua Liebowitz</a></h4>
144
+ <h4 align='center'><a href='https://twitter.com/rogerluan_'>Roger Oba</a></h4>
151
145
  </td>
152
- <td id='fumiya-nakamura'>
153
- <a href='https://github.com/nafu'>
154
- <img src='https://github.com/nafu.png' width='140px;'>
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/nafu003'>Fumiya Nakamura</a></h4>
150
+ <h4 align='center'><a href='https://twitter.com/Revolt666'>Iulian Onofrei</a></h4>
157
151
  </td>
158
- <td id='jérôme-lacoste'>
159
- <a href='https://github.com/lacostej'>
160
- <img src='https://github.com/lacostej.png' width='140px;'>
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'><a href='https://twitter.com/lacostej'>Jérôme Lacoste</a></h4>
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='manu-wallner'>
167
- <a href='https://github.com/milch'>
168
- <img src='https://github.com/milch.png' width='140px;'>
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/acrooow'>Manu Wallner</a></h4>
170
+ <h4 align='center'><a href='https://twitter.com/ott_max'>Max Ott</a></h4>
171
171
  </td>
172
- <td id='andrew-mcburney'>
173
- <a href='https://github.com/armcburney'>
174
- <img src='https://github.com/armcburney.png' width='140px;'>
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/armcburney'>Andrew McBurney</a></h4>
176
+ <h4 align='center'><a href='https://twitter.com/iammanishrathi'>Manish Rathi</a></h4>
177
177
  </td>
178
- <td id='olivier-halligon'>
179
- <a href='https://github.com/AliSoftware'>
180
- <img src='https://github.com/AliSoftware.png' width='140px;'>
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/aligatr'>Olivier Halligon</a></h4>
182
+ <h4 align='center'><a href='https://twitter.com/giginet'>Kohki Miki</a></h4>
183
183
  </td>
184
- <td id='iulian-onofrei'>
185
- <a href='https://github.com/revolter'>
186
- <img src='https://github.com/revolter.png' width='140px;'>
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/Revolt666'>Iulian Onofrei</a></h4>
188
+ <h4 align='center'><a href='https://twitter.com/armcburney'>Andrew McBurney</a></h4>
189
189
  </td>
190
- <td id='stefan-natchev'>
191
- <a href='https://github.com/snatchev'>
192
- <img src='https://github.com/snatchev.png' width='140px;'>
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/snatchev'>Stefan Natchev</a></h4>
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=$(grep "^\s*lane \:" $file | awk -F ':' '{print $2}' | awk -F ' ' '{print $1}')
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=`cat $file | grep "^\s*lane \:" | awk -F ':' '{print $2}' | awk -F ' ' '{print $1}'`
18
- completions="$completions
19
- update_fastlane"
19
+ completions="$(sed -En 's/^[ ]*lane +:([^ ]+).*$/\1/p' "$file")"
20
+ completions="$completions update_fastlane"
20
21
 
21
- reply=( "${(ps:\n:)completions}" )
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
- UI.user_error!("Please provide either :frameworks or :libraries to be packaged into the xcframework") unless params[:frameworks] || params[:libraries]
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 << params[:frameworks].map { |framework| ['-framework', "\"#{framework}\""] }.flatten if params[:frameworks]
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 an array containing
41
- the list of frameworks to be packaged using the :frameworks parameter.
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 with their corresponding headers
44
- provide a hash containing the library as the key and the directory containing
45
- its headers as the value (or an empty string if there are no headers associated
46
- with the provided library).
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, with their corresponding headers",
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, headers|
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
- UI.user_error!("#{headers} doesn't exist or is not a directory") unless headers.empty? || File.directory?(headers)
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(libraries: { 'LibraryA.so' => '', 'LibraryB.so' => 'LibraryBHeaders'}, output: 'UniversalFramework.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