cocoapods-core 0.30.0 → 1.15.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 +5 -5
- data/README.md +7 -10
- data/lib/cocoapods-core/build_type.rb +121 -0
- data/lib/cocoapods-core/cdn_source.rb +501 -0
- data/lib/cocoapods-core/core_ui.rb +4 -3
- data/lib/cocoapods-core/dependency.rb +100 -73
- data/lib/cocoapods-core/gem_version.rb +1 -2
- data/lib/cocoapods-core/github.rb +32 -5
- data/lib/cocoapods-core/http.rb +86 -0
- data/lib/cocoapods-core/lockfile.rb +161 -56
- data/lib/cocoapods-core/metrics.rb +47 -0
- data/lib/cocoapods-core/platform.rb +99 -11
- data/lib/cocoapods-core/podfile/dsl.rb +623 -124
- data/lib/cocoapods-core/podfile/target_definition.rb +662 -109
- data/lib/cocoapods-core/podfile.rb +138 -65
- data/lib/cocoapods-core/requirement.rb +37 -8
- data/lib/cocoapods-core/source/acceptor.rb +16 -13
- data/lib/cocoapods-core/source/aggregate.rb +79 -103
- data/lib/cocoapods-core/source/health_reporter.rb +9 -18
- data/lib/cocoapods-core/source/manager.rb +488 -0
- data/lib/cocoapods-core/source/metadata.rb +79 -0
- data/lib/cocoapods-core/source.rb +241 -70
- data/lib/cocoapods-core/specification/consumer.rb +187 -47
- data/lib/cocoapods-core/specification/dsl/attribute.rb +49 -85
- data/lib/cocoapods-core/specification/dsl/attribute_support.rb +6 -8
- data/lib/cocoapods-core/specification/dsl/deprecations.rb +9 -126
- data/lib/cocoapods-core/specification/dsl/platform_proxy.rb +30 -20
- data/lib/cocoapods-core/specification/dsl.rb +943 -296
- data/lib/cocoapods-core/specification/json.rb +64 -23
- data/lib/cocoapods-core/specification/linter/analyzer.rb +218 -0
- data/lib/cocoapods-core/specification/linter/result.rb +128 -0
- data/lib/cocoapods-core/specification/linter.rb +310 -309
- data/lib/cocoapods-core/specification/root_attribute_accessors.rb +90 -39
- data/lib/cocoapods-core/specification/set/presenter.rb +35 -71
- data/lib/cocoapods-core/specification/set.rb +42 -96
- data/lib/cocoapods-core/specification.rb +368 -130
- data/lib/cocoapods-core/standard_error.rb +45 -24
- data/lib/cocoapods-core/trunk_source.rb +14 -0
- data/lib/cocoapods-core/vendor/requirement.rb +133 -53
- data/lib/cocoapods-core/vendor/version.rb +197 -156
- data/lib/cocoapods-core/vendor.rb +1 -5
- data/lib/cocoapods-core/version.rb +137 -42
- data/lib/cocoapods-core/yaml_helper.rb +334 -0
- data/lib/cocoapods-core.rb +10 -4
- metadata +100 -27
- data/lib/cocoapods-core/source/abstract_data_provider.rb +0 -71
- data/lib/cocoapods-core/source/file_system_data_provider.rb +0 -150
- data/lib/cocoapods-core/source/github_data_provider.rb +0 -143
- data/lib/cocoapods-core/specification/set/statistics.rb +0 -266
- data/lib/cocoapods-core/yaml_converter.rb +0 -192
@@ -1,14 +1,12 @@
|
|
1
1
|
require 'cocoapods-core/specification/dsl/attribute_support'
|
2
2
|
require 'cocoapods-core/specification/dsl/attribute'
|
3
3
|
require 'cocoapods-core/specification/dsl/platform_proxy'
|
4
|
-
require 'cocoapods-core/specification/dsl/deprecations'
|
5
4
|
|
6
5
|
module Pod
|
7
6
|
class Specification
|
8
|
-
|
9
7
|
#- NOTE ------------------------------------------------------------------#
|
10
|
-
# The of the methods defined in this file and the order of the
|
11
|
-
# relevant for the documentation generated on the
|
8
|
+
# The order of the methods defined in this file and the order of the
|
9
|
+
# methods is relevant for the documentation generated on the
|
12
10
|
# CocoaPods/cocoapods.github.com repository.
|
13
11
|
#-------------------------------------------------------------------------#
|
14
12
|
|
@@ -35,17 +33,45 @@ module Pod
|
|
35
33
|
# spec.license = { :type => 'BSD' }
|
36
34
|
# spec.homepage = 'https://github.com/tonymillion/Reachability'
|
37
35
|
# spec.authors = { 'Tony Million' => 'tonymillion@gmail.com' }
|
38
|
-
# spec.summary = 'ARC and GCD Compatible Reachability Class for iOS and OS X.
|
36
|
+
# spec.summary = 'ARC and GCD Compatible Reachability Class for iOS and OS X.'
|
39
37
|
# spec.source = { :git => 'https://github.com/tonymillion/Reachability.git', :tag => 'v3.1.0' }
|
40
38
|
# spec.source_files = 'Reachability.{h,m}'
|
41
39
|
# spec.framework = 'SystemConfiguration'
|
42
|
-
#
|
40
|
+
# end
|
41
|
+
#
|
42
|
+
# Or it can be quite detailed:
|
43
|
+
#
|
44
|
+
# Pod::Spec.new do |spec|
|
45
|
+
# spec.name = 'Reachability'
|
46
|
+
# spec.version = '3.1.0'
|
47
|
+
# spec.license = { :type => 'BSD' }
|
48
|
+
# spec.homepage = 'https://github.com/tonymillion/Reachability'
|
49
|
+
# spec.authors = { 'Tony Million' => 'tonymillion@gmail.com' }
|
50
|
+
# spec.summary = 'ARC and GCD Compatible Reachability Class for iOS and OS X.'
|
51
|
+
# spec.source = { :git => 'https://github.com/tonymillion/Reachability.git', :tag => 'v3.1.0' }
|
52
|
+
# spec.module_name = 'Rich'
|
53
|
+
# spec.swift_version = '4.0'
|
54
|
+
#
|
55
|
+
# spec.ios.deployment_target = '9.0'
|
56
|
+
# spec.osx.deployment_target = '10.10'
|
57
|
+
#
|
58
|
+
# spec.source_files = 'Reachability/common/*.swift'
|
59
|
+
# spec.ios.source_files = 'Reachability/ios/*.swift', 'Reachability/extensions/*.swift'
|
60
|
+
# spec.osx.source_files = 'Reachability/osx/*.swift'
|
61
|
+
#
|
62
|
+
# spec.framework = 'SystemConfiguration'
|
63
|
+
# spec.ios.framework = 'UIKit'
|
64
|
+
# spec.osx.framework = 'AppKit'
|
65
|
+
#
|
66
|
+
# spec.dependency 'SomeOtherPod'
|
43
67
|
# end
|
44
68
|
#
|
45
69
|
module DSL
|
46
|
-
|
47
70
|
extend Pod::Specification::DSL::AttributeSupport
|
48
71
|
|
72
|
+
# Deprecations must be required after include AttributeSupport
|
73
|
+
require 'cocoapods-core/specification/dsl/deprecations'
|
74
|
+
|
49
75
|
#-----------------------------------------------------------------------#
|
50
76
|
|
51
77
|
# @!group Root specification
|
@@ -79,9 +105,10 @@ module Pod
|
|
79
105
|
# @param [String] name
|
80
106
|
# the name of the pod.
|
81
107
|
#
|
82
|
-
|
83
|
-
|
84
|
-
|
108
|
+
attribute :name,
|
109
|
+
:required => true,
|
110
|
+
:inherited => false,
|
111
|
+
:multi_platform => false
|
85
112
|
|
86
113
|
#------------------#
|
87
114
|
|
@@ -97,9 +124,56 @@ module Pod
|
|
97
124
|
# @param [String] version
|
98
125
|
# the version of the Pod.
|
99
126
|
#
|
100
|
-
root_attribute :version,
|
101
|
-
|
102
|
-
|
127
|
+
root_attribute :version,
|
128
|
+
:required => true
|
129
|
+
|
130
|
+
#------------------#
|
131
|
+
|
132
|
+
# @!method swift_versions=(version)
|
133
|
+
#
|
134
|
+
# The versions of Swift that the specification supports. A version of '4' will be treated as
|
135
|
+
# '4.0' by CocoaPods and not '4.1' or '4.2'.
|
136
|
+
#
|
137
|
+
# **Note** The Swift compiler mostly accepts major versions and sometimes will honor minor versions.
|
138
|
+
# While CocoaPods allows specifying a minor or patch version it might not be honored fully by the Swift compiler.
|
139
|
+
#
|
140
|
+
# @example
|
141
|
+
#
|
142
|
+
# spec.swift_versions = ['3.0']
|
143
|
+
#
|
144
|
+
# @example
|
145
|
+
#
|
146
|
+
# spec.swift_versions = ['3.0', '4.0', '4.2']
|
147
|
+
#
|
148
|
+
# @example
|
149
|
+
#
|
150
|
+
# spec.swift_version = '3.0'
|
151
|
+
#
|
152
|
+
# @example
|
153
|
+
#
|
154
|
+
# spec.swift_version = '3.0', '4.0'
|
155
|
+
#
|
156
|
+
# @param [String, Array<String>] swift_versions
|
157
|
+
#
|
158
|
+
root_attribute :swift_versions,
|
159
|
+
:container => Array,
|
160
|
+
:singularize => true
|
161
|
+
|
162
|
+
#-----------------------------------------------------------------------#
|
163
|
+
|
164
|
+
# @!method cocoapods_version=(cocoapods_version)
|
165
|
+
#
|
166
|
+
# The version of CocoaPods that the specification supports.
|
167
|
+
#
|
168
|
+
# @example
|
169
|
+
#
|
170
|
+
# spec.cocoapods_version = '>= 0.36'
|
171
|
+
#
|
172
|
+
# @param [String] cocoapods_version
|
173
|
+
# the CocoaPods version that the specification supports.
|
174
|
+
# CocoaPods follows [semantic versioning](http://semver.org).
|
175
|
+
#
|
176
|
+
root_attribute :cocoapods_version
|
103
177
|
|
104
178
|
#------------------#
|
105
179
|
|
@@ -124,12 +198,11 @@ module Pod
|
|
124
198
|
# @param [String, Hash{String=>String}] authors
|
125
199
|
# the list of the authors of the library and their emails.
|
126
200
|
#
|
127
|
-
root_attribute :authors,
|
128
|
-
|
129
|
-
|
130
|
-
|
131
|
-
|
132
|
-
}
|
201
|
+
root_attribute :authors,
|
202
|
+
:types => [String, Array, Hash],
|
203
|
+
:container => Hash,
|
204
|
+
:required => true,
|
205
|
+
:singularize => true
|
133
206
|
|
134
207
|
#------------------#
|
135
208
|
|
@@ -156,19 +229,6 @@ module Pod
|
|
156
229
|
#
|
157
230
|
root_attribute :social_media_url
|
158
231
|
|
159
|
-
# @!method docset_url=(docset_url)
|
160
|
-
#
|
161
|
-
# The URL for the docset for the Pod
|
162
|
-
#
|
163
|
-
# @example
|
164
|
-
#
|
165
|
-
# spec.docset_url = 'http://example.org/KFData/1.0.0/xcode-docset.atom'
|
166
|
-
#
|
167
|
-
# @param [String] docset_url
|
168
|
-
# the docset URL.
|
169
|
-
#
|
170
|
-
root_attribute :docset_url
|
171
|
-
|
172
232
|
#------------------#
|
173
233
|
|
174
234
|
# The keys accepted by the license attribute.
|
@@ -184,6 +244,8 @@ module Pod
|
|
184
244
|
# Unless the source contains a file named `LICENSE.*` or `LICENCE.*`,
|
185
245
|
# the path of the license file **or** the integral text of the notice
|
186
246
|
# commonly used for the license type must be specified.
|
247
|
+
# If a license file is specified, it either must be without a file
|
248
|
+
# extensions or be one of `txt`, `md`, or `markdown`.
|
187
249
|
#
|
188
250
|
# This information is used by CocoaPods to generate acknowledgement
|
189
251
|
# files (markdown and plist) which can be used in the acknowledgements
|
@@ -205,16 +267,19 @@ module Pod
|
|
205
267
|
# LICENSE
|
206
268
|
# }
|
207
269
|
#
|
208
|
-
# @param [String
|
209
|
-
# The type of the license
|
210
|
-
#
|
211
|
-
#
|
270
|
+
# @param [String] license
|
271
|
+
# The type of the license
|
272
|
+
#
|
273
|
+
# @overload license=(license)
|
274
|
+
# @param [String, Hash{Symbol=>String}] license
|
275
|
+
# @option license [String] :type license type
|
276
|
+
# @option license [String] :file file containing full license text. Supports txt, md, and markdown
|
277
|
+
# @option license [String] :text full license text
|
212
278
|
#
|
213
|
-
root_attribute :license,
|
214
|
-
|
215
|
-
|
216
|
-
|
217
|
-
}
|
279
|
+
root_attribute :license,
|
280
|
+
:container => Hash,
|
281
|
+
:keys => LICENSE_KEYS,
|
282
|
+
:required => true
|
218
283
|
|
219
284
|
#------------------#
|
220
285
|
|
@@ -224,25 +289,53 @@ module Pod
|
|
224
289
|
#
|
225
290
|
# @example
|
226
291
|
#
|
227
|
-
# spec.homepage = 'www.example.com'
|
292
|
+
# spec.homepage = 'http://www.example.com'
|
228
293
|
#
|
229
294
|
# @param [String] homepage
|
230
295
|
# the URL of the homepage of the Pod.
|
231
296
|
#
|
232
|
-
root_attribute :homepage,
|
233
|
-
|
234
|
-
|
297
|
+
root_attribute :homepage,
|
298
|
+
:required => true
|
299
|
+
|
300
|
+
#------------------#
|
301
|
+
|
302
|
+
# @!method readme=(readme)
|
303
|
+
#
|
304
|
+
# The URL for the README markdown file for this pod version.
|
305
|
+
#
|
306
|
+
# @example
|
307
|
+
#
|
308
|
+
# spec.readme = 'https://www.example.com/Pod-1.5-README.md'
|
309
|
+
#
|
310
|
+
# @param [String] readme
|
311
|
+
# the readme markdown URL.
|
312
|
+
#
|
313
|
+
root_attribute :readme
|
314
|
+
|
315
|
+
#------------------#
|
316
|
+
|
317
|
+
# @!method changelog=(changelog)
|
318
|
+
#
|
319
|
+
# The URL for the CHANGELOG markdown file for this pod version.
|
320
|
+
#
|
321
|
+
# @example
|
322
|
+
#
|
323
|
+
# spec.changelog = 'https://www.example.com/Pod-1.5-CHANGELOG.md'
|
324
|
+
#
|
325
|
+
# @param [String] changelog
|
326
|
+
# the changelog markdown URL.
|
327
|
+
#
|
328
|
+
root_attribute :changelog
|
235
329
|
|
236
330
|
#------------------#
|
237
331
|
|
238
332
|
# The keys accepted by the hash of the source attribute.
|
239
333
|
#
|
240
334
|
SOURCE_KEYS = {
|
241
|
-
:git
|
242
|
-
:svn
|
243
|
-
:hg
|
244
|
-
:http =>
|
245
|
-
:path => nil,
|
335
|
+
:git => [:tag, :branch, :commit, :submodules].freeze,
|
336
|
+
:svn => [:folder, :tag, :revision].freeze,
|
337
|
+
:hg => [:revision].freeze,
|
338
|
+
:http => [:flatten, :type, :sha256, :sha1, :headers].freeze,
|
246
339
|
}.freeze
|
247
340
|
|
248
341
|
# @!method source=(source)
|
@@ -252,38 +345,61 @@ module Pod
|
|
252
345
|
# @example Specifying a Git source with a tag. This is how most OSS Podspecs work.
|
253
346
|
#
|
254
347
|
# spec.source = { :git => 'https://github.com/AFNetworking/AFNetworking.git',
|
255
|
-
# :tag =>
|
348
|
+
# :tag => spec.version.to_s }
|
256
349
|
#
|
257
|
-
# @example Using
|
350
|
+
# @example Using a tag prefixed with 'v' and submodules.
|
258
351
|
#
|
259
|
-
# spec.source = { :git => 'https://github.com/
|
260
|
-
# :
|
261
|
-
#
|
262
|
-
# @example Using the version of the Pod to identify the Git branch.
|
263
|
-
#
|
264
|
-
# spec.source = { :git => 'https://github.com/AFNetworking/AFNetworking.git',
|
265
|
-
# :branch => "orta_fixes"}
|
352
|
+
# spec.source = { :git => 'https://github.com/typhoon-framework/Typhoon.git',
|
353
|
+
# :tag => "v#{spec.version}", :submodules => true }
|
266
354
|
#
|
267
355
|
# @example Using Subversion with a tag.
|
268
356
|
#
|
269
|
-
# spec.source = { :svn =>
|
357
|
+
# spec.source = { :svn => 'http://svn.code.sf.net/p/polyclipping/code', :tag => '4.8.8' }
|
270
358
|
#
|
271
359
|
# @example Using Mercurial with the same revision as the spec's semantic version string.
|
272
360
|
#
|
273
|
-
# spec.source = { :hg =>
|
361
|
+
# spec.source = { :hg => 'https://bitbucket.org/dcutting/hyperbek', :revision => "#{s.version}" }
|
274
362
|
#
|
275
363
|
# @example Using HTTP to download a compressed file of the code. It supports zip, tgz, bz2, txz and tar.
|
276
364
|
#
|
277
|
-
# spec.source = { :http =>
|
365
|
+
# spec.source = { :http => 'http://dev.wechatapp.com/download/sdk/WeChat_SDK_iOS_en.zip' }
|
366
|
+
#
|
367
|
+
# @example Using HTTP to download a file using a hash to verify the download. It supports sha1 and sha256.
|
278
368
|
#
|
279
|
-
#
|
280
|
-
#
|
369
|
+
# spec.source = { :http => 'http://dev.wechatapp.com/download/sdk/WeChat_SDK_iOS_en.zip',
|
370
|
+
# :sha1 => '7e21857fe11a511f472cfd7cfa2d979bd7ab7d96' }
|
281
371
|
#
|
282
|
-
|
283
|
-
|
284
|
-
|
285
|
-
|
286
|
-
|
372
|
+
#
|
373
|
+
# @overload source=(git)
|
374
|
+
# @param [Hash] git
|
375
|
+
# @option git [String] :git git source URI
|
376
|
+
# @option git [String] :tag version tag
|
377
|
+
# @option git [Boolean] :submodules Whether to checkout submodules
|
378
|
+
# @option git [String] :branch branch name
|
379
|
+
# @option git [String] :commit commit hash
|
380
|
+
#
|
381
|
+
# @overload source=(svn)
|
382
|
+
# @param [Hash] svn
|
383
|
+
# @option svn [String] :svn svn source URI
|
384
|
+
# @option svn [String] :tag version tag
|
385
|
+
# @option svn [String] :folder folder
|
386
|
+
# @option svn [String] :revision revision
|
387
|
+
#
|
388
|
+
# @overload source=(hg)
|
389
|
+
# @param [Hash] hg
|
390
|
+
# @option hg [String] :hg mercurial source URI
|
391
|
+
# @option hg [String] :revision revision
|
392
|
+
#
|
393
|
+
# @overload source=(http)
|
394
|
+
# @param [Hash] http
|
395
|
+
# @option http [String] :http compressed source URL
|
396
|
+
# @option http [String] :type file type. Supports zip, tgz, bz2, txz and tar
|
397
|
+
# @option http [String] :sha1 SHA hash. Supports SHA1 and SHA256
|
398
|
+
#
|
399
|
+
root_attribute :source,
|
400
|
+
:container => Hash,
|
401
|
+
:keys => SOURCE_KEYS,
|
402
|
+
:required => true
|
287
403
|
|
288
404
|
#------------------#
|
289
405
|
|
@@ -297,7 +413,7 @@ module Pod
|
|
297
413
|
# tag line of the Pod and there is no need to specify that a Pod is a
|
298
414
|
# library (they always are).
|
299
415
|
#
|
300
|
-
# The summary is expected to be properly
|
416
|
+
# The summary is expected to be properly capitalised and containing the
|
301
417
|
# correct punctuation.
|
302
418
|
#
|
303
419
|
# @example
|
@@ -307,9 +423,8 @@ module Pod
|
|
307
423
|
# @param [String] summary
|
308
424
|
# A short description of the Pod.
|
309
425
|
#
|
310
|
-
root_attribute :summary,
|
311
|
-
|
312
|
-
}
|
426
|
+
root_attribute :summary,
|
427
|
+
:required => true
|
313
428
|
|
314
429
|
#------------------#
|
315
430
|
|
@@ -337,36 +452,35 @@ module Pod
|
|
337
452
|
# @!method screenshots=(screenshots)
|
338
453
|
#
|
339
454
|
# A list of URLs to images showcasing the Pod. Intended for UI oriented
|
340
|
-
# libraries.
|
455
|
+
# libraries. CocoaPods recommends the usage of the `gif` format.
|
341
456
|
#
|
342
457
|
# @example
|
343
458
|
#
|
344
|
-
# spec.screenshot =
|
459
|
+
# spec.screenshot = 'http://dl.dropbox.com/u/378729/MBProgressHUD/1.png'
|
345
460
|
#
|
346
461
|
# @example
|
347
462
|
#
|
348
|
-
# spec.screenshots = [
|
349
|
-
#
|
463
|
+
# spec.screenshots = [ 'http://dl.dropbox.com/u/378729/MBProgressHUD/1.png',
|
464
|
+
# 'http://dl.dropbox.com/u/378729/MBProgressHUD/2.png' ]
|
350
465
|
#
|
351
466
|
# @param [String] screenshots
|
352
467
|
# An URL for the screenshot of the Pod.
|
353
468
|
#
|
354
|
-
root_attribute :screenshots,
|
355
|
-
|
356
|
-
|
357
|
-
}
|
469
|
+
root_attribute :screenshots,
|
470
|
+
:singularize => true,
|
471
|
+
:container => Array
|
358
472
|
|
359
473
|
#------------------#
|
360
474
|
|
361
475
|
# @!method documentation_url=(documentation_url)
|
362
476
|
#
|
363
|
-
# An optional URL for the documentation of the Pod which will be
|
477
|
+
# An optional URL for the documentation of the Pod which will be honoured by
|
364
478
|
# CocoaPods web properties. Leaving it blank will default to a CocoaDocs
|
365
479
|
# generated URL for your library.
|
366
480
|
#
|
367
481
|
# @example
|
368
482
|
#
|
369
|
-
# spec.documentation_url = 'www.example.com/docs.html'
|
483
|
+
# spec.documentation_url = 'http://www.example.com/docs.html'
|
370
484
|
#
|
371
485
|
# @param [String] documentation_url
|
372
486
|
# The link of the web documentation of the Pod.
|
@@ -405,11 +519,61 @@ module Pod
|
|
405
519
|
#
|
406
520
|
root_attribute :prepare_command
|
407
521
|
|
522
|
+
#------------------#
|
523
|
+
|
524
|
+
# @!method static_framework=(flag)
|
525
|
+
#
|
526
|
+
# Indicates, that if use_frameworks! is specified, the
|
527
|
+
# pod should include a static library framework.
|
528
|
+
#
|
529
|
+
# @example
|
530
|
+
#
|
531
|
+
# spec.static_framework = true
|
532
|
+
#
|
533
|
+
# @param [Boolean] flag
|
534
|
+
# Indicates, that if use_frameworks! is specified, the
|
535
|
+
# pod should include a static library framework.
|
536
|
+
#
|
537
|
+
root_attribute :static_framework,
|
538
|
+
:types => [TrueClass, FalseClass],
|
539
|
+
:default_value => false
|
540
|
+
|
541
|
+
#------------------#
|
542
|
+
|
543
|
+
# @!method deprecated=(flag)
|
544
|
+
#
|
545
|
+
# Whether the library has been deprecated.
|
546
|
+
#
|
547
|
+
# @example
|
548
|
+
#
|
549
|
+
# spec.deprecated = true
|
550
|
+
#
|
551
|
+
# @param [Boolean] flag
|
552
|
+
# whether the library has been deprecated.
|
553
|
+
#
|
554
|
+
root_attribute :deprecated,
|
555
|
+
:types => [TrueClass, FalseClass],
|
556
|
+
:default_value => false
|
557
|
+
|
558
|
+
# @!method deprecated_in_favor_of=(deprecated_in_favor_of)
|
559
|
+
#
|
560
|
+
# The name of the Pod that this one has been deprecated in favor of.
|
561
|
+
#
|
562
|
+
# @example
|
563
|
+
#
|
564
|
+
# spec.deprecated_in_favor_of = 'NewMoreAwesomePod'
|
565
|
+
#
|
566
|
+
# @param [String] deprecated_in_favor_of
|
567
|
+
# the name of the Pod that this one has been deprecated in
|
568
|
+
# favor of.
|
569
|
+
#
|
570
|
+
root_attribute :deprecated_in_favor_of
|
571
|
+
|
408
572
|
#-----------------------------------------------------------------------#
|
409
573
|
|
410
574
|
# @!group Platform
|
411
575
|
#
|
412
|
-
# A specification should indicate the
|
576
|
+
# A specification should indicate the platform and the correspondent
|
413
577
|
# deployment targets on which the library is supported.
|
414
578
|
#
|
415
579
|
# If not defined in a subspec the attributes of this group inherit the
|
@@ -419,23 +583,23 @@ module Pod
|
|
419
583
|
|
420
584
|
# The names of the platforms supported by the specification class.
|
421
585
|
#
|
422
|
-
PLATFORMS = [:osx, :ios].freeze
|
586
|
+
PLATFORMS = [:osx, :ios, :tvos, :visionos, :watchos].freeze
|
423
587
|
|
424
588
|
# @todo This currently is not used in the Ruby DSL.
|
425
589
|
#
|
426
|
-
attribute :platforms,
|
427
|
-
|
428
|
-
|
429
|
-
|
430
|
-
|
431
|
-
}
|
590
|
+
attribute :platforms,
|
591
|
+
:container => Hash,
|
592
|
+
:keys => PLATFORMS,
|
593
|
+
:multi_platform => false,
|
594
|
+
:inherited => true
|
432
595
|
|
433
596
|
# The platform on which this Pod is supported. Leaving this blank
|
434
|
-
# means the Pod is supported on all platforms.
|
597
|
+
# means the Pod is supported on all platforms. When supporting multiple
|
598
|
+
# platforms you should use deployment_target below instead.
|
435
599
|
#
|
436
600
|
# @example
|
437
601
|
#
|
438
|
-
# spec.platform = :osx,
|
602
|
+
# spec.platform = :osx, '10.8'
|
439
603
|
#
|
440
604
|
# @example
|
441
605
|
#
|
@@ -452,62 +616,36 @@ module Pod
|
|
452
616
|
#
|
453
617
|
def platform=(args)
|
454
618
|
name, deployment_target = args
|
455
|
-
if name
|
456
|
-
|
457
|
-
|
458
|
-
|
459
|
-
|
619
|
+
name = :osx if name.to_s == 'macos'
|
620
|
+
attributes_hash['platforms'] = if name
|
621
|
+
{ name.to_s => deployment_target }
|
622
|
+
else
|
623
|
+
{}
|
624
|
+
end
|
460
625
|
end
|
461
626
|
|
462
627
|
#------------------#
|
463
628
|
|
464
629
|
# The minimum deployment targets of the supported platforms.
|
465
630
|
#
|
466
|
-
#
|
467
|
-
#
|
468
|
-
#
|
469
|
-
# `OS_OBJECT_USE_OBJC` flag. When set to `0`, it will allow code to use
|
470
|
-
# `dispatch_release()` on >= iOS 6.0 and OS X >= 10.8.
|
471
|
-
#
|
472
|
-
# * New libraries that do *not* require ARC don’t need to care about this
|
473
|
-
# issue at all.
|
474
|
-
#
|
475
|
-
# * New libraries that *do* require ARC _and_ have a deployment target of
|
476
|
-
# >= iOS 6.0 or OS X >= 10.8:
|
477
|
-
#
|
478
|
-
# These *no longer* use `dispatch_release()` and should have the
|
479
|
-
# `OS_OBJECT_USE_OBJC` flag set to `1`.
|
480
|
-
#
|
481
|
-
# **Note:** this means that these libraries *have* to specify the
|
482
|
-
# deployment target in their specifications in order to have
|
483
|
-
# CocoaPods set the flag to `1` and ensure proper behavior.
|
484
|
-
#
|
485
|
-
# * New libraries that *do* require ARC, but have a deployment target of
|
486
|
-
# < iOS 6.0 or OS X < 10.8:
|
487
|
-
#
|
488
|
-
# These contain `dispatch_release()` calls and as such need the
|
489
|
-
# `OS_OBJECT_USE_OBJC` flag set to `0`.
|
490
|
-
#
|
491
|
-
# **Note:** libraries that do *not* specify a platform version are
|
492
|
-
# assumed to have a deployment target of < iOS 6.0 or OS X < 10.8.
|
493
|
-
#
|
494
|
-
# For more information, see: http://opensource.apple.com/source/libdispatch/libdispatch-228.18/os/object.h
|
495
|
-
#
|
631
|
+
# As opposed to the `platform` attribute, the `deployment_target`
|
632
|
+
# attribute allows to specify multiple platforms on which this pod
|
633
|
+
# is supported — specifying a different deployment target for each.
|
496
634
|
#
|
497
635
|
# @example
|
498
636
|
#
|
499
|
-
# spec.ios.deployment_target =
|
637
|
+
# spec.ios.deployment_target = '6.0'
|
500
638
|
#
|
501
639
|
# @example
|
502
640
|
#
|
503
|
-
# spec.osx.deployment_target =
|
641
|
+
# spec.osx.deployment_target = '10.8'
|
504
642
|
#
|
505
|
-
# @param [String]
|
643
|
+
# @param [String] _args
|
506
644
|
# The deployment target of the platform.
|
507
645
|
#
|
508
|
-
def deployment_target=(*
|
509
|
-
raise Informative,
|
510
|
-
|
646
|
+
def deployment_target=(*_args)
|
647
|
+
raise Informative, 'The deployment target can be declared only per ' \
|
648
|
+
'platform.'
|
511
649
|
end
|
512
650
|
|
513
651
|
#-----------------------------------------------------------------------#
|
@@ -524,16 +662,15 @@ module Pod
|
|
524
662
|
|
525
663
|
# @todo This currently is not used in the Ruby DSL.
|
526
664
|
#
|
527
|
-
attribute :dependencies,
|
528
|
-
|
529
|
-
|
530
|
-
}
|
665
|
+
attribute :dependencies,
|
666
|
+
:container => Hash,
|
667
|
+
:inherited => true
|
531
668
|
|
532
669
|
# Any dependency on other Pods or to a ‘sub-specification’.
|
533
670
|
#
|
534
671
|
# ---
|
535
672
|
#
|
536
|
-
# Dependencies can specify versions requirements. The use of the
|
673
|
+
# Dependencies can specify versions requirements. The use of the optimistic
|
537
674
|
# version indicator `~>` is recommended because it provides good
|
538
675
|
# control over the version without being too restrictive. For example,
|
539
676
|
# `~> 1.0.1` is equivalent to `>= 1.0.1` combined with `< 1.1`. Similarly,
|
@@ -546,6 +683,12 @@ module Pod
|
|
546
683
|
# spec.dependency 'AFNetworking', '~> 1.0'
|
547
684
|
#
|
548
685
|
# @example
|
686
|
+
# spec.dependency 'AFNetworking', '~> 1.0', :configurations => ['Debug']
|
687
|
+
#
|
688
|
+
# @example
|
689
|
+
# spec.dependency 'AFNetworking', '~> 1.0', :configurations => :debug
|
690
|
+
#
|
691
|
+
# @example
|
549
692
|
# spec.dependency 'RestKit/CoreData', '~> 0.20.0'
|
550
693
|
#
|
551
694
|
# @example
|
@@ -555,51 +698,127 @@ module Pod
|
|
555
698
|
name, *version_requirements = args
|
556
699
|
if name == self.name
|
557
700
|
raise Informative, "A specification can't require itself as a " \
|
558
|
-
|
701
|
+
'subspec'
|
559
702
|
end
|
560
703
|
if @parent
|
561
|
-
composed_name =
|
562
|
-
@parent.name.split(
|
704
|
+
composed_name = ''
|
705
|
+
@parent.name.split('/').each do |component|
|
563
706
|
composed_name << component
|
564
707
|
if name == composed_name
|
565
708
|
raise Informative, "A subspec can't require one of its " \
|
566
|
-
|
709
|
+
'parents specifications'
|
567
710
|
else
|
568
|
-
composed_name <<
|
711
|
+
composed_name << '/'
|
569
712
|
end
|
570
713
|
end
|
571
714
|
end
|
572
|
-
|
573
|
-
|
715
|
+
|
716
|
+
configurations_option = version_requirements.find { |option| option.is_a?(Hash) && option.key?(:configurations) }
|
717
|
+
whitelisted_configurations = if configurations_option
|
718
|
+
version_requirements.delete(configurations_option)
|
719
|
+
Array(configurations_option.delete(:configurations)).map { |c| c.to_s.downcase }
|
720
|
+
end
|
721
|
+
|
722
|
+
dependency_options = version_requirements.reject { |req| req.is_a?(String) }
|
723
|
+
dependency_options.each do |dependency_option|
|
724
|
+
if dependency_option.is_a?(Hash)
|
725
|
+
if !dependency_option[:path].nil?
|
726
|
+
raise Informative, 'Podspecs cannot specify the source of dependencies. The `:path` option is not supported.'\
|
727
|
+
' `:path` can be used in the Podfile instead to override global dependencies.'
|
728
|
+
elsif !dependency_option[:git].nil?
|
729
|
+
raise Informative, 'Podspecs cannot specify the source of dependencies. The `:git` option is not supported.'\
|
730
|
+
' `:git` can be used in the Podfile instead to override global dependencies.'
|
731
|
+
end
|
732
|
+
end
|
733
|
+
|
734
|
+
raise Informative, "Unsupported version requirements. #{version_requirements.inspect} is not valid."
|
735
|
+
end
|
736
|
+
|
737
|
+
attributes_hash['dependencies'] ||= {}
|
738
|
+
attributes_hash['dependencies'][name] = version_requirements
|
739
|
+
|
740
|
+
unless whitelisted_configurations.nil?
|
741
|
+
if (extras = whitelisted_configurations - %w(debug release)) && !extras.empty?
|
742
|
+
raise Informative, "Only `Debug` & `Release` are allowed under configurations for dependency on `#{name}`. " \
|
743
|
+
"Found #{extras.map { |configuration| "`#{configuration}`" }.to_sentence}."
|
744
|
+
end
|
745
|
+
attributes_hash['configuration_pod_whitelist'] ||= {}
|
746
|
+
attributes_hash['configuration_pod_whitelist'][name] = whitelisted_configurations
|
574
747
|
end
|
575
|
-
attributes_hash["dependencies"] ||= {}
|
576
|
-
attributes_hash["dependencies"][name] = version_requirements
|
577
748
|
end
|
578
749
|
|
750
|
+
def dependency=(args)
|
751
|
+
joined = args.join('\', \'')
|
752
|
+
arguments = "\'#{joined}\'"
|
753
|
+
raise Informative, "Cannot assign value to `dependency`. Did you mean: `dependency #{arguments}`?"
|
754
|
+
end
|
755
|
+
|
756
|
+
#------------------#
|
757
|
+
|
758
|
+
# @!method info_plist=(info_plist)
|
759
|
+
#
|
760
|
+
# Key-Value pairs to add to the generated `Info.plist`.
|
761
|
+
#
|
762
|
+
# The values will be merged with the default values that
|
763
|
+
# CocoaPods generates, overriding any duplicates.
|
764
|
+
#
|
765
|
+
# For library specs, the values will be merged into the generated Info.plist
|
766
|
+
# for libraries that are integrated using frameworks. It will have no effect
|
767
|
+
# for static libraries.
|
768
|
+
#
|
769
|
+
# Subspecs (other than app and test specs) are not supported.
|
770
|
+
#
|
771
|
+
# For app specs, the values will be merged into the application host's `Info.plist`.
|
772
|
+
#
|
773
|
+
# For test specs, the values will be merged into the test bundle's `Info.plist`.
|
774
|
+
#
|
775
|
+
# @example
|
776
|
+
#
|
777
|
+
# spec.info_plist = {
|
778
|
+
# 'CFBundleIdentifier' => 'com.myorg.MyLib',
|
779
|
+
# 'MY_VAR' => 'SOME_VALUE'
|
780
|
+
# }
|
781
|
+
#
|
782
|
+
# @param [Hash] info_plist
|
783
|
+
# The Info.plist values for the Pod.
|
784
|
+
#
|
785
|
+
attribute :info_plist,
|
786
|
+
:container => Hash,
|
787
|
+
:inherited => false
|
788
|
+
|
579
789
|
#------------------#
|
580
790
|
|
581
791
|
# @!method requires_arc=(flag)
|
582
792
|
#
|
583
|
-
#
|
584
|
-
#
|
793
|
+
# `requires_arc` allows you to specify which source_files use ARC.
|
794
|
+
# This can either be the files which support ARC, or true to indicate
|
795
|
+
# all of the source_files use ARC.
|
585
796
|
#
|
586
|
-
#
|
797
|
+
# Files which do not use ARC will have the `-fno-objc-arc` compiler
|
798
|
+
# flag.
|
799
|
+
#
|
800
|
+
# The default value of this attribute is `true`.
|
801
|
+
#
|
802
|
+
# @example
|
803
|
+
#
|
804
|
+
# spec.requires_arc = false
|
587
805
|
#
|
588
|
-
#
|
589
|
-
#
|
806
|
+
# @example
|
807
|
+
#
|
808
|
+
# spec.requires_arc = 'Classes/Arc'
|
590
809
|
#
|
591
810
|
# @example
|
592
811
|
#
|
593
|
-
# spec.requires_arc =
|
812
|
+
# spec.requires_arc = ['Classes/*ARC.m', 'Classes/ARC.mm']
|
594
813
|
#
|
595
|
-
# @param [Bool] flag
|
596
|
-
#
|
814
|
+
# @param [Bool, String, Array<String>] flag
|
815
|
+
# whether the source files require ARC.
|
597
816
|
#
|
598
|
-
attribute :requires_arc,
|
599
|
-
|
600
|
-
|
601
|
-
|
602
|
-
|
817
|
+
attribute :requires_arc,
|
818
|
+
:types => [TrueClass, FalseClass, String, Array],
|
819
|
+
:file_patterns => true,
|
820
|
+
:default_value => true,
|
821
|
+
:inherited => true
|
603
822
|
|
604
823
|
#------------------#
|
605
824
|
|
@@ -619,11 +838,10 @@ module Pod
|
|
619
838
|
# @param [String, Array<String>] frameworks
|
620
839
|
# A list of framework names.
|
621
840
|
#
|
622
|
-
attribute :frameworks,
|
623
|
-
|
624
|
-
|
625
|
-
|
626
|
-
}
|
841
|
+
attribute :frameworks,
|
842
|
+
:container => Array,
|
843
|
+
:singularize => true,
|
844
|
+
:inherited => true
|
627
845
|
|
628
846
|
#------------------#
|
629
847
|
|
@@ -636,20 +854,23 @@ module Pod
|
|
636
854
|
#
|
637
855
|
# spec.weak_framework = 'Twitter'
|
638
856
|
#
|
857
|
+
# @example
|
858
|
+
#
|
859
|
+
# spec.weak_frameworks = 'Twitter', 'SafariServices'
|
860
|
+
#
|
639
861
|
# @param [String, Array<String>] weak_frameworks
|
640
862
|
# A list of frameworks names.
|
641
863
|
#
|
642
|
-
attribute :weak_frameworks,
|
643
|
-
|
644
|
-
|
645
|
-
|
646
|
-
}
|
864
|
+
attribute :weak_frameworks,
|
865
|
+
:container => Array,
|
866
|
+
:singularize => true,
|
867
|
+
:inherited => true
|
647
868
|
|
648
869
|
#------------------#
|
649
870
|
|
650
871
|
# @!method libraries=(*libraries)
|
651
872
|
#
|
652
|
-
# A list of libraries that the user’s target (application) needs to
|
873
|
+
# A list of system libraries that the user’s target (application) needs to
|
653
874
|
# link against.
|
654
875
|
#
|
655
876
|
# @example
|
@@ -663,11 +884,10 @@ module Pod
|
|
663
884
|
# @param [String, Array<String>] libraries
|
664
885
|
# A list of library names.
|
665
886
|
#
|
666
|
-
attribute :libraries,
|
667
|
-
|
668
|
-
|
669
|
-
|
670
|
-
}
|
887
|
+
attribute :libraries,
|
888
|
+
:container => Array,
|
889
|
+
:singularize => true,
|
890
|
+
:inherited => true
|
671
891
|
|
672
892
|
#------------------#
|
673
893
|
|
@@ -682,29 +902,62 @@ module Pod
|
|
682
902
|
# @param [String, Array<String>] flags
|
683
903
|
# A list of flags.
|
684
904
|
#
|
685
|
-
attribute :compiler_flags,
|
686
|
-
|
687
|
-
|
688
|
-
|
689
|
-
}
|
905
|
+
attribute :compiler_flags,
|
906
|
+
:container => Array,
|
907
|
+
:singularize => true,
|
908
|
+
:inherited => true
|
690
909
|
|
691
910
|
#------------------#
|
692
911
|
|
693
|
-
# @!method
|
912
|
+
# @!method pod_target_xcconfig=(value)
|
913
|
+
#
|
914
|
+
# Any flag to add to the final __private__ pod target xcconfig file.
|
915
|
+
#
|
916
|
+
# @example
|
917
|
+
#
|
918
|
+
# spec.pod_target_xcconfig = { 'OTHER_LDFLAGS' => '-lObjC' }
|
919
|
+
#
|
920
|
+
# @param [Hash{String => String}] value
|
921
|
+
# Key-value pairs representing build settings.
|
922
|
+
#
|
923
|
+
attribute :pod_target_xcconfig,
|
924
|
+
:container => Hash,
|
925
|
+
:inherited => true
|
926
|
+
|
927
|
+
# @!method user_target_xcconfig=(value)
|
928
|
+
#
|
929
|
+
# Specifies flags to add to the final aggregate target xcconfig file,
|
930
|
+
# which propagates to non-overridden and inheriting build settings to
|
931
|
+
# the integrated user targets.
|
932
|
+
#
|
933
|
+
# ---
|
934
|
+
#
|
935
|
+
# This attribute is __not recommended__ as Pods should not pollute the
|
936
|
+
# build settings of the user project and this can cause conflicts.
|
937
|
+
#
|
938
|
+
# Multiple definitions for build settings that take multiple values
|
939
|
+
# will be merged. The user is warned on conflicting definitions for
|
940
|
+
# custom build settings and build settings that take only one value.
|
694
941
|
#
|
695
|
-
#
|
942
|
+
# Typically clang compiler flags or precompiler macro definitions go
|
943
|
+
# in here if they are required when importing the pod in the user
|
944
|
+
# target. Note that, this influences not only the compiler view of the
|
945
|
+
# public interface of your pod, but also all other integrated pods
|
946
|
+
# alongside to yours. You should always prefer [`pod_target_xcconfig`](
|
947
|
+
# http://guides.cocoapods.org/syntax/podspec.html#pod_target_xcconfig),
|
948
|
+
# which can contain the same settings, but only influence the
|
949
|
+
# toolchain when compiling your pod target.
|
696
950
|
#
|
697
951
|
# @example
|
698
952
|
#
|
699
|
-
# spec.
|
953
|
+
# spec.user_target_xcconfig = { 'MY_SUBSPEC' => 'YES' }
|
700
954
|
#
|
701
955
|
# @param [Hash{String => String}] value
|
702
|
-
#
|
956
|
+
# Key-value pairs representing build settings.
|
703
957
|
#
|
704
|
-
attribute :
|
705
|
-
|
706
|
-
|
707
|
-
}
|
958
|
+
attribute :user_target_xcconfig,
|
959
|
+
:container => Hash,
|
960
|
+
:inherited => true
|
708
961
|
|
709
962
|
#------------------#
|
710
963
|
|
@@ -728,10 +981,9 @@ module Pod
|
|
728
981
|
# @param [String] content
|
729
982
|
# The contents of the prefix header.
|
730
983
|
#
|
731
|
-
attribute :prefix_header_contents,
|
732
|
-
|
733
|
-
|
734
|
-
}
|
984
|
+
attribute :prefix_header_contents,
|
985
|
+
:types => [Array, String],
|
986
|
+
:inherited => true
|
735
987
|
|
736
988
|
#------------------#
|
737
989
|
|
@@ -739,22 +991,50 @@ module Pod
|
|
739
991
|
#
|
740
992
|
# A path to a prefix header file to inject in the prefix header of the
|
741
993
|
# pod project.
|
994
|
+
# `false` indicates that the default CocoaPods prefix header should not
|
995
|
+
# be generated.
|
996
|
+
# `true` is the default and indicates that the default CocoaPods prefix
|
997
|
+
# header should be generated.
|
742
998
|
#
|
743
999
|
# ---
|
744
1000
|
#
|
745
|
-
#
|
746
|
-
# prefix header of other libraries or of the user project.
|
1001
|
+
# The file path options is __not recommended__ as Pods should not
|
1002
|
+
# pollute the prefix header of other libraries or of the user project.
|
1003
|
+
#
|
747
1004
|
#
|
748
1005
|
# @example
|
749
1006
|
#
|
750
1007
|
# spec.prefix_header_file = 'iphone/include/prefix.pch'
|
751
1008
|
#
|
752
|
-
# @
|
753
|
-
#
|
1009
|
+
# @example
|
1010
|
+
#
|
1011
|
+
# spec.prefix_header_file = false
|
1012
|
+
#
|
1013
|
+
# @param [Bool, String] path
|
1014
|
+
# The path to the prefix header file or whether to disable
|
1015
|
+
# prefix_header generation.
|
754
1016
|
#
|
755
|
-
attribute :prefix_header_file,
|
756
|
-
|
757
|
-
|
1017
|
+
attribute :prefix_header_file,
|
1018
|
+
:types => [TrueClass, FalseClass, String],
|
1019
|
+
:inherited => true
|
1020
|
+
|
1021
|
+
#------------------#
|
1022
|
+
|
1023
|
+
# @!method module_name=(name)
|
1024
|
+
#
|
1025
|
+
# The name to use for the framework / clang module which
|
1026
|
+
# will be generated for this specification instead of the
|
1027
|
+
# default (header_dir if set, otherwise the specification
|
1028
|
+
# name).
|
1029
|
+
#
|
1030
|
+
# @example
|
1031
|
+
#
|
1032
|
+
# spec.module_name = 'Three20'
|
1033
|
+
#
|
1034
|
+
# @param [String] name
|
1035
|
+
# the module name.
|
1036
|
+
#
|
1037
|
+
root_attribute :module_name
|
758
1038
|
|
759
1039
|
#------------------#
|
760
1040
|
|
@@ -770,9 +1050,8 @@ module Pod
|
|
770
1050
|
# @param [String] dir
|
771
1051
|
# the headers directory.
|
772
1052
|
#
|
773
|
-
attribute :header_dir,
|
774
|
-
|
775
|
-
}
|
1053
|
+
attribute :header_dir,
|
1054
|
+
:inherited => true
|
776
1055
|
|
777
1056
|
#------------------#
|
778
1057
|
|
@@ -788,9 +1067,70 @@ module Pod
|
|
788
1067
|
# @param [String] dir
|
789
1068
|
# the directory from where to preserve the headers namespacing.
|
790
1069
|
#
|
791
|
-
attribute :header_mappings_dir,
|
792
|
-
|
793
|
-
|
1070
|
+
attribute :header_mappings_dir,
|
1071
|
+
:inherited => true
|
1072
|
+
|
1073
|
+
#------------------#
|
1074
|
+
|
1075
|
+
SCRIPT_PHASE_REQUIRED_KEYS = [:name, :script].freeze
|
1076
|
+
|
1077
|
+
SCRIPT_PHASE_OPTIONAL_KEYS = [:shell_path, :input_files, :output_files, :input_file_lists, :output_file_lists,
|
1078
|
+
:show_env_vars_in_log, :execution_position, :dependency_file, :always_out_of_date].freeze
|
1079
|
+
|
1080
|
+
EXECUTION_POSITION_KEYS = [:before_compile, :after_compile, :before_headers, :after_headers, :any].freeze
|
1081
|
+
|
1082
|
+
ALL_SCRIPT_PHASE_KEYS = (SCRIPT_PHASE_REQUIRED_KEYS + SCRIPT_PHASE_OPTIONAL_KEYS).freeze
|
1083
|
+
|
1084
|
+
# @!method script_phases=(*script_phases)
|
1085
|
+
#
|
1086
|
+
# This attribute allows to define a script phase to execute as part of compilation of the Pod.
|
1087
|
+
# Unlike a prepare command, script phases execute as part of `xcodebuild` they can also utilize all environment
|
1088
|
+
# variables that are set during compilation.
|
1089
|
+
#
|
1090
|
+
# A Pod can provide multiple script phases to execute and they will be added in the order they were
|
1091
|
+
# declared and after taking into consideration their execution position setting.
|
1092
|
+
#
|
1093
|
+
# **Note** In order to provide visibility and awareness of the contents of all script phases,
|
1094
|
+
# a warning will be presented to the user upon installing your pod if it includes any script phases.
|
1095
|
+
#
|
1096
|
+
# @example
|
1097
|
+
#
|
1098
|
+
# spec.script_phase = { :name => 'Hello World', :script => 'echo "Hello World"' }
|
1099
|
+
#
|
1100
|
+
# @example
|
1101
|
+
#
|
1102
|
+
# spec.script_phase = { :name => 'Hello World', :script => 'echo "Hello World"', :execution_position => :before_compile }
|
1103
|
+
#
|
1104
|
+
# @example
|
1105
|
+
#
|
1106
|
+
# spec.script_phase = { :name => 'Hello World', :script => 'puts "Hello World"', :shell_path => '/usr/bin/ruby' }
|
1107
|
+
#
|
1108
|
+
# @example
|
1109
|
+
#
|
1110
|
+
# spec.script_phase = { :name => 'Hello World', :script => 'echo "Hello World"',
|
1111
|
+
# :input_files => ['/path/to/input_file.txt'], :output_files => ['/path/to/output_file.txt']
|
1112
|
+
# }
|
1113
|
+
#
|
1114
|
+
# @example
|
1115
|
+
#
|
1116
|
+
# spec.script_phase = { :name => 'Hello World', :script => 'echo "Hello World"',
|
1117
|
+
# :input_file_lists => ['/path/to/input_files.xcfilelist'], :output_file_lists => ['/path/to/output_files.xcfilelist']
|
1118
|
+
# }
|
1119
|
+
#
|
1120
|
+
# @example
|
1121
|
+
#
|
1122
|
+
# spec.script_phases = [
|
1123
|
+
# { :name => 'Hello World', :script => 'echo "Hello World"' },
|
1124
|
+
# { :name => 'Hello Ruby World', :script => 'puts "Hello World"', :shell_path => '/usr/bin/ruby' },
|
1125
|
+
# ]
|
1126
|
+
#
|
1127
|
+
# @param [Array<Hash{Symbol=>String}>] script_phases
|
1128
|
+
# An array of hashes where each hash represents a single script phase.
|
1129
|
+
#
|
1130
|
+
attribute :script_phases,
|
1131
|
+
:types => [Hash],
|
1132
|
+
:container => Array,
|
1133
|
+
:singularize => true
|
794
1134
|
|
795
1135
|
#-----------------------------------------------------------------------#
|
796
1136
|
|
@@ -878,19 +1218,18 @@ module Pod
|
|
878
1218
|
#
|
879
1219
|
# @example
|
880
1220
|
#
|
881
|
-
# spec.source_files =
|
1221
|
+
# spec.source_files = 'Classes/**/*.{h,m}'
|
882
1222
|
#
|
883
1223
|
# @example
|
884
1224
|
#
|
885
|
-
# spec.source_files =
|
1225
|
+
# spec.source_files = 'Classes/**/*.{h,m}', 'More_Classes/**/*.{h,m}'
|
886
1226
|
#
|
887
1227
|
# @param [String, Array<String>] source_files
|
888
1228
|
# the source files of the Pod.
|
889
1229
|
#
|
890
|
-
attribute :source_files,
|
891
|
-
|
892
|
-
|
893
|
-
}
|
1230
|
+
attribute :source_files,
|
1231
|
+
:container => Array,
|
1232
|
+
:file_patterns => true
|
894
1233
|
|
895
1234
|
#------------------#
|
896
1235
|
|
@@ -900,21 +1239,49 @@ module Pod
|
|
900
1239
|
#
|
901
1240
|
# ---
|
902
1241
|
#
|
903
|
-
# These are
|
904
|
-
#
|
905
|
-
#
|
1242
|
+
# These patterns are matched against the source files to include headers
|
1243
|
+
# that will be exposed to the user’s project and
|
1244
|
+
# from which documentation will be generated. When the library is built,
|
1245
|
+
# these headers will appear in the build directory. If no public headers
|
1246
|
+
# are specified then **all** the headers in source_files are considered
|
1247
|
+
# public.
|
906
1248
|
#
|
907
1249
|
# @example
|
908
1250
|
#
|
909
|
-
# spec.public_header_files =
|
1251
|
+
# spec.public_header_files = 'Headers/Public/*.h'
|
910
1252
|
#
|
911
1253
|
# @param [String, Array<String>] public_header_files
|
912
1254
|
# the public headers of the Pod.
|
913
1255
|
#
|
914
|
-
attribute :public_header_files,
|
915
|
-
|
916
|
-
|
917
|
-
|
1256
|
+
attribute :public_header_files,
|
1257
|
+
:container => Array,
|
1258
|
+
:file_patterns => true
|
1259
|
+
|
1260
|
+
#------------------#
|
1261
|
+
|
1262
|
+
# @!method project_header_files=(project_header_files)
|
1263
|
+
#
|
1264
|
+
# A list of file patterns that should be used to mark project headers.
|
1265
|
+
#
|
1266
|
+
# ---
|
1267
|
+
#
|
1268
|
+
# These patterns are matched against the public headers (or all the
|
1269
|
+
# headers if no public headers have been specified) to exclude those
|
1270
|
+
# headers which should not be exposed to the user project and which
|
1271
|
+
# should not be used to generate the documentation. When the library
|
1272
|
+
# is built, these headers will _not_ appear in the build directory.
|
1273
|
+
#
|
1274
|
+
#
|
1275
|
+
# @example
|
1276
|
+
#
|
1277
|
+
# spec.project_header_files = 'Headers/Project/*.h'
|
1278
|
+
#
|
1279
|
+
# @param [String, Array<String>] project_header_files
|
1280
|
+
# the project headers of the Pod.
|
1281
|
+
#
|
1282
|
+
attribute :project_header_files,
|
1283
|
+
:container => Array,
|
1284
|
+
:file_patterns => true
|
918
1285
|
|
919
1286
|
#------------------#
|
920
1287
|
|
@@ -927,25 +1294,31 @@ module Pod
|
|
927
1294
|
# These patterns are matched against the public headers (or all the
|
928
1295
|
# headers if no public headers have been specified) to exclude those
|
929
1296
|
# headers which should not be exposed to the user project and which
|
930
|
-
# should not be used to generate the documentation.
|
1297
|
+
# should not be used to generate the documentation. When the library
|
1298
|
+
# is built, these headers will appear in the build directory.
|
1299
|
+
#
|
1300
|
+
# Header files that are not listed as neither public nor project or private will
|
1301
|
+
# be treated as private, but in addition will not appear in the build
|
1302
|
+
# directory at all.
|
1303
|
+
#
|
931
1304
|
#
|
932
1305
|
# @example
|
933
1306
|
#
|
934
|
-
# spec.private_header_files =
|
1307
|
+
# spec.private_header_files = 'Headers/Private/*.h'
|
935
1308
|
#
|
936
1309
|
# @param [String, Array<String>] private_header_files
|
937
1310
|
# the private headers of the Pod.
|
938
1311
|
#
|
939
|
-
attribute :private_header_files,
|
940
|
-
|
941
|
-
|
942
|
-
}
|
1312
|
+
attribute :private_header_files,
|
1313
|
+
:container => Array,
|
1314
|
+
:file_patterns => true
|
943
1315
|
|
944
1316
|
#------------------#
|
945
1317
|
|
946
1318
|
# @!method vendored_frameworks=(*frameworks)
|
947
1319
|
#
|
948
|
-
# The paths of the framework bundles that come shipped with the Pod.
|
1320
|
+
# The paths of the framework bundles that come shipped with the Pod. Supports both `.framework` and `.xcframework` bundles.
|
1321
|
+
# The frameworks will be made available to the Pod and to the consumers of the pod.
|
949
1322
|
#
|
950
1323
|
# @example
|
951
1324
|
#
|
@@ -953,22 +1326,22 @@ module Pod
|
|
953
1326
|
#
|
954
1327
|
# @example
|
955
1328
|
#
|
956
|
-
# spec.vendored_frameworks = 'MyFramework.framework', 'TheirFramework.
|
1329
|
+
# spec.vendored_frameworks = 'MyFramework.framework', 'TheirFramework.xcframework'
|
957
1330
|
#
|
958
1331
|
# @param [String, Array<String>] vendored_frameworks
|
959
1332
|
# A list of framework bundles paths.
|
960
1333
|
#
|
961
|
-
attribute :vendored_frameworks,
|
962
|
-
|
963
|
-
|
964
|
-
|
965
|
-
}
|
1334
|
+
attribute :vendored_frameworks,
|
1335
|
+
:container => Array,
|
1336
|
+
:file_patterns => true,
|
1337
|
+
:singularize => true
|
966
1338
|
|
967
1339
|
#------------------#
|
968
1340
|
|
969
1341
|
# @!method vendored_libraries=(*frameworks)
|
970
1342
|
#
|
971
|
-
# The paths of the libraries that come shipped with the Pod.
|
1343
|
+
# The paths of the libraries that come shipped with the Pod. The libraries will be available to the Pod and the
|
1344
|
+
# consumers of the Pod.
|
972
1345
|
#
|
973
1346
|
# @example
|
974
1347
|
#
|
@@ -981,27 +1354,78 @@ module Pod
|
|
981
1354
|
# @param [String, Array<String>] vendored_libraries
|
982
1355
|
# A list of library paths.
|
983
1356
|
#
|
984
|
-
attribute :vendored_libraries,
|
985
|
-
|
986
|
-
|
987
|
-
|
988
|
-
|
1357
|
+
attribute :vendored_libraries,
|
1358
|
+
:container => Array,
|
1359
|
+
:file_patterns => true,
|
1360
|
+
:singularize => true
|
1361
|
+
|
1362
|
+
#------------------#
|
1363
|
+
|
1364
|
+
# The keys accepted by the category attribute for each on demand resource entry.
|
1365
|
+
#
|
1366
|
+
ON_DEMAND_RESOURCES_CATEGORY_KEYS = [:download_on_demand, :prefetched, :initial_install].freeze
|
1367
|
+
|
1368
|
+
# @!method on_demand_resources=(on_demand_resources)
|
1369
|
+
#
|
1370
|
+
# A hash of on demand resources that should be copied into the target bundle. Resources specified here
|
1371
|
+
# will automatically become part of the resources build phase of the target this pod is integrated into.
|
1372
|
+
#
|
1373
|
+
# If no category is specified then `:download_on_demand` is used as the default.
|
1374
|
+
#
|
1375
|
+
# @note
|
1376
|
+
#
|
1377
|
+
# Tags specified by pods are _always_ managed by CocoaPods. If a tag is renamed, changed or deleted then
|
1378
|
+
# CocoaPods will update the tag within the targets the pod was integrated into. It is highly recommended not to
|
1379
|
+
# share the same tags for your project as the ones used by the pods your project consumes.
|
1380
|
+
#
|
1381
|
+
# @example
|
1382
|
+
#
|
1383
|
+
# s.on_demand_resources = {
|
1384
|
+
# 'Tag1' => 'file1.png'
|
1385
|
+
# }
|
1386
|
+
#
|
1387
|
+
# @example
|
1388
|
+
#
|
1389
|
+
# s.on_demand_resources = {
|
1390
|
+
# 'Tag1' => ['file1.png', 'file2.png']
|
1391
|
+
# }
|
1392
|
+
#
|
1393
|
+
# @example
|
1394
|
+
#
|
1395
|
+
# s.on_demand_resources = {
|
1396
|
+
# 'Tag1' => { :paths => ['file1.png', 'file2.png'], :category => :download_on_demand }
|
1397
|
+
# }
|
1398
|
+
#
|
1399
|
+
# @example
|
1400
|
+
#
|
1401
|
+
# s.on_demand_resources = {
|
1402
|
+
# 'Tag1' => { :paths => ['file1.png', 'file2.png'], :category => :initial_install }
|
1403
|
+
# }
|
1404
|
+
#
|
1405
|
+
# @param [Hash{String=>String}, Hash{String=>Array<String>}, Hash{String=>Hash}] on_demand_resources
|
1406
|
+
# The on demand resources shipped with the Pod.
|
1407
|
+
#
|
1408
|
+
attribute :on_demand_resources,
|
1409
|
+
:types => [String, Array, Hash],
|
1410
|
+
:container => Hash,
|
1411
|
+
:file_patterns => true,
|
1412
|
+
:singularize => true
|
989
1413
|
|
990
1414
|
#------------------#
|
991
1415
|
|
992
|
-
# @!method resource_bundles=(*
|
1416
|
+
# @!method resource_bundles=(*resource_bundles)
|
993
1417
|
#
|
994
1418
|
# This attribute allows to define the name and the file of the resource
|
995
1419
|
# bundles which should be built for the Pod. They are specified as a
|
996
1420
|
# hash where the keys represent the name of the bundles and the values
|
997
1421
|
# the file patterns that they should include.
|
998
1422
|
#
|
999
|
-
#
|
1000
|
-
# bundles as there can be name
|
1001
|
-
# attribute.
|
1423
|
+
# For building the Pod as a static library, we strongly **recommend**
|
1424
|
+
# library developers to adopt resource bundles as there can be name
|
1425
|
+
# collisions using the resources attribute.
|
1002
1426
|
#
|
1003
1427
|
# The names of the bundles should at least include the name of the Pod
|
1004
|
-
# to
|
1428
|
+
# to minimise the chance of name collisions.
|
1005
1429
|
#
|
1006
1430
|
# To provide different resources per platform namespaced bundles *must*
|
1007
1431
|
# be used.
|
@@ -1012,18 +1436,20 @@ module Pod
|
|
1012
1436
|
#
|
1013
1437
|
# @example
|
1014
1438
|
#
|
1015
|
-
# spec.resource_bundles = {
|
1439
|
+
# spec.resource_bundles = {
|
1440
|
+
# 'MapBox' => ['MapView/Map/Resources/*.png'],
|
1441
|
+
# 'MapBoxOtherResources' => ['MapView/Map/OtherResources/*.png']
|
1442
|
+
# }
|
1016
1443
|
#
|
1017
|
-
# @param [Hash{String=>String}] resource_bundles
|
1444
|
+
# @param [Hash{String=>String}, Hash{String=>Array<String>}] resource_bundles
|
1018
1445
|
# A hash where the keys are the names of the resource bundles
|
1019
1446
|
# and the values are their relative file patterns.
|
1020
1447
|
#
|
1021
|
-
attribute :resource_bundles,
|
1022
|
-
|
1023
|
-
|
1024
|
-
|
1025
|
-
|
1026
|
-
}
|
1448
|
+
attribute :resource_bundles,
|
1449
|
+
:types => [String, Array],
|
1450
|
+
:container => Hash,
|
1451
|
+
:file_patterns => true,
|
1452
|
+
:singularize => true
|
1027
1453
|
|
1028
1454
|
#------------------#
|
1029
1455
|
|
@@ -1031,28 +1457,28 @@ module Pod
|
|
1031
1457
|
#
|
1032
1458
|
# A list of resources that should be copied into the target bundle.
|
1033
1459
|
#
|
1034
|
-
#
|
1035
|
-
# bundles](http://
|
1036
|
-
# there can be name collisions using the resources attribute.
|
1037
|
-
# resources specified with this attribute are copied
|
1038
|
-
# client target and therefore they are not
|
1460
|
+
# For building the Pod as a static library, we strongly **recommend**
|
1461
|
+
# library developers to adopt [resource bundles](http://guides.cocoapods.org/syntax/podspec.html#resource_bundles)
|
1462
|
+
# as there can be name collisions using the resources attribute.
|
1463
|
+
# Moreover, resources specified with this attribute are copied
|
1464
|
+
# directly to the client target and therefore they are not
|
1465
|
+
# optimised by Xcode.
|
1039
1466
|
#
|
1040
1467
|
# @example
|
1041
1468
|
#
|
1042
|
-
# spec.resource =
|
1469
|
+
# spec.resource = 'Resources/HockeySDK.bundle'
|
1043
1470
|
#
|
1044
1471
|
# @example
|
1045
1472
|
#
|
1046
|
-
# spec.resources = [
|
1473
|
+
# spec.resources = ['Images/*.png', 'Sounds/*']
|
1047
1474
|
#
|
1048
1475
|
# @param [String, Array<String>] resources
|
1049
1476
|
# The resources shipped with the Pod.
|
1050
1477
|
#
|
1051
|
-
attribute :resources,
|
1052
|
-
|
1053
|
-
|
1054
|
-
|
1055
|
-
}
|
1478
|
+
attribute :resources,
|
1479
|
+
:container => Array,
|
1480
|
+
:file_patterns => true,
|
1481
|
+
:singularize => true
|
1056
1482
|
|
1057
1483
|
#------------------#
|
1058
1484
|
|
@@ -1063,19 +1489,18 @@ module Pod
|
|
1063
1489
|
#
|
1064
1490
|
# @example
|
1065
1491
|
#
|
1066
|
-
# spec.ios.exclude_files =
|
1492
|
+
# spec.ios.exclude_files = 'Classes/osx'
|
1067
1493
|
#
|
1068
1494
|
# @example
|
1069
1495
|
#
|
1070
|
-
# spec.exclude_files =
|
1496
|
+
# spec.exclude_files = 'Classes/**/unused.{h,m}'
|
1071
1497
|
#
|
1072
1498
|
# @param [String, Array<String>] exclude_files
|
1073
1499
|
# the file patterns that the Pod should ignore.
|
1074
1500
|
#
|
1075
|
-
attribute :exclude_files,
|
1076
|
-
|
1077
|
-
|
1078
|
-
}
|
1501
|
+
attribute :exclude_files,
|
1502
|
+
:container => Array,
|
1503
|
+
:file_patterns => true
|
1079
1504
|
|
1080
1505
|
#------------------#
|
1081
1506
|
|
@@ -1090,20 +1515,53 @@ module Pod
|
|
1090
1515
|
#
|
1091
1516
|
# @example
|
1092
1517
|
#
|
1093
|
-
# spec.preserve_path =
|
1518
|
+
# spec.preserve_path = 'IMPORTANT.txt'
|
1094
1519
|
#
|
1095
1520
|
# @example
|
1096
1521
|
#
|
1097
|
-
# spec.preserve_paths =
|
1522
|
+
# spec.preserve_paths = 'Frameworks/*.framework'
|
1098
1523
|
#
|
1099
1524
|
# @param [String, Array<String>] preserve_paths
|
1100
1525
|
# the paths that should be not cleaned.
|
1101
1526
|
#
|
1102
|
-
attribute :preserve_paths,
|
1103
|
-
|
1104
|
-
|
1105
|
-
|
1106
|
-
|
1527
|
+
attribute :preserve_paths,
|
1528
|
+
:container => Array,
|
1529
|
+
:file_patterns => true,
|
1530
|
+
:singularize => true
|
1531
|
+
|
1532
|
+
#------------------#
|
1533
|
+
|
1534
|
+
# @!method module_map=(module_map)
|
1535
|
+
#
|
1536
|
+
# The module map file that should be used when this pod is integrated as
|
1537
|
+
# a framework.
|
1538
|
+
#
|
1539
|
+
# `false` indicates that the default CocoaPods `modulemap` file should not
|
1540
|
+
# be generated.
|
1541
|
+
#
|
1542
|
+
# `true` is the default and indicates that the default CocoaPods
|
1543
|
+
# `modulemap` file should be generated.
|
1544
|
+
#
|
1545
|
+
# ---
|
1546
|
+
#
|
1547
|
+
# By default, CocoaPods creates a module map file based upon the public
|
1548
|
+
# headers in a specification.
|
1549
|
+
#
|
1550
|
+
# @example
|
1551
|
+
#
|
1552
|
+
# spec.module_map = 'source/module.modulemap'
|
1553
|
+
#
|
1554
|
+
# @example
|
1555
|
+
#
|
1556
|
+
# spec.module_map = false
|
1557
|
+
#
|
1558
|
+
# @param [String, Bool] module_map
|
1559
|
+
# the path to the module map file that should be used
|
1560
|
+
# or whether to disable module_map generation.
|
1561
|
+
#
|
1562
|
+
attribute :module_map,
|
1563
|
+
:types => [TrueClass, FalseClass, String],
|
1564
|
+
:root_only => true
|
1107
1565
|
|
1108
1566
|
#-----------------------------------------------------------------------#
|
1109
1567
|
|
@@ -1134,7 +1592,7 @@ module Pod
|
|
1134
1592
|
# pod 'ShareKit', '2.0'
|
1135
1593
|
#
|
1136
1594
|
# Installs ShareKit with all the sharers like `ShareKit/Evernote`,
|
1137
|
-
# `ShareKit/Facebook`, etc, as they are defined
|
1595
|
+
# `ShareKit/Facebook`, etc, as they are defined as subspecs.
|
1138
1596
|
#
|
1139
1597
|
# pod 'ShareKit/Twitter', '2.0'
|
1140
1598
|
# pod 'ShareKit/Pinboard', '2.0'
|
@@ -1147,12 +1605,12 @@ module Pod
|
|
1147
1605
|
#
|
1148
1606
|
# @example Subspecs with different source files.
|
1149
1607
|
#
|
1150
|
-
# subspec
|
1151
|
-
# sp.source_files =
|
1608
|
+
# subspec 'Twitter' do |sp|
|
1609
|
+
# sp.source_files = 'Classes/Twitter'
|
1152
1610
|
# end
|
1153
1611
|
#
|
1154
|
-
# subspec
|
1155
|
-
# sp.source_files =
|
1612
|
+
# subspec 'Pinboard' do |sp|
|
1613
|
+
# sp.source_files = 'Classes/Pinboard'
|
1156
1614
|
# end
|
1157
1615
|
#
|
1158
1616
|
# @example Subspecs referencing dependencies to other subspecs.
|
@@ -1187,14 +1645,158 @@ module Pod
|
|
1187
1645
|
subspec
|
1188
1646
|
end
|
1189
1647
|
|
1648
|
+
# The list of the test types currently supported.
|
1649
|
+
#
|
1650
|
+
SUPPORTED_TEST_TYPES = [:unit, :ui].freeze
|
1651
|
+
|
1652
|
+
# The test type this specification supports. This only applies to test specifications.
|
1653
|
+
#
|
1654
|
+
# ---
|
1655
|
+
#
|
1656
|
+
# @example
|
1657
|
+
#
|
1658
|
+
# test_spec.test_type = :unit
|
1659
|
+
#
|
1660
|
+
# @example
|
1661
|
+
#
|
1662
|
+
# test_spec.test_type = 'unit'
|
1663
|
+
#
|
1664
|
+
# @param [Symbol, String] type
|
1665
|
+
# The test type to use.
|
1666
|
+
#
|
1667
|
+
attribute :test_type,
|
1668
|
+
:types => [Symbol, String],
|
1669
|
+
:multi_platform => false,
|
1670
|
+
:spec_types => [:test]
|
1671
|
+
|
1672
|
+
# @!method requires_app_host=(flag)
|
1673
|
+
#
|
1674
|
+
# Whether a test specification requires an app host to run tests. This only applies to test specifications.
|
1675
|
+
#
|
1676
|
+
# @example
|
1677
|
+
#
|
1678
|
+
# test_spec.requires_app_host = true
|
1679
|
+
#
|
1680
|
+
# @param [Boolean] flag
|
1681
|
+
# whether a test specification requires an app host to run tests.
|
1682
|
+
#
|
1683
|
+
attribute :requires_app_host,
|
1684
|
+
:types => [TrueClass, FalseClass],
|
1685
|
+
:default_value => false,
|
1686
|
+
:spec_types => [:test]
|
1687
|
+
|
1688
|
+
# @!method app_host_name=(name)
|
1689
|
+
#
|
1690
|
+
# The app specification to use as an app host, if necessary.
|
1691
|
+
#
|
1692
|
+
# @note
|
1693
|
+
#
|
1694
|
+
# You must depend on that app spec using `test_spec.dependency 'PodName'`.
|
1695
|
+
#
|
1696
|
+
# @example
|
1697
|
+
#
|
1698
|
+
# Pod::Spec.new do |spec|
|
1699
|
+
# spec.name = 'NSAttributedString+CCLFormat'
|
1700
|
+
#
|
1701
|
+
# spec.test_spec do |test_spec|
|
1702
|
+
# test_spec.source_files = 'NSAttributedString+CCLFormatTests.m'
|
1703
|
+
# test_spec.requires_app_host = true
|
1704
|
+
# test_spec.app_host_name = 'NSAttributedString+CCLFormat/App'
|
1705
|
+
# test_spec.dependency 'NSAttributedString+CCLFormat/App'
|
1706
|
+
# end
|
1707
|
+
#
|
1708
|
+
# spec.app_spec 'App' do |app_spec|
|
1709
|
+
# app_spec.source_files = 'NSAttributedString+CCLFormat.m'
|
1710
|
+
# app_spec.dependency 'AFNetworking'
|
1711
|
+
# end
|
1712
|
+
# end
|
1713
|
+
#
|
1714
|
+
# @param [String] name
|
1715
|
+
# The app specification to use as an app host, if necessary.
|
1716
|
+
#
|
1717
|
+
attribute :app_host_name,
|
1718
|
+
:types => [String],
|
1719
|
+
:spec_types => [:test]
|
1720
|
+
|
1721
|
+
SCHEME_KEYS = [:launch_arguments, :environment_variables, :code_coverage, :parallelizable, :build_configurations].freeze
|
1722
|
+
|
1723
|
+
# @!method scheme=(flag)
|
1724
|
+
#
|
1725
|
+
# Specifies the scheme configuration to be used for this specification.
|
1726
|
+
#
|
1727
|
+
# ---
|
1728
|
+
#
|
1729
|
+
# @example
|
1730
|
+
#
|
1731
|
+
# spec.scheme = { :launch_arguments => ['Arg1'] }
|
1732
|
+
#
|
1733
|
+
# @example
|
1734
|
+
#
|
1735
|
+
# spec.scheme = { :launch_arguments => ['Arg1', 'Arg2'], :environment_variables => { 'Key1' => 'Val1'} }
|
1736
|
+
#
|
1737
|
+
# @param [Hash] scheme
|
1738
|
+
# the scheme configuration to be used for this specification.
|
1739
|
+
#
|
1740
|
+
attribute :scheme,
|
1741
|
+
:types => [Hash],
|
1742
|
+
:container => Hash,
|
1743
|
+
:keys => SCHEME_KEYS
|
1744
|
+
|
1745
|
+
# Represents a test specification for the library. Here you can place all
|
1746
|
+
# your tests for your podspec along with the test dependencies.
|
1747
|
+
#
|
1748
|
+
# ---
|
1749
|
+
#
|
1750
|
+
# @example
|
1751
|
+
#
|
1752
|
+
# Pod::Spec.new do |spec|
|
1753
|
+
# spec.name = 'NSAttributedString+CCLFormat'
|
1754
|
+
#
|
1755
|
+
# spec.test_spec do |test_spec|
|
1756
|
+
# test_spec.source_files = 'NSAttributedString+CCLFormatTests.m'
|
1757
|
+
# test_spec.dependency 'Expecta'
|
1758
|
+
# end
|
1759
|
+
# end
|
1760
|
+
#
|
1761
|
+
def test_spec(name = 'Tests', &block)
|
1762
|
+
subspec = Specification.new(self, name, true, &block)
|
1763
|
+
@subspecs << subspec
|
1764
|
+
subspec
|
1765
|
+
end
|
1766
|
+
|
1767
|
+
# Represents an app specification for the library. Here you can place all
|
1768
|
+
# your app source files for your podspec along with the app dependencies.
|
1769
|
+
#
|
1770
|
+
# ---
|
1771
|
+
#
|
1772
|
+
# @example
|
1773
|
+
#
|
1774
|
+
# Pod::Spec.new do |spec|
|
1775
|
+
# spec.name = 'NSAttributedString+CCLFormat'
|
1776
|
+
#
|
1777
|
+
# spec.app_spec do |app_spec|
|
1778
|
+
# app_spec.source_files = 'NSAttributedString+CCLFormat.m'
|
1779
|
+
# app_spec.dependency 'AFNetworking'
|
1780
|
+
# end
|
1781
|
+
# end
|
1782
|
+
#
|
1783
|
+
def app_spec(name = 'App', &block)
|
1784
|
+
appspec = Specification.new(self, name, :app_specification => true, &block)
|
1785
|
+
@subspecs << appspec
|
1786
|
+
appspec
|
1787
|
+
end
|
1788
|
+
|
1190
1789
|
#------------------#
|
1191
1790
|
|
1192
|
-
# @!method
|
1791
|
+
# @!method default_subspecs=(subspec_array)
|
1193
1792
|
#
|
1194
|
-
#
|
1195
|
-
# If not specified a
|
1793
|
+
# An array of subspecs names that should be used as preferred dependency.
|
1794
|
+
# If not specified, a specification requires all of its subspecs as
|
1196
1795
|
# dependencies.
|
1197
1796
|
#
|
1797
|
+
# You may use the value `:none` to specify that none of the subspecs are
|
1798
|
+
# required to compile this pod and that all subspecs are optional.
|
1799
|
+
#
|
1198
1800
|
# ---
|
1199
1801
|
#
|
1200
1802
|
# A Pod should make available the full library by default. Users can
|
@@ -1206,15 +1808,25 @@ module Pod
|
|
1206
1808
|
# they trigger dependencies on other libraries).
|
1207
1809
|
#
|
1208
1810
|
# @example
|
1209
|
-
# spec.default_subspec = 'Pod/Core'
|
1210
1811
|
#
|
1211
|
-
#
|
1212
|
-
#
|
1812
|
+
# spec.default_subspec = 'Core'
|
1813
|
+
#
|
1814
|
+
# @example
|
1815
|
+
#
|
1816
|
+
# spec.default_subspecs = 'Core', 'UI'
|
1817
|
+
#
|
1818
|
+
# @example
|
1819
|
+
#
|
1820
|
+
# spec.default_subspecs = :none
|
1821
|
+
#
|
1822
|
+
# @param [Array<String>, String, Symbol] subspec_names
|
1823
|
+
# An array of subspec names that should be inherited as
|
1213
1824
|
# dependency.
|
1214
1825
|
#
|
1215
|
-
|
1216
|
-
|
1217
|
-
|
1826
|
+
root_attribute :default_subspecs,
|
1827
|
+
:container => Array,
|
1828
|
+
:types => [Array, String, Symbol],
|
1829
|
+
:singularize => true
|
1218
1830
|
|
1219
1831
|
#-----------------------------------------------------------------------#
|
1220
1832
|
|
@@ -1228,15 +1840,15 @@ module Pod
|
|
1228
1840
|
# For example one might want to store resources which are specific to
|
1229
1841
|
# only iOS projects.
|
1230
1842
|
#
|
1231
|
-
# spec.resources =
|
1232
|
-
# spec.ios.resources =
|
1843
|
+
# spec.resources = 'Resources/**/*.png'
|
1844
|
+
# spec.ios.resources = 'Resources_ios/**/*.png'
|
1233
1845
|
|
1234
1846
|
#-----------------------------------------------------------------------#
|
1235
1847
|
|
1236
1848
|
# Provides support for specifying iOS attributes.
|
1237
1849
|
#
|
1238
1850
|
# @example
|
1239
|
-
# spec.ios.source_files =
|
1851
|
+
# spec.ios.source_files = 'Classes/ios/**/*.{h,m}'
|
1240
1852
|
#
|
1241
1853
|
# @return [PlatformProxy] the proxy that will set the attributes.
|
1242
1854
|
#
|
@@ -1247,13 +1859,48 @@ module Pod
|
|
1247
1859
|
# Provides support for specifying OS X attributes.
|
1248
1860
|
#
|
1249
1861
|
# @example
|
1250
|
-
# spec.osx.source_files =
|
1862
|
+
# spec.osx.source_files = 'Classes/osx/**/*.{h,m}'
|
1251
1863
|
#
|
1252
1864
|
# @return [PlatformProxy] the proxy that will set the attributes.
|
1253
1865
|
#
|
1254
1866
|
def osx
|
1255
1867
|
PlatformProxy.new(self, :osx)
|
1256
1868
|
end
|
1869
|
+
|
1870
|
+
alias macos osx
|
1871
|
+
|
1872
|
+
# Provides support for specifying tvOS attributes.
|
1873
|
+
#
|
1874
|
+
# @example
|
1875
|
+
# spec.tvos.source_files = 'Classes/tvos/**/*.{h,m}'
|
1876
|
+
#
|
1877
|
+
# @return [PlatformProxy] the proxy that will set the attributes.
|
1878
|
+
#
|
1879
|
+
def tvos
|
1880
|
+
PlatformProxy.new(self, :tvos)
|
1881
|
+
end
|
1882
|
+
|
1883
|
+
# Provides support for specifying visionOS attributes.
|
1884
|
+
#
|
1885
|
+
# @example
|
1886
|
+
# spec.visionos.source_files = 'Classes/visionos/**/*.{h,m}'
|
1887
|
+
#
|
1888
|
+
# @return [PlatformProxy] the proxy that will set the attributes.
|
1889
|
+
#
|
1890
|
+
def visionos
|
1891
|
+
PlatformProxy.new(self, :visionos)
|
1892
|
+
end
|
1893
|
+
|
1894
|
+
# Provides support for specifying watchOS attributes.
|
1895
|
+
#
|
1896
|
+
# @example
|
1897
|
+
# spec.watchos.source_files = 'Classes/watchos/**/*.{h,m}'
|
1898
|
+
#
|
1899
|
+
# @return [PlatformProxy] the proxy that will set the attributes.
|
1900
|
+
#
|
1901
|
+
def watchos
|
1902
|
+
PlatformProxy.new(self, :watchos)
|
1903
|
+
end
|
1257
1904
|
end
|
1258
1905
|
end
|
1259
1906
|
end
|