cocoapods 1.5.2 → 1.6.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 +5 -5
- data/CHANGELOG.md +365 -1
- data/bin/pod +1 -1
- data/lib/cocoapods/command/cache/clean.rb +1 -1
- data/lib/cocoapods/command/init.rb +4 -2
- data/lib/cocoapods/command/install.rb +7 -0
- data/lib/cocoapods/command/lib/lint.rb +8 -1
- data/lib/cocoapods/command/outdated.rb +4 -9
- data/lib/cocoapods/command/repo/add.rb +1 -1
- data/lib/cocoapods/command/repo/list.rb +1 -1
- data/lib/cocoapods/command/repo/push.rb +17 -12
- data/lib/cocoapods/command/repo/remove.rb +1 -1
- data/lib/cocoapods/command/repo/update.rb +1 -1
- data/lib/cocoapods/command/setup.rb +1 -1
- data/lib/cocoapods/command/spec/create.rb +39 -39
- data/lib/cocoapods/command/spec/lint.rb +8 -1
- data/lib/cocoapods/command.rb +3 -1
- data/lib/cocoapods/config.rb +13 -2
- data/lib/cocoapods/downloader/cache.rb +1 -1
- data/lib/cocoapods/executable.rb +3 -3
- data/lib/cocoapods/external_sources/abstract_external_source.rb +23 -13
- data/lib/cocoapods/external_sources.rb +7 -4
- data/lib/cocoapods/gem_version.rb +1 -1
- data/lib/cocoapods/generator/acknowledgements/markdown.rb +6 -0
- data/lib/cocoapods/generator/acknowledgements/plist.rb +13 -2
- data/lib/cocoapods/generator/app_target_helper.rb +141 -17
- data/lib/cocoapods/generator/copy_resources_script.rb +14 -3
- data/lib/cocoapods/generator/dummy_source.rb +14 -5
- data/lib/cocoapods/generator/embed_frameworks_script.rb +37 -20
- data/lib/cocoapods/generator/header.rb +1 -1
- data/lib/cocoapods/generator/info_plist_file.rb +12 -4
- data/lib/cocoapods/generator/prefix_header.rb +2 -2
- data/lib/cocoapods/hooks_manager.rb +28 -17
- data/lib/cocoapods/installer/analyzer/analysis_result.rb +52 -22
- data/lib/cocoapods/installer/analyzer/locking_dependency_analyzer.rb +14 -6
- data/lib/cocoapods/installer/analyzer/pod_variant.rb +4 -5
- data/lib/cocoapods/installer/analyzer/sandbox_analyzer.rb +3 -14
- data/lib/cocoapods/installer/analyzer/specs_state.rb +28 -4
- data/lib/cocoapods/installer/analyzer/target_inspection_result.rb +27 -14
- data/lib/cocoapods/installer/analyzer/target_inspector.rb +17 -11
- data/lib/cocoapods/installer/analyzer.rb +391 -284
- data/lib/cocoapods/installer/installation_options.rb +2 -0
- data/lib/cocoapods/installer/pod_source_installer.rb +31 -43
- data/lib/cocoapods/installer/post_install_hooks_context.rb +72 -47
- data/lib/cocoapods/installer/pre_install_hooks_context.rb +22 -13
- data/lib/cocoapods/installer/source_provider_hooks_context.rb +3 -1
- data/lib/cocoapods/installer/user_project_integrator/target_integrator/xcconfig_integrator.rb +44 -11
- data/lib/cocoapods/installer/user_project_integrator/target_integrator.rb +69 -29
- data/lib/cocoapods/installer/user_project_integrator.rb +6 -4
- data/lib/cocoapods/installer/xcode/pods_project_generator/aggregate_target_installer.rb +25 -16
- data/lib/cocoapods/installer/xcode/pods_project_generator/app_host_installer.rb +104 -0
- data/lib/cocoapods/installer/xcode/pods_project_generator/file_references_installer.rb +23 -50
- data/lib/cocoapods/installer/xcode/pods_project_generator/pod_target_installer.rb +296 -177
- data/lib/cocoapods/installer/xcode/pods_project_generator/pod_target_integrator.rb +51 -33
- data/lib/cocoapods/installer/xcode/pods_project_generator/target_installation_result.rb +93 -0
- data/lib/cocoapods/installer/xcode/pods_project_generator/target_installer.rb +62 -69
- data/lib/cocoapods/installer/xcode/pods_project_generator/target_installer_helper.rb +72 -0
- data/lib/cocoapods/installer/xcode/pods_project_generator.rb +130 -122
- data/lib/cocoapods/installer/xcode/target_validator.rb +15 -9
- data/lib/cocoapods/installer.rb +140 -63
- data/lib/cocoapods/project.rb +16 -14
- data/lib/cocoapods/resolver/resolver_specification.rb +41 -0
- data/lib/cocoapods/resolver.rb +79 -98
- data/lib/cocoapods/sandbox/file_accessor.rb +11 -6
- data/lib/cocoapods/sandbox/headers_store.rb +9 -8
- data/lib/cocoapods/sandbox/path_list.rb +5 -8
- data/lib/cocoapods/sandbox.rb +31 -43
- data/lib/cocoapods/sources_manager.rb +1 -1
- data/lib/cocoapods/target/aggregate_target.rb +143 -85
- data/lib/cocoapods/target/build_settings.rb +1124 -0
- data/lib/cocoapods/target/framework_paths.rb +36 -0
- data/lib/cocoapods/target/pod_target.rb +198 -295
- data/lib/cocoapods/target.rb +92 -37
- data/lib/cocoapods/user_interface.rb +5 -0
- data/lib/cocoapods/validator.rb +149 -44
- data/lib/cocoapods.rb +0 -1
- metadata +31 -23
- data/lib/cocoapods/generator/xcconfig/aggregate_xcconfig.rb +0 -260
- data/lib/cocoapods/generator/xcconfig/pod_xcconfig.rb +0 -87
- data/lib/cocoapods/generator/xcconfig/xcconfig_helper.rb +0 -558
- data/lib/cocoapods/generator/xcconfig.rb +0 -13
@@ -1,32 +1,113 @@
|
|
1
|
+
require 'cocoapods/target/framework_paths'
|
2
|
+
|
1
3
|
module Pod
|
2
4
|
# Stores the information relative to the target used to cluster the targets
|
3
5
|
# of the single Pods. The client targets will then depend on this one.
|
4
6
|
#
|
5
7
|
class AggregateTarget < Target
|
8
|
+
# Product types where the product's frameworks must be embedded in a host target
|
9
|
+
#
|
10
|
+
EMBED_FRAMEWORKS_IN_HOST_TARGET_TYPES = [:app_extension, :framework, :static_library, :messages_extension, :watch_extension, :xpc_service].freeze
|
11
|
+
|
6
12
|
# @return [TargetDefinition] the target definition of the Podfile that
|
7
13
|
# generated this target.
|
14
|
+
#
|
8
15
|
attr_reader :target_definition
|
9
16
|
|
10
|
-
#
|
17
|
+
# @return [Pathname] the folder where the client is stored used for
|
18
|
+
# computing the relative paths. If integrating it should be the
|
19
|
+
# folder where the user project is stored, otherwise it should
|
20
|
+
# be the installation root.
|
11
21
|
#
|
12
|
-
|
22
|
+
attr_reader :client_root
|
13
23
|
|
14
|
-
#
|
24
|
+
# @return [Xcodeproj::Project] the user project that this target will
|
25
|
+
# integrate as identified by the analyzer.
|
26
|
+
#
|
27
|
+
attr_reader :user_project
|
28
|
+
|
29
|
+
# @return [Array<String>] the list of the UUIDs of the user targets that
|
30
|
+
# will be integrated by this target as identified by the analyzer.
|
31
|
+
#
|
32
|
+
# @note The target instances are not stored to prevent editing different
|
33
|
+
# instances.
|
34
|
+
#
|
35
|
+
attr_reader :user_target_uuids
|
36
|
+
|
37
|
+
# @return [Hash<String, Xcodeproj::Config>] Map from configuration name to
|
38
|
+
# configuration file for the target
|
39
|
+
#
|
40
|
+
# @note The configurations are generated by the {TargetInstaller} and
|
41
|
+
# used by {UserProjectIntegrator} to check for any overridden
|
42
|
+
# values.
|
43
|
+
#
|
44
|
+
attr_reader :xcconfigs
|
45
|
+
|
46
|
+
# @return [Array<PodTarget>] The dependencies for this target.
|
47
|
+
#
|
48
|
+
attr_reader :pod_targets
|
49
|
+
|
50
|
+
# @return [Array<AggregateTarget>] The aggregate targets whose pods this
|
51
|
+
# target must be able to import, but will not directly link against.
|
15
52
|
#
|
16
|
-
|
17
|
-
|
53
|
+
attr_reader :search_paths_aggregate_targets
|
54
|
+
|
55
|
+
# Initialize a new instance
|
18
56
|
#
|
19
|
-
|
20
|
-
|
21
|
-
|
57
|
+
# @param [Sandbox] sandbox @see Target#sandbox
|
58
|
+
# @param [Boolean] host_requires_frameworks @see Target#host_requires_frameworks
|
59
|
+
# @param [Hash{String=>Symbol}] user_build_configurations @see Target#user_build_configurations
|
60
|
+
# @param [Array<String>] archs @see Target#archs
|
61
|
+
# @param [Platform] platform @see #Target#platform
|
62
|
+
# @param [TargetDefinition] target_definition @see #target_definition
|
63
|
+
# @param [Pathname] client_root @see #client_root
|
64
|
+
# @param [Xcodeproj::Project] user_project @see #user_project
|
65
|
+
# @param [Array<String>] user_target_uuids @see #user_target_uuids
|
66
|
+
# @param [Hash{String=>Array<PodTarget>}] pod_targets_for_build_configuration @see #pod_targets_for_build_configuration
|
67
|
+
#
|
68
|
+
def initialize(sandbox, host_requires_frameworks, user_build_configurations, archs, platform, target_definition,
|
69
|
+
client_root, user_project, user_target_uuids, pod_targets_for_build_configuration)
|
70
|
+
super(sandbox, host_requires_frameworks, user_build_configurations, archs, platform)
|
71
|
+
raise "Can't initialize an AggregateTarget without a TargetDefinition!" if target_definition.nil?
|
72
|
+
raise "Can't initialize an AggregateTarget with an abstract TargetDefinition!" if target_definition.abstract?
|
22
73
|
@target_definition = target_definition
|
23
|
-
@
|
24
|
-
@
|
74
|
+
@client_root = client_root
|
75
|
+
@user_project = user_project
|
76
|
+
@user_target_uuids = user_target_uuids
|
77
|
+
@pod_targets_for_build_configuration = pod_targets_for_build_configuration
|
78
|
+
@pod_targets = pod_targets_for_build_configuration.values.flatten.uniq
|
25
79
|
@search_paths_aggregate_targets = []
|
26
|
-
@file_accessors = []
|
27
80
|
@xcconfigs = {}
|
28
81
|
end
|
29
82
|
|
83
|
+
# Merges this aggregate target with additional pod targets that are part of embedded aggregate targets.
|
84
|
+
#
|
85
|
+
# @param [Hash{String=>Array<PodTarget>}] embedded_pod_targets_for_build_configuration
|
86
|
+
# The pod targets to merge with.
|
87
|
+
#
|
88
|
+
# @return [AggregateTarget] a new instance of this aggregate target with additional pod targets to be used from
|
89
|
+
# pod targets of embedded aggregate targets.
|
90
|
+
#
|
91
|
+
def merge_embedded_pod_targets(embedded_pod_targets_for_build_configuration)
|
92
|
+
merged = @pod_targets_for_build_configuration.merge(embedded_pod_targets_for_build_configuration) do |_, before, after|
|
93
|
+
(before + after).uniq
|
94
|
+
end
|
95
|
+
AggregateTarget.new(sandbox, host_requires_frameworks, user_build_configurations, archs, platform,
|
96
|
+
target_definition, client_root, user_project, user_target_uuids, merged).tap do |aggregate_target|
|
97
|
+
aggregate_target.search_paths_aggregate_targets.concat(search_paths_aggregate_targets).freeze
|
98
|
+
end
|
99
|
+
end
|
100
|
+
|
101
|
+
def build_settings(configuration_name = nil)
|
102
|
+
if configuration_name
|
103
|
+
@build_settings[configuration_name] ||
|
104
|
+
raise(ArgumentError, "#{self} does not contain a build setting for the #{configuration_name.inspect} configuration, only #{@build_settings.keys.inspect}")
|
105
|
+
else
|
106
|
+
@build_settings.each_value.first ||
|
107
|
+
raise(ArgumentError, "#{self} does not contain any build settings")
|
108
|
+
end
|
109
|
+
end
|
110
|
+
|
30
111
|
# @return [Boolean] True if the user_target refers to a
|
31
112
|
# library (framework, static or dynamic lib).
|
32
113
|
#
|
@@ -61,38 +142,12 @@ module Pod
|
|
61
142
|
target_definition.label.to_s
|
62
143
|
end
|
63
144
|
|
64
|
-
# @return [String] the name to use for the source code module constructed
|
65
|
-
# for this target, and which will be used to import the module in
|
66
|
-
# implementation source files.
|
67
|
-
#
|
68
|
-
def product_module_name
|
69
|
-
c99ext_identifier(label)
|
70
|
-
end
|
71
|
-
|
72
|
-
# @return [Platform] the platform for this target.
|
73
|
-
#
|
74
|
-
def platform
|
75
|
-
@platform ||= target_definition.platform
|
76
|
-
end
|
77
|
-
|
78
145
|
# @return [Podfile] The podfile which declares the dependency
|
79
146
|
#
|
80
147
|
def podfile
|
81
148
|
target_definition.podfile
|
82
149
|
end
|
83
150
|
|
84
|
-
# @return [Pathname] the folder where the client is stored used for
|
85
|
-
# computing the relative paths. If integrating it should be the
|
86
|
-
# folder where the user project is stored, otherwise it should
|
87
|
-
# be the installation root.
|
88
|
-
#
|
89
|
-
attr_accessor :client_root
|
90
|
-
|
91
|
-
# @return [Xcodeproj::Project] the user project that this target will
|
92
|
-
# integrate as identified by the analyzer.
|
93
|
-
#
|
94
|
-
attr_accessor :user_project
|
95
|
-
|
96
151
|
# @return [Pathname] the path of the user project that this target will
|
97
152
|
# integrate as identified by the analyzer.
|
98
153
|
#
|
@@ -100,14 +155,6 @@ module Pod
|
|
100
155
|
user_project.path if user_project
|
101
156
|
end
|
102
157
|
|
103
|
-
# @return [Array<String>] the list of the UUIDs of the user targets that
|
104
|
-
# will be integrated by this target as identified by the analyzer.
|
105
|
-
#
|
106
|
-
# @note The target instances are not stored to prevent editing different
|
107
|
-
# instances.
|
108
|
-
#
|
109
|
-
attr_accessor :user_target_uuids
|
110
|
-
|
111
158
|
# List all user targets that will be integrated by this #target.
|
112
159
|
#
|
113
160
|
# @return [Array<PBXNativeTarget>]
|
@@ -124,24 +171,6 @@ module Pod
|
|
124
171
|
end
|
125
172
|
end
|
126
173
|
|
127
|
-
# @return [Hash<String, Xcodeproj::Config>] Map from configuration name to
|
128
|
-
# configuration file for the target
|
129
|
-
#
|
130
|
-
# @note The configurations are generated by the {TargetInstaller} and
|
131
|
-
# used by {UserProjectIntegrator} to check for any overridden
|
132
|
-
# values.
|
133
|
-
#
|
134
|
-
attr_reader :xcconfigs
|
135
|
-
|
136
|
-
# @return [Array<PodTarget>] The dependencies for this target.
|
137
|
-
#
|
138
|
-
attr_accessor :pod_targets
|
139
|
-
|
140
|
-
# @return [Array<AggregateTarget>] The aggregate targets whose pods this
|
141
|
-
# target must be able to import, but will not directly link against.
|
142
|
-
#
|
143
|
-
attr_reader :search_paths_aggregate_targets
|
144
|
-
|
145
174
|
# @param [String] build_configuration The build configuration for which the
|
146
175
|
# the pod targets should be returned.
|
147
176
|
#
|
@@ -149,14 +178,7 @@ module Pod
|
|
149
178
|
# configuration.
|
150
179
|
#
|
151
180
|
def pod_targets_for_build_configuration(build_configuration)
|
152
|
-
@pod_targets_for_build_configuration
|
153
|
-
@pod_targets_for_build_configuration[build_configuration] ||= pod_targets.select do |pod_target|
|
154
|
-
pod_target.include_in_build_config?(target_definition, build_configuration)
|
155
|
-
end
|
156
|
-
end
|
157
|
-
|
158
|
-
def pod_targets_to_link
|
159
|
-
@pod_targets_to_link ||= pod_targets.to_set - search_paths_aggregate_targets.flat_map(&:pod_targets)
|
181
|
+
@pod_targets_for_build_configuration[build_configuration] || []
|
160
182
|
end
|
161
183
|
|
162
184
|
# @return [Array<Specification>] The specifications used by this aggregate target.
|
@@ -189,7 +211,20 @@ module Pod
|
|
189
211
|
pod_targets.any?(&:uses_swift?)
|
190
212
|
end
|
191
213
|
|
192
|
-
# @return [
|
214
|
+
# @return [Boolean] Whether the target contains any resources
|
215
|
+
#
|
216
|
+
def includes_resources?
|
217
|
+
!resource_paths_by_config.values.all?(&:empty?)
|
218
|
+
end
|
219
|
+
|
220
|
+
# @return [Boolean] Whether the target contains framework to be embedded into
|
221
|
+
# the user target
|
222
|
+
#
|
223
|
+
def includes_frameworks?
|
224
|
+
!framework_paths_by_config.values.all?(&:empty?)
|
225
|
+
end
|
226
|
+
|
227
|
+
# @return [Hash{String => Array<FrameworkPaths>}] The vendored dynamic artifacts and framework target
|
193
228
|
# input and output paths grouped by config
|
194
229
|
#
|
195
230
|
def framework_paths_by_config
|
@@ -197,7 +232,10 @@ module Pod
|
|
197
232
|
framework_paths_by_config = {}
|
198
233
|
user_build_configurations.keys.each do |config|
|
199
234
|
relevant_pod_targets = pod_targets_for_build_configuration(config)
|
200
|
-
framework_paths_by_config[config] = relevant_pod_targets.flat_map
|
235
|
+
framework_paths_by_config[config] = relevant_pod_targets.flat_map do |pod_target|
|
236
|
+
non_test_specs = pod_target.non_test_specs.map(&:name)
|
237
|
+
pod_target.framework_paths.values_at(*non_test_specs).flatten.compact.uniq
|
238
|
+
end
|
201
239
|
end
|
202
240
|
framework_paths_by_config
|
203
241
|
end
|
@@ -211,8 +249,12 @@ module Pod
|
|
211
249
|
pod_target.should_build? && pod_target.requires_frameworks? && !pod_target.static_framework?
|
212
250
|
end
|
213
251
|
user_build_configurations.keys.each_with_object({}) do |config, resources_by_config|
|
214
|
-
|
215
|
-
|
252
|
+
targets = relevant_pod_targets & pod_targets_for_build_configuration(config)
|
253
|
+
resources_by_config[config] = targets.flat_map do |pod_target|
|
254
|
+
non_test_specs = pod_target.non_test_specs.map(&:name)
|
255
|
+
resource_paths = pod_target.resource_paths.values_at(*non_test_specs).flatten
|
256
|
+
resource_paths << bridge_support_file
|
257
|
+
resource_paths.compact.uniq
|
216
258
|
end
|
217
259
|
end
|
218
260
|
end
|
@@ -256,11 +298,17 @@ module Pod
|
|
256
298
|
"$(DERIVED_FILE_DIR)/#{label}-checkManifestLockResult.txt"
|
257
299
|
end
|
258
300
|
|
301
|
+
# @return [Pathname] The relative path of the Pods directory from user project's directory.
|
302
|
+
#
|
303
|
+
def relative_pods_root_path
|
304
|
+
sandbox.root.relative_path_from(client_root)
|
305
|
+
end
|
306
|
+
|
259
307
|
# @return [String] The xcconfig path of the root from the `$(SRCROOT)`
|
260
308
|
# variable of the user's project.
|
261
309
|
#
|
262
310
|
def relative_pods_root
|
263
|
-
"${SRCROOT}/#{
|
311
|
+
"${SRCROOT}/#{relative_pods_root_path}"
|
264
312
|
end
|
265
313
|
|
266
314
|
# @return [String] The path of the Podfile directory relative to the
|
@@ -278,21 +326,21 @@ module Pod
|
|
278
326
|
# the user project.
|
279
327
|
#
|
280
328
|
def xcconfig_relative_path(config_name)
|
281
|
-
|
329
|
+
xcconfig_path(config_name).relative_path_from(client_root).to_s
|
282
330
|
end
|
283
331
|
|
284
332
|
# @return [String] The path of the copy resources script relative to the
|
285
|
-
# root of the
|
333
|
+
# root of the Pods project.
|
286
334
|
#
|
287
335
|
def copy_resources_script_relative_path
|
288
|
-
"${
|
336
|
+
"${PODS_ROOT}/#{relative_to_pods_root(copy_resources_script_path)}"
|
289
337
|
end
|
290
338
|
|
291
339
|
# @return [String] The path of the embed frameworks relative to the
|
292
|
-
# root of the
|
340
|
+
# root of the Pods project.
|
293
341
|
#
|
294
342
|
def embed_frameworks_script_relative_path
|
295
|
-
"${
|
343
|
+
"${PODS_ROOT}/#{relative_to_pods_root(embed_frameworks_script_path)}"
|
296
344
|
end
|
297
345
|
|
298
346
|
private
|
@@ -300,16 +348,26 @@ module Pod
|
|
300
348
|
# @!group Private Helpers
|
301
349
|
#-------------------------------------------------------------------------#
|
302
350
|
|
303
|
-
# Computes the relative path of a sandboxed file from the `$(
|
304
|
-
# variable of the
|
351
|
+
# Computes the relative path of a sandboxed file from the `$(PODS_ROOT)`
|
352
|
+
# variable of the Pods's project.
|
305
353
|
#
|
306
354
|
# @param [Pathname] path
|
307
355
|
# A relative path from the root of the sandbox.
|
308
356
|
#
|
309
357
|
# @return [String] The computed path.
|
310
358
|
#
|
311
|
-
def
|
312
|
-
path.relative_path_from(
|
359
|
+
def relative_to_pods_root(path)
|
360
|
+
path.relative_path_from(sandbox.root).to_s
|
361
|
+
end
|
362
|
+
|
363
|
+
def create_build_settings
|
364
|
+
settings = {}
|
365
|
+
|
366
|
+
user_build_configurations.each_key do |configuration_name|
|
367
|
+
settings[configuration_name] = BuildSettings::AggregateTargetSettings.new(self, configuration_name)
|
368
|
+
end
|
369
|
+
|
370
|
+
settings
|
313
371
|
end
|
314
372
|
end
|
315
373
|
end
|