cocoapods 1.8.4 → 1.9.0.beta.1
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 +69 -1
- data/lib/cocoapods.rb +1 -0
- data/lib/cocoapods/command/setup.rb +1 -0
- data/lib/cocoapods/executable.rb +1 -1
- data/lib/cocoapods/gem_version.rb +1 -1
- data/lib/cocoapods/generator/embed_frameworks_script.rb +36 -6
- data/lib/cocoapods/generator/prepare_artifacts_script.rb +244 -0
- data/lib/cocoapods/installer.rb +6 -5
- data/lib/cocoapods/installer/analyzer.rb +137 -59
- data/lib/cocoapods/installer/analyzer/pod_variant.rb +27 -12
- data/lib/cocoapods/installer/analyzer/pod_variant_set.rb +11 -2
- data/lib/cocoapods/installer/project_cache/project_cache_analyzer.rb +10 -2
- data/lib/cocoapods/installer/project_cache/project_installation_cache.rb +15 -2
- data/lib/cocoapods/installer/project_cache/target_cache_key.rb +7 -5
- data/lib/cocoapods/installer/user_project_integrator.rb +1 -10
- data/lib/cocoapods/installer/user_project_integrator/target_integrator.rb +100 -19
- data/lib/cocoapods/installer/xcode/pods_project_generator.rb +3 -0
- data/lib/cocoapods/installer/xcode/pods_project_generator/aggregate_target_installer.rb +29 -4
- data/lib/cocoapods/installer/xcode/pods_project_generator/app_host_installer.rb +7 -2
- data/lib/cocoapods/installer/xcode/pods_project_generator/pod_target_installer.rb +106 -45
- data/lib/cocoapods/installer/xcode/pods_project_generator/pod_target_integrator.rb +68 -1
- data/lib/cocoapods/installer/xcode/pods_project_generator/pods_project_writer.rb +29 -14
- data/lib/cocoapods/sandbox/file_accessor.rb +32 -21
- data/lib/cocoapods/sources_manager.rb +9 -2
- data/lib/cocoapods/target.rb +11 -14
- data/lib/cocoapods/target/aggregate_target.rb +78 -18
- data/lib/cocoapods/target/build_settings.rb +64 -31
- data/lib/cocoapods/target/pod_target.rb +236 -87
- data/lib/cocoapods/user_interface/error_report.rb +14 -4
- data/lib/cocoapods/validator.rb +2 -0
- data/lib/cocoapods/xcode.rb +7 -0
- data/lib/cocoapods/{target → xcode}/framework_paths.rb +14 -1
- data/lib/cocoapods/xcode/linkage_analyzer.rb +22 -0
- data/lib/cocoapods/xcode/xcframework.rb +81 -0
- data/lib/cocoapods/xcode/xcframework/xcframework_slice.rb +51 -0
- metadata +12 -8
- data/lib/cocoapods/target/build_type.rb +0 -139
@@ -32,6 +32,7 @@ module Pod
|
|
32
32
|
def integrate!
|
33
33
|
UI.section(integration_message) do
|
34
34
|
target_installation_result.non_library_specs_by_native_target.each do |native_target, spec|
|
35
|
+
add_prepare_artifacts_script_phase(native_target, spec)
|
35
36
|
add_embed_frameworks_script_phase(native_target, spec)
|
36
37
|
add_copy_resources_script_phase(native_target, spec)
|
37
38
|
UserProjectIntegrator::TargetIntegrator.create_or_update_user_script_phases(script_phases_for_specs(spec), native_target)
|
@@ -53,6 +54,12 @@ module Pod
|
|
53
54
|
|
54
55
|
# Find or create a 'Copy Pods Resources' build phase
|
55
56
|
#
|
57
|
+
# @param [PBXNativeTarget] native_target
|
58
|
+
# the native target for which to add the copy resources script
|
59
|
+
#
|
60
|
+
# @param [Pod::Specification] spec
|
61
|
+
# the specification to integrate
|
62
|
+
#
|
56
63
|
# @return [void]
|
57
64
|
#
|
58
65
|
def add_copy_resources_script_phase(native_target, spec)
|
@@ -96,7 +103,13 @@ module Pod
|
|
96
103
|
end
|
97
104
|
end
|
98
105
|
|
99
|
-
# Find or create a 'Embed Pods Frameworks'
|
106
|
+
# Find or create a 'Embed Pods Frameworks' Run Script Build Phase
|
107
|
+
#
|
108
|
+
# @param [PBXNativeTarget] native_target
|
109
|
+
# the native target for which to add the embed frameworks script
|
110
|
+
#
|
111
|
+
# @param [Pod::Specification] spec
|
112
|
+
# the specification to integrate
|
100
113
|
#
|
101
114
|
# @return [void]
|
102
115
|
#
|
@@ -144,6 +157,60 @@ module Pod
|
|
144
157
|
end
|
145
158
|
end
|
146
159
|
|
160
|
+
# Find or create a 'Prepare Artifacts' Run Script Build Phase
|
161
|
+
#
|
162
|
+
# @param [PBXNativeTarget] native_target
|
163
|
+
# the native target for which to add the prepare artifacts script
|
164
|
+
#
|
165
|
+
# @param [Pod::Specification] spec
|
166
|
+
# the specification to integrate
|
167
|
+
#
|
168
|
+
# @return [void]
|
169
|
+
#
|
170
|
+
def add_prepare_artifacts_script_phase(native_target, spec)
|
171
|
+
script_path = "${PODS_ROOT}/#{target.prepare_artifacts_script_path_for_spec(spec).relative_path_from(target.sandbox.root)}"
|
172
|
+
|
173
|
+
input_paths_by_config = {}
|
174
|
+
output_paths_by_config = {}
|
175
|
+
|
176
|
+
dependent_targets = if spec.test_specification?
|
177
|
+
target.dependent_targets_for_test_spec(spec)
|
178
|
+
else
|
179
|
+
target.dependent_targets_for_app_spec(spec)
|
180
|
+
end
|
181
|
+
host_target_spec_names = target.app_host_dependent_targets_for_spec(spec).flat_map do |pt|
|
182
|
+
pt.specs.map(&:name)
|
183
|
+
end.uniq
|
184
|
+
xcframeworks = dependent_targets.flat_map do |dependent_target|
|
185
|
+
spec_paths_to_include = dependent_target.library_specs.map(&:name)
|
186
|
+
spec_paths_to_include -= host_target_spec_names
|
187
|
+
spec_paths_to_include << spec.name if dependent_target == target
|
188
|
+
dependent_target.xcframeworks.values_at(*spec_paths_to_include).flatten.compact
|
189
|
+
end.uniq
|
190
|
+
|
191
|
+
if use_input_output_paths? && !xcframeworks.empty?
|
192
|
+
input_file_list_path = target.prepare_artifacts_script_input_files_path_for_spec(spec)
|
193
|
+
input_file_list_relative_path = "${PODS_ROOT}/#{input_file_list_path.relative_path_from(target.sandbox.root)}"
|
194
|
+
input_paths_key = UserProjectIntegrator::TargetIntegrator::XCFileListConfigKey.new(input_file_list_path, input_file_list_relative_path)
|
195
|
+
input_paths = input_paths_by_config[input_paths_key] = [script_path]
|
196
|
+
|
197
|
+
framework_paths = xcframeworks.map { |xcf| "${PODS_ROOT}/#{xcf.path.relative_path_from(target.sandbox.root)}" }
|
198
|
+
input_paths.concat framework_paths
|
199
|
+
|
200
|
+
output_file_list_path = target.prepare_artifacts_script_output_files_path_for_spec(spec)
|
201
|
+
output_file_list_relative_path = "${PODS_ROOT}/#{output_file_list_path.relative_path_from(target.sandbox.root)}"
|
202
|
+
output_paths_key = UserProjectIntegrator::TargetIntegrator::XCFileListConfigKey.new(output_file_list_path, output_file_list_relative_path)
|
203
|
+
output_paths_by_config[output_paths_key] = [UserProjectIntegrator::TargetIntegrator::ARTIFACT_LIST_FILE]
|
204
|
+
end
|
205
|
+
|
206
|
+
if xcframeworks.empty?
|
207
|
+
UserProjectIntegrator::TargetIntegrator.remove_prepare_artifacts_script_phase_from_target(native_target)
|
208
|
+
else
|
209
|
+
UserProjectIntegrator::TargetIntegrator.create_or_update_prepare_artifacts_script_phase_to_target(
|
210
|
+
native_target, script_path, input_paths_by_config, output_paths_by_config)
|
211
|
+
end
|
212
|
+
end
|
213
|
+
|
147
214
|
# @return [String] the message that should be displayed for the target
|
148
215
|
# integration.
|
149
216
|
#
|
@@ -35,27 +35,32 @@ module Pod
|
|
35
35
|
@installation_options = installation_options
|
36
36
|
end
|
37
37
|
|
38
|
+
# Writes projects to disk.
|
39
|
+
#
|
40
|
+
# @yield If provided, this block will execute right before writing the projects to disk.
|
41
|
+
#
|
38
42
|
def write!
|
39
43
|
cleanup_projects(projects)
|
40
44
|
|
41
45
|
projects.each do |project|
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
scheme.add_test_target(test_native_target)
|
54
|
-
end
|
46
|
+
library_product_types = [:framework, :dynamic_library, :static_library]
|
47
|
+
results_by_native_target = Hash[pod_target_installation_results.map do |_, result|
|
48
|
+
[result.native_target, result]
|
49
|
+
end]
|
50
|
+
project.recreate_user_schemes(false) do |scheme, target|
|
51
|
+
next unless target.respond_to?(:symbol_type)
|
52
|
+
next unless library_product_types.include? target.symbol_type
|
53
|
+
installation_result = results_by_native_target[target]
|
54
|
+
next unless installation_result
|
55
|
+
installation_result.test_native_targets.each do |test_native_target|
|
56
|
+
scheme.add_test_target(test_native_target)
|
55
57
|
end
|
56
|
-
project.save
|
57
58
|
end
|
58
59
|
end
|
60
|
+
|
61
|
+
yield if block_given?
|
62
|
+
|
63
|
+
save_projects(projects)
|
59
64
|
end
|
60
65
|
|
61
66
|
private
|
@@ -66,7 +71,17 @@ module Pod
|
|
66
71
|
projects.each do |project|
|
67
72
|
[project.pods, project.support_files_group,
|
68
73
|
project.development_pods, project.dependencies_group].each { |group| group.remove_from_project if group.empty? }
|
74
|
+
end
|
75
|
+
end
|
76
|
+
|
77
|
+
# Sorts and then saves projects which writes them to disk.
|
78
|
+
#
|
79
|
+
def save_projects(projects)
|
80
|
+
projects.each do |project|
|
69
81
|
project.sort(:groups_position => :below)
|
82
|
+
UI.message "- Writing Xcode project file to #{UI.path project.path}" do
|
83
|
+
project.save
|
84
|
+
end
|
70
85
|
end
|
71
86
|
end
|
72
87
|
end
|
@@ -1,4 +1,4 @@
|
|
1
|
-
require '
|
1
|
+
require 'cocoapods/xcode/linkage_analyzer'
|
2
2
|
|
3
3
|
module Pod
|
4
4
|
class Sandbox
|
@@ -167,8 +167,8 @@ module Pod
|
|
167
167
|
# that come shipped with the Pod.
|
168
168
|
#
|
169
169
|
def vendored_dynamic_frameworks
|
170
|
-
vendored_frameworks.select do |framework|
|
171
|
-
dynamic_binary?(framework + framework.basename('.*'))
|
170
|
+
(vendored_frameworks - vendored_xcframeworks).select do |framework|
|
171
|
+
Xcode::LinkageAnalyzer.dynamic_binary?(framework + framework.basename('.*'))
|
172
172
|
end
|
173
173
|
end
|
174
174
|
|
@@ -176,7 +176,16 @@ module Pod
|
|
176
176
|
# bundles that come shipped with the Pod.
|
177
177
|
#
|
178
178
|
def vendored_static_frameworks
|
179
|
-
vendored_frameworks - vendored_dynamic_frameworks
|
179
|
+
vendored_frameworks - vendored_dynamic_frameworks - vendored_xcframeworks
|
180
|
+
end
|
181
|
+
|
182
|
+
# @return [Array<Pathname>] The paths of vendored .xcframework bundles
|
183
|
+
# that come shipped with the Pod.
|
184
|
+
#
|
185
|
+
def vendored_xcframeworks
|
186
|
+
vendored_frameworks.select do |framework|
|
187
|
+
File.extname(framework) == '.xcframework'
|
188
|
+
end
|
180
189
|
end
|
181
190
|
|
182
191
|
# @param [Array<FileAccessor>] file_accessors
|
@@ -220,13 +229,30 @@ module Pod
|
|
220
229
|
Pathname.glob(headers_dir + '**/' + GLOB_PATTERNS[:public_header_files])
|
221
230
|
end
|
222
231
|
|
232
|
+
# @param [Pathname] framework
|
233
|
+
# The path to the .xcframework
|
234
|
+
#
|
235
|
+
# @return [Array<Pathname>] The paths to all the headers included in the
|
236
|
+
# vendored xcframework
|
237
|
+
#
|
238
|
+
def self.vendored_xcframework_headers(framework)
|
239
|
+
xcframework = Xcode::XCFramework.new(framework)
|
240
|
+
xcframework.slices.flat_map do |slice|
|
241
|
+
vendored_frameworks_headers(slice.path)
|
242
|
+
end
|
243
|
+
end
|
244
|
+
|
223
245
|
# @return [Array<Pathname>] The paths of the framework headers that come
|
224
246
|
# shipped with the Pod.
|
225
247
|
#
|
226
248
|
def vendored_frameworks_headers
|
227
|
-
vendored_frameworks.flat_map do |framework|
|
249
|
+
paths = (vendored_frameworks - vendored_xcframeworks).flat_map do |framework|
|
228
250
|
self.class.vendored_frameworks_headers(framework)
|
229
251
|
end.uniq
|
252
|
+
paths.concat Array.new(vendored_xcframeworks.flat_map do |framework|
|
253
|
+
self.class.vendored_xcframework_headers(framework)
|
254
|
+
end)
|
255
|
+
paths
|
230
256
|
end
|
231
257
|
|
232
258
|
# @return [Array<Pathname>] The paths of the library bundles that come
|
@@ -241,7 +267,7 @@ module Pod
|
|
241
267
|
#
|
242
268
|
def vendored_dynamic_libraries
|
243
269
|
vendored_libraries.select do |library|
|
244
|
-
dynamic_binary?(library)
|
270
|
+
Xcode::LinkageAnalyzer.dynamic_binary?(library)
|
245
271
|
end
|
246
272
|
end
|
247
273
|
|
@@ -444,21 +470,6 @@ module Pod
|
|
444
470
|
path_list.glob(patterns, options).flatten.compact.uniq
|
445
471
|
end
|
446
472
|
|
447
|
-
# @param [Pathname] binary
|
448
|
-
# The file to be checked for being a dynamic Mach-O binary.
|
449
|
-
#
|
450
|
-
# @return [Boolean] Whether `binary` can be dynamically linked.
|
451
|
-
#
|
452
|
-
def dynamic_binary?(binary)
|
453
|
-
@cached_dynamic_binary_results ||= {}
|
454
|
-
return @cached_dynamic_binary_results[binary] unless @cached_dynamic_binary_results[binary].nil?
|
455
|
-
return false unless binary.file?
|
456
|
-
|
457
|
-
@cached_dynamic_binary_results[binary] = MachO.open(binary).dylib?
|
458
|
-
rescue MachO::MachOError
|
459
|
-
@cached_dynamic_binary_results[binary] = false
|
460
|
-
end
|
461
|
-
|
462
473
|
#-----------------------------------------------------------------------#
|
463
474
|
end
|
464
475
|
end
|
@@ -1,6 +1,8 @@
|
|
1
1
|
require 'cocoapods-core/source'
|
2
|
+
require 'netrc'
|
2
3
|
require 'set'
|
3
4
|
require 'rest'
|
5
|
+
require 'typhoeus'
|
4
6
|
|
5
7
|
module Pod
|
6
8
|
class Source
|
@@ -68,8 +70,13 @@ module Pod
|
|
68
70
|
# The URL of the source.
|
69
71
|
#
|
70
72
|
def cdn_url?(url)
|
71
|
-
url =~ %r{^https
|
72
|
-
|
73
|
+
if url =~ %r{^https?:\/\/}
|
74
|
+
response = Typhoeus.get(url + '/CocoaPods-version.yml', :netrc_file => Netrc.default_path, :netrc => :optional)
|
75
|
+
response.code == 200 && begin
|
76
|
+
response_hash = YAML.load(response.body) # rubocop:disable Security/YAMLLoad
|
77
|
+
response_hash.is_a?(Hash) && !Source::Metadata.new(response_hash).latest_cocoapods_version.nil?
|
78
|
+
end
|
79
|
+
end
|
73
80
|
rescue => e
|
74
81
|
raise Informative, "Couldn't determine repo type for URL: `#{url}`: #{e}"
|
75
82
|
end
|
data/lib/cocoapods/target.rb
CHANGED
@@ -1,5 +1,4 @@
|
|
1
1
|
require 'cocoapods/target/build_settings'
|
2
|
-
require 'cocoapods/target/build_type'
|
3
2
|
|
4
3
|
module Pod
|
5
4
|
# Model class which describes a Pods target.
|
@@ -17,12 +16,6 @@ module Pod
|
|
17
16
|
#
|
18
17
|
attr_reader :sandbox
|
19
18
|
|
20
|
-
# @return [Boolean] Whether the target needs to be implemented as a framework.
|
21
|
-
# Computed by analyzer.
|
22
|
-
#
|
23
|
-
attr_reader :host_requires_frameworks
|
24
|
-
alias_method :host_requires_frameworks?, :host_requires_frameworks
|
25
|
-
|
26
19
|
# @return [Hash{String=>Symbol}] A hash representing the user build
|
27
20
|
# configurations where each key corresponds to the name of a
|
28
21
|
# configuration and its value to its type (`:debug` or `:release`).
|
@@ -41,7 +34,7 @@ module Pod
|
|
41
34
|
#
|
42
35
|
attr_reader :build_settings
|
43
36
|
|
44
|
-
# @return [
|
37
|
+
# @return [BuildType] the build type for this target.
|
45
38
|
#
|
46
39
|
attr_reader :build_type
|
47
40
|
private :build_type
|
@@ -53,15 +46,13 @@ module Pod
|
|
53
46
|
# Initialize a new target
|
54
47
|
#
|
55
48
|
# @param [Sandbox] sandbox @see #sandbox
|
56
|
-
# @param [
|
49
|
+
# @param [BuildType] build_type @see #build_type
|
57
50
|
# @param [Hash{String=>Symbol}] user_build_configurations @see #user_build_configurations
|
58
51
|
# @param [Array<String>] archs @see #archs
|
59
52
|
# @param [Platform] platform @see #platform
|
60
53
|
#
|
61
|
-
def initialize(sandbox,
|
62
|
-
build_type: Target::BuildType.infer_from_spec(nil, :host_requires_frameworks => host_requires_frameworks?))
|
54
|
+
def initialize(sandbox, build_type, user_build_configurations, archs, platform)
|
63
55
|
@sandbox = sandbox
|
64
|
-
@host_requires_frameworks = host_requires_frameworks
|
65
56
|
@user_build_configurations = user_build_configurations
|
66
57
|
@archs = archs
|
67
58
|
@platform = platform
|
@@ -211,7 +202,7 @@ module Pod
|
|
211
202
|
# @return [String] A string suitable for debugging.
|
212
203
|
#
|
213
204
|
def inspect
|
214
|
-
"
|
205
|
+
"#<#{self.class} name=#{name}>"
|
215
206
|
end
|
216
207
|
|
217
208
|
#-------------------------------------------------------------------------#
|
@@ -246,7 +237,7 @@ module Pod
|
|
246
237
|
#
|
247
238
|
def xcconfig_path(variant = nil)
|
248
239
|
if variant
|
249
|
-
support_files_dir + "#{label}.#{variant.gsub(File::SEPARATOR, '-').downcase}.xcconfig"
|
240
|
+
support_files_dir + "#{label}.#{variant.to_s.gsub(File::SEPARATOR, '-').downcase}.xcconfig"
|
250
241
|
else
|
251
242
|
support_files_dir + "#{label}.xcconfig"
|
252
243
|
end
|
@@ -314,6 +305,12 @@ module Pod
|
|
314
305
|
@application_extension_api_only = true
|
315
306
|
end
|
316
307
|
|
308
|
+
# @return [Pathname] The absolute path of the prepare artifacts script.
|
309
|
+
#
|
310
|
+
def prepare_artifacts_script_path
|
311
|
+
support_files_dir + "#{label}-artifacts.sh"
|
312
|
+
end
|
313
|
+
|
317
314
|
#-------------------------------------------------------------------------#
|
318
315
|
|
319
316
|
private
|
@@ -1,4 +1,5 @@
|
|
1
|
-
require 'cocoapods/
|
1
|
+
require 'cocoapods/xcode/framework_paths'
|
2
|
+
require 'cocoapods/xcode/xcframework'
|
2
3
|
|
3
4
|
module Pod
|
4
5
|
# Stores the information relative to the target used to cluster the targets
|
@@ -56,7 +57,7 @@ module Pod
|
|
56
57
|
# Initialize a new instance
|
57
58
|
#
|
58
59
|
# @param [Sandbox] sandbox @see Target#sandbox
|
59
|
-
# @param [
|
60
|
+
# @param [BuildType] build_type @see Target#build_type
|
60
61
|
# @param [Hash{String=>Symbol}] user_build_configurations @see Target#user_build_configurations
|
61
62
|
# @param [Array<String>] archs @see Target#archs
|
62
63
|
# @param [Platform] platform @see #Target#platform
|
@@ -65,12 +66,10 @@ module Pod
|
|
65
66
|
# @param [Xcodeproj::Project] user_project @see #user_project
|
66
67
|
# @param [Array<String>] user_target_uuids @see #user_target_uuids
|
67
68
|
# @param [Hash{String=>Array<PodTarget>}] pod_targets_for_build_configuration @see #pod_targets_for_build_configuration
|
68
|
-
# @param [Target::BuildType] build_type @see #build_type
|
69
69
|
#
|
70
|
-
def initialize(sandbox,
|
71
|
-
|
72
|
-
|
73
|
-
super(sandbox, host_requires_frameworks, user_build_configurations, archs, platform, :build_type => build_type)
|
70
|
+
def initialize(sandbox, build_type, user_build_configurations, archs, platform, target_definition, client_root,
|
71
|
+
user_project, user_target_uuids, pod_targets_for_build_configuration)
|
72
|
+
super(sandbox, build_type, user_build_configurations, archs, platform)
|
74
73
|
raise "Can't initialize an AggregateTarget without a TargetDefinition!" if target_definition.nil?
|
75
74
|
raise "Can't initialize an AggregateTarget with an abstract TargetDefinition!" if target_definition.abstract?
|
76
75
|
@target_definition = target_definition
|
@@ -95,8 +94,8 @@ module Pod
|
|
95
94
|
merged = @pod_targets_for_build_configuration.merge(embedded_pod_targets_for_build_configuration) do |_, before, after|
|
96
95
|
(before + after).uniq
|
97
96
|
end
|
98
|
-
AggregateTarget.new(sandbox,
|
99
|
-
target_definition, client_root, user_project, user_target_uuids, merged
|
97
|
+
AggregateTarget.new(sandbox, build_type, user_build_configurations, archs, platform,
|
98
|
+
target_definition, client_root, user_project, user_target_uuids, merged).tap do |aggregate_target|
|
100
99
|
aggregate_target.search_paths_aggregate_targets.concat(search_paths_aggregate_targets).freeze
|
101
100
|
aggregate_target.mark_application_extension_api_only if application_extension_api_only
|
102
101
|
end
|
@@ -225,13 +224,20 @@ module Pod
|
|
225
224
|
!resource_paths_by_config.each_value.all?(&:empty?)
|
226
225
|
end
|
227
226
|
|
228
|
-
# @return [Boolean] Whether the target contains
|
227
|
+
# @return [Boolean] Whether the target contains frameworks to be embedded into
|
229
228
|
# the user target
|
230
229
|
#
|
231
230
|
def includes_frameworks?
|
232
231
|
!framework_paths_by_config.each_value.all?(&:empty?)
|
233
232
|
end
|
234
233
|
|
234
|
+
# @return [Boolean] Whether the target contains xcframeworks to be embedded into
|
235
|
+
# the user target
|
236
|
+
#
|
237
|
+
def includes_xcframeworks?
|
238
|
+
!xcframeworks_by_config.each_value.all?(&:empty?)
|
239
|
+
end
|
240
|
+
|
235
241
|
# @return [Hash{String => Array<FrameworkPaths>}] The vendored dynamic artifacts and framework target
|
236
242
|
# input and output paths grouped by config
|
237
243
|
#
|
@@ -249,6 +255,23 @@ module Pod
|
|
249
255
|
end
|
250
256
|
end
|
251
257
|
|
258
|
+
# @return [Hash{String => Array<Xcode::XCFramework>}] The vendored dynamic artifacts and framework target
|
259
|
+
# input and output paths grouped by config
|
260
|
+
#
|
261
|
+
def xcframeworks_by_config
|
262
|
+
@xcframeworks_by_config ||= begin
|
263
|
+
xcframeworks_by_config = {}
|
264
|
+
user_build_configurations.each_key do |config|
|
265
|
+
relevant_pod_targets = pod_targets_for_build_configuration(config)
|
266
|
+
xcframeworks_by_config[config] = relevant_pod_targets.flat_map do |pod_target|
|
267
|
+
library_specs = pod_target.library_specs.map(&:name)
|
268
|
+
pod_target.xcframeworks.values_at(*library_specs).flatten.compact.uniq
|
269
|
+
end
|
270
|
+
end
|
271
|
+
xcframeworks_by_config
|
272
|
+
end
|
273
|
+
end
|
274
|
+
|
252
275
|
# @return [Hash{String => Array<String>}] Uniqued Resources grouped by config
|
253
276
|
#
|
254
277
|
def resource_paths_by_config
|
@@ -294,6 +317,12 @@ module Pod
|
|
294
317
|
support_files_dir + "#{label}-resources.sh"
|
295
318
|
end
|
296
319
|
|
320
|
+
# @return [Pathname] The absolute path of the embed frameworks script.
|
321
|
+
#
|
322
|
+
def embed_frameworks_script_path
|
323
|
+
support_files_dir + "#{label}-frameworks.sh"
|
324
|
+
end
|
325
|
+
|
297
326
|
# @param [String] configuration the configuration this path is for.
|
298
327
|
#
|
299
328
|
# @return [Pathname] The absolute path of the copy resources script input file list.
|
@@ -310,12 +339,6 @@ module Pod
|
|
310
339
|
support_files_dir + "#{label}-resources-#{configuration}-output-files.xcfilelist"
|
311
340
|
end
|
312
341
|
|
313
|
-
# @return [Pathname] The absolute path of the embed frameworks script.
|
314
|
-
#
|
315
|
-
def embed_frameworks_script_path
|
316
|
-
support_files_dir + "#{label}-frameworks.sh"
|
317
|
-
end
|
318
|
-
|
319
342
|
# @param [String] configuration the configuration this path is for.
|
320
343
|
#
|
321
344
|
# @return [Pathname] The absolute path of the embed frameworks script input file list.
|
@@ -332,6 +355,22 @@ module Pod
|
|
332
355
|
support_files_dir + "#{label}-frameworks-#{configuration}-output-files.xcfilelist"
|
333
356
|
end
|
334
357
|
|
358
|
+
# @param [String] configuration the configuration this path is for.
|
359
|
+
#
|
360
|
+
# @return [Pathname] The absolute path of the prepare artifacts script input file list.
|
361
|
+
#
|
362
|
+
def prepare_artifacts_script_input_files_path(configuration)
|
363
|
+
support_files_dir + "#{label}-artifacts-#{configuration}-input-files.xcfilelist"
|
364
|
+
end
|
365
|
+
|
366
|
+
# @param [String] configuration the configuration this path is for.
|
367
|
+
#
|
368
|
+
# @return [Pathname] The absolute path of the prepare artifacts script output file list.
|
369
|
+
#
|
370
|
+
def prepare_artifacts_script_output_files_path(configuration)
|
371
|
+
support_files_dir + "#{label}-artifacts-#{configuration}-output-files.xcfilelist"
|
372
|
+
end
|
373
|
+
|
335
374
|
# @return [String] The output file path fo the check manifest lock script.
|
336
375
|
#
|
337
376
|
def check_manifest_lock_script_output_file_path
|
@@ -411,6 +450,27 @@ module Pod
|
|
411
450
|
"${PODS_ROOT}/#{relative_to_pods_root(embed_frameworks_script_output_files_path('${CONFIGURATION}'))}"
|
412
451
|
end
|
413
452
|
|
453
|
+
# @return [String] The path of the prepare artifacts script relative to the
|
454
|
+
# root of the Pods project.
|
455
|
+
#
|
456
|
+
def prepare_artifacts_script_relative_path
|
457
|
+
"${PODS_ROOT}/#{relative_to_pods_root(prepare_artifacts_script_path)}"
|
458
|
+
end
|
459
|
+
|
460
|
+
# @return [String] The path of the prepare artifacts script input file list
|
461
|
+
# relative to the root of the Pods project.
|
462
|
+
#
|
463
|
+
def prepare_artifacts_script_input_files_relative_path
|
464
|
+
"${PODS_ROOT}/#{relative_to_pods_root(prepare_artifacts_script_input_files_path('${CONFIGURATION}'))}"
|
465
|
+
end
|
466
|
+
|
467
|
+
# @return [String] The path of the prepare artifacts script output file list
|
468
|
+
# relative to the root of the Pods project.
|
469
|
+
#
|
470
|
+
def prepare_artifacts_script_output_files_relative_path
|
471
|
+
"${PODS_ROOT}/#{relative_to_pods_root(prepare_artifacts_script_output_files_path('${CONFIGURATION}'))}"
|
472
|
+
end
|
473
|
+
|
414
474
|
private
|
415
475
|
|
416
476
|
# @!group Private Helpers
|
@@ -431,8 +491,8 @@ module Pod
|
|
431
491
|
def create_build_settings
|
432
492
|
settings = {}
|
433
493
|
|
434
|
-
user_build_configurations.
|
435
|
-
settings[configuration_name] = BuildSettings::AggregateTargetSettings.new(self, configuration_name)
|
494
|
+
user_build_configurations.each do |configuration_name, configuration|
|
495
|
+
settings[configuration_name] = BuildSettings::AggregateTargetSettings.new(self, configuration_name, :configuration => configuration)
|
436
496
|
end
|
437
497
|
|
438
498
|
settings
|