Class: Pod::Podfile::TargetDefinition
- Inherits:
-
Object
- Object
- Pod::Podfile::TargetDefinition
- Defined in:
- lib/cocoapods-core/podfile/target_definition.rb
Overview
The TargetDefinition stores the information of a CocoaPods static library. The target definition can be linked with one or more targets of the user project.
Target definitions can be nested and by default inherit the dependencies of the parent.
Attributes collapse
- PLATFORM_DEFAULTS =
————————————–#
{ :ios => '4.3', :osx => '10.6', :tvos => '9.0', :watchos => '2.0' }.freeze
Representations collapse
- HASH_KEYS =
Returns The keys used by the hash representation of the target definition.
%w( name platform podspecs exclusive link_with link_with_first_target inhibit_warnings user_project_path build_configurations dependencies children configuration_pod_whitelist uses_frameworks inheritance abstract swift_version ).freeze
Instance Attribute Summary collapse
-
#children ⇒ Array<TargetDefinition>
readonly
The children target definitions.
-
#parent ⇒ TargetDefinition, Podfile
readonly
The parent target definition or the Podfile if the receiver is root.
Attributes collapse
-
#abstract=(abstract) ⇒ void
Sets whether this target definition is abstract.
-
#abstract? ⇒ Boolean
Whether this target definition is abstract.
-
#all_whitelisted_configurations ⇒ Array<String>
Unique list of all configurations for which pods have been whitelisted.
-
#build_configurations ⇒ Hash{String => symbol}
A hash where the keys are the name of the build configurations and the values a symbol that represents their type (‘:debug` or `:release`).
-
#build_configurations=(hash) ⇒ Hash{String => Symbol}, void
Sets the build configurations for this target.
-
#exclusive? ⇒ Bool
Returns whether the target definition should inherit the dependencies of the parent.
-
#inheritance ⇒ String
The inheritance mode for this target definition.
-
#inheritance=(inheritance) ⇒ void
Sets the inheritance mode for this target definition.
-
#inhibit_all_warnings=(flag) ⇒ void
Sets whether the target definition should inhibit the warnings during compilation for all pods.
-
#inhibits_warnings_for_pod?(pod_name) ⇒ Bool
Whether the target definition should inhibit warnings for a single pod.
-
#matches_platform?(target_definition) ⇒ Boolean
Whether this target definition matches the platform of ‘target_definition`.
-
#name ⇒ String
The path of the project this target definition should link with.
-
#name=(name) ⇒ void
Sets the path of the user project this target definition should link with.
-
#platform ⇒ Platform
The platform of the target definition.
-
#pod_whitelisted_for_configuration?(pod_name, configuration_name) ⇒ Bool
Whether a specific pod should be linked to the target when building for a specific configuration.
-
#set_inhibit_warnings_for_pod(pod_name, should_inhibit) ⇒ void
Inhibits warnings for a specific pod during compilation.
-
#set_platform(name, target = nil) ⇒ void
Sets the platform of the target definition.
-
#set_platform!(name, target = nil) ⇒ void
Sets the platform of the target definition.
-
#store_pod(name, *requirements) ⇒ void
Stores the dependency for a Pod with the given name.
-
#store_podspec(options = nil) ⇒ void
Stores the podspec whose dependencies should be included by the target.
-
#swift_version ⇒ String
The Swift version that the target definition should use.
-
#swift_version=(version) ⇒ void
Sets the Swift version that the target definition should use.
-
#use_frameworks!(flag = true) ⇒ void
Sets whether the target definition should build a framework.
-
#user_project_path ⇒ String
The path of the project this target definition should link with.
-
#user_project_path=(path) ⇒ void
Sets the path of the user project this target definition should link with.
-
#uses_frameworks? ⇒ Bool
Whether the target definition should build a framework.
-
#whitelist_pod_for_configuration(pod_name, configuration_name) ⇒ void
Whitelists a pod for a specific configuration.
Representations collapse
-
.from_hash(hash, parent) ⇒ TargetDefinition
Configures a new target definition from the given hash.
-
#to_hash ⇒ Hash
The hash representation of the target definition.
Instance Method Summary collapse
-
#dependencies ⇒ Array<Dependency>
The list of the dependencies of the target definition including the inherited ones.
-
#empty? ⇒ Bool
Whether the target definition has at least one dependency, excluding inherited ones.
-
#initialize(name, parent, internal_hash = nil) ⇒ TargetDefinition
constructor
A new instance of TargetDefinition.
-
#inspect ⇒ String
A string representation suitable for debug.
-
#label ⇒ String
(also: #to_s)
The label of the target definition according to its name.
-
#non_inherited_dependencies ⇒ Array
The list of the dependencies of the target definition, excluding inherited ones.
-
#podfile ⇒ Podfile
The podfile that contains the specification for this target definition.
-
#recursive_children ⇒ Array<TargetDefinition>
The targets definition descending from this one.
-
#root ⇒ TargetDefinition
The root target definition.
-
#root? ⇒ Bool
Whether the target definition is root.
-
#targets_to_inherit_search_paths ⇒ Array<TargetDefinition>
The targets from which this target definition should inherit only search paths.
Constructor Details
#initialize(name, parent, internal_hash = nil) ⇒ TargetDefinition
Returns a new instance of TargetDefinition.
22 23 24 25 26 27 28 29 30 31 |
# File 'lib/cocoapods-core/podfile/target_definition.rb', line 22 def initialize(name, parent, internal_hash = nil) @internal_hash = internal_hash || {} @parent = parent @children = [] @label = nil self.name ||= name if parent.is_a?(TargetDefinition) parent.children << self end end |
Instance Attribute Details
#children ⇒ Array<TargetDefinition>
Returns the children target definitions.
35 36 37 |
# File 'lib/cocoapods-core/podfile/target_definition.rb', line 35 def children @children end |
#parent ⇒ TargetDefinition, Podfile (readonly)
Returns the parent target definition or the Podfile if the receiver is root.
14 15 16 |
# File 'lib/cocoapods-core/podfile/target_definition.rb', line 14 def parent @parent end |
Class Method Details
.from_hash(hash, parent) ⇒ TargetDefinition
Configures a new target definition from the given hash.
623 624 625 626 627 628 629 630 631 |
# File 'lib/cocoapods-core/podfile/target_definition.rb', line 623 def self.from_hash(hash, parent) internal_hash = hash.dup children_hashes = internal_hash.delete('children') || [] definition = TargetDefinition.new(nil, parent, internal_hash) children_hashes.each do |child_hash| TargetDefinition.from_hash(child_hash, definition) end definition end |
Instance Method Details
#abstract=(abstract) ⇒ void
This method returns an undefined value.
Sets whether this target definition is abstract.
168 169 170 |
# File 'lib/cocoapods-core/podfile/target_definition.rb', line 168 def abstract=(abstract) set_hash_value('abstract', abstract) end |
#abstract? ⇒ Boolean
Returns whether this target definition is abstract.
157 158 159 |
# File 'lib/cocoapods-core/podfile/target_definition.rb', line 157 def abstract? get_hash_value('abstract', root?) end |
#all_whitelisted_configurations ⇒ Array<String>
Returns unique list of all configurations for which pods have been whitelisted.
445 446 447 448 |
# File 'lib/cocoapods-core/podfile/target_definition.rb', line 445 def all_whitelisted_configurations parent_configurations = (root? || inheritance == 'none') ? [] : parent.all_whitelisted_configurations (configuration_pod_whitelist.keys + parent_configurations).uniq end |
#build_configurations ⇒ Hash{String => symbol}
Returns A hash where the keys are the name of the build configurations and the values a symbol that represents their type (‘:debug` or `:release`).
269 270 271 272 273 274 275 |
# File 'lib/cocoapods-core/podfile/target_definition.rb', line 269 def build_configurations if root? get_hash_value('build_configurations') else get_hash_value('build_configurations') || parent.build_configurations end end |
#build_configurations=(hash) ⇒ Hash{String => Symbol}, void
Sets the build configurations for this target.
285 286 287 |
# File 'lib/cocoapods-core/podfile/target_definition.rb', line 285 def build_configurations=(hash) set_hash_value('build_configurations', hash) unless hash.empty? end |
#dependencies ⇒ Array<Dependency>
Returns The list of the dependencies of the target definition including the inherited ones.
70 71 72 73 74 75 76 |
# File 'lib/cocoapods-core/podfile/target_definition.rb', line 70 def dependencies if exclusive? non_inherited_dependencies else non_inherited_dependencies + parent.dependencies end end |
#empty? ⇒ Bool
Returns Whether the target definition has at least one dependency, excluding inherited ones.
102 103 104 |
# File 'lib/cocoapods-core/podfile/target_definition.rb', line 102 def empty? non_inherited_dependencies.empty? end |
#exclusive? ⇒ Bool
A target is always ‘exclusive` if it is root.
A target is always ‘exclusive` if the `platform` does not match the parent’s ‘platform`.
Returns whether the target definition should inherit the dependencies of the parent.
216 217 218 219 220 221 222 |
# File 'lib/cocoapods-core/podfile/target_definition.rb', line 216 def exclusive? if root? true else !matches_platform?(parent) || (inheritance != 'complete') end end |
#inheritance ⇒ String
Returns the inheritance mode for this target definition.
176 177 178 |
# File 'lib/cocoapods-core/podfile/target_definition.rb', line 176 def inheritance get_hash_value('inheritance', 'complete') end |
#inheritance=(inheritance) ⇒ void
This method returns an undefined value.
Sets the inheritance mode for this target definition.
190 191 192 193 194 195 196 197 198 199 200 201 202 |
# File 'lib/cocoapods-core/podfile/target_definition.rb', line 190 def inheritance=(inheritance) inheritance = inheritance.to_s unless %w(none search_paths complete).include?(inheritance) raise Informative, "Unrecognized inheritance option `#{inheritance}` specified for target `#{name}`." end if root? raise Informative, 'Cannot set inheritance for the root target definition.' end if abstract? raise Informative, 'Cannot set inheritance for abstract target definition.' end set_hash_value('inheritance', inheritance) end |
#inhibit_all_warnings=(flag) ⇒ void
This method returns an undefined value.
Sets whether the target definition should inhibit the warnings during compilation for all pods.
315 316 317 |
# File 'lib/cocoapods-core/podfile/target_definition.rb', line 315 def inhibit_all_warnings=(flag) raw_inhibit_warnings_hash['all'] = flag end |
#inhibits_warnings_for_pod?(pod_name) ⇒ Bool
Whether the target definition should inhibit warnings for a single pod. If inhibit_all_warnings is true, it will return true for any asked pod.
295 296 297 298 299 300 301 302 303 304 305 |
# File 'lib/cocoapods-core/podfile/target_definition.rb', line 295 def inhibits_warnings_for_pod?(pod_name) if Array(inhibit_warnings_hash['not_for_pods']).include?(pod_name) false elsif inhibit_warnings_hash['all'] true elsif !root? && parent.inhibits_warnings_for_pod?(pod_name) true else Array(inhibit_warnings_hash['for_pods']).include? pod_name end end |
#inspect ⇒ String
Returns A string representation suitable for debug.
123 124 125 |
# File 'lib/cocoapods-core/podfile/target_definition.rb', line 123 def inspect "#<#{self.class} label=#{label}>" end |
#label ⇒ String Also known as: to_s
Returns The label of the target definition according to its name.
109 110 111 112 113 114 115 116 117 |
# File 'lib/cocoapods-core/podfile/target_definition.rb', line 109 def label @label ||= if root? && name == 'Pods' 'Pods' elsif exclusive? || parent.nil? "Pods-#{name}" else "#{parent.label}-#{name}" end end |
#matches_platform?(target_definition) ⇒ Boolean
Returns whether this target definition matches the platform of ‘target_definition`.
231 232 233 234 235 |
# File 'lib/cocoapods-core/podfile/target_definition.rb', line 231 def matches_platform?(target_definition) return false unless target_definition return true if target_definition.platform == platform !target_definition.platform && target_definition.abstract? end |
#name ⇒ String
Returns the path of the project this target definition should link with.
136 137 138 |
# File 'lib/cocoapods-core/podfile/target_definition.rb', line 136 def name get_hash_value('name') end |
#name=(name) ⇒ void
This method returns an undefined value.
Sets the path of the user project this target definition should link with.
148 149 150 151 |
# File 'lib/cocoapods-core/podfile/target_definition.rb', line 148 def name=(name) @label = nil set_hash_value('name', name) end |
#non_inherited_dependencies ⇒ Array
Returns The list of the dependencies of the target definition, excluding inherited ones.
95 96 97 |
# File 'lib/cocoapods-core/podfile/target_definition.rb', line 95 def non_inherited_dependencies pod_dependencies.concat(podspec_dependencies) end |
#platform ⇒ Platform
If no deployment target has been specified a default value is provided.
Returns the platform of the target definition.
459 460 461 462 463 464 465 466 467 468 469 470 471 472 473 |
# File 'lib/cocoapods-core/podfile/target_definition.rb', line 459 def platform name_or_hash = get_hash_value('platform') if name_or_hash if name_or_hash.is_a?(Hash) name = name_or_hash.keys.first.to_sym target = name_or_hash.values.first else name = name_or_hash.to_sym end target ||= PLATFORM_DEFAULTS[name] Platform.new(name, target) else parent.platform unless root? end end |
#pod_whitelisted_for_configuration?(pod_name, configuration_name) ⇒ Bool
Build configurations are case compared case-insensitively in CocoaPods.
Whether a specific pod should be linked to the target when building for a specific configuration. If a pod has not been explicitly whitelisted for any configuration, it is implicitly whitelisted.
408 409 410 411 412 413 414 415 416 417 418 419 |
# File 'lib/cocoapods-core/podfile/target_definition.rb', line 408 def pod_whitelisted_for_configuration?(pod_name, configuration_name) found = false configuration_pod_whitelist.each do |configuration, pods| if pods.include?(pod_name) found = true if configuration.downcase == configuration_name.to_s.downcase return true end end end !found && (root? || (inheritance != 'none' && parent.pod_whitelisted_for_configuration?(pod_name, configuration_name))) end |
#podfile ⇒ Podfile
Returns The podfile that contains the specification for this target definition.
63 64 65 |
# File 'lib/cocoapods-core/podfile/target_definition.rb', line 63 def podfile root.parent end |
#recursive_children ⇒ Array<TargetDefinition>
Returns the targets definition descending from this one.
40 41 42 |
# File 'lib/cocoapods-core/podfile/target_definition.rb', line 40 def recursive_children (children + children.map(&:recursive_children)).flatten end |
#root ⇒ TargetDefinition
Returns The root target definition.
52 53 54 55 56 57 58 |
# File 'lib/cocoapods-core/podfile/target_definition.rb', line 52 def root if root? self else parent.root end end |
#root? ⇒ Bool
Returns Whether the target definition is root.
46 47 48 |
# File 'lib/cocoapods-core/podfile/target_definition.rb', line 46 def root? parent.is_a?(Podfile) || parent.nil? end |
#set_inhibit_warnings_for_pod(pod_name, should_inhibit) ⇒ void
This method returns an undefined value.
Inhibits warnings for a specific pod during compilation.
329 330 331 332 333 334 335 336 337 338 339 340 341 342 |
# File 'lib/cocoapods-core/podfile/target_definition.rb', line 329 def set_inhibit_warnings_for_pod(pod_name, should_inhibit) hash_key = case should_inhibit when true 'for_pods' when false 'not_for_pods' when nil return else raise ArgumentError, "Got `#{should_inhibit.inspect}`, should be a boolean" end raw_inhibit_warnings_hash[hash_key] ||= [] raw_inhibit_warnings_hash[hash_key] << pod_name end |
#set_platform(name, target = nil) ⇒ void
This method returns an undefined value.
Sets the platform of the target definition.
487 488 489 490 491 492 493 494 495 496 497 498 499 500 |
# File 'lib/cocoapods-core/podfile/target_definition.rb', line 487 def set_platform(name, target = nil) name = :osx if name == :macos unless [:ios, :osx, :tvos, :watchos].include?(name) raise StandardError, "Unsupported platform `#{name}`. Platform " \ 'must be `:ios`, `:osx`, `:tvos`, or `:watchos`.' end if target value = { name.to_s => target } else value = name.to_s end set_hash_value('platform', value) end |
#set_platform!(name, target = nil) ⇒ void
This method returns an undefined value.
Sets the platform of the target definition.
510 511 512 513 |
# File 'lib/cocoapods-core/podfile/target_definition.rb', line 510 def set_platform!(name, target = nil) raise StandardError, "The target `#{label}` already has a platform set." if get_hash_value('platform') set_platform(name, target) end |
#store_pod(name, *requirements) ⇒ void
This needs urgently a rename.
The dependencies are stored as an array. To simplify the YAML representation if they have requirements they are represented as a Hash, otherwise only the String of the name is added to the array.
This method returns an undefined value.
Stores the dependency for a Pod with the given name.
534 535 536 537 538 539 540 541 542 543 544 545 546 547 |
# File 'lib/cocoapods-core/podfile/target_definition.rb', line 534 def store_pod(name, *requirements) return if parse_subspecs(name, requirements) # This parse method must be called first parse_inhibit_warnings(name, requirements) parse_configuration_whitelist(name, requirements) if requirements && !requirements.empty? pod = { name => requirements } else pod = name end get_hash_value('dependencies', []) << pod nil end |
#store_podspec(options = nil) ⇒ void
This urgently needs a rename.
The storage of this information is optimized for YAML readability.
This method returns an undefined value.
Stores the podspec whose dependencies should be included by the target.
566 567 568 569 570 571 572 573 574 575 576 |
# File 'lib/cocoapods-core/podfile/target_definition.rb', line 566 def store_podspec( = nil) if unless .keys.all? { |key| [:name, :path].include?(key) } raise StandardError, 'Unrecognized options for the podspec ' \ "method `#{}`" end get_hash_value('podspecs', []) << else get_hash_value('podspecs', []) << { :autodetect => true } end end |
#swift_version ⇒ String
Returns the Swift version that the target definition should use.
384 385 386 |
# File 'lib/cocoapods-core/podfile/target_definition.rb', line 384 def swift_version get_hash_value('swift_version') end |
#swift_version=(version) ⇒ void
This method returns an undefined value.
Sets the Swift version that the target definition should use.
377 378 379 |
# File 'lib/cocoapods-core/podfile/target_definition.rb', line 377 def swift_version=(version) set_hash_value('swift_version', version) end |
#targets_to_inherit_search_paths ⇒ Array<TargetDefinition>
Returns the targets from which this target definition should inherit only search paths.
81 82 83 84 85 86 87 88 89 90 |
# File 'lib/cocoapods-core/podfile/target_definition.rb', line 81 def targets_to_inherit_search_paths can_inherit = !root? && matches_platform?(parent) if inheritance == 'search_paths' # && can_inherit parent.targets_to_inherit_search_paths << parent elsif can_inherit parent.targets_to_inherit_search_paths else [] end end |
#to_hash ⇒ Hash
Returns The hash representation of the target definition.
608 609 610 611 612 613 614 |
# File 'lib/cocoapods-core/podfile/target_definition.rb', line 608 def to_hash hash = internal_hash.dup unless children.empty? hash['children'] = children.map(&:to_hash) end hash end |
#use_frameworks!(flag = true) ⇒ void
This method returns an undefined value.
Sets whether the target definition should build a framework.
353 354 355 |
# File 'lib/cocoapods-core/podfile/target_definition.rb', line 353 def use_frameworks!(flag = true) set_hash_value('uses_frameworks', flag) end |
#user_project_path ⇒ String
Returns the path of the project this target definition should link with.
242 243 244 245 246 247 248 249 |
# File 'lib/cocoapods-core/podfile/target_definition.rb', line 242 def user_project_path path = get_hash_value('user_project_path') if path Pathname(path).sub_ext('.xcodeproj').to_path else parent.user_project_path unless root? end end |
#user_project_path=(path) ⇒ void
This method returns an undefined value.
Sets the path of the user project this target definition should link with.
259 260 261 |
# File 'lib/cocoapods-core/podfile/target_definition.rb', line 259 def user_project_path=(path) set_hash_value('user_project_path', path) end |
#uses_frameworks? ⇒ Bool
Returns whether the target definition should build a framework.
360 361 362 363 364 365 366 |
# File 'lib/cocoapods-core/podfile/target_definition.rb', line 360 def uses_frameworks? if internal_hash['uses_frameworks'].nil? root? ? false : parent.uses_frameworks? else get_hash_value('uses_frameworks') end end |
#whitelist_pod_for_configuration(pod_name, configuration_name) ⇒ void
Build configurations are stored as a String.
This method returns an undefined value.
Whitelists a pod for a specific configuration. If a pod is whitelisted for any configuration, it will only be linked with the target in the configuration(s) specified. If it is not whitelisted for any configuration, it is implicitly included in all configurations.
436 437 438 439 440 |
# File 'lib/cocoapods-core/podfile/target_definition.rb', line 436 def whitelist_pod_for_configuration(pod_name, configuration_name) configuration_name = configuration_name.to_s list = raw_configuration_pod_whitelist[configuration_name] ||= [] list << pod_name end |