cocoapods 1.10.0 → 1.11.0.beta.2
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/CHANGELOG.md +237 -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.rb +18 -9
- 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/config.rb +1 -1
- data/lib/cocoapods/downloader.rb +4 -2
- data/lib/cocoapods/downloader/cache.rb +95 -6
- 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 +2 -18
- data/lib/cocoapods/generator/embed_frameworks_script.rb +2 -1
- data/lib/cocoapods/generator/script_phase_constants.rb +1 -0
- data/lib/cocoapods/installer.rb +52 -4
- data/lib/cocoapods/installer/analyzer.rb +12 -8
- data/lib/cocoapods/installer/analyzer/sandbox_analyzer.rb +31 -4
- 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.rb +1 -1
- 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 +70 -58
- 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/resolver.rb +4 -4
- data/lib/cocoapods/sandbox/file_accessor.rb +57 -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.rb +1 -1
- 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 +25 -5
- data/lib/cocoapods/version_metadata.rb +1 -1
- data/lib/cocoapods/xcode/xcframework.rb +8 -3
- data/lib/cocoapods/xcode/xcframework/xcframework_slice.rb +10 -1
- metadata +28 -21
@@ -247,7 +247,7 @@ module Pod
|
|
247
247
|
end
|
248
248
|
is_custom_host = !hosted_test_specs_by_host.empty?
|
249
249
|
specs.each do |spec|
|
250
|
-
scheme_name =
|
250
|
+
scheme_name = pod_target.spec_label(spec)
|
251
251
|
scheme_configuration = pod_target.scheme_for_spec(spec)
|
252
252
|
if !scheme_configuration.empty? || is_custom_host
|
253
253
|
scheme_path = Xcodeproj::XCScheme.user_data_dir(project.path) + "#{scheme_name}.xcscheme"
|
@@ -45,6 +45,11 @@ module Pod
|
|
45
45
|
#
|
46
46
|
attr_reader :info_plist_entries
|
47
47
|
|
48
|
+
# @return [String] product_basename
|
49
|
+
# The product basename to use for the target.
|
50
|
+
#
|
51
|
+
attr_reader :product_basename
|
52
|
+
|
48
53
|
# Initialize a new instance
|
49
54
|
#
|
50
55
|
# @param [Sandbox] sandbox @see #sandbox
|
@@ -55,8 +60,9 @@ module Pod
|
|
55
60
|
# @param [String] app_target_label see #app_target_label
|
56
61
|
# @param [Boolean] add_main see #add_main
|
57
62
|
# @param [Hash] info_plist_entries see #info_plist_entries
|
63
|
+
# @param [String] product_basename see #product_basename
|
58
64
|
#
|
59
|
-
def initialize(sandbox, project, platform, subgroup_name, group_name, app_target_label, add_main: true, add_launchscreen_storyboard: platform == :ios, info_plist_entries: {})
|
65
|
+
def initialize(sandbox, project, platform, subgroup_name, group_name, app_target_label, add_main: true, add_launchscreen_storyboard: platform == :ios, info_plist_entries: {}, product_basename: nil)
|
60
66
|
@sandbox = sandbox
|
61
67
|
@project = project
|
62
68
|
@platform = platform
|
@@ -66,6 +72,7 @@ module Pod
|
|
66
72
|
@add_main = add_main
|
67
73
|
@add_launchscreen_storyboard = add_launchscreen_storyboard
|
68
74
|
@info_plist_entries = info_plist_entries
|
75
|
+
@product_basename = product_basename || app_target_label
|
69
76
|
target_group = project.pod_group(group_name)
|
70
77
|
@group = target_group[subgroup_name] || target_group.new_group(subgroup_name)
|
71
78
|
end
|
@@ -75,9 +82,9 @@ module Pod
|
|
75
82
|
def install!
|
76
83
|
platform_name = platform.name
|
77
84
|
app_host_target = Pod::Generator::AppTargetHelper.add_app_target(project, platform_name, deployment_target,
|
78
|
-
app_target_label)
|
85
|
+
app_target_label, product_basename)
|
79
86
|
app_host_target.build_configurations.each do |configuration|
|
80
|
-
configuration.build_settings['PRODUCT_NAME'] =
|
87
|
+
configuration.build_settings['PRODUCT_NAME'] = product_basename
|
81
88
|
configuration.build_settings['PRODUCT_BUNDLE_IDENTIFIER'] = 'org.cocoapods.${PRODUCT_NAME:rfc1034identifier}'
|
82
89
|
if platform == :osx
|
83
90
|
configuration.build_settings['CODE_SIGN_IDENTITY'] = ''
|
@@ -6,6 +6,9 @@ module Pod
|
|
6
6
|
# specifications in the Pods project.
|
7
7
|
#
|
8
8
|
class FileReferencesInstaller
|
9
|
+
# Regex for extracting the region portion of a localized file path. Ex. `Resources/en.lproj` --> `en`
|
10
|
+
LOCALIZATION_REGION_FILEPATTERN_REGEX = /(\/|^)(?<region>[^\/]*?)\.lproj(\/|$)/
|
11
|
+
|
9
12
|
# @return [Sandbox] The sandbox of the installation.
|
10
13
|
#
|
11
14
|
attr_reader :sandbox
|
@@ -126,8 +129,9 @@ module Pod
|
|
126
129
|
#
|
127
130
|
def add_resources
|
128
131
|
UI.message '- Adding resources' do
|
129
|
-
add_file_accessors_paths_to_pods_group(:resources, :resources, true)
|
130
|
-
add_file_accessors_paths_to_pods_group(:resource_bundle_files, :resources, true)
|
132
|
+
refs = add_file_accessors_paths_to_pods_group(:resources, :resources, true)
|
133
|
+
refs.concat add_file_accessors_paths_to_pods_group(:resource_bundle_files, :resources, true)
|
134
|
+
add_known_regions(refs)
|
131
135
|
end
|
132
136
|
end
|
133
137
|
|
@@ -207,20 +211,20 @@ module Pod
|
|
207
211
|
# Whether organizing a local pod's files in subgroups inside
|
208
212
|
# the pod's group is allowed.
|
209
213
|
#
|
210
|
-
# @return [
|
214
|
+
# @return [Array<PBXFileReference>] the added file references
|
211
215
|
#
|
212
216
|
def add_file_accessors_paths_to_pods_group(file_accessor_key, group_key = nil, reflect_file_system_structure = false)
|
213
|
-
file_accessors.
|
217
|
+
file_accessors.flat_map do |file_accessor|
|
214
218
|
paths = file_accessor.send(file_accessor_key)
|
215
219
|
paths = allowable_project_paths(paths)
|
216
|
-
next if paths.empty?
|
220
|
+
next [] if paths.empty?
|
217
221
|
|
218
222
|
pod_name = file_accessor.spec.name
|
219
223
|
preserve_pod_file_structure_flag = (sandbox.local?(pod_name) || preserve_pod_file_structure) && reflect_file_system_structure
|
220
224
|
base_path = preserve_pod_file_structure_flag ? common_path(paths) : nil
|
221
225
|
actual_group_key = preserve_pod_file_structure_flag ? nil : group_key
|
222
226
|
group = pods_project.group_for_spec(pod_name, actual_group_key)
|
223
|
-
paths.
|
227
|
+
paths.map do |path|
|
224
228
|
pods_project.add_file_reference(path, group, preserve_pod_file_structure_flag, base_path)
|
225
229
|
end
|
226
230
|
end
|
@@ -302,6 +306,21 @@ module Pod
|
|
302
306
|
return result unless result.to_s == '' || result.to_s == '/'
|
303
307
|
end
|
304
308
|
|
309
|
+
# Adds the known localization regions to the root of the project
|
310
|
+
#
|
311
|
+
# @param [Array<PBXFileReferences>] file_references the resource file references
|
312
|
+
#
|
313
|
+
def add_known_regions(file_references)
|
314
|
+
pattern = LOCALIZATION_REGION_FILEPATTERN_REGEX
|
315
|
+
regions = file_references.map do |ref|
|
316
|
+
if (match = ref.path.to_s.match(pattern))
|
317
|
+
match[:region]
|
318
|
+
end
|
319
|
+
end.compact
|
320
|
+
|
321
|
+
pods_project.root_object.known_regions = (pods_project.root_object.known_regions | regions).sort
|
322
|
+
end
|
323
|
+
|
305
324
|
#-----------------------------------------------------------------------#
|
306
325
|
end
|
307
326
|
end
|
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,20 +850,8 @@ 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
|
-
# of the OS X into the framework bundle's root
|
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
|
855
856
|
# via custom copy file build phases in combination with
|
856
857
|
# header_mappings_dir interferes with xcodebuild's expectations
|
@@ -862,11 +863,16 @@ module Pod
|
|
862
863
|
# @return [void]
|
863
864
|
#
|
864
865
|
def create_build_phase_to_symlink_header_folders(native_target)
|
865
|
-
|
866
|
+
# This is required on iOS for Catalyst, which uses macOS framework layouts
|
867
|
+
return unless (target.platform.name == :osx || target.platform.name == :ios) && any_header_mapping_dirs?
|
866
868
|
|
867
869
|
build_phase = native_target.new_shell_script_build_phase('Create Symlinks to Header Folders')
|
868
870
|
build_phase.shell_script = <<-eos.strip_heredoc
|
869
871
|
cd "$CONFIGURATION_BUILD_DIR/$WRAPPER_NAME" || exit 1
|
872
|
+
if [ ! -d Versions ]; then
|
873
|
+
# Not a versioned framework, so no need to do anything
|
874
|
+
exit 0
|
875
|
+
fi
|
870
876
|
|
871
877
|
public_path="${PUBLIC_HEADERS_FOLDER_PATH\#\$CONTENTS_FOLDER_PATH/}"
|
872
878
|
if [ ! -f "$public_path" ]; then
|
@@ -993,7 +999,7 @@ module Pod
|
|
993
999
|
end
|
994
1000
|
|
995
1001
|
def create_umbrella_header(native_target)
|
996
|
-
|
1002
|
+
super(native_target) unless custom_module_map
|
997
1003
|
end
|
998
1004
|
|
999
1005
|
def custom_module_map
|
@@ -1030,12 +1036,14 @@ module Pod
|
|
1030
1036
|
end
|
1031
1037
|
end
|
1032
1038
|
|
1033
|
-
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)
|
1034
1040
|
file_ref = build_file.file_ref
|
1035
1041
|
acl = if !target.build_as_framework? # Headers are already rooted at ${PODS_ROOT}/Headers/P*/[pod]/...
|
1036
1042
|
'Project'
|
1037
1043
|
elsif public_headers.include?(file_ref.real_path)
|
1038
1044
|
'Public'
|
1045
|
+
elsif project_headers.include?(file_ref.real_path)
|
1046
|
+
'Project'
|
1039
1047
|
elsif private_headers.include?(file_ref.real_path)
|
1040
1048
|
'Private'
|
1041
1049
|
else
|
@@ -1191,7 +1199,11 @@ module Pod
|
|
1191
1199
|
def dsym_paths(target)
|
1192
1200
|
dsym_paths = target.framework_paths.values.flatten.reject { |fmwk_path| fmwk_path.dsym_path.nil? }.map(&:dsym_path)
|
1193
1201
|
dsym_paths.concat(target.xcframeworks.values.flatten.flat_map { |xcframework| xcframework_dsyms(xcframework.path) })
|
1194
|
-
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
|
1195
1207
|
end
|
1196
1208
|
|
1197
1209
|
# @param [PodTarget] target the target to be installed
|
@@ -1201,7 +1213,7 @@ module Pod
|
|
1201
1213
|
def bcsymbolmap_paths(target)
|
1202
1214
|
target.framework_paths.values.flatten.reject do |fmwk_path|
|
1203
1215
|
fmwk_path.bcsymbolmap_paths.nil?
|
1204
|
-
end.flat_map(&:bcsymbolmap_paths)
|
1216
|
+
end.flat_map(&:bcsymbolmap_paths).uniq
|
1205
1217
|
end
|
1206
1218
|
|
1207
1219
|
# @param [Pathname] xcframework_path
|