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,46 +1,113 @@
|
|
1
1
|
module Pod
|
2
2
|
class Podfile
|
3
|
-
|
4
|
-
# The of the methods defined in this file and the order of the methods is
|
3
|
+
# The methods defined in this file and the order of the methods is
|
5
4
|
# relevant for the documentation generated on
|
6
|
-
# CocoaPods/cocoapods.
|
5
|
+
# https://github.com/CocoaPods/guides.cocoapods.org.
|
7
6
|
|
8
7
|
# The Podfile is a specification that describes the dependencies of the
|
9
|
-
# targets of one or more Xcode projects.
|
10
|
-
# implicit target, named `default`, which links to the first target of the
|
11
|
-
# user project.
|
8
|
+
# targets of one or more Xcode projects.
|
12
9
|
#
|
13
|
-
# A
|
10
|
+
# A Podfile can be very simple:
|
14
11
|
#
|
12
|
+
# target 'MyApp'
|
15
13
|
# pod 'AFNetworking', '~> 1.0'
|
16
14
|
#
|
17
|
-
# An example of a more complex
|
15
|
+
# An example of a more complex Podfile can be:
|
18
16
|
#
|
19
|
-
# platform :ios, '
|
17
|
+
# platform :ios, '9.0'
|
20
18
|
# inhibit_all_warnings!
|
21
19
|
#
|
22
|
-
#
|
23
|
-
#
|
24
|
-
# pod 'ObjectiveSugar', '~> 0.5'
|
20
|
+
# target 'MyApp' do
|
21
|
+
# pod 'ObjectiveSugar', '~> 0.5'
|
25
22
|
#
|
26
|
-
#
|
27
|
-
#
|
23
|
+
# target 'MyAppTests' do
|
24
|
+
# inherit! :search_paths
|
25
|
+
# pod 'OCMock', '~> 2.0.1'
|
26
|
+
# end
|
28
27
|
# end
|
29
28
|
#
|
30
29
|
# post_install do |installer|
|
31
|
-
# installer.
|
30
|
+
# installer.pods_project.targets.each do |target|
|
32
31
|
# puts "#{target.name}"
|
33
32
|
# end
|
34
33
|
# end
|
35
34
|
#
|
36
35
|
module DSL
|
36
|
+
# @!group Root Options
|
37
|
+
# Configuration that applies to the Podfile as a whole.
|
38
|
+
#
|
39
|
+
# * `install!` declares the installation method and options to be used
|
40
|
+
# during installation.
|
41
|
+
|
42
|
+
# Specifies the installation method and options to be used when
|
43
|
+
# CocoaPods installs this Podfile.
|
44
|
+
#
|
45
|
+
# The first parameter indicates the installation method to use;
|
46
|
+
# next parameters indicate installation options.
|
47
|
+
#
|
48
|
+
# For now the only accepted installation method is `'cocoapods'`, so
|
49
|
+
# you'll always use this value for the first parameter; but more
|
50
|
+
# installation methods might be available in future versions.
|
51
|
+
#
|
52
|
+
# @param [String] installation_method
|
53
|
+
# the name of the installation strategy.
|
54
|
+
#
|
55
|
+
# @param [Hash] options
|
56
|
+
# the installation options.
|
57
|
+
#
|
58
|
+
# @example Specifying custom CocoaPods installation options
|
59
|
+
#
|
60
|
+
# install! 'cocoapods',
|
61
|
+
# :deterministic_uuids => false,
|
62
|
+
# :integrate_targets => false
|
63
|
+
#
|
64
|
+
# @return [void]
|
65
|
+
#
|
66
|
+
def install!(installation_method, options = {})
|
67
|
+
unless current_target_definition.root?
|
68
|
+
raise Informative, 'The installation method can only be set at the root level of the Podfile.'
|
69
|
+
end
|
70
|
+
|
71
|
+
set_hash_value('installation_method', 'name' => installation_method, 'options' => options)
|
72
|
+
end
|
73
|
+
|
74
|
+
# Raises a warning when CocoaPods is run using the Global Gemset.
|
75
|
+
# A Semantic version can be supplied to warn if the bundler version
|
76
|
+
# does not match the required version.
|
77
|
+
#
|
78
|
+
# @param [String] version
|
79
|
+
# The required bundler version, in semantic version format.
|
80
|
+
#
|
81
|
+
# @example
|
82
|
+
#
|
83
|
+
# ensure_bundler!
|
84
|
+
#
|
85
|
+
# @example
|
86
|
+
#
|
87
|
+
# ensure_bundler! '~> 2.0.0'
|
88
|
+
#
|
89
|
+
# @return [void]
|
90
|
+
#
|
91
|
+
def ensure_bundler!(version = nil)
|
92
|
+
unless current_target_definition.root?
|
93
|
+
raise Informative, 'The Ensure Bundler check can only be set at the root level of the Podfile.'
|
94
|
+
end
|
95
|
+
unless %w(BUNDLE_BIN_PATH BUNDLE_GEMFILE).all? { |key| ENV.key?(key) }
|
96
|
+
raise Informative, "CocoaPods was invoked from Global Gemset.\nPlease re-run using: `bundle exec pod #{ARGV.join(' ')}`"
|
97
|
+
end
|
98
|
+
unless ENV['BUNDLER_VERSION'].nil? || Requirement.create(version).satisfied_by?(Version.new(ENV['BUNDLER_VERSION']))
|
99
|
+
raise Informative, "The installed Bundler version: #{ENV['BUNDLER_VERSION']} does not match the required version: #{version}"
|
100
|
+
end
|
101
|
+
end
|
102
|
+
|
103
|
+
#-----------------------------------------------------------------------#
|
37
104
|
|
38
105
|
# @!group Dependencies
|
39
106
|
# The Podfile specifies the dependencies of each user target.
|
40
107
|
#
|
41
108
|
# * `pod` is the way to declare a specific dependency.
|
42
|
-
# * `podspec` provides an easy
|
43
|
-
# * `target`
|
109
|
+
# * `podspec` provides an easy API for the creation of podspecs.
|
110
|
+
# * `target` is how you scope your dependencies to specific
|
44
111
|
# targets in your Xcode projects.
|
45
112
|
|
46
113
|
#-----------------------------------------------------------------------#
|
@@ -64,6 +131,7 @@ module Pod
|
|
64
131
|
# Besides no version, or a specific one, it is also possible to use
|
65
132
|
# operators:
|
66
133
|
#
|
134
|
+
# * `= 0.1` Version 0.1.
|
67
135
|
# * `> 0.1` Any version higher than 0.1.
|
68
136
|
# * `>= 0.1` Version 0.1 and any higher version.
|
69
137
|
# * `< 0.1` Any version lower than 0.1.
|
@@ -73,6 +141,10 @@ module Pod
|
|
73
141
|
# specify in your version requirement. The example is equal to
|
74
142
|
# `>= 0.1.2` combined with `< 0.2.0` and will always match the
|
75
143
|
# latest known version matching your requirements.
|
144
|
+
# * `~> 0` Version 0 and the versions up to 1, not including 1.
|
145
|
+
# * `~> 0.1.3-beta.0` Beta and release versions for 0.1.3, release versions
|
146
|
+
# up to 0.2 excluding 0.2. Components separated by a dash (-)
|
147
|
+
# will not be considered for the version requirement.
|
76
148
|
#
|
77
149
|
# A list of version requirements can be specified for even more fine
|
78
150
|
# grained control.
|
@@ -80,14 +152,80 @@ module Pod
|
|
80
152
|
# For more information, regarding versioning policy, see:
|
81
153
|
#
|
82
154
|
# * [Semantic Versioning](http://semver.org)
|
83
|
-
# * [RubyGems Versioning Policies](http://
|
155
|
+
# * [RubyGems Versioning Policies](http://guides.rubygems.org/patterns/#semantic-versioning)
|
156
|
+
#
|
157
|
+
# ------
|
158
|
+
#
|
159
|
+
# ### Build configurations
|
160
|
+
#
|
161
|
+
# By default dependencies are installed in all the build configurations
|
162
|
+
# of the target. For debug purposes or for other reasons, they can be
|
163
|
+
# only enabled on a list of build configurations.
|
164
|
+
#
|
165
|
+
# pod 'PonyDebugger', :configurations => ['Debug', 'Beta']
|
166
|
+
#
|
167
|
+
# Alternatively, you can specify to have it included on a single build
|
168
|
+
# configuration.
|
169
|
+
#
|
170
|
+
# pod 'PonyDebugger', :configuration => 'Debug'
|
171
|
+
#
|
172
|
+
# Note that transitive dependencies are included in all configurations
|
173
|
+
# and you have to manually specify build configurations for them as well in
|
174
|
+
# case this is not desired.
|
175
|
+
#
|
176
|
+
# ------
|
177
|
+
#
|
178
|
+
# ### Modular Headers
|
179
|
+
#
|
180
|
+
# If you would like to use modular headers per Pod you can use the
|
181
|
+
# following syntax:
|
182
|
+
#
|
183
|
+
# pod 'SSZipArchive', :modular_headers => true
|
184
|
+
#
|
185
|
+
# Additionally, when you use the `use_modular_headers!` attribute,
|
186
|
+
# you can exclude a particular Pod from modular headers using the following:
|
187
|
+
#
|
188
|
+
# pod 'SSZipArchive', :modular_headers => false
|
189
|
+
#
|
190
|
+
# ------
|
191
|
+
#
|
192
|
+
# ### Source
|
193
|
+
#
|
194
|
+
# By default the sources specified at the global level are searched in the order
|
195
|
+
# they are specified for a dependency match. This behaviour can be altered
|
196
|
+
# for a specific dependency by specifying the source with the dependency:
|
197
|
+
#
|
198
|
+
# pod 'PonyDebugger', :source => 'https://cdn.cocoapods.org/'
|
199
|
+
#
|
200
|
+
# In this case only the specified source will be searched for the dependency
|
201
|
+
# and any global sources ignored.
|
202
|
+
#
|
203
|
+
# ------
|
204
|
+
#
|
205
|
+
# ### Subspecs
|
206
|
+
#
|
207
|
+
# When installing a Pod via its name, it will install all of the
|
208
|
+
# default subspecs defined in the podspec.
|
209
|
+
#
|
210
|
+
# You may install a specific subspec using the following:
|
211
|
+
#
|
212
|
+
# pod 'QueryKit/Attribute'
|
213
|
+
#
|
214
|
+
# You may specify a collection of subspecs to be installed as follows:
|
215
|
+
#
|
216
|
+
# pod 'QueryKit', :subspecs => ['Attribute', 'QuerySet']
|
217
|
+
#
|
218
|
+
# ### Test Specs
|
219
|
+
#
|
220
|
+
# Test specs can be optionally included via the `:testspecs` option. By default,
|
221
|
+
# none of a Pod's test specs are included.
|
84
222
|
#
|
85
|
-
#
|
86
|
-
# will use the spec of the newest available version in your spec repo(s),
|
87
|
-
# but force the download of the ‘bleeding edge’ version (HEAD). Use this
|
88
|
-
# with caution, as the spec _might_ not be compatible anymore.
|
223
|
+
# You may specify a list of test spec names to install using the following:
|
89
224
|
#
|
90
|
-
# pod '
|
225
|
+
# pod 'AFNetworking', :testspecs => ['UnitTests', 'SomeOtherTests']
|
226
|
+
#
|
227
|
+
# The values provided to `:testspecs` correspond to the name provided to the
|
228
|
+
# `test_spec` DSL attribute in a Podspec.
|
91
229
|
#
|
92
230
|
# ------
|
93
231
|
#
|
@@ -96,7 +234,7 @@ module Pod
|
|
96
234
|
#
|
97
235
|
# ### Using the files from a local path.
|
98
236
|
#
|
99
|
-
# If you
|
237
|
+
# If you would like to use develop a Pod in tandem with its client
|
100
238
|
# project you can use the `path` option.
|
101
239
|
#
|
102
240
|
# pod 'AFNetworking', :path => '~/Documents/AFNetworking'
|
@@ -106,24 +244,34 @@ module Pod
|
|
106
244
|
# Pods project. This means that your edits will persist to CocoaPods
|
107
245
|
# installations.
|
108
246
|
#
|
109
|
-
# The referenced folder can be a checkout of your your
|
110
|
-
# even a git submodule of the current
|
247
|
+
# The referenced folder can be a checkout of your your favourite SCM or
|
248
|
+
# even a git submodule of the current repository.
|
111
249
|
#
|
112
250
|
# Note that the `podspec` of the Pod file is expected to be in the
|
113
251
|
# folder.
|
114
252
|
#
|
115
253
|
#
|
116
|
-
# ### From a podspec in the root of a library
|
254
|
+
# ### From a podspec in the root of a library repository.
|
117
255
|
#
|
118
256
|
# Sometimes you may want to use the bleeding edge version of a Pod. Or a
|
119
257
|
# specific revision. If this is the case, you can specify that with your
|
120
258
|
# pod declaration.
|
121
259
|
#
|
122
|
-
# To use the `master` branch of the
|
260
|
+
# To use the `master` branch of the repository:
|
123
261
|
#
|
124
262
|
# pod 'AFNetworking', :git => 'https://github.com/gowalla/AFNetworking.git'
|
125
263
|
#
|
126
264
|
#
|
265
|
+
# To use a different branch of the repository:
|
266
|
+
#
|
267
|
+
# pod 'AFNetworking', :git => 'https://github.com/gowalla/AFNetworking.git', :branch => 'dev'
|
268
|
+
#
|
269
|
+
#
|
270
|
+
# To use a tag of the repository:
|
271
|
+
#
|
272
|
+
# pod 'AFNetworking', :git => 'https://github.com/gowalla/AFNetworking.git', :tag => '0.7.0'
|
273
|
+
#
|
274
|
+
#
|
127
275
|
# Or specify a commit:
|
128
276
|
#
|
129
277
|
# pod 'AFNetworking', :git => 'https://github.com/gowalla/AFNetworking.git', :commit => '082f8319af'
|
@@ -131,42 +279,38 @@ module Pod
|
|
131
279
|
# It is important to note, though, that this means that the version will
|
132
280
|
# have to satisfy any other dependencies on the Pod by other Pods.
|
133
281
|
#
|
134
|
-
# The `podspec` file is expected to be in the root of the
|
135
|
-
# library does not have a `podspec` file in its
|
136
|
-
# to use one of the approaches outlined in the
|
282
|
+
# The `podspec` file is expected to be in the root of the repository,
|
283
|
+
# if this library does not have a `podspec` file in its repository
|
284
|
+
# yet, you will have to use one of the approaches outlined in the
|
285
|
+
# sections below.
|
137
286
|
#
|
138
287
|
#
|
139
|
-
# ### From a podspec outside a spec
|
288
|
+
# ### From a podspec outside a spec repository, for a library without podspec.
|
140
289
|
#
|
141
290
|
# If a podspec is available from another source outside of the library’s
|
142
|
-
#
|
291
|
+
# repository. Consider, for instance, a podspec available via HTTP:
|
143
292
|
#
|
144
|
-
# pod 'JSONKit', :podspec => 'https://
|
293
|
+
# pod 'JSONKit', :podspec => 'https://example.com/JSONKit.podspec'
|
145
294
|
#
|
146
295
|
#
|
147
296
|
# @note This method allow a nil name and the raises to be more
|
148
297
|
# informative.
|
149
298
|
#
|
150
|
-
# @note Support for inline podspecs has been deprecated.
|
151
|
-
#
|
152
299
|
# @return [void]
|
153
300
|
#
|
154
|
-
def pod(name = nil, *requirements
|
155
|
-
if block
|
156
|
-
raise StandardError, "Inline specifications are deprecated. " \
|
157
|
-
"Please store the specification in a `podspec` file."
|
158
|
-
end
|
159
|
-
|
301
|
+
def pod(name = nil, *requirements)
|
160
302
|
unless name
|
161
|
-
raise StandardError,
|
303
|
+
raise StandardError, 'A dependency requires a name.'
|
162
304
|
end
|
163
305
|
|
164
306
|
current_target_definition.store_pod(name, *requirements)
|
165
307
|
end
|
166
308
|
|
167
|
-
# Use the dependencies of a Pod defined in the given podspec file.
|
168
|
-
# arguments are passed the first podspec in the root of the Podfile
|
169
|
-
# used. It is intended to be used by the project of a library.
|
309
|
+
# Use just the dependencies of a Pod defined in the given podspec file.
|
310
|
+
# If no arguments are passed the first podspec in the root of the Podfile
|
311
|
+
# is used. It is intended to be used by the project of a library. Note:
|
312
|
+
# this does not include the sources derived from the podspec just the
|
313
|
+
# CocoaPods infrastructure.
|
170
314
|
#
|
171
315
|
# @example
|
172
316
|
# podspec
|
@@ -179,7 +323,7 @@ module Pod
|
|
179
323
|
#
|
180
324
|
# @param [Hash {Symbol=>String}] options
|
181
325
|
# the path where to load the {Specification}. If not provided
|
182
|
-
# the first podspec in the directory of the
|
326
|
+
# the first podspec in the directory of the Podfile is used.
|
183
327
|
#
|
184
328
|
# @option options [String] :path
|
185
329
|
# the path of the podspec file
|
@@ -187,7 +331,7 @@ module Pod
|
|
187
331
|
# @option options [String] :name
|
188
332
|
# the name of the podspec
|
189
333
|
#
|
190
|
-
# @note This method uses the dependencies declared
|
334
|
+
# @note This method uses the dependencies declared for the
|
191
335
|
# platform of the target definition.
|
192
336
|
#
|
193
337
|
#
|
@@ -200,61 +344,222 @@ module Pod
|
|
200
344
|
current_target_definition.store_podspec(options)
|
201
345
|
end
|
202
346
|
|
203
|
-
# Defines a
|
204
|
-
#
|
205
|
-
#
|
206
|
-
#
|
207
|
-
# given.
|
208
|
-
#
|
209
|
-
# ---
|
210
|
-
#
|
211
|
-
# The Podfile creates a global target named `:default` which produces the
|
212
|
-
# `libPods.a` file. This target is linked with the first target of user
|
213
|
-
# project if not value is specified for the `link_with` attribute.
|
347
|
+
# Defines a CocoaPods target and scopes dependencies defined
|
348
|
+
# within the given block. A target should correspond to an Xcode target.
|
349
|
+
# By default the target includes the dependencies defined outside of
|
350
|
+
# the block, unless instructed not to `inherit!` them.
|
214
351
|
#
|
215
352
|
# @param [Symbol, String] name
|
216
|
-
# the name of the target
|
217
|
-
#
|
218
|
-
# @option options [Bool] :exclusive
|
219
|
-
# whether the target should inherit the dependencies of its
|
220
|
-
# parent. by default targets are inclusive.
|
353
|
+
# the name of the target.
|
221
354
|
#
|
222
355
|
# @example Defining a target
|
223
356
|
#
|
224
|
-
# target
|
357
|
+
# target 'ZipApp' do
|
225
358
|
# pod 'SSZipArchive'
|
226
359
|
# end
|
227
360
|
#
|
228
|
-
# @example Defining
|
361
|
+
# @example Defining a test target accessing SSZipArchive pod from its parent
|
229
362
|
#
|
230
|
-
# target
|
363
|
+
# target 'ZipApp' do
|
231
364
|
# pod 'SSZipArchive'
|
232
|
-
#
|
233
|
-
#
|
365
|
+
#
|
366
|
+
# target 'ZipAppTests' do
|
367
|
+
# inherit! :search_paths
|
368
|
+
# pod 'Nimble'
|
369
|
+
# end
|
370
|
+
# end
|
371
|
+
#
|
372
|
+
# @example Defining a target applies Pods to multiple targets via its parent target
|
373
|
+
#
|
374
|
+
# target 'ShowsApp' do
|
375
|
+
# pod 'ShowsKit'
|
376
|
+
#
|
377
|
+
# # Has its own copy of ShowsKit + ShowTVAuth
|
378
|
+
# target 'ShowsTV' do
|
379
|
+
# pod 'ShowTVAuth'
|
380
|
+
# end
|
381
|
+
#
|
382
|
+
# # Has its own copy of Specta + Expecta
|
383
|
+
# # and has access to ShowsKit via the app
|
384
|
+
# # that the test target is bundled into
|
385
|
+
#
|
386
|
+
# target 'ShowsTests' do
|
387
|
+
# inherit! :search_paths
|
388
|
+
# pod 'Specta'
|
389
|
+
# pod 'Expecta'
|
234
390
|
# end
|
235
391
|
# end
|
236
392
|
#
|
237
393
|
# @return [void]
|
238
394
|
#
|
239
|
-
def target(name, options =
|
240
|
-
if options
|
395
|
+
def target(name, options = nil)
|
396
|
+
if options
|
241
397
|
raise Informative, "Unsupported options `#{options}` for " \
|
242
|
-
"target `#{name}
|
398
|
+
"target `#{name}`."
|
243
399
|
end
|
244
400
|
|
245
401
|
parent = current_target_definition
|
246
402
|
definition = TargetDefinition.new(name, parent)
|
247
|
-
definition.exclusive = true if options[:exclusive]
|
248
403
|
self.current_target_definition = definition
|
249
|
-
yield
|
404
|
+
yield if block_given?
|
250
405
|
ensure
|
251
406
|
self.current_target_definition = parent
|
252
407
|
end
|
253
408
|
|
409
|
+
# Adds a script phase to be integrated with this target. A script phase can be used to execute an arbitrary
|
410
|
+
# script that can use all Xcode environment variables during execution. A target may include multiple script
|
411
|
+
# phases which they will be added in the order they were declared. Deleting a script phase will effectively remove
|
412
|
+
# it from the target if it has been added previously.
|
413
|
+
#
|
414
|
+
# @example
|
415
|
+
# script_phase :name => 'HelloWorldScript', :script => 'echo "Hello World"'
|
416
|
+
#
|
417
|
+
# @example
|
418
|
+
# script_phase :name => 'HelloWorldScript', :script => 'puts "Hello World"', :shell_path => '/usr/bin/ruby'
|
419
|
+
#
|
420
|
+
# @param [Hash] options
|
421
|
+
# the options for this script phase.
|
422
|
+
#
|
423
|
+
# @option options [String] :name
|
424
|
+
# the name of the script phase. This option is required.
|
425
|
+
#
|
426
|
+
# @option options [String] :script
|
427
|
+
# the body of the script to execute. This option is required.
|
428
|
+
#
|
429
|
+
# @option options [String] :shell_path
|
430
|
+
# the shell path to use for this script phase, for example `/usr/bin/ruby` to use Ruby for this phase.
|
431
|
+
#
|
432
|
+
# @option options [Array<String>] :input_files
|
433
|
+
# the input paths to use for this script phase. This is used by Xcode to determine whether to re-execute
|
434
|
+
# this script phase if the input paths have changed or not.
|
435
|
+
#
|
436
|
+
# @option options [Array<String>] :output_files
|
437
|
+
# the output paths to use for this script phase. This is used by Xcode to avoid re-executing this script
|
438
|
+
# phase if none of the output paths have changed.
|
439
|
+
#
|
440
|
+
# @option options [Array<String>] :input_file_lists
|
441
|
+
# the input file lists to use for this script phase. This is used by Xcode to determine whether to
|
442
|
+
# re-execute this script phase if the input paths have changed or not.
|
443
|
+
#
|
444
|
+
# @option options [Array<String>] :output_file_lists
|
445
|
+
# the output file lists to use for this script phase. This is used by Xcode to avoid re-executing this
|
446
|
+
# script phase if none of the output paths have changed.
|
447
|
+
#
|
448
|
+
# @option options [Boolean] :show_env_vars_in_log
|
449
|
+
# whether this script phase should output the environment variables during execution.
|
450
|
+
#
|
451
|
+
# @option options [Symbol] :execution_position
|
452
|
+
# specifies the position of which this script phase should be executed. The currently supported values are:
|
453
|
+
# `:before_compile`, `:after_compile` and `:any` which is the default.
|
454
|
+
#
|
455
|
+
# @option options [String] :dependency_file
|
456
|
+
# specifies the dependency file to use for this script phase.
|
457
|
+
#
|
458
|
+
# @option options [String] :always_out_of_date
|
459
|
+
# specifies whether or not this run script will be forced to
|
460
|
+
# run even on incremental builds
|
461
|
+
#
|
462
|
+
# @return [void]
|
463
|
+
#
|
464
|
+
def script_phase(options)
|
465
|
+
raise Informative, 'Script phases can only be added within target definitions.' if current_target_definition.root?
|
466
|
+
raise Informative, 'Script phases cannot be added to abstract targets.' if current_target_definition.abstract?
|
467
|
+
current_target_definition.store_script_phase(options)
|
468
|
+
end
|
469
|
+
|
470
|
+
# Defines a new abstract target that can be used for convenient
|
471
|
+
# target dependency inheritance.
|
472
|
+
#
|
473
|
+
# @param [Symbol, String] name
|
474
|
+
# the name of the target.
|
475
|
+
#
|
476
|
+
# @example Defining an abstract target
|
477
|
+
#
|
478
|
+
# abstract_target 'Networking' do
|
479
|
+
# pod 'AlamoFire'
|
480
|
+
#
|
481
|
+
# target 'Networking App 1'
|
482
|
+
# target 'Networking App 2'
|
483
|
+
# end
|
484
|
+
#
|
485
|
+
# @example Defining an abstract_target wrapping Pods to multiple targets
|
486
|
+
#
|
487
|
+
# # Note: There are no targets called "Shows" in any of this workspace's Xcode projects
|
488
|
+
# abstract_target 'Shows' do
|
489
|
+
# pod 'ShowsKit'
|
490
|
+
#
|
491
|
+
# # The target ShowsiOS has its own copy of ShowsKit (inherited) + ShowWebAuth (added here)
|
492
|
+
# target 'ShowsiOS' do
|
493
|
+
# pod 'ShowWebAuth'
|
494
|
+
# end
|
495
|
+
#
|
496
|
+
# # The target ShowsTV has its own copy of ShowsKit (inherited) + ShowTVAuth (added here)
|
497
|
+
# target 'ShowsTV' do
|
498
|
+
# pod 'ShowTVAuth'
|
499
|
+
# end
|
500
|
+
#
|
501
|
+
# # Our tests target has its own copy of
|
502
|
+
# # our testing frameworks, and has access
|
503
|
+
# # to ShowsKit as well because it is
|
504
|
+
# # a child of the abstract target 'Shows'
|
505
|
+
#
|
506
|
+
# target 'ShowsTests' do
|
507
|
+
# inherit! :search_paths
|
508
|
+
# pod 'Specta'
|
509
|
+
# pod 'Expecta'
|
510
|
+
# end
|
511
|
+
# end
|
512
|
+
#
|
513
|
+
# @return [void]
|
514
|
+
#
|
515
|
+
def abstract_target(name)
|
516
|
+
target(name) do
|
517
|
+
abstract!
|
518
|
+
yield if block_given?
|
519
|
+
end
|
520
|
+
end
|
521
|
+
|
522
|
+
# Denotes that the current target is abstract, and thus will not directly
|
523
|
+
# link against an Xcode target.
|
524
|
+
#
|
525
|
+
# @return [void]
|
526
|
+
#
|
527
|
+
def abstract!(abstract = true)
|
528
|
+
current_target_definition.abstract = abstract
|
529
|
+
end
|
530
|
+
|
531
|
+
# Sets the inheritance mode for the current target.
|
532
|
+
#
|
533
|
+
# @param [Symbol] inheritance
|
534
|
+
# the inheritance mode to set.
|
535
|
+
#
|
536
|
+
# **Available Modes:**
|
537
|
+
# + `:complete` The target inherits all
|
538
|
+
# behaviour from the parent.
|
539
|
+
# + `:none` The target inherits none of
|
540
|
+
# the behaviour from the parent.
|
541
|
+
# + `:search_paths` The target inherits
|
542
|
+
# the search paths of the parent only.
|
543
|
+
#
|
544
|
+
#
|
545
|
+
# @example Inheriting only search paths
|
546
|
+
#
|
547
|
+
# target 'App' do
|
548
|
+
# target 'AppTests' do
|
549
|
+
# inherit! :search_paths
|
550
|
+
# end
|
551
|
+
# end
|
552
|
+
#
|
553
|
+
# @return [void]
|
554
|
+
#
|
555
|
+
def inherit!(inheritance)
|
556
|
+
current_target_definition.inheritance = inheritance
|
557
|
+
end
|
558
|
+
|
254
559
|
#-----------------------------------------------------------------------#
|
255
560
|
|
256
561
|
# @!group Target configuration
|
257
|
-
# These settings are used to control the
|
562
|
+
# These settings are used to control the CocoaPods generated project.
|
258
563
|
#
|
259
564
|
# This starts out simply with stating what `platform` you are working
|
260
565
|
# on. `xcodeproj` allows you to state specifically which project to
|
@@ -262,17 +567,18 @@ module Pod
|
|
262
567
|
|
263
568
|
#-----------------------------------------------------------------------#
|
264
569
|
|
265
|
-
# Specifies the platform for which a static library should be
|
570
|
+
# Specifies the platform for which a static library should be built.
|
266
571
|
#
|
267
572
|
# CocoaPods provides a default deployment target if one is not specified.
|
268
|
-
# The current default values are `4.3` for iOS
|
573
|
+
# The current default values are `4.3` for iOS, `10.6` for OS X, `9.0` for tvOS,
|
574
|
+
# `1.0` for visionOS and `2.0` for watchOS.
|
269
575
|
#
|
270
576
|
# If the deployment target requires it (iOS < `4.3`), `armv6`
|
271
577
|
# architecture will be added to `ARCHS`.
|
272
578
|
#
|
273
579
|
# @param [Symbol] name
|
274
|
-
# the name of platform, can be either `:osx` for OS X
|
275
|
-
# for iOS.
|
580
|
+
# the name of platform, can be either `:osx` for OS X, `:ios`
|
581
|
+
# for iOS, `:tvos` for tvOS, `:visionos` for visionOS, or `:watchos` for watchOS.
|
276
582
|
#
|
277
583
|
# @param [String, Version] target
|
278
584
|
# The optional deployment. If not provided a default value
|
@@ -280,7 +586,7 @@ module Pod
|
|
280
586
|
#
|
281
587
|
# @example Specifying the platform
|
282
588
|
#
|
283
|
-
# platform :ios,
|
589
|
+
# platform :ios, '4.0'
|
284
590
|
# platform :ios
|
285
591
|
#
|
286
592
|
# @return [void]
|
@@ -288,7 +594,7 @@ module Pod
|
|
288
594
|
def platform(name, target = nil)
|
289
595
|
# Support for deprecated options parameter
|
290
596
|
target = target[:deployment_target] if target.is_a?(Hash)
|
291
|
-
current_target_definition.set_platform(name, target)
|
597
|
+
current_target_definition.set_platform!(name, target)
|
292
598
|
end
|
293
599
|
|
294
600
|
# Specifies the Xcode project that contains the target that the Pods
|
@@ -296,13 +602,12 @@ module Pod
|
|
296
602
|
#
|
297
603
|
# -----
|
298
604
|
#
|
299
|
-
# If
|
300
|
-
#
|
301
|
-
#
|
302
|
-
# directory as the Podfile then that project will be used.
|
605
|
+
# If none of the target definitions specify an explicit project
|
606
|
+
# and there is only **one** project in the same directory as the Podfile
|
607
|
+
# then that project will be used.
|
303
608
|
#
|
304
609
|
# It is possible also to specify whether the build settings of your
|
305
|
-
# custom build configurations should be
|
610
|
+
# custom build configurations should be modelled after the release or
|
306
611
|
# the debug presets. To do so you need to specify a hash where the name
|
307
612
|
# of each build configuration is associated to either `:release` or
|
308
613
|
# `:debug`.
|
@@ -320,51 +625,53 @@ module Pod
|
|
320
625
|
#
|
321
626
|
# @example Specifying the user project
|
322
627
|
#
|
323
|
-
# #
|
324
|
-
#
|
325
|
-
#
|
628
|
+
# # This Target can be found in a Xcode project called `FastGPS`
|
629
|
+
# target 'MyGPSApp' do
|
630
|
+
# project 'FastGPS'
|
631
|
+
# ...
|
632
|
+
# end
|
326
633
|
#
|
327
|
-
#
|
328
|
-
#
|
329
|
-
#
|
634
|
+
# # Same Podfile, multiple Xcodeprojects
|
635
|
+
# target 'MyNotesApp' do
|
636
|
+
# project 'FastNotes'
|
637
|
+
# ...
|
330
638
|
# end
|
331
639
|
#
|
332
640
|
# @example Using custom build configurations
|
333
641
|
#
|
334
|
-
#
|
335
|
-
#
|
642
|
+
# project 'TestProject', 'Mac App Store' => :release, 'Test' => :debug
|
336
643
|
#
|
337
644
|
# @return [void]
|
338
645
|
#
|
339
|
-
def
|
646
|
+
def project(path, build_configurations = {})
|
340
647
|
current_target_definition.user_project_path = path
|
341
648
|
current_target_definition.build_configurations = build_configurations
|
342
649
|
end
|
343
650
|
|
344
|
-
#
|
345
|
-
# should be linked in.
|
346
|
-
#
|
347
|
-
# -----
|
348
|
-
#
|
349
|
-
# If no explicit target is specified, then the Pods target will be linked
|
350
|
-
# with the first target in your project. So if you only have one target
|
351
|
-
# you do not need to specify the target to link with.
|
651
|
+
# @!visibility private
|
352
652
|
#
|
353
|
-
# @
|
354
|
-
# the target or the targets to link with.
|
653
|
+
# @deprecated #{xcodeproj} was renamed to #{project}.
|
355
654
|
#
|
356
|
-
#
|
655
|
+
# `xcodeproj` is deprecated in [1.0](http://blog.cocoapods.org/CocoaPods-1.0/) and has been renamed to `project`.
|
656
|
+
# For pre-1.0 versions use `xcodeproj`.
|
357
657
|
#
|
358
|
-
|
359
|
-
|
360
|
-
|
658
|
+
def xcodeproj(*args)
|
659
|
+
CoreUI.warn '`xcodeproj` was renamed to `project`. Please update your Podfile accordingly.'
|
660
|
+
project(*args)
|
661
|
+
end
|
662
|
+
|
663
|
+
# @!visibility private
|
361
664
|
#
|
362
|
-
#
|
665
|
+
# @deprecated linking a single target with multiple Xcode targets is no
|
666
|
+
# longer supported. Use an {#abstract_target} and target
|
667
|
+
# inheritance instead.
|
363
668
|
#
|
364
|
-
#
|
669
|
+
# `link_with` is deprecated in [1.0](http://blog.cocoapods.org/CocoaPods-1.0/) in
|
670
|
+
# favour of `abstract_target` and target inheritance instead.
|
365
671
|
#
|
366
|
-
def link_with(*
|
367
|
-
|
672
|
+
def link_with(*)
|
673
|
+
raise Informative, 'The specification of `link_with` in the Podfile ' \
|
674
|
+
'is now unsupported, please use target blocks instead.'
|
368
675
|
end
|
369
676
|
|
370
677
|
# Inhibits **all** the warnings from the CocoaPods libraries.
|
@@ -378,10 +685,103 @@ module Pod
|
|
378
685
|
#
|
379
686
|
# pod 'SSZipArchive', :inhibit_warnings => true
|
380
687
|
#
|
688
|
+
# Additionally, when you use `inhibit_all_warnings!` attribute,
|
689
|
+
# you can exclude a particular Pod from being inhibited using the following:
|
690
|
+
#
|
691
|
+
# pod 'SSZipArchive', :inhibit_warnings => false
|
692
|
+
#
|
381
693
|
def inhibit_all_warnings!
|
382
694
|
current_target_definition.inhibit_all_warnings = true
|
383
695
|
end
|
384
696
|
|
697
|
+
# Use modular headers for all CocoaPods static libraries.
|
698
|
+
#
|
699
|
+
# ------
|
700
|
+
#
|
701
|
+
# This attribute is inherited by child target definitions.
|
702
|
+
#
|
703
|
+
# If you would like to use modular headers per Pod you can use the
|
704
|
+
# following syntax:
|
705
|
+
#
|
706
|
+
# pod 'SSZipArchive', :modular_headers => true
|
707
|
+
#
|
708
|
+
# Additionally, when you use the `use_modular_headers!` attribute,
|
709
|
+
# you can exclude a particular Pod from modular headers using the following:
|
710
|
+
#
|
711
|
+
# pod 'SSZipArchive', :modular_headers => false
|
712
|
+
#
|
713
|
+
def use_modular_headers!
|
714
|
+
current_target_definition.use_modular_headers_for_all_pods = true
|
715
|
+
end
|
716
|
+
|
717
|
+
# Use frameworks instead of static libraries for Pods. When using frameworks, you may also specify the `:linkage`
|
718
|
+
# style to use, either `:static` or `:dynamic`.
|
719
|
+
#
|
720
|
+
# ------
|
721
|
+
#
|
722
|
+
# This attribute is inherited by child target definitions.
|
723
|
+
#
|
724
|
+
# @param [Boolean, Hash] option
|
725
|
+
# The option to use for configuring packaging and linkage style.
|
726
|
+
#
|
727
|
+
# @example
|
728
|
+
#
|
729
|
+
# target 'MyApp' do
|
730
|
+
# use_frameworks!
|
731
|
+
# pod 'AFNetworking', '~> 1.0'
|
732
|
+
# end
|
733
|
+
#
|
734
|
+
# @example
|
735
|
+
#
|
736
|
+
# target 'MyApp' do
|
737
|
+
# use_frameworks! :linkage => :dynamic
|
738
|
+
# pod 'AFNetworking', '~> 1.0'
|
739
|
+
# end
|
740
|
+
#
|
741
|
+
# target 'ZipApp' do
|
742
|
+
# use_frameworks! :linkage => :static
|
743
|
+
# pod 'SSZipArchive'
|
744
|
+
# end
|
745
|
+
#
|
746
|
+
# @return [void]
|
747
|
+
#
|
748
|
+
def use_frameworks!(option = true)
|
749
|
+
current_target_definition.use_frameworks!(option)
|
750
|
+
end
|
751
|
+
|
752
|
+
# Specifies the Swift version requirements this target definition supports.
|
753
|
+
#
|
754
|
+
# **Note** These requirements are inherited from the parent, if specified and if none
|
755
|
+
# are specified at the root level then all versions are considered to be supported.
|
756
|
+
#
|
757
|
+
# @param [String, Version, Array<String>, Array<Version>] requirements
|
758
|
+
# The set of requirements this target supports.
|
759
|
+
#
|
760
|
+
# @example
|
761
|
+
#
|
762
|
+
# target 'MyApp' do
|
763
|
+
# supports_swift_versions '>= 3.0', '< 4.0'
|
764
|
+
# pod 'AFNetworking', '~> 1.0'
|
765
|
+
# end
|
766
|
+
#
|
767
|
+
# @example
|
768
|
+
#
|
769
|
+
# supports_swift_versions '>= 3.0', '< 4.0'
|
770
|
+
#
|
771
|
+
# target 'MyApp' do
|
772
|
+
# pod 'AFNetworking', '~> 1.0'
|
773
|
+
# end
|
774
|
+
#
|
775
|
+
# target 'ZipApp' do
|
776
|
+
# pod 'SSZipArchive'
|
777
|
+
# end
|
778
|
+
#
|
779
|
+
# @return [void]
|
780
|
+
#
|
781
|
+
def supports_swift_versions(*requirements)
|
782
|
+
current_target_definition.store_swift_version_requirements(*requirements)
|
783
|
+
end
|
784
|
+
|
385
785
|
#-----------------------------------------------------------------------#
|
386
786
|
|
387
787
|
# @!group Workspace
|
@@ -448,6 +848,44 @@ module Pod
|
|
448
848
|
|
449
849
|
#-----------------------------------------------------------------------#
|
450
850
|
|
851
|
+
# @!group Sources
|
852
|
+
#
|
853
|
+
# The Podfile retrieves specs from a given list of sources (repositories).
|
854
|
+
#
|
855
|
+
# Sources are __global__ and they are not stored per target definition.
|
856
|
+
|
857
|
+
#-----------------------------------------------------------------------#
|
858
|
+
|
859
|
+
# Specifies the location of specs
|
860
|
+
#
|
861
|
+
# -----
|
862
|
+
#
|
863
|
+
# Use this method to specify sources. The order of the sources is
|
864
|
+
# relevant. CocoaPods will use the highest version of a Pod of the first
|
865
|
+
# source which includes the Pod (regardless whether other sources have a
|
866
|
+
# higher version).
|
867
|
+
#
|
868
|
+
# The official CocoaPods source is implicit.
|
869
|
+
# Once you specify another source, then it will need to be included.
|
870
|
+
#
|
871
|
+
# @param [String] source
|
872
|
+
# The URL of a specs repository.
|
873
|
+
#
|
874
|
+
# @example Specifying to first use the Artsy repository and then the CocoaPods Master Repository
|
875
|
+
#
|
876
|
+
# source 'https://github.com/artsy/Specs.git'
|
877
|
+
# source 'https://cdn.cocoapods.org/'
|
878
|
+
#
|
879
|
+
# @return [void]
|
880
|
+
#
|
881
|
+
def source(source)
|
882
|
+
hash_sources = get_hash_value('sources') || []
|
883
|
+
hash_sources << source
|
884
|
+
set_hash_value('sources', hash_sources.uniq)
|
885
|
+
end
|
886
|
+
|
887
|
+
#-----------------------------------------------------------------------#
|
888
|
+
|
451
889
|
# @!group Hooks
|
452
890
|
# The Podfile provides hooks that will be called during the
|
453
891
|
# installation process.
|
@@ -456,16 +894,42 @@ module Pod
|
|
456
894
|
|
457
895
|
#-----------------------------------------------------------------------#
|
458
896
|
|
897
|
+
# Specifies the plugins that should be used during installation.
|
898
|
+
#
|
899
|
+
# -----
|
900
|
+
#
|
901
|
+
# Use this method to specify a plugin that should be used during
|
902
|
+
# installation, along with the options that should be passed to the plugin
|
903
|
+
# when it is invoked.
|
904
|
+
#
|
905
|
+
# @param [String] name
|
906
|
+
# The name of the plugin.
|
907
|
+
#
|
908
|
+
# @param [Hash] options
|
909
|
+
# The optional options that should be passed to the plugin when
|
910
|
+
# its hooks are invoked.
|
911
|
+
#
|
912
|
+
# @example Specifying to use the `slather` and `cocoapods-keys` plugins.
|
913
|
+
#
|
914
|
+
# plugin 'cocoapods-keys', :keyring => 'Eidolon'
|
915
|
+
# plugin 'slather'
|
916
|
+
#
|
917
|
+
# @return [void]
|
918
|
+
#
|
919
|
+
def plugin(name, options = {})
|
920
|
+
hash_plugins = get_hash_value('plugins') || {}
|
921
|
+
(hash_plugins[name] ||= {}).merge!(options.deep_stringify_keys)
|
922
|
+
set_hash_value('plugins', hash_plugins)
|
923
|
+
end
|
924
|
+
|
459
925
|
# This hook allows you to make any changes to the Pods after they have
|
460
926
|
# been downloaded but before they are installed.
|
461
927
|
#
|
462
|
-
# It receives the
|
463
|
-
# [`Pod::Hooks::InstallerRepresentation`](http://docs.cocoapods.org/cocoapods/pod/hooks/installerrepresentation/)
|
464
|
-
# as its only argument.
|
928
|
+
# It receives the [Pod::Installer] as its only argument.
|
465
929
|
#
|
466
|
-
# @example Defining a pre
|
930
|
+
# @example Defining a pre-install hook in a Podfile.
|
467
931
|
#
|
468
|
-
# pre_install do |
|
932
|
+
# pre_install do |installer|
|
469
933
|
# # Do something fancy!
|
470
934
|
# end
|
471
935
|
#
|
@@ -474,18 +938,34 @@ module Pod
|
|
474
938
|
@pre_install_callback = block
|
475
939
|
end
|
476
940
|
|
941
|
+
# This hook allows you to make changes before the project is written
|
942
|
+
# to disk.
|
943
|
+
#
|
944
|
+
# It receives the [Pod::Installer] as its only argument.
|
945
|
+
#
|
946
|
+
# @example Customizing the dependencies before integration
|
947
|
+
#
|
948
|
+
# pre_integrate do |installer|
|
949
|
+
# # perform some changes on dependencies
|
950
|
+
# end
|
951
|
+
#
|
952
|
+
# @return [void]
|
953
|
+
#
|
954
|
+
def pre_integrate(&block)
|
955
|
+
raise Informative, 'Specifying multiple `pre_integrate` hooks is unsupported.' if @pre_integrate_callback
|
956
|
+
@pre_integrate_callback = block
|
957
|
+
end
|
958
|
+
|
477
959
|
# This hook allows you to make any last changes to the generated Xcode
|
478
960
|
# project before it is written to disk, or any other tasks you might want
|
479
961
|
# to perform.
|
480
962
|
#
|
481
|
-
# It receives the
|
482
|
-
# [`Pod::Hooks::InstallerRepresentation`](http://docs.cocoapods.org/cocoapods/pod/hooks/installerrepresentation/)
|
483
|
-
# as its only argument.
|
963
|
+
# It receives the [Pod::Installer] as its only argument.
|
484
964
|
#
|
485
|
-
# @example Customizing the
|
965
|
+
# @example Customizing the build settings of all targets
|
486
966
|
#
|
487
|
-
# post_install do |
|
488
|
-
#
|
967
|
+
# post_install do |installer|
|
968
|
+
# installer.pods_project.targets.each do |target|
|
489
969
|
# target.build_configurations.each do |config|
|
490
970
|
# config.build_settings['GCC_ENABLE_OBJC_GC'] = 'supported'
|
491
971
|
# end
|
@@ -495,8 +975,27 @@ module Pod
|
|
495
975
|
# @return [void]
|
496
976
|
#
|
497
977
|
def post_install(&block)
|
978
|
+
raise Informative, 'Specifying multiple `post_install` hooks is unsupported.' if @post_install_callback
|
498
979
|
@post_install_callback = block
|
499
980
|
end
|
981
|
+
|
982
|
+
# This hook allows you to make changes after the project is written
|
983
|
+
# to disk.
|
984
|
+
#
|
985
|
+
# It receives the [Pod::Installer] as its only argument.
|
986
|
+
#
|
987
|
+
# @example Customizing the build settings of all targets
|
988
|
+
#
|
989
|
+
# post_integrate do |installer|
|
990
|
+
# # some change after project write to disk
|
991
|
+
# end
|
992
|
+
#
|
993
|
+
# @return [void]
|
994
|
+
#
|
995
|
+
def post_integrate(&block)
|
996
|
+
raise Informative, 'Specifying multiple `post_integrate` hooks is unsupported.' if @post_integrate_callback
|
997
|
+
@post_integrate_callback = block
|
998
|
+
end
|
500
999
|
end
|
501
1000
|
end
|
502
1001
|
end
|