cocoapods 1.10.2 → 1.11.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGELOG.md +214 -5
- data/README.md +11 -11
- data/lib/cocoapods/command/outdated.rb +12 -1
- data/lib/cocoapods/command/repo/push.rb +17 -0
- data/lib/cocoapods/command/spec/cat.rb +3 -1
- data/lib/cocoapods/command/spec/lint.rb +1 -1
- data/lib/cocoapods/command/spec/which.rb +3 -1
- data/lib/cocoapods/command/spec.rb +18 -9
- data/lib/cocoapods/config.rb +1 -1
- data/lib/cocoapods/downloader/cache.rb +95 -6
- data/lib/cocoapods/downloader.rb +4 -2
- data/lib/cocoapods/external_sources/podspec_source.rb +1 -1
- data/lib/cocoapods/gem_version.rb +1 -1
- data/lib/cocoapods/generator/acknowledgements.rb +1 -1
- data/lib/cocoapods/generator/app_target_helper.rb +7 -3
- data/lib/cocoapods/generator/copy_dsyms_script.rb +4 -4
- data/lib/cocoapods/generator/copy_xcframework_script.rb +4 -48
- data/lib/cocoapods/generator/embed_frameworks_script.rb +2 -1
- data/lib/cocoapods/generator/script_phase_constants.rb +1 -0
- data/lib/cocoapods/installer/analyzer/sandbox_analyzer.rb +31 -4
- data/lib/cocoapods/installer/analyzer.rb +12 -8
- data/lib/cocoapods/installer/podfile_validator.rb +2 -2
- data/lib/cocoapods/installer/pre_integrate_hooks_context.rb +9 -0
- data/lib/cocoapods/installer/project_cache/project_cache_analyzer.rb +9 -2
- data/lib/cocoapods/installer/project_cache/project_installation_cache.rb +15 -2
- data/lib/cocoapods/installer/project_cache/target_cache_key.rb +7 -4
- data/lib/cocoapods/installer/user_project_integrator/target_integrator.rb +149 -9
- data/lib/cocoapods/installer/xcode/pods_project_generator/app_host_installer.rb +10 -3
- data/lib/cocoapods/installer/xcode/pods_project_generator/file_references_installer.rb +25 -6
- data/lib/cocoapods/installer/xcode/pods_project_generator/pod_target_dependency_installer.rb +6 -19
- data/lib/cocoapods/installer/xcode/pods_project_generator/pod_target_installer.rb +63 -56
- data/lib/cocoapods/installer/xcode/pods_project_generator/pod_target_integrator.rb +48 -6
- data/lib/cocoapods/installer/xcode/pods_project_generator/target_installation_result.rb +2 -2
- data/lib/cocoapods/installer/xcode/pods_project_generator/target_installer.rb +2 -5
- data/lib/cocoapods/installer/xcode/pods_project_generator.rb +1 -1
- data/lib/cocoapods/installer.rb +52 -4
- data/lib/cocoapods/resolver.rb +4 -4
- data/lib/cocoapods/sandbox/file_accessor.rb +48 -10
- data/lib/cocoapods/sandbox/headers_store.rb +3 -1
- data/lib/cocoapods/sandbox/path_list.rb +1 -1
- data/lib/cocoapods/sandbox/pod_dir_cleaner.rb +1 -1
- data/lib/cocoapods/sources_manager.rb +14 -8
- data/lib/cocoapods/target/aggregate_target.rb +23 -1
- data/lib/cocoapods/target/build_settings.rb +45 -20
- data/lib/cocoapods/target/pod_target.rb +47 -22
- data/lib/cocoapods/user_interface.rb +4 -0
- data/lib/cocoapods/validator.rb +24 -4
- data/lib/cocoapods/version_metadata.rb +1 -1
- data/lib/cocoapods/xcode/xcframework.rb +8 -3
- metadata +26 -19
data/lib/cocoapods/installer/xcode/pods_project_generator/pod_target_dependency_installer.rb
CHANGED
@@ -36,25 +36,24 @@ module Pod
|
|
36
36
|
pod_target = pod_target_installation_result.target
|
37
37
|
native_target = pod_target_installation_result.native_target
|
38
38
|
project = native_target.project
|
39
|
-
frameworks_group = project.frameworks_group
|
40
39
|
|
41
40
|
# First, wire up all resource bundles.
|
42
41
|
wire_resource_bundle_targets(pod_target_installation_result.resource_bundle_targets,
|
43
42
|
native_target, pod_target)
|
44
43
|
# Wire up all dependencies to this pod target, if any.
|
45
44
|
wire_target_dependencies(pod_target, native_target, project, pod_target_installation_results,
|
46
|
-
metadata_cache
|
45
|
+
metadata_cache)
|
47
46
|
|
48
47
|
# Wire up test native targets.
|
49
48
|
unless pod_target_installation_result.test_native_targets.empty?
|
50
49
|
wire_test_native_targets(pod_target, pod_target_installation_result, pod_target_installation_results,
|
51
|
-
project,
|
50
|
+
project, metadata_cache)
|
52
51
|
end
|
53
52
|
|
54
53
|
# Wire up app native targets.
|
55
54
|
unless pod_target_installation_result.app_native_targets.empty?
|
56
55
|
wire_app_native_targets(pod_target, pod_target_installation_result, pod_target_installation_results,
|
57
|
-
project,
|
56
|
+
project, metadata_cache)
|
58
57
|
end
|
59
58
|
end
|
60
59
|
end
|
@@ -70,8 +69,7 @@ module Pod
|
|
70
69
|
end
|
71
70
|
end
|
72
71
|
|
73
|
-
def wire_target_dependencies(pod_target, native_target, project,
|
74
|
-
pod_target_installation_results, metadata_cache, frameworks_group)
|
72
|
+
def wire_target_dependencies(pod_target, native_target, project, pod_target_installation_results, metadata_cache)
|
75
73
|
dependent_targets = pod_target.dependent_targets
|
76
74
|
dependent_targets.each do |dependent_target|
|
77
75
|
is_local = sandbox.local?(dependent_target.pod_name)
|
@@ -81,7 +79,6 @@ module Pod
|
|
81
79
|
project.add_pod_subproject(dependent_project, is_local)
|
82
80
|
end
|
83
81
|
native_target.add_dependency(installation_result.native_target)
|
84
|
-
add_framework_file_reference_to_native_target(native_target, pod_target, dependent_target, frameworks_group)
|
85
82
|
else
|
86
83
|
# Hit the cache
|
87
84
|
cached_dependency = metadata_cache.target_label_by_metadata[dependent_target.label]
|
@@ -91,7 +88,7 @@ module Pod
|
|
91
88
|
end
|
92
89
|
end
|
93
90
|
|
94
|
-
def wire_test_native_targets(pod_target, installation_result, pod_target_installation_results, project,
|
91
|
+
def wire_test_native_targets(pod_target, installation_result, pod_target_installation_results, project, metadata_cache)
|
95
92
|
installation_result.test_specs_by_native_target.each do |test_native_target, test_spec|
|
96
93
|
resource_bundle_native_targets = installation_result.test_resource_bundle_targets[test_spec.name] || []
|
97
94
|
resource_bundle_native_targets.each do |test_resource_bundle_target|
|
@@ -107,7 +104,6 @@ module Pod
|
|
107
104
|
project.add_pod_subproject(dependent_test_project, is_local)
|
108
105
|
end
|
109
106
|
test_native_target.add_dependency(dependency_installation_result.native_target)
|
110
|
-
add_framework_file_reference_to_native_target(test_native_target, pod_target, test_dependent_target, frameworks_group)
|
111
107
|
else
|
112
108
|
# Hit the cache
|
113
109
|
cached_dependency = metadata_cache.target_label_by_metadata[test_dependent_target.label]
|
@@ -162,7 +158,7 @@ module Pod
|
|
162
158
|
end
|
163
159
|
end
|
164
160
|
|
165
|
-
def wire_app_native_targets(pod_target, installation_result, pod_target_installation_results, project,
|
161
|
+
def wire_app_native_targets(pod_target, installation_result, pod_target_installation_results, project, metadata_cache)
|
166
162
|
installation_result.app_specs_by_native_target.each do |app_native_target, app_spec|
|
167
163
|
resource_bundle_native_targets = installation_result.app_resource_bundle_targets[app_spec.name] || []
|
168
164
|
resource_bundle_native_targets.each do |app_resource_bundle_target|
|
@@ -184,7 +180,6 @@ module Pod
|
|
184
180
|
project.add_pod_subproject(dependency_project, is_local)
|
185
181
|
end
|
186
182
|
app_native_target.add_dependency(dependency_installation_result.native_target)
|
187
|
-
add_framework_file_reference_to_native_target(app_native_target, pod_target, app_dependent_target, frameworks_group)
|
188
183
|
else
|
189
184
|
# Hit the cache
|
190
185
|
cached_dependency = metadata_cache.target_label_by_metadata[app_dependent_target.label]
|
@@ -194,14 +189,6 @@ module Pod
|
|
194
189
|
end
|
195
190
|
end
|
196
191
|
end
|
197
|
-
|
198
|
-
def add_framework_file_reference_to_native_target(native_target, pod_target, dependent_target, frameworks_group)
|
199
|
-
if pod_target.should_build? && pod_target.build_as_dynamic? && dependent_target.should_build?
|
200
|
-
product_ref = frameworks_group.files.find { |f| f.path == dependent_target.product_name } ||
|
201
|
-
frameworks_group.new_product_ref_for_target(dependent_target.product_basename, dependent_target.product_type)
|
202
|
-
native_target.frameworks_build_phase.add_file_reference(product_ref, true)
|
203
|
-
end
|
204
|
-
end
|
205
192
|
end
|
206
193
|
end
|
207
194
|
end
|
@@ -43,18 +43,14 @@ module Pod
|
|
43
43
|
test_file_accessors = target.file_accessors.select { |fa| fa.spec.test_specification? }
|
44
44
|
app_file_accessors = target.file_accessors.select { |fa| fa.spec.app_specification? }
|
45
45
|
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
create_xcconfig_file(native_target, resource_bundle_targets)
|
54
|
-
return TargetInstallationResult.new(target, native_target, resource_bundle_targets)
|
55
|
-
end
|
46
|
+
native_target = if target.should_build?
|
47
|
+
add_target
|
48
|
+
else
|
49
|
+
# For targets that should not be built (e.g. pre-built vendored frameworks etc), we add a placeholder
|
50
|
+
# PBXAggregateTarget that will be used to wire up dependencies later.
|
51
|
+
add_placeholder_target
|
52
|
+
end
|
56
53
|
|
57
|
-
native_target = add_target
|
58
54
|
resource_bundle_targets = add_resources_bundle_targets(library_file_accessors).values.flatten
|
59
55
|
|
60
56
|
test_native_targets = add_test_targets
|
@@ -65,8 +61,10 @@ module Pod
|
|
65
61
|
app_resource_bundle_targets = add_resources_bundle_targets(app_file_accessors)
|
66
62
|
|
67
63
|
add_files_to_build_phases(native_target, test_native_targets, app_native_targets)
|
68
|
-
|
69
|
-
|
64
|
+
targets_to_validate = test_native_targets + app_native_targets.values
|
65
|
+
targets_to_validate << native_target if target.should_build?
|
66
|
+
validate_targets_contain_sources(targets_to_validate)
|
67
|
+
validate_xcframeworks if target.should_build?
|
70
68
|
|
71
69
|
create_copy_xcframeworks_script unless target.xcframeworks.values.all?(&:empty?)
|
72
70
|
|
@@ -74,7 +72,7 @@ module Pod
|
|
74
72
|
create_test_xcconfig_files(test_native_targets, test_resource_bundle_targets)
|
75
73
|
create_app_xcconfig_files(app_native_targets, app_resource_bundle_targets)
|
76
74
|
|
77
|
-
if target.defines_module?
|
75
|
+
if target.should_build? && target.defines_module? && !skip_modulemap?(target.library_specs)
|
78
76
|
create_module_map(native_target) do |generator|
|
79
77
|
generator.headers.concat module_map_additional_headers
|
80
78
|
end
|
@@ -99,20 +97,21 @@ module Pod
|
|
99
97
|
end
|
100
98
|
end
|
101
99
|
|
102
|
-
if target.build_as_framework?
|
100
|
+
if target.should_build? && target.build_as_framework?
|
103
101
|
unless skip_info_plist?(native_target)
|
104
|
-
create_info_plist_file(target.info_plist_path, native_target, target.version, target.platform,
|
102
|
+
create_info_plist_file(target.info_plist_path, native_target, target.version, target.platform,
|
103
|
+
:additional_entries => target.info_plist_entries)
|
105
104
|
end
|
106
105
|
create_build_phase_to_symlink_header_folders(native_target)
|
107
106
|
end
|
108
107
|
|
109
|
-
if target.build_as_library? && target.uses_swift?
|
108
|
+
if target.should_build? && target.build_as_library? && target.uses_swift?
|
110
109
|
add_swift_library_compatibility_header_phase(native_target)
|
111
110
|
end
|
112
111
|
|
113
112
|
project_directory = project.path.dirname
|
114
113
|
|
115
|
-
|
114
|
+
if target.should_build? && !skip_pch?(target.library_specs)
|
116
115
|
path = target.prefix_header_path
|
117
116
|
create_prefix_header(path, library_file_accessors, target.platform, native_target, project_directory)
|
118
117
|
add_file_to_support_group(path)
|
@@ -135,7 +134,7 @@ module Pod
|
|
135
134
|
add_file_to_support_group(path)
|
136
135
|
end
|
137
136
|
end
|
138
|
-
create_dummy_source(native_target)
|
137
|
+
create_dummy_source(native_target) if target.should_build?
|
139
138
|
create_copy_dsyms_script
|
140
139
|
clean_support_files_temp_dir
|
141
140
|
TargetInstallationResult.new(target, native_target, resource_bundle_targets,
|
@@ -191,6 +190,10 @@ module Pod
|
|
191
190
|
specs.any? { |spec| spec.root.prefix_header_file.is_a?(FalseClass) }
|
192
191
|
end
|
193
192
|
|
193
|
+
def skip_modulemap?(specs)
|
194
|
+
specs.any? { |spec| spec.module_map.is_a?(FalseClass) }
|
195
|
+
end
|
196
|
+
|
194
197
|
# True if info.plist generation should be skipped
|
195
198
|
#
|
196
199
|
# @param [PXNativeTarget] native_target
|
@@ -264,10 +267,10 @@ module Pod
|
|
264
267
|
# @yield_param [Array<PBXFileReference>} The filtered resource file references to be installed
|
265
268
|
# in the compile sources phase.
|
266
269
|
#
|
267
|
-
# @note Core Data model directories (.xcdatamodeld)
|
268
|
-
# `Copy Resources` build phase like all other resources,
|
269
|
-
# compile correctly in either the resources or compile phase. In
|
270
|
-
# versions of xcode, there's an exception for data models that generate
|
270
|
+
# @note Core Data model directories (.xcdatamodeld) and RealityKit projects (.rcproject)
|
271
|
+
# used to be added to the `Copy Resources` build phase like all other resources,
|
272
|
+
# since they would compile correctly in either the resources or compile phase. In
|
273
|
+
# recent versions of xcode, there's an exception for data models that generate
|
271
274
|
# headers. These need to be added to the compile sources phase of a real
|
272
275
|
# target for the headers to be built in time for code in the target to
|
273
276
|
# use them. These kinds of models generally break when added to resource
|
@@ -287,7 +290,7 @@ module Pod
|
|
287
290
|
|
288
291
|
ref
|
289
292
|
end.compact.uniq
|
290
|
-
compile_phase_matcher = lambda { |ref| !(ref.path =~ /.*\.xcdatamodeld/i).nil? }
|
293
|
+
compile_phase_matcher = lambda { |ref| !(ref.path =~ /.*\.(xcdatamodeld|rcproject)/i).nil? }
|
291
294
|
compile_phase_refs, resources_phase_refs = file_references.partition(&compile_phase_matcher)
|
292
295
|
yield compile_phase_refs, resources_phase_refs
|
293
296
|
end
|
@@ -307,21 +310,26 @@ module Pod
|
|
307
310
|
#
|
308
311
|
# @return [void]
|
309
312
|
#
|
310
|
-
def add_files_to_build_phases(
|
313
|
+
def add_files_to_build_phases(library_native_target, test_native_targets, app_native_targets)
|
311
314
|
target.file_accessors.each do |file_accessor|
|
312
315
|
consumer = file_accessor.spec_consumer
|
313
316
|
|
314
317
|
native_target = case consumer.spec.spec_type
|
315
318
|
when :library
|
316
|
-
|
319
|
+
library_native_target
|
317
320
|
when :test
|
318
321
|
test_native_target_from_spec(consumer.spec, test_native_targets)
|
319
322
|
when :app
|
320
323
|
app_native_targets[consumer.spec]
|
324
|
+
else
|
325
|
+
raise ArgumentError, "Unknown spec type #{consumer.spec.spec_type}."
|
321
326
|
end
|
322
327
|
|
328
|
+
next if native_target.is_a?(Xcodeproj::Project::Object::PBXAggregateTarget)
|
329
|
+
|
323
330
|
headers = file_accessor.headers
|
324
331
|
public_headers = file_accessor.public_headers.map(&:realpath)
|
332
|
+
project_headers = file_accessor.project_headers.map(&:realpath)
|
325
333
|
private_headers = file_accessor.private_headers.map(&:realpath)
|
326
334
|
other_source_files = file_accessor.other_source_files
|
327
335
|
|
@@ -344,7 +352,7 @@ module Pod
|
|
344
352
|
|
345
353
|
header_file_refs = project_file_references_array(headers, 'header')
|
346
354
|
native_target.add_file_references(header_file_refs) do |build_file|
|
347
|
-
add_header(file_accessor, build_file, public_headers, private_headers, native_target)
|
355
|
+
add_header(file_accessor, build_file, public_headers, project_headers, private_headers, native_target)
|
348
356
|
end
|
349
357
|
|
350
358
|
other_file_refs = project_file_references_array(other_source_files, 'other source')
|
@@ -356,7 +364,10 @@ module Pod
|
|
356
364
|
native_target.add_file_references(compile_phase_refs, nil)
|
357
365
|
|
358
366
|
if target.build_as_static_framework? && consumer.spec.library_specification?
|
359
|
-
resource_phase_refs = resource_phase_refs.select
|
367
|
+
resource_phase_refs = resource_phase_refs.select do |ref|
|
368
|
+
filename = ref.name || ref.path
|
369
|
+
Target.resource_extension_compilable?(File.extname(filename))
|
370
|
+
end
|
360
371
|
end
|
361
372
|
|
362
373
|
native_target.add_resources(resource_phase_refs)
|
@@ -377,9 +388,11 @@ module Pod
|
|
377
388
|
name = target.test_target_label(test_spec)
|
378
389
|
platform_name = target.platform.name
|
379
390
|
language = target.uses_swift_for_spec?(test_spec) ? :swift : :objc
|
391
|
+
product_basename = target.product_basename_for_spec(test_spec)
|
392
|
+
embedded_content_contains_swift = target.dependent_targets_for_test_spec(test_spec).any?(&:uses_swift?)
|
380
393
|
test_native_target = project.new_target(product_type, name, platform_name,
|
381
394
|
target.deployment_target_for_non_library_spec(test_spec), nil,
|
382
|
-
language)
|
395
|
+
language, product_basename)
|
383
396
|
test_native_target.product_reference.name = name
|
384
397
|
|
385
398
|
target.user_build_configurations.each do |bc_name, type|
|
@@ -413,6 +426,9 @@ module Pod
|
|
413
426
|
elsif target.platform == :ios
|
414
427
|
configuration.build_settings['CODE_SIGN_IDENTITY'] = 'iPhone Developer'
|
415
428
|
end
|
429
|
+
# Ensure swift stdlib gets copied in if needed, even when the target contains no swift files,
|
430
|
+
# because a dependency uses swift
|
431
|
+
configuration.build_settings['ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES'] = 'YES' if embedded_content_contains_swift
|
416
432
|
end
|
417
433
|
|
418
434
|
remove_pod_target_xcconfig_overrides_from_target(target.test_spec_build_settings_by_config[test_spec.name], test_native_target)
|
@@ -463,10 +479,12 @@ module Pod
|
|
463
479
|
info_plist_entries = spec_consumer.info_plist
|
464
480
|
resources = target.file_accessors.find { |fa| fa.spec == app_spec }.resources
|
465
481
|
add_launchscreen_storyboard = resources.none? { |resource| resource.basename.to_s == 'LaunchScreen.storyboard' } && platform.name == :ios
|
482
|
+
embedded_content_contains_swift = target.dependent_targets_for_app_spec(app_spec).any?(&:uses_swift?)
|
466
483
|
app_native_target = AppHostInstaller.new(sandbox, project, platform, subspec_name, spec_name,
|
467
484
|
app_target_label, :add_main => false,
|
468
485
|
:add_launchscreen_storyboard => add_launchscreen_storyboard,
|
469
|
-
:info_plist_entries => info_plist_entries
|
486
|
+
:info_plist_entries => info_plist_entries,
|
487
|
+
:product_basename => target.product_basename_for_spec(app_spec)).install!
|
470
488
|
|
471
489
|
app_native_target.product_reference.name = app_target_label
|
472
490
|
target.user_build_configurations.each do |bc_name, type|
|
@@ -505,6 +523,9 @@ module Pod
|
|
505
523
|
configuration.build_settings.delete('CODE_SIGN_IDENTITY[sdk=iphoneos*]')
|
506
524
|
configuration.build_settings.delete('CODE_SIGN_IDENTITY[sdk=watchos*]')
|
507
525
|
end
|
526
|
+
# Ensure swift stdlib gets copied in if needed, even when the target contains no swift files,
|
527
|
+
# because a dependency uses swift
|
528
|
+
configuration.build_settings['ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES'] = 'YES' if embedded_content_contains_swift
|
508
529
|
end
|
509
530
|
|
510
531
|
remove_pod_target_xcconfig_overrides_from_target(target.app_spec_build_settings_by_config[app_spec.name], app_native_target)
|
@@ -548,12 +569,8 @@ module Pod
|
|
548
569
|
file_accessors.each_with_object({}) do |file_accessor, hash|
|
549
570
|
hash[file_accessor.spec.name] = file_accessor.resource_bundles.map do |bundle_name, paths|
|
550
571
|
label = target.resources_bundle_target_label(bundle_name)
|
551
|
-
resource_bundle_target = project.new_resources_bundle(label, file_accessor.spec_consumer.platform_name)
|
552
|
-
resource_bundle_target.product_reference.
|
553
|
-
bundle_file_name = "#{bundle_name}.bundle"
|
554
|
-
bundle_product.name = bundle_file_name
|
555
|
-
end
|
556
|
-
|
572
|
+
resource_bundle_target = project.new_resources_bundle(label, file_accessor.spec_consumer.platform_name, nil, bundle_name)
|
573
|
+
resource_bundle_target.product_reference.name = label
|
557
574
|
contains_compile_phase_refs = add_resources_to_target(paths, resource_bundle_target)
|
558
575
|
|
559
576
|
target.user_build_configurations.each do |bc_name, type|
|
@@ -655,10 +672,6 @@ module Pod
|
|
655
672
|
scoped_test_resource_bundle_targets = test_resource_bundle_targets[test_spec.name]
|
656
673
|
apply_xcconfig_file_ref_to_targets([test_native_target] + scoped_test_resource_bundle_targets, test_xcconfig_file_ref, names)
|
657
674
|
end
|
658
|
-
|
659
|
-
test_native_target.build_configurations.each do |test_native_target_bc|
|
660
|
-
test_target_swift_debug_hack(test_spec, test_native_target_bc)
|
661
|
-
end
|
662
675
|
end
|
663
676
|
end
|
664
677
|
|
@@ -837,18 +850,6 @@ module Pod
|
|
837
850
|
add_file_to_support_group(path)
|
838
851
|
end
|
839
852
|
|
840
|
-
# Manually add `libswiftSwiftOnoneSupport.dylib` as it seems there is an issue with tests that do not include it for Debug configurations.
|
841
|
-
# Possibly related to Swift module optimization.
|
842
|
-
#
|
843
|
-
# @return [void]
|
844
|
-
#
|
845
|
-
def test_target_swift_debug_hack(test_spec, test_target_bc)
|
846
|
-
return unless test_target_bc.debug?
|
847
|
-
return unless target.dependent_targets_for_test_spec(test_spec).any?(&:uses_swift?)
|
848
|
-
ldflags = test_target_bc.build_settings['OTHER_LDFLAGS'] ||= '$(inherited)'
|
849
|
-
ldflags << ' -lswiftSwiftOnoneSupport'
|
850
|
-
end
|
851
|
-
|
852
853
|
# Creates a build phase which links the versioned header folders
|
853
854
|
# of the OS X framework into the framework bundle's root directory.
|
854
855
|
# This is only necessary because the way how headers are copied
|
@@ -998,7 +999,7 @@ module Pod
|
|
998
999
|
end
|
999
1000
|
|
1000
1001
|
def create_umbrella_header(native_target)
|
1001
|
-
|
1002
|
+
super(native_target) unless custom_module_map
|
1002
1003
|
end
|
1003
1004
|
|
1004
1005
|
def custom_module_map
|
@@ -1035,12 +1036,14 @@ module Pod
|
|
1035
1036
|
end
|
1036
1037
|
end
|
1037
1038
|
|
1038
|
-
def add_header(file_accessor, build_file, public_headers, private_headers, native_target)
|
1039
|
+
def add_header(file_accessor, build_file, public_headers, project_headers, private_headers, native_target)
|
1039
1040
|
file_ref = build_file.file_ref
|
1040
1041
|
acl = if !target.build_as_framework? # Headers are already rooted at ${PODS_ROOT}/Headers/P*/[pod]/...
|
1041
1042
|
'Project'
|
1042
1043
|
elsif public_headers.include?(file_ref.real_path)
|
1043
1044
|
'Public'
|
1045
|
+
elsif project_headers.include?(file_ref.real_path)
|
1046
|
+
'Project'
|
1044
1047
|
elsif private_headers.include?(file_ref.real_path)
|
1045
1048
|
'Private'
|
1046
1049
|
else
|
@@ -1196,7 +1199,11 @@ module Pod
|
|
1196
1199
|
def dsym_paths(target)
|
1197
1200
|
dsym_paths = target.framework_paths.values.flatten.reject { |fmwk_path| fmwk_path.dsym_path.nil? }.map(&:dsym_path)
|
1198
1201
|
dsym_paths.concat(target.xcframeworks.values.flatten.flat_map { |xcframework| xcframework_dsyms(xcframework.path) })
|
1199
|
-
dsym_paths
|
1202
|
+
dsym_paths.map do |dsym_path|
|
1203
|
+
dsym_pathname = Pathname(dsym_path)
|
1204
|
+
dsym_path = "${PODS_ROOT}/#{dsym_pathname.relative_path_from(target.sandbox.root)}" unless dsym_pathname.relative?
|
1205
|
+
dsym_path
|
1206
|
+
end
|
1200
1207
|
end
|
1201
1208
|
|
1202
1209
|
# @param [PodTarget] target the target to be installed
|
@@ -1206,7 +1213,7 @@ module Pod
|
|
1206
1213
|
def bcsymbolmap_paths(target)
|
1207
1214
|
target.framework_paths.values.flatten.reject do |fmwk_path|
|
1208
1215
|
fmwk_path.bcsymbolmap_paths.nil?
|
1209
|
-
end.flat_map(&:bcsymbolmap_paths)
|
1216
|
+
end.flat_map(&:bcsymbolmap_paths).uniq
|
1210
1217
|
end
|
1211
1218
|
|
1212
1219
|
# @param [Pathname] xcframework_path
|
@@ -34,6 +34,7 @@ module Pod
|
|
34
34
|
target_installation_result.non_library_specs_by_native_target.each do |native_target, spec|
|
35
35
|
add_embed_frameworks_script_phase(native_target, spec)
|
36
36
|
add_copy_resources_script_phase(native_target, spec)
|
37
|
+
add_on_demand_resources(native_target, spec) if spec.app_specification?
|
37
38
|
UserProjectIntegrator::TargetIntegrator.create_or_update_user_script_phases(script_phases_for_specs(spec), native_target)
|
38
39
|
end
|
39
40
|
add_copy_dsyms_script_phase(target_installation_result.native_target)
|
@@ -134,20 +135,26 @@ module Pod
|
|
134
135
|
spec_paths_to_include << spec.name if dependent_target == target
|
135
136
|
dependent_target.framework_paths.values_at(*spec_paths_to_include).flatten.compact
|
136
137
|
end.uniq
|
138
|
+
xcframework_paths = dependent_targets.flat_map do |dependent_target|
|
139
|
+
spec_paths_to_include = dependent_target.library_specs.map(&:name)
|
140
|
+
spec_paths_to_include -= host_target_spec_names
|
141
|
+
spec_paths_to_include << spec.name if dependent_target == target
|
142
|
+
dependent_target.xcframeworks.values_at(*spec_paths_to_include).flatten.compact
|
143
|
+
end.uniq
|
137
144
|
|
138
|
-
if use_input_output_paths? && !framework_paths.empty?
|
145
|
+
if use_input_output_paths? && !framework_paths.empty? || !xcframework_paths.empty?
|
139
146
|
input_file_list_path = target.embed_frameworks_script_input_files_path_for_spec(spec)
|
140
147
|
input_file_list_relative_path = "${PODS_ROOT}/#{input_file_list_path.relative_path_from(target.sandbox.root)}"
|
141
148
|
input_paths_key = UserProjectIntegrator::TargetIntegrator::XCFileListConfigKey.new(input_file_list_path, input_file_list_relative_path)
|
142
|
-
input_paths_by_config[input_paths_key] = [script_path] + UserProjectIntegrator::TargetIntegrator.embed_frameworks_input_paths(framework_paths,
|
149
|
+
input_paths_by_config[input_paths_key] = [script_path] + UserProjectIntegrator::TargetIntegrator.embed_frameworks_input_paths(framework_paths, xcframework_paths)
|
143
150
|
|
144
151
|
output_file_list_path = target.embed_frameworks_script_output_files_path_for_spec(spec)
|
145
152
|
output_file_list_relative_path = "${PODS_ROOT}/#{output_file_list_path.relative_path_from(target.sandbox.root)}"
|
146
153
|
output_paths_key = UserProjectIntegrator::TargetIntegrator::XCFileListConfigKey.new(output_file_list_path, output_file_list_relative_path)
|
147
|
-
output_paths_by_config[output_paths_key] = UserProjectIntegrator::TargetIntegrator.embed_frameworks_output_paths(framework_paths,
|
154
|
+
output_paths_by_config[output_paths_key] = UserProjectIntegrator::TargetIntegrator.embed_frameworks_output_paths(framework_paths, xcframework_paths)
|
148
155
|
end
|
149
156
|
|
150
|
-
if framework_paths.empty?
|
157
|
+
if framework_paths.empty? && xcframework_paths.empty?
|
151
158
|
UserProjectIntegrator::TargetIntegrator.remove_embed_frameworks_script_phase_from_target(native_target)
|
152
159
|
else
|
153
160
|
UserProjectIntegrator::TargetIntegrator.create_or_update_embed_frameworks_script_phase_to_target(
|
@@ -183,7 +190,7 @@ module Pod
|
|
183
190
|
output_file_list_relative_path = "${PODS_ROOT}/#{output_file_list_path.relative_path_from(target.sandbox.root)}"
|
184
191
|
output_paths_key = UserProjectIntegrator::TargetIntegrator::XCFileListConfigKey.new(output_file_list_path, output_file_list_relative_path)
|
185
192
|
output_paths_by_config[output_paths_key] = xcframeworks.map do |xcf|
|
186
|
-
"#{Target::BuildSettings::XCFRAMEWORKS_BUILD_DIR_VARIABLE}/#{xcf.name}"
|
193
|
+
"#{Target::BuildSettings::XCFRAMEWORKS_BUILD_DIR_VARIABLE}/#{xcf.target_name}/#{xcf.name}.framework"
|
187
194
|
end
|
188
195
|
end
|
189
196
|
|
@@ -199,7 +206,7 @@ module Pod
|
|
199
206
|
# vendored dSYMs.
|
200
207
|
#
|
201
208
|
# @param [PBXNativeTarget] native_target
|
202
|
-
# the native target for which to add the
|
209
|
+
# the native target for which to add the copy dSYM files build phase.
|
203
210
|
#
|
204
211
|
# @return [void]
|
205
212
|
#
|
@@ -242,6 +249,41 @@ module Pod
|
|
242
249
|
UserProjectIntegrator::TargetIntegrator.set_input_output_paths(phase, input_paths_by_config, output_paths_by_config)
|
243
250
|
end
|
244
251
|
|
252
|
+
# Adds the ODRs that are related to this app spec. This includes the app spec dependencies as well as the ODRs
|
253
|
+
# coming from the app spec itself.
|
254
|
+
#
|
255
|
+
# @param [Xcodeproj::PBXNativeTarget] native_target
|
256
|
+
# the native target for which to add the ODR file references into.
|
257
|
+
#
|
258
|
+
# @param [Specification] app_spec
|
259
|
+
# the app spec to integrate ODRs for.
|
260
|
+
#
|
261
|
+
# @return [void]
|
262
|
+
#
|
263
|
+
def add_on_demand_resources(native_target, app_spec)
|
264
|
+
dependent_targets = target.dependent_targets_for_app_spec(app_spec)
|
265
|
+
parent_odr_group = native_target.project.group_for_spec(app_spec.name)
|
266
|
+
|
267
|
+
# Add ODRs of the app spec dependencies first.
|
268
|
+
dependent_targets.each do |pod_target|
|
269
|
+
file_accessors = pod_target.file_accessors.select do |fa|
|
270
|
+
fa.spec.library_specification? ||
|
271
|
+
fa.spec.test_specification? && pod_target.test_app_hosts_by_spec[fa.spec]&.first == app_spec
|
272
|
+
end
|
273
|
+
target_odr_group_name = "#{pod_target.label}-OnDemandResources"
|
274
|
+
UserProjectIntegrator::TargetIntegrator.update_on_demand_resources(target.sandbox, native_target.project,
|
275
|
+
native_target, file_accessors,
|
276
|
+
parent_odr_group, target_odr_group_name)
|
277
|
+
end
|
278
|
+
|
279
|
+
# Now add the ODRs of our own app spec declaration.
|
280
|
+
file_accessor = target.file_accessors.find { |fa| fa.spec == app_spec }
|
281
|
+
target_odr_group_name = "#{target.subspec_label(app_spec)}-OnDemandResources"
|
282
|
+
UserProjectIntegrator::TargetIntegrator.update_on_demand_resources(target.sandbox, native_target.project,
|
283
|
+
native_target, file_accessor,
|
284
|
+
parent_odr_group, target_odr_group_name)
|
285
|
+
end
|
286
|
+
|
245
287
|
# @return [String] the message that should be displayed for the target
|
246
288
|
# integration.
|
247
289
|
#
|