cocoapods 0.20.2 → 0.21.0.rc1
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 +7 -0
- data/CHANGELOG.md +26 -0
- data/lib/cocoapods.rb +8 -4
- data/lib/cocoapods/command/spec.rb +5 -14
- data/lib/cocoapods/gem_version.rb +1 -1
- data/lib/cocoapods/generator/copy_resources_script.rb +2 -2
- data/lib/cocoapods/generator/xcconfig.rb +16 -75
- data/lib/cocoapods/generator/xcconfig/aggregate_xcconfig.rb +47 -0
- data/lib/cocoapods/generator/xcconfig/private_pod_xcconfig.rb +45 -0
- data/lib/cocoapods/generator/xcconfig/public_pod_xcconfig.rb +40 -0
- data/lib/cocoapods/hooks/installer_representation.rb +3 -3
- data/lib/cocoapods/installer.rb +74 -39
- data/lib/cocoapods/installer/analyzer.rb +52 -41
- data/lib/cocoapods/installer/file_references_installer.rb +13 -12
- data/lib/cocoapods/installer/target_installer.rb +6 -241
- data/lib/cocoapods/installer/target_installer/aggregate_target_installer.rb +132 -0
- data/lib/cocoapods/installer/target_installer/pod_target_installer.rb +160 -0
- data/lib/cocoapods/installer/user_project_integrator.rb +11 -11
- data/lib/cocoapods/installer/user_project_integrator/target_integrator.rb +70 -50
- data/lib/cocoapods/sandbox.rb +0 -5
- data/lib/cocoapods/sandbox/file_accessor.rb +2 -16
- data/lib/cocoapods/target.rb +116 -0
- data/lib/cocoapods/target/aggregate_target.rb +121 -0
- data/lib/cocoapods/target/pod_target.rb +53 -0
- data/lib/cocoapods/validator.rb +1 -1
- metadata +160 -226
- data/lib/cocoapods/file_list.rb +0 -36
- data/lib/cocoapods/library.rb +0 -202
@@ -51,10 +51,11 @@ module Pod
|
|
51
51
|
@result.podfile_state = generate_podfile_state
|
52
52
|
@locked_dependencies = generate_version_locking_dependencies
|
53
53
|
|
54
|
-
|
54
|
+
compute_target_platforms
|
55
55
|
fetch_external_sources if allow_fetches
|
56
56
|
@result.specs_by_target = resolve_dependencies
|
57
57
|
@result.specifications = generate_specifications
|
58
|
+
@result.targets = generate_targets
|
58
59
|
@result.sandbox_state = generate_sandbox_state
|
59
60
|
@result
|
60
61
|
end
|
@@ -158,44 +159,40 @@ module Pod
|
|
158
159
|
|
159
160
|
# Creates the models that represent the libraries generated by CocoaPods.
|
160
161
|
#
|
161
|
-
# @note The libraries are generated before the resolution process
|
162
|
-
# because it might be necessary to infer the platform from the
|
163
|
-
# user targets, which in turns requires to identify the user
|
164
|
-
# project.
|
165
|
-
#
|
166
|
-
# @note The specification of the libraries are added in the
|
167
|
-
# {#resolve_dependencies} step.
|
168
|
-
#
|
169
162
|
# @return [Array<Libraries>] the generated libraries.
|
170
163
|
#
|
171
|
-
def
|
172
|
-
|
173
|
-
|
174
|
-
|
175
|
-
|
164
|
+
def generate_targets
|
165
|
+
targets = []
|
166
|
+
result.specs_by_target.each do |target_definition, specs|
|
167
|
+
target = AggregateTarget.new(target_definition, sandbox)
|
168
|
+
targets << target
|
176
169
|
|
177
170
|
if config.integrate_targets?
|
178
171
|
project_path = compute_user_project_path(target_definition)
|
179
172
|
user_project = Xcodeproj::Project.new(project_path)
|
180
|
-
|
173
|
+
native_targets = compute_user_project_targets(target_definition, user_project)
|
181
174
|
|
182
|
-
|
183
|
-
|
184
|
-
|
185
|
-
|
186
|
-
lib.platform = compute_platform_for_target_definition(target_definition, targets)
|
175
|
+
target.user_project_path = project_path
|
176
|
+
target.client_root = project_path.dirname
|
177
|
+
target.user_target_uuids = native_targets.map(&:uuid)
|
178
|
+
target.user_build_configurations = compute_user_build_configurations(target_definition, native_targets)
|
187
179
|
else
|
188
|
-
|
189
|
-
|
190
|
-
|
191
|
-
|
192
|
-
|
193
|
-
|
194
|
-
|
180
|
+
target.client_root = config.installation_root
|
181
|
+
target.user_target_uuids = []
|
182
|
+
target.user_build_configurations = {}
|
183
|
+
end
|
184
|
+
|
185
|
+
grouped_specs = specs.map do |spec|
|
186
|
+
specs.select { |s| s.root == spec.root }
|
187
|
+
end.uniq
|
188
|
+
|
189
|
+
grouped_specs.each do |pod_specs|
|
190
|
+
pod_target = PodTarget.new(pod_specs, target_definition, sandbox)
|
191
|
+
pod_target.user_build_configurations = target.user_build_configurations
|
192
|
+
target.pod_targets << pod_target
|
195
193
|
end
|
196
|
-
libraries << lib
|
197
194
|
end
|
198
|
-
|
195
|
+
targets
|
199
196
|
end
|
200
197
|
|
201
198
|
# Generates dependencies that require the specific version of the Pods
|
@@ -263,8 +260,6 @@ module Pod
|
|
263
260
|
|
264
261
|
# Converts the Podfile in a list of specifications grouped by target.
|
265
262
|
#
|
266
|
-
# @note In this step the specs are added to the libraries.
|
267
|
-
#
|
268
263
|
# @note As some dependencies might have external sources the resolver
|
269
264
|
# is aware of the {Sandbox} and interacts with it to download the
|
270
265
|
# podspecs of the external sources. This is necessary because the
|
@@ -284,17 +279,10 @@ module Pod
|
|
284
279
|
#
|
285
280
|
def resolve_dependencies
|
286
281
|
specs_by_target = nil
|
287
|
-
|
288
282
|
UI.section "Resolving dependencies of #{UI.path podfile.defined_in_file}" do
|
289
283
|
resolver = Resolver.new(sandbox, podfile, locked_dependencies)
|
290
284
|
specs_by_target = resolver.resolve
|
291
285
|
end
|
292
|
-
|
293
|
-
specs_by_target.each do |target_definition, specs|
|
294
|
-
lib = result.libraries.find { |l| l.target_definition == target_definition}
|
295
|
-
lib.specs = specs
|
296
|
-
end
|
297
|
-
|
298
286
|
specs_by_target
|
299
287
|
end
|
300
288
|
|
@@ -449,6 +437,29 @@ module Pod
|
|
449
437
|
Platform.new(name, deployment_target)
|
450
438
|
end
|
451
439
|
|
440
|
+
# Precompute the platforms for each target_definition in the Podfile
|
441
|
+
#
|
442
|
+
# @note The platforms are computed and added to each target_definition
|
443
|
+
# because it might be necessary to infer the platform from the
|
444
|
+
# user targets.
|
445
|
+
#
|
446
|
+
# @return [void]
|
447
|
+
#
|
448
|
+
def compute_target_platforms
|
449
|
+
podfile.target_definition_list.each do |target_definition|
|
450
|
+
if config.integrate_targets?
|
451
|
+
project_path = compute_user_project_path(target_definition)
|
452
|
+
user_project = Xcodeproj::Project.new(project_path)
|
453
|
+
targets = compute_user_project_targets(target_definition, user_project)
|
454
|
+
platform = compute_platform_for_target_definition(target_definition, targets)
|
455
|
+
else
|
456
|
+
unless target_definition.platform
|
457
|
+
raise Informative, "It is necessary to specify the platform in the Podfile if not integrating."
|
458
|
+
end
|
459
|
+
end
|
460
|
+
end
|
461
|
+
end
|
462
|
+
|
452
463
|
#-----------------------------------------------------------------------#
|
453
464
|
|
454
465
|
class AnalysisResult
|
@@ -472,10 +483,10 @@ module Pod
|
|
472
483
|
#
|
473
484
|
attr_accessor :sandbox_state
|
474
485
|
|
475
|
-
# @return [Array<
|
476
|
-
#
|
486
|
+
# @return [Array<Target>] The Podfile targets containing library
|
487
|
+
# dependencies.
|
477
488
|
#
|
478
|
-
attr_accessor :
|
489
|
+
attr_accessor :targets
|
479
490
|
|
480
491
|
end
|
481
492
|
|
@@ -107,18 +107,19 @@ module Pod
|
|
107
107
|
#
|
108
108
|
def link_headers
|
109
109
|
UI.message "- Linking headers" do
|
110
|
-
|
111
|
-
|
112
|
-
|
113
|
-
|
114
|
-
|
115
|
-
|
116
|
-
|
117
|
-
|
118
|
-
|
119
|
-
|
120
|
-
|
121
|
-
|
110
|
+
libraries.each do |library|
|
111
|
+
library.file_accessors.each do |file_accessor|
|
112
|
+
headers_sandbox = Pathname.new(file_accessor.spec.root.name)
|
113
|
+
library.build_headers.add_search_path(headers_sandbox)
|
114
|
+
sandbox.public_headers.add_search_path(headers_sandbox)
|
115
|
+
|
116
|
+
header_mappings(headers_sandbox, file_accessor, file_accessor.headers).each do |namespaced_path, files|
|
117
|
+
library.build_headers.add_files(namespaced_path, files)
|
118
|
+
end
|
119
|
+
|
120
|
+
header_mappings(headers_sandbox, file_accessor, file_accessor.public_headers).each do |namespaced_path, files|
|
121
|
+
sandbox.public_headers.add_files(namespaced_path, files)
|
122
|
+
end
|
122
123
|
end
|
123
124
|
end
|
124
125
|
end
|
@@ -24,30 +24,10 @@ module Pod
|
|
24
24
|
@library = library
|
25
25
|
end
|
26
26
|
|
27
|
-
|
28
|
-
#
|
29
|
-
# @return [void]
|
30
|
-
#
|
31
|
-
def install!
|
32
|
-
UI.message "- Installing target `#{library.name}` #{library.platform}" do
|
33
|
-
add_target
|
34
|
-
add_files_to_build_phases
|
35
|
-
create_suport_files_group
|
36
|
-
|
37
|
-
create_xcconfig_file
|
38
|
-
create_target_environment_header
|
39
|
-
create_prefix_header
|
40
|
-
create_bridge_support_file
|
41
|
-
create_copy_resources_script
|
42
|
-
create_acknowledgements
|
43
|
-
create_dummy_source
|
44
|
-
end
|
45
|
-
end
|
27
|
+
private
|
46
28
|
|
47
29
|
#-----------------------------------------------------------------------#
|
48
30
|
|
49
|
-
private
|
50
|
-
|
51
31
|
# @!group Installation steps
|
52
32
|
|
53
33
|
# Adds the target for the library to the Pods project with the
|
@@ -55,11 +35,6 @@ module Pod
|
|
55
35
|
#
|
56
36
|
# @note The `PODS_HEADERS_SEARCH_PATHS` overrides the xcconfig.
|
57
37
|
#
|
58
|
-
# @todo CocoaPods 0.16 used to add the build configurations to the build
|
59
|
-
# configuration list of the project (`root object`) as well with
|
60
|
-
# an empty build settings. This behaviour was changed in 0.17.
|
61
|
-
# Restore if needed.
|
62
|
-
#
|
63
38
|
# @return [void]
|
64
39
|
#
|
65
40
|
def add_target
|
@@ -89,154 +64,13 @@ module Pod
|
|
89
64
|
library.target = @target
|
90
65
|
end
|
91
66
|
|
92
|
-
# Adds the build files of the pods to the target and adds a reference to
|
93
|
-
# the frameworks of the Pods.
|
94
|
-
#
|
95
|
-
# @note The Frameworks are used only for presentation purposes as the
|
96
|
-
# xcconfig is the authoritative source about their information.
|
97
|
-
#
|
98
|
-
# @return [void]
|
99
|
-
#
|
100
|
-
def add_files_to_build_phases
|
101
|
-
UI.message "- Adding Build files" do
|
102
|
-
library.file_accessors.each do |file_accessor|
|
103
|
-
consumer = file_accessor.spec_consumer
|
104
|
-
flags = compiler_flags_for_consumer(consumer)
|
105
|
-
source_files = file_accessor.source_files
|
106
|
-
file_refs = source_files.map { |sf| project.file_reference(sf) }
|
107
|
-
target.add_file_references(file_refs, flags)
|
108
|
-
|
109
|
-
file_accessor.spec_consumer.frameworks.each do |framework|
|
110
|
-
project.add_system_framework(framework, target)
|
111
|
-
end
|
112
|
-
end
|
113
|
-
end
|
114
|
-
end
|
115
|
-
|
116
67
|
# Creates the group that holds the references to the support files
|
117
68
|
# generated by this installer.
|
118
69
|
#
|
119
70
|
# @return [void]
|
120
71
|
#
|
121
72
|
def create_suport_files_group
|
122
|
-
|
123
|
-
@support_files_group = project.support_files_group.new_group(name)
|
124
|
-
end
|
125
|
-
|
126
|
-
#--------------------------------------#
|
127
|
-
|
128
|
-
# Generates the contents of the xcconfig file and saves it to disk.
|
129
|
-
#
|
130
|
-
# @note The `ALWAYS_SEARCH_USER_PATHS` flag is enabled to support
|
131
|
-
# libraries like `EmbedReader`.
|
132
|
-
#
|
133
|
-
# @return [void]
|
134
|
-
#
|
135
|
-
def create_xcconfig_file
|
136
|
-
path = library.xcconfig_path
|
137
|
-
UI.message "- Generating xcconfig file at #{UI.path(path)}" do
|
138
|
-
gen = Generator::XCConfig.new(sandbox, spec_consumers, library.relative_pods_root)
|
139
|
-
gen.set_arc_compatibility_flag = target_definition.podfile.set_arc_compatibility_flag?
|
140
|
-
gen.save_as(path)
|
141
|
-
library.xcconfig = gen.xcconfig
|
142
|
-
xcconfig_file_ref = add_file_to_support_group(path)
|
143
|
-
|
144
|
-
target.build_configurations.each do |c|
|
145
|
-
c.base_configuration_reference = xcconfig_file_ref
|
146
|
-
Generator::XCConfig.pods_project_settings.each do |key, value|
|
147
|
-
c.build_settings[key] = value
|
148
|
-
end
|
149
|
-
end
|
150
|
-
end
|
151
|
-
end
|
152
|
-
|
153
|
-
# Generates a header which allows to inspect at compile time the installed
|
154
|
-
# pods and the installed specifications of a pod.
|
155
|
-
#
|
156
|
-
def create_target_environment_header
|
157
|
-
path = library.target_environment_header_path
|
158
|
-
UI.message "- Generating target environment header at #{UI.path(path)}" do
|
159
|
-
generator = Generator::TargetEnvironmentHeader.new(library.specs)
|
160
|
-
generator.save_as(path)
|
161
|
-
add_file_to_support_group(path)
|
162
|
-
end
|
163
|
-
end
|
164
|
-
|
165
|
-
# Creates a prefix header file which imports `UIKit` or `Cocoa` according
|
166
|
-
# to the platform of the target. This file also include any prefix header
|
167
|
-
# content reported by the specification of the pods.
|
168
|
-
#
|
169
|
-
# @return [void]
|
170
|
-
#
|
171
|
-
def create_prefix_header
|
172
|
-
path = library.prefix_header_path
|
173
|
-
UI.message "- Generating prefix header at #{UI.path(path)}" do
|
174
|
-
generator = Generator::PrefixHeader.new(library.file_accessors, library.platform)
|
175
|
-
generator.imports << library.target_environment_header_path.basename
|
176
|
-
generator.save_as(path)
|
177
|
-
add_file_to_support_group(path)
|
178
|
-
|
179
|
-
target.build_configurations.each do |c|
|
180
|
-
relative_path = path.relative_path_from(sandbox.root)
|
181
|
-
c.build_settings['GCC_PREFIX_HEADER'] = relative_path.to_s
|
182
|
-
end
|
183
|
-
end
|
184
|
-
end
|
185
|
-
|
186
|
-
# Generates the bridge support metadata if requested by the {Podfile}.
|
187
|
-
#
|
188
|
-
# @note The bridge support metadata is added to the resources of the
|
189
|
-
# library because it is needed for environments interpreted at
|
190
|
-
# runtime.
|
191
|
-
#
|
192
|
-
# @return [void]
|
193
|
-
#
|
194
|
-
def create_bridge_support_file
|
195
|
-
if target_definition.podfile.generate_bridge_support?
|
196
|
-
path = library.bridge_support_path
|
197
|
-
UI.message "- Generating BridgeSupport metadata at #{UI.path(path)}" do
|
198
|
-
headers = target.headers_build_phase.files.map { |bf| sandbox.root + bf.file_ref.path }
|
199
|
-
generator = Generator::BridgeSupport.new(headers)
|
200
|
-
generator.save_as(path)
|
201
|
-
add_file_to_support_group(path)
|
202
|
-
@bridge_support_file = path.relative_path_from(sandbox.root)
|
203
|
-
end
|
204
|
-
end
|
205
|
-
end
|
206
|
-
|
207
|
-
# Creates a script that copies the resources to the bundle of the client
|
208
|
-
# target.
|
209
|
-
#
|
210
|
-
# @note The bridge support file needs to be created before the prefix
|
211
|
-
# header, otherwise it will not be added to the resources script.
|
212
|
-
#
|
213
|
-
# @return [void]
|
214
|
-
#
|
215
|
-
def create_copy_resources_script
|
216
|
-
path = library.copy_resources_script_path
|
217
|
-
UI.message "- Generating copy resources script at #{UI.path(path)}" do
|
218
|
-
resources = library.file_accessors.map { |accessor| accessor.resources.flatten.map {|res| project.relativize(res)} }.flatten
|
219
|
-
resources << bridge_support_file if bridge_support_file
|
220
|
-
generator = Generator::CopyResourcesScript.new(resources, library.platform)
|
221
|
-
generator.save_as(path)
|
222
|
-
add_file_to_support_group(path)
|
223
|
-
end
|
224
|
-
end
|
225
|
-
|
226
|
-
# Generates the acknowledgement files (markdown and plist) for the target.
|
227
|
-
#
|
228
|
-
# @return [void]
|
229
|
-
#
|
230
|
-
def create_acknowledgements
|
231
|
-
basepath = library.acknowledgements_basepath
|
232
|
-
Generator::Acknowledgements.generators.each do |generator_class|
|
233
|
-
path = generator_class.path_from_basepath(basepath)
|
234
|
-
UI.message "- Generating acknowledgements at #{UI.path(path)}" do
|
235
|
-
generator = generator_class.new(library.file_accessors)
|
236
|
-
generator.save_as(path)
|
237
|
-
add_file_to_support_group(path)
|
238
|
-
end
|
239
|
-
end
|
73
|
+
@support_files_group = project.support_files_group.new_group(library.name)
|
240
74
|
end
|
241
75
|
|
242
76
|
# Generates a dummy source file for each target so libraries that contain
|
@@ -254,10 +88,6 @@ module Pod
|
|
254
88
|
end
|
255
89
|
end
|
256
90
|
|
257
|
-
#-----------------------------------------------------------------------#
|
258
|
-
|
259
|
-
private
|
260
|
-
|
261
91
|
# @return [PBXNativeTarget] the target generated by the installation
|
262
92
|
# process.
|
263
93
|
#
|
@@ -265,6 +95,10 @@ module Pod
|
|
265
95
|
#
|
266
96
|
attr_reader :target
|
267
97
|
|
98
|
+
private
|
99
|
+
|
100
|
+
#-----------------------------------------------------------------------#
|
101
|
+
|
268
102
|
# @!group Private helpers.
|
269
103
|
|
270
104
|
# @return [Project] the Pods project of the sandbox.
|
@@ -279,24 +113,11 @@ module Pod
|
|
279
113
|
library.target_definition
|
280
114
|
end
|
281
115
|
|
282
|
-
# @return [Specification::Consumer] the consumer for the specifications.
|
283
|
-
#
|
284
|
-
def spec_consumers
|
285
|
-
@spec_consumers ||= library.file_accessors.map(&:spec_consumer)
|
286
|
-
end
|
287
|
-
|
288
116
|
# @return [PBXGroup] the group where the file references to the support
|
289
117
|
# files should be stored.
|
290
118
|
#
|
291
119
|
attr_reader :support_files_group
|
292
120
|
|
293
|
-
# @return [Pathname] the path of the bridge support file relative to the
|
294
|
-
# sandbox.
|
295
|
-
#
|
296
|
-
# @return [Nil] if no bridge support file was generated.
|
297
|
-
#
|
298
|
-
attr_reader :bridge_support_file
|
299
|
-
|
300
121
|
# Adds a reference to the given file in the support group of this target.
|
301
122
|
#
|
302
123
|
# @param [Pathname] path
|
@@ -309,62 +130,6 @@ module Pod
|
|
309
130
|
support_files_group.new_file(relative_path)
|
310
131
|
end
|
311
132
|
|
312
|
-
ENABLE_OBJECT_USE_OBJC_FROM = {
|
313
|
-
:ios => Version.new('6'),
|
314
|
-
:osx => Version.new('10.8')
|
315
|
-
}
|
316
|
-
|
317
|
-
# Returns the compiler flags for the source files of the given specification.
|
318
|
-
#
|
319
|
-
# The following behavior is regarding the `OS_OBJECT_USE_OBJC` flag. When
|
320
|
-
# set to `0`, it will allow code to use `dispatch_release()` on >= iOS 6.0
|
321
|
-
# and OS X 10.8.
|
322
|
-
#
|
323
|
-
# * New libraries that do *not* require ARC don’t need to care about this
|
324
|
-
# issue at all.
|
325
|
-
#
|
326
|
-
# * New libraries that *do* require ARC _and_ have a deployment target of
|
327
|
-
# >= iOS 6.0 or OS X 10.8:
|
328
|
-
#
|
329
|
-
# These no longer use `dispatch_release()` and should *not* have the
|
330
|
-
# `OS_OBJECT_USE_OBJC` flag set to `0`.
|
331
|
-
#
|
332
|
-
# **Note:** this means that these libraries *have* to specify the
|
333
|
-
# deployment target in order to function well.
|
334
|
-
#
|
335
|
-
# * New libraries that *do* require ARC, but have a deployment target of
|
336
|
-
# < iOS 6.0 or OS X 10.8:
|
337
|
-
#
|
338
|
-
# These contain `dispatch_release()` calls and as such need the
|
339
|
-
# `OS_OBJECT_USE_OBJC` flag set to `1`.
|
340
|
-
#
|
341
|
-
# **Note:** libraries that do *not* specify a platform version are
|
342
|
-
# assumed to have a deployment target of < iOS 6.0 or OS X 10.8.
|
343
|
-
#
|
344
|
-
# For more information, see: http://opensource.apple.com/source/libdispatch/libdispatch-228.18/os/object.h
|
345
|
-
#
|
346
|
-
# @param [Specification::Consumer] consumer
|
347
|
-
# The consumer for the specification for which the compiler flags
|
348
|
-
# are needed.
|
349
|
-
#
|
350
|
-
# @return [String] The compiler flags.
|
351
|
-
#
|
352
|
-
def compiler_flags_for_consumer(consumer)
|
353
|
-
flags = consumer.compiler_flags.dup
|
354
|
-
if consumer.requires_arc
|
355
|
-
flags << '-fobjc-arc'
|
356
|
-
platform_name = consumer.platform_name
|
357
|
-
spec_deployment_target = consumer.spec.deployment_target(platform_name)
|
358
|
-
if spec_deployment_target.nil? || Version.new(spec_deployment_target) < ENABLE_OBJECT_USE_OBJC_FROM[platform_name]
|
359
|
-
flags << '-DOS_OBJECT_USE_OBJC=0'
|
360
|
-
end
|
361
|
-
end
|
362
|
-
if target_definition.inhibits_warnings_for_pod?(consumer.spec.root.name)
|
363
|
-
flags << '-w -Xanalyzer -analyzer-disable-checker'
|
364
|
-
end
|
365
|
-
flags * " "
|
366
|
-
end
|
367
|
-
|
368
133
|
#-----------------------------------------------------------------------#
|
369
134
|
|
370
135
|
end
|