cocoapods-core 0.17.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/LICENSE +20 -0
- data/README.md +36 -0
- data/lib/cocoapods-core/core_ui.rb +19 -0
- data/lib/cocoapods-core/dependency.rb +295 -0
- data/lib/cocoapods-core/gem_version.rb +6 -0
- data/lib/cocoapods-core/lockfile.rb +440 -0
- data/lib/cocoapods-core/platform.rb +171 -0
- data/lib/cocoapods-core/podfile/dsl.rb +459 -0
- data/lib/cocoapods-core/podfile/target_definition.rb +503 -0
- data/lib/cocoapods-core/podfile.rb +345 -0
- data/lib/cocoapods-core/requirement.rb +15 -0
- data/lib/cocoapods-core/source/validator.rb +183 -0
- data/lib/cocoapods-core/source.rb +284 -0
- data/lib/cocoapods-core/specification/consumer.rb +356 -0
- data/lib/cocoapods-core/specification/dsl/attribute.rb +245 -0
- data/lib/cocoapods-core/specification/dsl/attribute_support.rb +76 -0
- data/lib/cocoapods-core/specification/dsl/deprecations.rb +47 -0
- data/lib/cocoapods-core/specification/dsl/platform_proxy.rb +67 -0
- data/lib/cocoapods-core/specification/dsl.rb +1110 -0
- data/lib/cocoapods-core/specification/linter.rb +436 -0
- data/lib/cocoapods-core/specification/root_attribute_accessors.rb +152 -0
- data/lib/cocoapods-core/specification/set/presenter.rb +229 -0
- data/lib/cocoapods-core/specification/set/statistics.rb +277 -0
- data/lib/cocoapods-core/specification/set.rb +171 -0
- data/lib/cocoapods-core/specification/yaml.rb +60 -0
- data/lib/cocoapods-core/specification.rb +592 -0
- data/lib/cocoapods-core/standard_error.rb +84 -0
- data/lib/cocoapods-core/vendor/dependency.rb +264 -0
- data/lib/cocoapods-core/vendor/requirement.rb +208 -0
- data/lib/cocoapods-core/vendor/version.rb +333 -0
- data/lib/cocoapods-core/vendor.rb +56 -0
- data/lib/cocoapods-core/version.rb +99 -0
- data/lib/cocoapods-core/yaml_converter.rb +202 -0
- data/lib/cocoapods-core.rb +23 -0
- metadata +154 -0
@@ -0,0 +1,459 @@
|
|
1
|
+
module Pod
|
2
|
+
class Podfile
|
3
|
+
|
4
|
+
# The of the methods defined in this file and the order of the methods is
|
5
|
+
# relevant for the documentation generated on
|
6
|
+
# CocoaPods/cocoapods.github.com.
|
7
|
+
|
8
|
+
# The Podfile is a specification that describes the dependencies of the
|
9
|
+
# targets of one or more Xcode projects. The Podfile always creates an
|
10
|
+
# implicit target, named `default`, which links to the first target of the
|
11
|
+
# user project.
|
12
|
+
#
|
13
|
+
# A podfile can be very simple:
|
14
|
+
#
|
15
|
+
# pod 'AFNetworking', '~> 1.0'
|
16
|
+
#
|
17
|
+
# An example of a more complex podfile can be:
|
18
|
+
#
|
19
|
+
# platform :ios, '6.0'
|
20
|
+
# inhibit_all_warnings!
|
21
|
+
#
|
22
|
+
# xcodeproj `MyProject`
|
23
|
+
#
|
24
|
+
# pod 'ObjectiveSugar', '~> 0.5'
|
25
|
+
#
|
26
|
+
# target :test do
|
27
|
+
# pod 'OCMock', '~> 2.0.1'
|
28
|
+
# end
|
29
|
+
#
|
30
|
+
# post_install do |installer|
|
31
|
+
# installer.project.targets.each do |target|
|
32
|
+
# puts "#{target.name}"
|
33
|
+
# end
|
34
|
+
# end
|
35
|
+
#
|
36
|
+
module DSL
|
37
|
+
|
38
|
+
# @!group Dependencies
|
39
|
+
# The Podfile specifies the dependencies of each user target.
|
40
|
+
|
41
|
+
#-----------------------------------------------------------------------#
|
42
|
+
|
43
|
+
# Specifies a dependency of the project.
|
44
|
+
#
|
45
|
+
# A dependency requirement is defined by the name of the Pod and
|
46
|
+
# optionally a list of version requirements.
|
47
|
+
#
|
48
|
+
# ------
|
49
|
+
#
|
50
|
+
# When starting out with a project it is likely that you will want to use
|
51
|
+
# the latest version of a Pod. If this is the case, simply omit the
|
52
|
+
# version requirements.
|
53
|
+
#
|
54
|
+
# pod 'SSZipArchive'
|
55
|
+
#
|
56
|
+
#
|
57
|
+
# Later on in the project you may want to freeze to a specific version of
|
58
|
+
# a Pod, in which case you can specify that version number.
|
59
|
+
#
|
60
|
+
# pod 'Objection', '0.9'
|
61
|
+
#
|
62
|
+
#
|
63
|
+
# Besides no version, or a specific one, it is also possible to use
|
64
|
+
# operators:
|
65
|
+
#
|
66
|
+
# * `> 0.1` Any version higher than 0.1
|
67
|
+
# * `>= 0.1` Version 0.1 and any higher version
|
68
|
+
# * `< 0.1` Any version lower than 0.1
|
69
|
+
# * `<= 0.1` Version 0.1 and any lower version
|
70
|
+
# * `~> 0.1.2` Version 0.1.2 and the versions up to 0.2, not including 0.2
|
71
|
+
#
|
72
|
+
# A list of version requirements can be specified for even more fine
|
73
|
+
# grained control.
|
74
|
+
#
|
75
|
+
# For more information, regarding versioning policy, see:
|
76
|
+
#
|
77
|
+
# * [Semantic Versioning](http://semver.org)
|
78
|
+
# * [RubyGems Versioning Policies](http://docs.rubygems.org/read/chapter/7)
|
79
|
+
#
|
80
|
+
# Finally, instead of a version, you can specify the `:head` flag. This
|
81
|
+
# will use the pod’s latest version spec version, but force the download
|
82
|
+
# of the ‘bleeding edge’ version. Use this with caution, as the spec
|
83
|
+
# might not be compatible anymore.
|
84
|
+
#
|
85
|
+
# pod 'Objection', :head
|
86
|
+
#
|
87
|
+
# ------
|
88
|
+
#
|
89
|
+
# Dependencies can be obtained also from external sources.
|
90
|
+
#
|
91
|
+
# ### From a podspec in the root of a library repo.
|
92
|
+
#
|
93
|
+
# Sometimes you may want to use the bleeding edge version of a Pod. Or a
|
94
|
+
# specific revision. If this is the case, you can specify that with your
|
95
|
+
# pod declaration.
|
96
|
+
#
|
97
|
+
# To use the `master` branch of the repo:
|
98
|
+
#
|
99
|
+
# pod 'AFNetworking', :git => 'https://github.com/gowalla/AFNetworking.git'
|
100
|
+
#
|
101
|
+
#
|
102
|
+
# Or specify a commit:
|
103
|
+
#
|
104
|
+
# pod 'AFNetworking', :git => 'https://github.com/gowalla/AFNetworking.git', :commit => '082f8319af'
|
105
|
+
#
|
106
|
+
#
|
107
|
+
# Or specify a local folder in the machine:
|
108
|
+
#
|
109
|
+
# pod 'AFNetworking', :local => '~/Documents/AFNetworking'
|
110
|
+
#
|
111
|
+
#
|
112
|
+
# It is important to note, though, that this means that the version will
|
113
|
+
# have to satisfy any other dependencies on the Pod by other Pods.
|
114
|
+
#
|
115
|
+
#
|
116
|
+
# The `podspec` file is expected to be in the root of the repo, if this
|
117
|
+
# library does not have a `podspec` file in its repo yet, you will have
|
118
|
+
# to use one of the approaches outlined in the sections below.
|
119
|
+
#
|
120
|
+
#
|
121
|
+
# ### From a podspec outside a spec repo, for a library without podspec.
|
122
|
+
#
|
123
|
+
# If a podspec is available from another source outside of the library’s
|
124
|
+
# repo. Consider, for instance, a podspec available via HTTP:
|
125
|
+
#
|
126
|
+
# pod 'JSONKit', :podspec => 'https://raw.github.com/gist/1346394/1d26570f68ca27377a27430c65841a0880395d72/JSONKit.podspec'
|
127
|
+
#
|
128
|
+
# @note This method allow a nil name and the raises to be more
|
129
|
+
# informative.
|
130
|
+
#
|
131
|
+
# @note Support for inline podspecs has been deprecated.
|
132
|
+
#
|
133
|
+
# @return [void]
|
134
|
+
#
|
135
|
+
def pod(name = nil, *requirements, &block)
|
136
|
+
if block
|
137
|
+
raise StandardError, "Inline specifications are deprecated. Please store the specification in a `podspec` file."
|
138
|
+
end
|
139
|
+
|
140
|
+
unless name
|
141
|
+
raise StandardError, "A dependency requires a name."
|
142
|
+
end
|
143
|
+
|
144
|
+
current_target_definition.store_pod(name, *requirements)
|
145
|
+
end
|
146
|
+
|
147
|
+
# Use the dependencies of a Pod defined in the given podspec file. If no
|
148
|
+
# arguments are passed the first podspec in the root of the Podfile is
|
149
|
+
# used. It is intended to be used by the project of a library.
|
150
|
+
#
|
151
|
+
# @example
|
152
|
+
# podspec
|
153
|
+
#
|
154
|
+
# @example
|
155
|
+
# podspec :name => 'QuickDialog'
|
156
|
+
#
|
157
|
+
# @example
|
158
|
+
# podspec :path => '/Documents/PrettyKit/PrettyKit.podspec'
|
159
|
+
#
|
160
|
+
# @param [Hash {Symbol=>String}] options
|
161
|
+
# the path where to load the {Specification}. If not provided the
|
162
|
+
# first podspec in the directory of the podfile is used.
|
163
|
+
#
|
164
|
+
# @option options [String] :path
|
165
|
+
# the path of the podspec file
|
166
|
+
#
|
167
|
+
# @option options [String] :name
|
168
|
+
# the name of the podspec
|
169
|
+
#
|
170
|
+
# @note This method uses the dependencies declared by the for the
|
171
|
+
# platform of the target definition.
|
172
|
+
#
|
173
|
+
#
|
174
|
+
# @note This method requires that the Podfile has a non nil value for
|
175
|
+
# {#defined_in_file} unless the path option is used.
|
176
|
+
#
|
177
|
+
# @return [void]
|
178
|
+
#
|
179
|
+
def podspec(options = nil)
|
180
|
+
current_target_definition.store_podspec(options)
|
181
|
+
end
|
182
|
+
|
183
|
+
# Defines a new static library target and scopes dependencies defined from
|
184
|
+
# the given block. The target will by default include the dependencies
|
185
|
+
# defined outside of the block, unless the `:exclusive => true` option is
|
186
|
+
# given.
|
187
|
+
#
|
188
|
+
# ---
|
189
|
+
#
|
190
|
+
# The Podfile creates a global target named `:default` which produces the
|
191
|
+
# `libPods.a` file. This target is linked with the first target of user
|
192
|
+
# project if not value is specified for the `link_with` attribute.
|
193
|
+
#
|
194
|
+
# @param [Symbol, String] name
|
195
|
+
# the name of the target definition.
|
196
|
+
#
|
197
|
+
# @option options [Bool] :exclusive
|
198
|
+
# whether the target should inherit the dependencies of its
|
199
|
+
# parent. by default targets are inclusive.
|
200
|
+
#
|
201
|
+
# @example Defining a target
|
202
|
+
#
|
203
|
+
# target :ZipApp do
|
204
|
+
# pod 'SSZipArchive'
|
205
|
+
# end
|
206
|
+
#
|
207
|
+
# @example Defining an exclusive target
|
208
|
+
#
|
209
|
+
# target :ZipApp do
|
210
|
+
# pod 'SSZipArchive'
|
211
|
+
# target :test, :exclusive => true do
|
212
|
+
# pod 'JSONKit'
|
213
|
+
# end
|
214
|
+
# end
|
215
|
+
#
|
216
|
+
# @return [void]
|
217
|
+
#
|
218
|
+
def target(name, options = {})
|
219
|
+
if options && !options.keys.all? { |key| [:exclusive].include?(key) }
|
220
|
+
raise StandardError, "Unsupported options `#{options}` for target `#{name}`"
|
221
|
+
end
|
222
|
+
|
223
|
+
parent = current_target_definition
|
224
|
+
definition = TargetDefinition.new(name, parent)
|
225
|
+
definition.exclusive = true if options[:exclusive]
|
226
|
+
self.current_target_definition = definition
|
227
|
+
yield
|
228
|
+
ensure
|
229
|
+
self.current_target_definition = parent
|
230
|
+
end
|
231
|
+
|
232
|
+
#-----------------------------------------------------------------------#
|
233
|
+
|
234
|
+
# @!group Target configuration
|
235
|
+
# This group list the options to configure a target.
|
236
|
+
|
237
|
+
#-----------------------------------------------------------------------#
|
238
|
+
|
239
|
+
# Specifies the platform for which a static library should be build.
|
240
|
+
#
|
241
|
+
# -----
|
242
|
+
#
|
243
|
+
# CocoaPods provides a default deployment target if one is not specified.
|
244
|
+
# The current default values are `4.3` for iOS and `10.6` for OS X.
|
245
|
+
#
|
246
|
+
# -----
|
247
|
+
#
|
248
|
+
# If the deployment target requires it (iOS < `4.3`), `armv6`
|
249
|
+
# architecture will be added to `ARCHS`.
|
250
|
+
#
|
251
|
+
# @param [Symbol] name
|
252
|
+
# the name of platform, can be either `:osx` for OS X or `:ios`
|
253
|
+
# for iOS.
|
254
|
+
#
|
255
|
+
# @param [String, Version] target
|
256
|
+
# The optional deployment. If not provided a default value
|
257
|
+
# according to the platform name will be assigned.
|
258
|
+
#
|
259
|
+
# @example Specifying the platform
|
260
|
+
#
|
261
|
+
# platform :ios, "4.0"
|
262
|
+
# platform :ios
|
263
|
+
#
|
264
|
+
# @return [void]
|
265
|
+
#
|
266
|
+
def platform(name, target = nil)
|
267
|
+
|
268
|
+
# Support for deprecated options parameter
|
269
|
+
target = target[:deployment_target] if target.is_a?(Hash)
|
270
|
+
|
271
|
+
current_target_definition.set_platform(name, target)
|
272
|
+
end
|
273
|
+
|
274
|
+
# Specifies the Xcode project that contains the target that the Pods library
|
275
|
+
# should be linked with.
|
276
|
+
#
|
277
|
+
# -----
|
278
|
+
#
|
279
|
+
# If no explicit project is specified, it will use the Xcode project of
|
280
|
+
# the parent target. If none of the target definitions specify an
|
281
|
+
# explicit project and there is only **one** project in the same
|
282
|
+
# directory as the Podfile then that project will be used.
|
283
|
+
#
|
284
|
+
# @param [String] path
|
285
|
+
# the path of the project to link with
|
286
|
+
#
|
287
|
+
# @param [Hash{String => symbol}] build_configurations
|
288
|
+
# a hash where the keys are the name of the build configurations
|
289
|
+
# in your Xcode project and the values are Symbols that specify
|
290
|
+
# if the configuration should be based on the `:debug` or
|
291
|
+
# `:release` configuration. If no explicit mapping is specified
|
292
|
+
# for a configuration in your project, it will default to
|
293
|
+
# `:release`.
|
294
|
+
#
|
295
|
+
# @example Specifying the user project
|
296
|
+
#
|
297
|
+
# # Look for target to link with in an Xcode project called
|
298
|
+
# # `MyProject.xcodeproj`.
|
299
|
+
# xcodeproj `MyProject`
|
300
|
+
#
|
301
|
+
# target :test do
|
302
|
+
# # This Pods library links with a target in another project.
|
303
|
+
# xcodeproj `TestProject`
|
304
|
+
# end
|
305
|
+
#
|
306
|
+
# @return [void]
|
307
|
+
#
|
308
|
+
def xcodeproj(path, build_configurations = {})
|
309
|
+
current_target_definition.user_project_path = path
|
310
|
+
current_target_definition.build_configurations = build_configurations
|
311
|
+
end
|
312
|
+
|
313
|
+
# Specifies the target(s) in the user’s project that this Pods library
|
314
|
+
# should be linked in.
|
315
|
+
#
|
316
|
+
# -----
|
317
|
+
#
|
318
|
+
# If no explicit target is specified, then the Pods target will be linked
|
319
|
+
# with the first target in your project. So if you only have one target
|
320
|
+
# you do not need to specify the target to link with.
|
321
|
+
#
|
322
|
+
# @param [String, Array<String>] targets
|
323
|
+
# the target or the targets to link with.
|
324
|
+
#
|
325
|
+
# @example Link with an user project target
|
326
|
+
#
|
327
|
+
# link_with 'MyApp'
|
328
|
+
#
|
329
|
+
# @example Link with a more user project targets
|
330
|
+
#
|
331
|
+
# link_with ['MyApp', 'MyOtherApp']
|
332
|
+
#
|
333
|
+
# @return [void]
|
334
|
+
#
|
335
|
+
def link_with(targets)
|
336
|
+
current_target_definition.link_with = targets
|
337
|
+
end
|
338
|
+
|
339
|
+
# Inhibits **all** the warnings from the CocoaPods libraries.
|
340
|
+
#
|
341
|
+
# ------
|
342
|
+
#
|
343
|
+
# This attribute is inherited by child target definitions.
|
344
|
+
#
|
345
|
+
def inhibit_all_warnings!
|
346
|
+
current_target_definition.inhibit_all_warnings = true
|
347
|
+
end
|
348
|
+
|
349
|
+
#-----------------------------------------------------------------------#
|
350
|
+
|
351
|
+
# @!group Workspace
|
352
|
+
#
|
353
|
+
# This group list the options to configure workspace and to set global
|
354
|
+
# settings.
|
355
|
+
|
356
|
+
#-----------------------------------------------------------------------#
|
357
|
+
|
358
|
+
# Specifies the Xcode workspace that should contain all the projects.
|
359
|
+
#
|
360
|
+
# -----
|
361
|
+
#
|
362
|
+
# If no explicit Xcode workspace is specified and only **one** project
|
363
|
+
# exists in the same directory as the Podfile, then the name of that
|
364
|
+
# project is used as the workspace’s name.
|
365
|
+
#
|
366
|
+
# @param [String] path
|
367
|
+
# path of the workspace.
|
368
|
+
#
|
369
|
+
# @example Specifying a workspace
|
370
|
+
#
|
371
|
+
# workspace 'MyWorkspace'
|
372
|
+
#
|
373
|
+
# @return [void]
|
374
|
+
#
|
375
|
+
def workspace(path)
|
376
|
+
set_hash_value('workspace', path.to_s)
|
377
|
+
end
|
378
|
+
|
379
|
+
# Specifies that a BridgeSupport metadata document should be generated
|
380
|
+
# from the headers of all installed Pods.
|
381
|
+
#
|
382
|
+
# -----
|
383
|
+
#
|
384
|
+
# This is for scripting languages such as [MacRuby](http://macruby.org),
|
385
|
+
# [Nu](http://programming.nu/index), and
|
386
|
+
# [JSCocoa](http://inexdo.com/JSCocoa), which use it to bridge types,
|
387
|
+
# functions, etc.
|
388
|
+
#
|
389
|
+
# @return [void]
|
390
|
+
#
|
391
|
+
def generate_bridge_support!
|
392
|
+
set_hash_value('generate_bridge_support', true)
|
393
|
+
end
|
394
|
+
|
395
|
+
# Specifies that the -fobjc-arc flag should be added to the
|
396
|
+
# `OTHER_LD_FLAGS`.
|
397
|
+
#
|
398
|
+
# -----
|
399
|
+
#
|
400
|
+
# This is used as a workaround for a compiler bug with non-ARC projects
|
401
|
+
# (see #142). This was originally done automatically but libtool as of
|
402
|
+
# Xcode 4.3.2 no longer seems to support the `-fobjc-arc` flag. Therefore
|
403
|
+
# it now has to be enabled explicitly using this method.
|
404
|
+
#
|
405
|
+
# Support for this method might be dropped in CocoaPods `1.0`.
|
406
|
+
#
|
407
|
+
# @return [void]
|
408
|
+
#
|
409
|
+
def set_arc_compatibility_flag!
|
410
|
+
set_hash_value('set_arc_compatibility_flag', true)
|
411
|
+
end
|
412
|
+
|
413
|
+
#-----------------------------------------------------------------------#
|
414
|
+
|
415
|
+
# @!group Hooks
|
416
|
+
# The Podfile provides hooks that will be called during the
|
417
|
+
# installation process.
|
418
|
+
#
|
419
|
+
# Hooks are __global__ and not stored per target definition.
|
420
|
+
|
421
|
+
#-----------------------------------------------------------------------#
|
422
|
+
|
423
|
+
# This hook allows you to make any changes to the Pods after they have
|
424
|
+
# been downloaded but before they are installed.
|
425
|
+
#
|
426
|
+
# @example Defining a pre install hook in a Podfile.
|
427
|
+
#
|
428
|
+
# pre_install do |installer|
|
429
|
+
# # Do something fancy!
|
430
|
+
# end
|
431
|
+
#
|
432
|
+
#
|
433
|
+
def pre_install(&block)
|
434
|
+
@pre_install_callback = block
|
435
|
+
end
|
436
|
+
|
437
|
+
# This hook allows you to make any last changes to the generated Xcode
|
438
|
+
# project before it is written to disk, or any other tasks you might want
|
439
|
+
# to perform.
|
440
|
+
#
|
441
|
+
# @example Customizing the `OTHER_LDFLAGS` of all targets
|
442
|
+
#
|
443
|
+
# post_install do |installer|
|
444
|
+
# installer.project.targets.each do |target|
|
445
|
+
# target.build_configurations.each do |config|
|
446
|
+
# config.build_settings['GCC_ENABLE_OBJC_GC'] = 'supported'
|
447
|
+
# end
|
448
|
+
# end
|
449
|
+
# end
|
450
|
+
#
|
451
|
+
# @return [void]
|
452
|
+
#
|
453
|
+
def post_install(&block)
|
454
|
+
@post_install_callback = block
|
455
|
+
end
|
456
|
+
end
|
457
|
+
end
|
458
|
+
end
|
459
|
+
|