cocoapods-generate 2.0.1 → 2.1.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 +5 -0
- data/VERSION +1 -1
- data/lib/cocoapods/command/gen.rb +2 -2
- data/lib/cocoapods/generate/configuration.rb +21 -15
- data/lib/cocoapods/generate/installer.rb +89 -57
- data/lib/cocoapods/generate/podfile_generator.rb +58 -42
- metadata +3 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: f21262cc4824565c6d34162cb6e20312ddfa2d0ff3331c7b58fac561f2432e2f
|
4
|
+
data.tar.gz: 72fdfa72cca275404202ddbffcf6805fa22598b1897a379b49a77586a328cb52
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 523fe6d21ea621a6c3035a59c950beea558cfbaaac1dcba17ba23ee999103e195845413bbf62a400baa8d3aff031d11a7980b4e2fe5d5e315fce370726be890d
|
7
|
+
data.tar.gz: 2229639a9d3ef51e44aa73ec7b3347fc049421da8ed4430e40d03ac984671ea78ebb594cb027afca83b184c25c052642a7319212980f7607ebb795583c6f12b4
|
data/README.md
CHANGED
@@ -89,6 +89,9 @@ Options:
|
|
89
89
|
default plugins
|
90
90
|
--deterministic-uuids Whether installation should use
|
91
91
|
deterministic UUIDs for pods projects
|
92
|
+
--disable-input-output-paths Whether to disable the input & output paths
|
93
|
+
of the CocoaPods script phases (Copy
|
94
|
+
Frameworks & Copy Resources)
|
92
95
|
--share-schemes-for-development-pods Whether installation should share schemes
|
93
96
|
for development pods
|
94
97
|
--warn-for-multiple-pod-sources Whether installation should warn when a pod
|
@@ -98,6 +101,8 @@ Options:
|
|
98
101
|
modules, as if `use_modular_headers!` were
|
99
102
|
specified. Will error if both this option
|
100
103
|
and a podfile are specified
|
104
|
+
--single-workspace Whether to produce a single workspace for
|
105
|
+
all podspecs specified.
|
101
106
|
```
|
102
107
|
<!-- end cli usage -->
|
103
108
|
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
2.0
|
1
|
+
2.1.0
|
@@ -64,8 +64,8 @@ module Pod
|
|
64
64
|
# even if there are multiple podspecs
|
65
65
|
update_sources if configuration.repo_update?
|
66
66
|
|
67
|
-
Generate::PodfileGenerator.new(configuration).
|
68
|
-
Generate::Installer.new(configuration,
|
67
|
+
Generate::PodfileGenerator.new(configuration).podfiles_by_specs.each do |specs, podfile|
|
68
|
+
Generate::Installer.new(configuration, specs, podfile).install!
|
69
69
|
end
|
70
70
|
|
71
71
|
remove_warnings(UI.warnings)
|
@@ -169,7 +169,7 @@ module Pod
|
|
169
169
|
->(paths) { ('paths do not exist' unless paths.all? { |p| p.is_a?(URI) || p.exist? }) },
|
170
170
|
->(paths) { paths && paths.map { |path| path.to_s =~ %r{https?://} ? URI(path) : Pathname(path).expand_path } }
|
171
171
|
option :podspecs, ArrayOf.new(Pod::Specification),
|
172
|
-
'self.class.podspecs_from_paths(podspec_paths)',
|
172
|
+
'self.class.podspecs_from_paths(podspec_paths, gen_directory)',
|
173
173
|
nil,
|
174
174
|
nil,
|
175
175
|
->(specs) { 'no podspecs found' if specs.empty? },
|
@@ -199,10 +199,12 @@ module Pod
|
|
199
199
|
->(platforms) { Array(platforms).flat_map { |s| s.split(',') } }
|
200
200
|
option :repo_update, BOOLEAN, 'false', 'Force running `pod repo update` before install', nil, nil, coerce_to_bool
|
201
201
|
option :use_default_plugins, BOOLEAN, 'false', 'Whether installation should activate default plugins', nil, nil, coerce_to_bool
|
202
|
-
option :deterministic_uuids, BOOLEAN, 'false', 'Whether installation should use deterministic UUIDs for pods projects', nil, nil, coerce_to_bool
|
203
|
-
option :
|
204
|
-
option :
|
202
|
+
option :deterministic_uuids, BOOLEAN, '(use_podfile && podfile) ? podfile.installation_options.deterministic_uuids : false', 'Whether installation should use deterministic UUIDs for pods projects', nil, nil, coerce_to_bool
|
203
|
+
option :disable_input_output_paths, BOOLEAN, '(use_podfile && podfile) ? podfile.installation_options.disable_input_output_paths : false', 'Whether to disable the input & output paths of the CocoaPods script phases (Copy Frameworks & Copy Resources)', nil, nil, coerce_to_bool
|
204
|
+
option :share_schemes_for_development_pods, [TrueClass, FalseClass, Array], '(use_podfile && podfile) ? podfile.installation_options.share_schemes_for_development_pods : true', 'Whether installation should share schemes for development pods', nil, nil
|
205
|
+
option :warn_for_multiple_pod_sources, BOOLEAN, '(use_podfile && podfile) ? podfile.installation_options.warn_for_multiple_pod_sources : false', 'Whether installation should warn when a pod is found in multiple sources', nil, nil, coerce_to_bool
|
205
206
|
option :use_modular_headers, BOOLEAN, 'false', 'Whether the target should be generated as a clang module, treating dependencies as modules, as if `use_modular_headers!` were specified. Will error if both this option and a podfile are specified', nil, nil, coerce_to_bool
|
207
|
+
option :single_workspace, BOOLEAN, 'false', 'Whether to produce a single workspace for all podspecs specified.', nil, nil, coerce_to_bool
|
206
208
|
|
207
209
|
options.freeze
|
208
210
|
options.each do |o|
|
@@ -302,12 +304,13 @@ module Pod
|
|
302
304
|
end << ' }'
|
303
305
|
end
|
304
306
|
|
305
|
-
# @return [Pathname] the directory for installation of the generated workspace
|
307
|
+
# @return [Pathname] the directory for installation of the generated workspace.
|
306
308
|
#
|
307
|
-
# @param [
|
309
|
+
# @param [Array<Specification>] specs The specs to get a directory name for.
|
308
310
|
#
|
309
|
-
def
|
310
|
-
|
311
|
+
def gen_dir_for_specs(specs)
|
312
|
+
basename = specs.count == 1 ? specs.first.name : 'Workspace'
|
313
|
+
gen_directory.join(basename)
|
311
314
|
end
|
312
315
|
|
313
316
|
# @return [Boolean] whether gen should install with dynamic frameworks
|
@@ -318,14 +321,14 @@ module Pod
|
|
318
321
|
|
319
322
|
# @return [String] The project name to use for generating this workspace.
|
320
323
|
#
|
321
|
-
# @param [Specification]
|
322
|
-
# the
|
324
|
+
# @param [Array<Specification>] specs
|
325
|
+
# the specifications to generate project name for.
|
323
326
|
#
|
324
|
-
def
|
325
|
-
project_name =
|
327
|
+
def project_name_for_specs(specs)
|
328
|
+
project_name = specs.count == 1 ? +specs.first.name.dup : +'Workspace'
|
326
329
|
# When using multiple Xcode project the project name will collide with the actual .xcodeproj meant for the pod
|
327
330
|
# that we are generating the workspace for.
|
328
|
-
project_name << 'Sample' if generate_multiple_pod_projects?
|
331
|
+
project_name << 'Sample' if generate_multiple_pod_projects? && specs.count == 1
|
329
332
|
project_name
|
330
333
|
end
|
331
334
|
|
@@ -335,7 +338,10 @@ module Pod
|
|
335
338
|
# @param [Array<Pathname,URI>] paths
|
336
339
|
# the paths to search for podspecs
|
337
340
|
#
|
338
|
-
|
341
|
+
# @param [Pathname] gen_directory
|
342
|
+
# the directory that the gen installation would occur into.
|
343
|
+
#
|
344
|
+
def self.podspecs_from_paths(paths, gen_directory)
|
339
345
|
paths = [Pathname('.')] if paths.empty?
|
340
346
|
paths.flat_map do |path|
|
341
347
|
if path.is_a?(URI)
|
@@ -351,7 +357,7 @@ module Pod
|
|
351
357
|
$ERROR_INFO
|
352
358
|
end
|
353
359
|
elsif path.directory?
|
354
|
-
glob = Pathname.glob(path + '
|
360
|
+
glob = Pathname.glob(path.expand_path + '**/*.podspec{.json,}').select { |f| f.relative_path_from(gen_directory).to_s.start_with?('..') }
|
355
361
|
next StandardError.new "no specs found in #{UI.path path}" if glob.empty?
|
356
362
|
glob.map { |f| Pod::Specification.from_file(f) }.sort_by(&:name)
|
357
363
|
else
|
@@ -9,19 +9,19 @@ module Pod
|
|
9
9
|
#
|
10
10
|
attr_reader :configuration
|
11
11
|
|
12
|
-
# @return [Specification]
|
12
|
+
# @return [Array<Specification>]
|
13
13
|
# the spec whose workspace is being created
|
14
14
|
#
|
15
|
-
attr_reader :
|
15
|
+
attr_reader :specs
|
16
16
|
|
17
17
|
# @return [Podfile]
|
18
18
|
# the podfile to install
|
19
19
|
#
|
20
20
|
attr_reader :podfile
|
21
21
|
|
22
|
-
def initialize(configuration,
|
22
|
+
def initialize(configuration, specs, podfile)
|
23
23
|
@configuration = configuration
|
24
|
-
@
|
24
|
+
@specs = specs
|
25
25
|
@podfile = podfile
|
26
26
|
end
|
27
27
|
|
@@ -37,7 +37,7 @@ module Pod
|
|
37
37
|
# @return [void]
|
38
38
|
#
|
39
39
|
def install!
|
40
|
-
UI.title "Generating
|
40
|
+
UI.title "Generating workspace in #{UI.path install_directory}" do
|
41
41
|
clean! if configuration.clean?
|
42
42
|
install_directory.mkpath
|
43
43
|
|
@@ -89,7 +89,7 @@ module Pod
|
|
89
89
|
end
|
90
90
|
|
91
91
|
def open_app_project(recreate: false)
|
92
|
-
app_project_path = install_directory.join("#{configuration.
|
92
|
+
app_project_path = install_directory.join("#{configuration.project_name_for_specs(specs)}.xcodeproj")
|
93
93
|
if !recreate && app_project_path.exist?
|
94
94
|
Xcodeproj::Project.open(app_project_path)
|
95
95
|
else
|
@@ -104,27 +104,32 @@ module Pod
|
|
104
104
|
def create_app_project
|
105
105
|
app_project = open_app_project(recreate: !configuration.incremental_installation?)
|
106
106
|
|
107
|
-
|
108
|
-
|
109
|
-
|
107
|
+
platforms_by_spec = Hash[specs.map do |spec|
|
108
|
+
platforms = spec.available_platforms.flatten.reject do |platform|
|
109
|
+
!configuration.platforms.nil? && !configuration.platforms.include?(platform.string_name.downcase)
|
110
|
+
end
|
111
|
+
[spec, platforms]
|
112
|
+
end]
|
110
113
|
|
111
|
-
if
|
112
|
-
Pod::Command::Gen.help! Pod::StandardError.new "No available platforms
|
114
|
+
if platforms_by_spec.values.all?(&:empty?)
|
115
|
+
Pod::Command::Gen.help! Pod::StandardError.new "No available platforms for podspecs #{specs.map(&:name).to_sentence} match requested platforms: #{configuration.platforms}"
|
113
116
|
end
|
114
117
|
|
115
|
-
|
116
|
-
.
|
117
|
-
|
118
|
-
|
119
|
-
|
120
|
-
|
121
|
-
|
122
|
-
|
123
|
-
|
124
|
-
|
125
|
-
|
118
|
+
platforms_by_spec
|
119
|
+
.flat_map do |spec, platforms|
|
120
|
+
platforms.map do |platform|
|
121
|
+
consumer = spec.consumer(platform)
|
122
|
+
target_name = "App-#{Platform.string_name(consumer.platform_name)}"
|
123
|
+
next if app_project.targets.map(&:name).include? target_name
|
124
|
+
native_app_target = Pod::Generator::AppTargetHelper.add_app_target(app_project, consumer.platform_name,
|
125
|
+
deployment_target(consumer), target_name)
|
126
|
+
# Temporarily set Swift version to pass validator checks for pods which do not specify Swift version.
|
127
|
+
# It will then be re-set again within #perform_post_install_steps.
|
128
|
+
Pod::Generator::AppTargetHelper.add_swift_version(native_app_target, Pod::Validator::DEFAULT_SWIFT_VERSION)
|
129
|
+
native_app_target
|
130
|
+
end
|
126
131
|
end
|
127
|
-
.compact.tap do
|
132
|
+
.compact.uniq.tap do
|
128
133
|
app_project.recreate_user_schemes do |scheme, target|
|
129
134
|
installation_result = installation_result_from_target(target)
|
130
135
|
next unless installation_result
|
@@ -134,9 +139,10 @@ module Pod
|
|
134
139
|
end
|
135
140
|
end
|
136
141
|
.each do |target|
|
137
|
-
Xcodeproj::XCScheme.share_scheme(app_project.path, target.name) if target
|
142
|
+
Xcodeproj::XCScheme.share_scheme(app_project.path.to_s, target.name) if target
|
138
143
|
end
|
139
144
|
app_project.save
|
145
|
+
app_project
|
140
146
|
end
|
141
147
|
|
142
148
|
def deployment_target(consumer)
|
@@ -152,8 +158,10 @@ module Pod
|
|
152
158
|
app_project.native_targets.each do |native_app_target|
|
153
159
|
remove_script_phase_from_target(native_app_target, 'Check Pods Manifest.lock')
|
154
160
|
|
155
|
-
|
156
|
-
|
161
|
+
spec_names = specs.map(&:name)
|
162
|
+
pod_targets = installer.pod_targets.select do |pt|
|
163
|
+
pt.platform.name == native_app_target.platform_name && spec_names.include?(pt.pod_name)
|
164
|
+
end
|
157
165
|
|
158
166
|
native_app_target.source_build_phase.clear
|
159
167
|
native_app_target.resources_build_phase.clear
|
@@ -189,22 +197,18 @@ module Pod
|
|
189
197
|
source_file_ref = group.new_file(file.basename)
|
190
198
|
native_app_target.add_file_references([source_file_ref])
|
191
199
|
end
|
192
|
-
|
193
|
-
# If we are doing incremental installation then the file might already be there.
|
200
|
+
else
|
194
201
|
platform_name = Platform.string_name(native_app_target.platform_name)
|
195
202
|
group = group_for_platform_name(app_project, platform_name)
|
196
203
|
main_file_ref = group.files.find { |f| f.display_name == 'main.m' }
|
197
204
|
if main_file_ref.nil?
|
198
|
-
|
199
|
-
|
205
|
+
source_file = create_main_source_file(app_project, pod_targets, native_app_target.name)
|
206
|
+
group = app_project[group.name] || app_project.new_group(group.name, group.name)
|
207
|
+
source_file_ref = group.new_file(source_file)
|
208
|
+
native_app_target.add_file_references([source_file_ref])
|
200
209
|
else
|
201
210
|
native_app_target.add_file_references([main_file_ref])
|
202
211
|
end
|
203
|
-
else
|
204
|
-
Pod::Generator::AppTargetHelper.add_app_project_import(app_project, native_app_target, pod_target,
|
205
|
-
pod_target.platform.name,
|
206
|
-
pod_target.requires_frameworks?,
|
207
|
-
native_app_target.name)
|
208
212
|
end
|
209
213
|
|
210
214
|
# Set `PRODUCT_BUNDLE_IDENTIFIER`
|
@@ -217,18 +221,22 @@ module Pod
|
|
217
221
|
make_ios_app_launchable(app_project, native_app_target)
|
218
222
|
end
|
219
223
|
|
220
|
-
Pod::
|
224
|
+
swift_version = pod_targets.map { |pt| Pod::Version.new(pt.swift_version) }.max.to_s
|
225
|
+
|
226
|
+
Pod::Generator::AppTargetHelper.add_swift_version(native_app_target, swift_version) unless swift_version.blank?
|
221
227
|
if installer.pod_targets.any? { |pt| pt.spec_consumers.any? { |c| c.frameworks.include?('XCTest') } }
|
222
228
|
Pod::Generator::AppTargetHelper.add_xctest_search_paths(native_app_target)
|
223
229
|
end
|
224
230
|
|
225
|
-
|
226
|
-
|
227
|
-
|
228
|
-
|
231
|
+
pod_targets.each do |pod_target|
|
232
|
+
result = installer.target_installation_results.pod_target_installation_results[pod_target.name]
|
233
|
+
share_scheme(result.native_target.project, pod_target.label)
|
234
|
+
pod_target.test_specs.each do |test_spec|
|
235
|
+
share_scheme(result.native_target.project, pod_target.test_target_label(test_spec))
|
236
|
+
end
|
237
|
+
pod_target.app_specs.each do |app_spec|
|
238
|
+
share_scheme(result.native_target.project, pod_target.app_target_label(app_spec))
|
229
239
|
end
|
230
|
-
elsif File.exist?(installer.pods_project.path + pod_target.label)
|
231
|
-
Xcodeproj::XCScheme.share_scheme(installer.pods_project.path, pod_target.label)
|
232
240
|
end
|
233
241
|
|
234
242
|
add_test_spec_schemes_to_app_scheme(installer, app_project)
|
@@ -252,23 +260,19 @@ module Pod
|
|
252
260
|
end
|
253
261
|
|
254
262
|
def add_test_spec_schemes_to_app_scheme(installer, app_project)
|
263
|
+
spec_root_names = Set.new(specs.map { |s| s.root.name })
|
264
|
+
|
255
265
|
test_native_targets =
|
256
|
-
|
257
|
-
|
258
|
-
|
259
|
-
|
260
|
-
|
261
|
-
|
262
|
-
.select { |installation_result| installation_result.target.pod_name == spec.root.name }
|
263
|
-
else
|
264
|
-
installer
|
265
|
-
.pod_targets
|
266
|
-
.select { |pod_target| pod_target.pod_name == spec.root.name }
|
267
|
-
end
|
266
|
+
installer
|
267
|
+
.target_installation_results
|
268
|
+
.pod_target_installation_results
|
269
|
+
.values
|
270
|
+
.flatten(1)
|
271
|
+
.select { |installation_result| spec_root_names.include?(installation_result.target.pod_name) }
|
268
272
|
.flat_map(&:test_native_targets)
|
269
273
|
.group_by(&:platform_name)
|
270
274
|
|
271
|
-
workspace_path = install_directory +
|
275
|
+
workspace_path = install_directory + (configuration.project_name_for_specs(specs) + '.xcworkspace')
|
272
276
|
Xcodeproj::Plist.write_to_path(
|
273
277
|
{ 'IDEWorkspaceSharedSettings_AutocreateContextsIfNeeded' => false },
|
274
278
|
workspace_path.join('xcshareddata').tap(&:mkpath).join('WorkspaceSettings.xcsettings')
|
@@ -287,7 +291,7 @@ module Pod
|
|
287
291
|
|
288
292
|
testable = Xcodeproj::XCScheme::TestAction::TestableReference.new(target)
|
289
293
|
testable.buildable_references.each do |buildable|
|
290
|
-
buildable.xml_element.attributes['ReferencedContainer'] =
|
294
|
+
buildable.xml_element.attributes['ReferencedContainer'] = "container:Pods/#{File.basename(target.project.path)}"
|
291
295
|
end
|
292
296
|
test_action.add_testable(testable)
|
293
297
|
end
|
@@ -380,9 +384,37 @@ module Pod
|
|
380
384
|
Executable.execute_command 'open', [workspace_path]
|
381
385
|
end
|
382
386
|
else
|
383
|
-
UI.info "Open #{UI.path workspace_path} to work on
|
387
|
+
UI.info "Open #{UI.path workspace_path} to work on it!"
|
384
388
|
end
|
385
389
|
end
|
390
|
+
|
391
|
+
def share_scheme(project, scheme_name)
|
392
|
+
scheme = Xcodeproj::XCScheme.user_data_dir(project.path) + "#{scheme_name}.xcscheme"
|
393
|
+
return unless File.exist?(scheme)
|
394
|
+
Xcodeproj::XCScheme.share_scheme(project.path, scheme_name)
|
395
|
+
end
|
396
|
+
|
397
|
+
def create_main_source_file(project, pod_targets, name)
|
398
|
+
source_file = project.path.dirname.+("#{name}/main.m")
|
399
|
+
source_file.parent.mkpath
|
400
|
+
|
401
|
+
import_statements = pod_targets.map do |pod_target|
|
402
|
+
if pod_target.should_build? && pod_target.defines_module?
|
403
|
+
"@import #{pod_target.product_module_name};"
|
404
|
+
else
|
405
|
+
header_name = "#{pod_target.product_module_name}/#{pod_target.product_module_name}.h"
|
406
|
+
"#import <#{header_name}>" if pod_target.sandbox.public_headers.root.+(header_name).file?
|
407
|
+
end
|
408
|
+
end.compact
|
409
|
+
|
410
|
+
source_file.open('w') do |f|
|
411
|
+
f << import_statements.join("\n")
|
412
|
+
f << "\n" unless import_statements.empty?
|
413
|
+
f << "int main() {}\n"
|
414
|
+
end
|
415
|
+
|
416
|
+
source_file
|
417
|
+
end
|
386
418
|
end
|
387
419
|
end
|
388
420
|
end
|
@@ -14,27 +14,27 @@ module Pod
|
|
14
14
|
@configuration = configuration
|
15
15
|
end
|
16
16
|
|
17
|
-
# @return [Hash<Specification
|
18
|
-
# a hash of specifications to generated podfiles
|
17
|
+
# @return [Hash<Array<Specification>, Podfile>] the podfiles keyed by the specs that are part of each.
|
19
18
|
#
|
20
|
-
def
|
19
|
+
def podfiles_by_specs
|
20
|
+
return { configuration.podspecs => podfile_for_specs(configuration.podspecs) } if configuration.single_workspace?
|
21
21
|
Hash[configuration.podspecs.map do |spec|
|
22
|
-
[spec,
|
22
|
+
[[spec], podfile_for_specs([spec])]
|
23
23
|
end]
|
24
24
|
end
|
25
25
|
|
26
26
|
# @return [Podfile] a podfile suitable for installing the given spec
|
27
27
|
#
|
28
|
-
# @param [Specification]
|
28
|
+
# @param [Array<Specification>] specs
|
29
29
|
#
|
30
|
-
def
|
30
|
+
def podfile_for_specs(specs)
|
31
31
|
generator = self
|
32
|
-
dir = configuration.
|
33
|
-
project_name = configuration.
|
32
|
+
dir = configuration.gen_dir_for_specs(specs)
|
33
|
+
project_name = configuration.project_name_for_specs(specs)
|
34
34
|
|
35
35
|
Pod::Podfile.new do
|
36
36
|
project "#{project_name}.xcodeproj"
|
37
|
-
workspace "#{
|
37
|
+
workspace "#{project_name}.xcworkspace"
|
38
38
|
|
39
39
|
plugin 'cocoapods-generate'
|
40
40
|
|
@@ -57,24 +57,32 @@ module Pod
|
|
57
57
|
|
58
58
|
self.defined_in_file = dir.join('CocoaPods.podfile.yaml')
|
59
59
|
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
60
|
+
test_specs_by_spec = Hash[specs.map do |spec|
|
61
|
+
[spec, spec.recursive_subspecs.select(&:test_specification?)]
|
62
|
+
end]
|
63
|
+
app_specs_by_spec = Hash[specs.map do |spec|
|
64
|
+
app_specs = if spec.respond_to?(:app_specification?)
|
65
|
+
spec.recursive_subspecs.select(&:app_specification?)
|
66
|
+
else
|
67
|
+
[]
|
68
|
+
end
|
69
|
+
[spec, app_specs]
|
70
|
+
end]
|
66
71
|
|
67
72
|
# Stick all of the transitive dependencies in an abstract target.
|
68
73
|
# This allows us to force CocoaPods to use the versions / sources / external sources
|
69
74
|
# that we want.
|
70
|
-
# By using an abstract target,
|
71
75
|
abstract_target 'Transitive Dependencies' do
|
72
|
-
pods_for_transitive_dependencies =
|
73
|
-
|
74
|
-
|
75
|
-
|
76
|
-
|
76
|
+
pods_for_transitive_dependencies = specs.flat_map do |spec|
|
77
|
+
[spec.name]
|
78
|
+
.concat(test_specs_by_spec.keys.map(&:name))
|
79
|
+
.concat(test_specs_by_spec.values.flatten.flat_map { |ts| ts.dependencies.flat_map(&:name) })
|
80
|
+
.concat(app_specs_by_spec.keys.map(&:name))
|
81
|
+
.concat(app_specs_by_spec.values.flatten.flat_map { |as| as.dependencies.flat_map(&:name) })
|
82
|
+
end
|
83
|
+
pods_for_transitive_dependencies.uniq!
|
77
84
|
|
85
|
+
spec_names = specs.map { |s| s.root.name }
|
78
86
|
dependencies = generator
|
79
87
|
.transitive_dependencies_by_pod
|
80
88
|
.values_at(*pods_for_transitive_dependencies)
|
@@ -82,7 +90,7 @@ module Pod
|
|
82
90
|
.flatten(1)
|
83
91
|
.uniq
|
84
92
|
.sort_by(&:name)
|
85
|
-
.reject { |d| d.root_name
|
93
|
+
.reject { |d| spec_names.include?(d.root_name) }
|
86
94
|
|
87
95
|
dependencies.each do |dependency|
|
88
96
|
pod_args = generator.pod_args_for_dependency(self, dependency)
|
@@ -90,9 +98,8 @@ module Pod
|
|
90
98
|
end
|
91
99
|
end
|
92
100
|
|
93
|
-
# Add platform-specific concrete targets that inherit the
|
94
|
-
|
95
|
-
spec_platform_names = spec.available_platforms.map(&:string_name).flatten.each.reject do |platform_name|
|
101
|
+
# Add platform-specific concrete targets that inherit the `pod` declaration for the local pod.
|
102
|
+
spec_platform_names = specs.flat_map { |s| s.available_platforms.map(&:string_name) }.uniq.each.reject do |platform_name|
|
96
103
|
!generator.configuration.platforms.nil? && !generator.configuration.platforms.include?(platform_name.downcase)
|
97
104
|
end
|
98
105
|
|
@@ -117,26 +124,31 @@ module Pod
|
|
117
124
|
inhibit_all_warnings! if generator.inhibit_all_warnings?
|
118
125
|
use_modular_headers! if generator.use_modular_headers?
|
119
126
|
|
120
|
-
|
121
|
-
|
122
|
-
|
123
|
-
|
124
|
-
{ testspecs: test_specs, appspecs: app_specs }.each do |key, specs|
|
125
|
-
pod_options[key] = specs.map { |s| s.name.sub(%r{^#{Regexp.escape spec.root.name}/}, '') }.sort unless specs.empty?
|
126
|
-
end
|
127
|
+
specs.each do |spec|
|
128
|
+
# This is the pod declaration for the local pod,
|
129
|
+
# it will be inherited by the concrete target definitions below
|
130
|
+
pod_options = generator.dependency_compilation_kwargs(spec.name)
|
127
131
|
|
128
|
-
|
132
|
+
path = spec.defined_in_file.relative_path_from(dir).to_s
|
133
|
+
pod_options[:path] = path
|
134
|
+
{ testspecs: test_specs_by_spec[spec], appspecs: app_specs_by_spec[spec] }.each do |key, subspecs|
|
135
|
+
pod_options[key] = subspecs.map { |s| s.name.sub(%r{^#{Regexp.escape spec.root.name}/}, '') }.sort unless subspecs.blank?
|
136
|
+
end
|
137
|
+
pod spec.name, **pod_options
|
138
|
+
end
|
129
139
|
|
130
140
|
# Implement local-sources option to set up dependencies to podspecs in the local filesystem.
|
131
141
|
next if generator.configuration.local_sources.empty?
|
132
|
-
|
133
|
-
|
134
|
-
|
135
|
-
|
136
|
-
|
137
|
-
|
138
|
-
|
139
|
-
|
142
|
+
specs.each do |spec|
|
143
|
+
generator.transitive_local_dependencies(spec, generator.configuration.local_sources).sort_by(&:first).each do |dependency, podspec_file|
|
144
|
+
pod_options = generator.dependency_compilation_kwargs(dependency.name)
|
145
|
+
pod_options[:path] = if podspec_file[0] == '/' # absolute path
|
146
|
+
podspec_file
|
147
|
+
else
|
148
|
+
'../../' + podspec_file
|
149
|
+
end
|
150
|
+
pod dependency.name, **pod_options
|
151
|
+
end
|
140
152
|
end
|
141
153
|
end
|
142
154
|
end
|
@@ -325,7 +337,7 @@ module Pod
|
|
325
337
|
def installation_options
|
326
338
|
installation_options = {
|
327
339
|
deterministic_uuids: configuration.deterministic_uuids?,
|
328
|
-
share_schemes_for_development_pods: configuration.share_schemes_for_development_pods
|
340
|
+
share_schemes_for_development_pods: configuration.share_schemes_for_development_pods,
|
329
341
|
warn_for_multiple_pod_sources: configuration.warn_for_multiple_pod_sources?
|
330
342
|
}
|
331
343
|
|
@@ -337,6 +349,10 @@ module Pod
|
|
337
349
|
installation_options[:incremental_installation] = configuration.incremental_installation?
|
338
350
|
end
|
339
351
|
|
352
|
+
if Pod::Installer::InstallationOptions.all_options.include?('disable_input_output_paths')
|
353
|
+
installation_options[:disable_input_output_paths] = configuration.disable_input_output_paths
|
354
|
+
end
|
355
|
+
|
340
356
|
installation_options
|
341
357
|
end
|
342
358
|
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: cocoapods-generate
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 2.0
|
4
|
+
version: 2.1.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Samuel Giddins
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2021-01-04 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: cocoapods-disable-podfile-validations
|
@@ -101,7 +101,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
101
101
|
- !ruby/object:Gem::Version
|
102
102
|
version: '0'
|
103
103
|
requirements: []
|
104
|
-
rubygems_version: 3.0.
|
104
|
+
rubygems_version: 3.0.3
|
105
105
|
signing_key:
|
106
106
|
specification_version: 4
|
107
107
|
summary: Generates Xcode workspaces from a podspec.
|