cocoapods-core 1.3.1 → 1.4.0.beta.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/lib/cocoapods-core/gem_version.rb +1 -1
- data/lib/cocoapods-core/podfile/dsl.rb +42 -0
- data/lib/cocoapods-core/podfile/target_definition.rb +46 -1
- data/lib/cocoapods-core/specification/consumer.rb +5 -0
- data/lib/cocoapods-core/specification/dsl.rb +19 -2
- data/lib/cocoapods-core/specification/dsl/attribute.rb +8 -0
- data/lib/cocoapods-core/specification/linter.rb +7 -4
- data/lib/cocoapods-core/specification/linter/analyzer.rb +4 -0
- data/lib/cocoapods-core/specification/set.rb +5 -0
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 124e2ed7abb0379ce9ee365c6ced5ea69ff08865
|
4
|
+
data.tar.gz: 877153422ec76b1f609d8c21410ab76942e2052c
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: cb481a17edf85583140125d9b9b25b5f079edb1354fcf023f71b28f41c95a5c1069f4947cf63b5c8db8345c2851d6977aef705fcbc5884a7f336ffaf347f4005
|
7
|
+
data.tar.gz: 2516b6cb3b755936f8d969f1a348804e9634634f4cb848e2e9690f03a2b3e797730092b5904860cab9568f22d32dab1be6ebfa5be6c613c1c4c1217016d2648e
|
@@ -334,6 +334,48 @@ module Pod
|
|
334
334
|
self.current_target_definition = parent
|
335
335
|
end
|
336
336
|
|
337
|
+
# Adds a script phase to be integrated with this target. A script phase can be used to execute an arbitrary
|
338
|
+
# script that can use all Xcode environment variables during execution. A target may include multiple script
|
339
|
+
# phases which they will be added in the order they were declared. Deleting a script phase will effectively remove
|
340
|
+
# it from the target if it has been added previously.
|
341
|
+
#
|
342
|
+
# @example
|
343
|
+
# script_phase :name => 'HelloWorldScript', :script => 'echo "Hello World"'
|
344
|
+
#
|
345
|
+
# @example
|
346
|
+
# script_phase :name => 'HelloWorldScript', :script => 'puts "Hello World"', :shell_path => '/usr/bin/ruby'
|
347
|
+
#
|
348
|
+
# @param [Hash] options
|
349
|
+
# the options for this script phase.
|
350
|
+
#
|
351
|
+
# @option options [String] :name
|
352
|
+
# the name of the script phase. This option is required.
|
353
|
+
#
|
354
|
+
# @option options [String] :script
|
355
|
+
# the body of the script to execute. This option is required.
|
356
|
+
#
|
357
|
+
# @option options [String] :shell_path
|
358
|
+
# the shell path to use for this script phase, for example `/usr/bin/ruby` to use Ruby for this phase.
|
359
|
+
#
|
360
|
+
# @option options [Array<String>] :input_paths
|
361
|
+
# the input paths to use for script. This is used by Xcode to determine whether to re-execute this
|
362
|
+
# script phase if the input paths have changed or not.
|
363
|
+
#
|
364
|
+
# @option options [Array<String>] :output_paths
|
365
|
+
# the output paths to use for script. This is used by Xcode to avoid re-executing this script phase if
|
366
|
+
# none of the output paths have changed.
|
367
|
+
#
|
368
|
+
# @option options [Boolean] :show_env_vars_in_log
|
369
|
+
# whether this script phase should output the environment variables during execution.
|
370
|
+
#
|
371
|
+
# @return [void]
|
372
|
+
#
|
373
|
+
def script_phase(options)
|
374
|
+
raise Informative, 'Script phases can only be added within target definitions.' if current_target_definition.root?
|
375
|
+
raise Informative, 'Script phases cannot be added to abstract targets.' if current_target_definition.abstract?
|
376
|
+
current_target_definition.store_script_phase(options)
|
377
|
+
end
|
378
|
+
|
337
379
|
# Defines a new abstract target that can be used for convenient
|
338
380
|
# target dependency inheritance.
|
339
381
|
#
|
@@ -288,6 +288,14 @@ module Pod
|
|
288
288
|
|
289
289
|
#--------------------------------------#
|
290
290
|
|
291
|
+
# @return [Array<Hash>] The list of the script phases of the target definition.
|
292
|
+
#
|
293
|
+
def script_phases
|
294
|
+
get_hash_value('script_phases') || []
|
295
|
+
end
|
296
|
+
|
297
|
+
#--------------------------------------#
|
298
|
+
|
291
299
|
# @return [Bool] whether the target definition should inhibit warnings
|
292
300
|
# for a single pod. If inhibit_all_warnings is true, it will
|
293
301
|
# return true for any asked pod.
|
@@ -575,6 +583,41 @@ module Pod
|
|
575
583
|
end
|
576
584
|
end
|
577
585
|
|
586
|
+
#--------------------------------------#
|
587
|
+
|
588
|
+
SCRIPT_PHASE_REQUIRED_KEYS = [:name, :script].freeze
|
589
|
+
|
590
|
+
SCRIPT_PHASE_OPTIONAL_KEYS = [:shell_path, :input_files, :output_files, :show_env_vars_in_log].freeze
|
591
|
+
|
592
|
+
ALL_SCRIPT_PHASE_KEYS = (SCRIPT_PHASE_REQUIRED_KEYS + SCRIPT_PHASE_OPTIONAL_KEYS).freeze
|
593
|
+
|
594
|
+
# Stores the script phase to add for this target definition.
|
595
|
+
#
|
596
|
+
# @param [Hash] options
|
597
|
+
# The options to use for this script phase. The required keys
|
598
|
+
# are: `:name`, `:script`, while the optional keys are:
|
599
|
+
# `:shell_path`, `:input_files`, `:output_files` and `:show_env_vars_in_log`.
|
600
|
+
#
|
601
|
+
# @return [void]
|
602
|
+
#
|
603
|
+
def store_script_phase(options)
|
604
|
+
option_keys = options.keys
|
605
|
+
unrecognized_keys = option_keys - ALL_SCRIPT_PHASE_KEYS
|
606
|
+
unless unrecognized_keys.empty?
|
607
|
+
raise StandardError, "Unrecognized options `#{unrecognized_keys}` in shell script `#{options}` within `#{name}` target. " \
|
608
|
+
"Available options are `#{ALL_SCRIPT_PHASE_KEYS}`."
|
609
|
+
end
|
610
|
+
missing_required_keys = SCRIPT_PHASE_REQUIRED_KEYS - option_keys
|
611
|
+
unless missing_required_keys.empty?
|
612
|
+
raise StandardError, "Missing required shell script phase options `#{missing_required_keys.join(', ')}`"
|
613
|
+
end
|
614
|
+
script_phases_hash = get_hash_value('script_phases', [])
|
615
|
+
if script_phases_hash.map { |script_phase_options| script_phase_options[:name] }.include?(options[:name])
|
616
|
+
raise StandardError, "Script phase with name `#{options[:name]}` name already present for target `#{name}`."
|
617
|
+
end
|
618
|
+
script_phases_hash << options
|
619
|
+
end
|
620
|
+
|
578
621
|
#-----------------------------------------------------------------------#
|
579
622
|
|
580
623
|
public
|
@@ -595,6 +638,7 @@ module Pod
|
|
595
638
|
user_project_path
|
596
639
|
build_configurations
|
597
640
|
dependencies
|
641
|
+
script_phases
|
598
642
|
children
|
599
643
|
configuration_pod_whitelist
|
600
644
|
uses_frameworks
|
@@ -877,7 +921,8 @@ module Pod
|
|
877
921
|
end if subspecs
|
878
922
|
|
879
923
|
test_specs.each do |ss|
|
880
|
-
|
924
|
+
requirements_copy = requirements.map(&:dup)
|
925
|
+
store_pod("#{name}/#{ss}", *requirements_copy)
|
881
926
|
end if test_specs
|
882
927
|
|
883
928
|
requirements.pop if options.empty?
|
@@ -138,6 +138,11 @@ module Pod
|
|
138
138
|
|
139
139
|
# @!group Test Support
|
140
140
|
|
141
|
+
# @return [Bool] Whether this test specification requires an app host.
|
142
|
+
#
|
143
|
+
spec_attr_accessor :requires_app_host
|
144
|
+
alias_method :requires_app_host?, :requires_app_host
|
145
|
+
|
141
146
|
# @return [Symbol] the test type supported by this specification.
|
142
147
|
#
|
143
148
|
spec_attr_accessor :test_type
|
@@ -486,7 +486,7 @@ module Pod
|
|
486
486
|
# spec.deprecated = true
|
487
487
|
#
|
488
488
|
# @param [Bool] flag
|
489
|
-
#
|
489
|
+
# whether the library has been deprecated.
|
490
490
|
#
|
491
491
|
root_attribute :deprecated,
|
492
492
|
:types => [TrueClass, FalseClass],
|
@@ -1363,7 +1363,24 @@ module Pod
|
|
1363
1363
|
# The test type to use.
|
1364
1364
|
attribute :test_type,
|
1365
1365
|
:types => [Symbol, String],
|
1366
|
-
:multi_platform => false
|
1366
|
+
:multi_platform => false,
|
1367
|
+
:test_only => true
|
1368
|
+
|
1369
|
+
# @!method requires_app_host=(flag)
|
1370
|
+
#
|
1371
|
+
# Whether a test specification requires an app host to run tests. This only applies to test specifications.
|
1372
|
+
#
|
1373
|
+
# @example
|
1374
|
+
#
|
1375
|
+
# test_spec.requires_app_host = true
|
1376
|
+
#
|
1377
|
+
# @param [Bool] flag
|
1378
|
+
# whether a test specification requires an app host to run tests.
|
1379
|
+
#
|
1380
|
+
attribute :requires_app_host,
|
1381
|
+
:types => [TrueClass, FalseClass],
|
1382
|
+
:default_value => false,
|
1383
|
+
:test_only => true
|
1367
1384
|
|
1368
1385
|
# Represents a test specification for the library. Here you can place all
|
1369
1386
|
# your tests for your podspec along with the test dependencies.
|
@@ -31,6 +31,7 @@ module Pod
|
|
31
31
|
|
32
32
|
@multi_platform = options.delete(:multi_platform) { true }
|
33
33
|
@root_only = options.delete(:root_only) { false }
|
34
|
+
@test_only = options.delete(:test_only) { false }
|
34
35
|
@inherited = options.delete(:inherited) { @root_only }
|
35
36
|
@required = options.delete(:required) { false }
|
36
37
|
@singularize = options.delete(:singularize) { false }
|
@@ -121,6 +122,13 @@ module Pod
|
|
121
122
|
@root_only
|
122
123
|
end
|
123
124
|
|
125
|
+
# @return [Bool] whether the attribute should be specified only on
|
126
|
+
# test specifications.
|
127
|
+
#
|
128
|
+
def test_only?
|
129
|
+
@test_only
|
130
|
+
end
|
131
|
+
|
124
132
|
# @return [Bool] whether the attribute is multi-platform and should
|
125
133
|
# work in conjunction with #{PlatformProxy}.
|
126
134
|
#
|
@@ -218,6 +218,8 @@ module Pod
|
|
218
218
|
|
219
219
|
# @!group Root spec validation helpers
|
220
220
|
|
221
|
+
# Performs validations related to the `authors` attribute.
|
222
|
+
#
|
221
223
|
def _validate_authors(a)
|
222
224
|
if a.is_a? Hash
|
223
225
|
if a == { 'YOUR NAME HERE' => 'YOUR EMAIL HERE' }
|
@@ -227,6 +229,8 @@ module Pod
|
|
227
229
|
end
|
228
230
|
end
|
229
231
|
|
232
|
+
# Performs validations related to the `version` attribute.
|
233
|
+
#
|
230
234
|
def _validate_version(v)
|
231
235
|
if v.to_s.empty?
|
232
236
|
results.add_error('version', 'A version is required.')
|
@@ -237,6 +241,7 @@ module Pod
|
|
237
241
|
end
|
238
242
|
|
239
243
|
# Performs validations related to the `module_name` attribute.
|
244
|
+
#
|
240
245
|
def _validate_module_name(m)
|
241
246
|
unless m.nil? || m =~ /^[a-z_][0-9a-z_]*$/i
|
242
247
|
results.add_error('module_name', 'The module name of a spec' \
|
@@ -379,11 +384,9 @@ module Pod
|
|
379
384
|
end
|
380
385
|
end
|
381
386
|
|
387
|
+
# Performs validations related to the `test_type` attribute.
|
388
|
+
#
|
382
389
|
def _validate_test_type(t)
|
383
|
-
unless consumer.spec.test_specification?
|
384
|
-
results.add_error('test_type', 'Test type can only be used for test specifications.')
|
385
|
-
return
|
386
|
-
end
|
387
390
|
supported_test_types = Specification::DSL::SUPPORTED_TEST_TYPES.map(&:to_s)
|
388
391
|
unless supported_test_types.include?(t.to_s)
|
389
392
|
results.add_error('test_type', "The test type `#{t}` is not supported. " \
|
@@ -140,6 +140,10 @@ module Pod
|
|
140
140
|
results.add_error('attributes', "Can't set `#{attribute.name}` attribute for " \
|
141
141
|
"subspecs (in `#{consumer.spec.name}`).")
|
142
142
|
end
|
143
|
+
if attribute.test_only? && !value.nil? && !consumer.spec.test_specification?
|
144
|
+
results.add_error('attributes', "Attribute `#{attribute.name}` can only be set " \
|
145
|
+
"within test specs (in `#{consumer.spec.name}`).")
|
146
|
+
end
|
143
147
|
end
|
144
148
|
|
145
149
|
# Validates the given value for the given attribute.
|
@@ -42,6 +42,11 @@ module Pod
|
|
42
42
|
# is used to disambiguate.
|
43
43
|
#
|
44
44
|
def specification
|
45
|
+
unless highest_version_spec_path
|
46
|
+
raise Informative, "Could not find the highest version for `#{name}`. "\
|
47
|
+
"This could be due to an empty #{name} directory in a local repository."
|
48
|
+
end
|
49
|
+
|
45
50
|
Specification.from_file(highest_version_spec_path)
|
46
51
|
end
|
47
52
|
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: cocoapods-core
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.
|
4
|
+
version: 1.4.0.beta.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Eloy Duran
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2017-
|
12
|
+
date: 2017-09-24 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: activesupport
|