Class: Pod::Podfile
- Inherits:
-
Object
- Object
- Pod::Podfile
- Includes:
- DSL
- Defined in:
- lib/cocoapods-core/podfile.rb,
lib/cocoapods-core/podfile/dsl.rb,
lib/cocoapods-core/podfile/target_definition.rb
Overview
The Podfile is a specification that describes the dependencies of the targets of an Xcode project.
It supports its own DSL and generally is stored in files named ‘CocoaPods.podfile` or `Podfile`.
The Podfile creates a hierarchy of target definitions that that store the information of necessary to generate the CocoaPods libraries.
Defined Under Namespace
Modules: DSL Classes: StandardError, TargetDefinition
Representations collapse
- HASH_KEYS =
Returns The keys used by the hash representation of the Podfile.
%w( workspace sources plugins set_arc_compatibility_flag generate_bridge_support target_definitions ).freeze
Working with a podfile collapse
-
#root_target_definitions ⇒ Array<TargetDefinition>
The root target definition.
Instance Attribute Summary collapse
-
#defined_in_file ⇒ Pathname
The path where the podfile was loaded from.
Working with a podfile collapse
-
#dependencies ⇒ Array<Dependency>
The dependencies of the all the target definitions.
- #target_definition_list ⇒ Object
-
#target_definitions ⇒ Hash{Symbol,String => TargetDefinition}
The target definitions of the podfile stored by their name.
Attributes collapse
-
#generate_bridge_support? ⇒ Bool
Whether the podfile should generate a BridgeSupport metadata document.
-
#plugins ⇒ Hash<String, Hash>
The plugins, keyed by name.
-
#set_arc_compatibility_flag? ⇒ Bool
Whether the -fobjc-arc flag should be added to the OTHER_LD_FLAGS.
-
#sources ⇒ Array<String>
The name of the sources.
-
#workspace_path ⇒ String
The path of the workspace if specified by the user.
Hooks collapse
-
#post_install!(installer) ⇒ Bool
Calls the post install callback if defined.
-
#pre_install!(installer) ⇒ Bool
Calls the pre install callback if defined.
Representations collapse
- #checksum ⇒ String, Nil
-
#to_hash ⇒ Hash
The hash representation of the Podfile.
-
#to_yaml ⇒ String
The YAML representation of the Podfile.
Class methods collapse
-
.from_file(path) ⇒ Podfile
Initializes a podfile from the file with the given path.
-
.from_hash(hash, path = nil) ⇒ Podfile
Configures a new Podfile from the given hash.
-
.from_ruby(path, contents = nil) ⇒ Podfile
Configures a new Podfile from the given ruby string.
-
.from_yaml(path) ⇒ Podfile
Configures a new Podfile from the given YAML representation.
Deprecations collapse
-
#dependency(name = nil, *requirements, &block) ⇒ Object
deprecated
Deprecated.
Deprecated in favour of the more succinct DSL#pod. Remove for CocoaPods 1.0.
Instance Method Summary collapse
-
#initialize(defined_in_file = nil, internal_hash = {}, &block) ⇒ Podfile
constructor
A new instance of Podfile.
-
#to_s ⇒ String
A string useful to represent the Podfile in a message presented to the user.
Methods included from DSL
#generate_bridge_support!, #inhibit_all_warnings!, #link_with, #platform, #plugin, #pod, #podspec, #post_install, #pre_install, #set_arc_compatibility_flag!, #source, #target, #use_frameworks!, #workspace, #xcodeproj
Constructor Details
#initialize(defined_in_file = nil, internal_hash = {}, &block) ⇒ Podfile
Returns a new instance of Podfile.
43 44 45 46 47 48 49 50 51 52 53 54 55 |
# File 'lib/cocoapods-core/podfile.rb', line 43 def initialize(defined_in_file = nil, internal_hash = {}, &block) self.defined_in_file = defined_in_file @internal_hash = internal_hash if block default_target_def = TargetDefinition.new('Pods', self) default_target_def.link_with_first_target = true @root_target_definitions = [default_target_def] @current_target_definition = default_target_def instance_eval(&block) else @root_target_definitions = [] end end |
Instance Attribute Details
#defined_in_file ⇒ Pathname
Returns the path where the podfile was loaded from. It is nil if the podfile was generated programmatically.
28 29 30 |
# File 'lib/cocoapods-core/podfile.rb', line 28 def defined_in_file @defined_in_file end |
#root_target_definitions ⇒ Array<TargetDefinition>
Returns The root target definition.
83 84 85 |
# File 'lib/cocoapods-core/podfile.rb', line 83 def root_target_definitions @root_target_definitions end |
Class Method Details
.from_file(path) ⇒ Podfile
Initializes a podfile from the file with the given path.
234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 |
# File 'lib/cocoapods-core/podfile.rb', line 234 def self.from_file(path) path = Pathname.new(path) unless path.exist? raise Informative, "No Podfile exists at path `#{path}`." end case path.extname when '', '.podfile' Podfile.from_ruby(path) when '.yaml' Podfile.from_yaml(path) else raise Informative, "Unsupported Podfile format `#{path}`." end end |
.from_hash(hash, path = nil) ⇒ Podfile
Configures a new Podfile from the given hash.
322 323 324 325 326 327 328 329 330 331 |
# File 'lib/cocoapods-core/podfile.rb', line 322 def self.from_hash(hash, path = nil) internal_hash = hash.dup target_definitions = internal_hash.delete('target_definitions') || [] podfile = Podfile.new(path, internal_hash) target_definitions.each do |definition_hash| definition = TargetDefinition.from_hash(definition_hash, podfile) podfile.root_target_definitions << definition end podfile end |
.from_ruby(path, contents = nil) ⇒ Podfile
Configures a new Podfile from the given ruby string.
260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 |
# File 'lib/cocoapods-core/podfile.rb', line 260 def self.from_ruby(path, contents = nil) contents ||= File.open(path, 'r:utf-8', &:read) # Work around for Rubinius incomplete encoding in 1.9 mode if contents.respond_to?(:encoding) && contents.encoding.name != 'UTF-8' contents.encode!('UTF-8') end if contents.tr!('“”‘’‛', %(""''')) # Changes have been made CoreUI.warn "Your #{path.basename} has had smart quotes sanitised. " \ 'To avoid issues in the future, you should not use ' \ 'TextEdit for editing it. If you are not using TextEdit, ' \ 'you should turn off smart quotes in your editor of choice.' end podfile = Podfile.new(path) do # rubocop:disable Lint/RescueException begin # rubocop:disable Eval eval(contents, nil, path.to_s) # rubocop:enable Eval rescue Exception => e = "Invalid `#{path.basename}` file: #{e.}" raise DSLError.new(, path, e.backtrace, contents) end # rubocop:enable Lint/RescueException end podfile end |
.from_yaml(path) ⇒ Podfile
Configures a new Podfile from the given YAML representation.
302 303 304 305 306 307 308 309 310 |
# File 'lib/cocoapods-core/podfile.rb', line 302 def self.from_yaml(path) string = File.open(path, 'r:utf-8', &:read) # Work around for Rubinius incomplete encoding in 1.9 mode if string.respond_to?(:encoding) && string.encoding.name != 'UTF-8' string.encode!('UTF-8') end hash = YAMLHelper.load_string(string) from_hash(hash, path) end |
Instance Method Details
#checksum ⇒ String, Nil
215 216 217 218 219 220 221 222 |
# File 'lib/cocoapods-core/podfile.rb', line 215 def checksum unless defined_in_file.nil? require 'digest' checksum = Digest::SHA1.hexdigest(File.read(defined_in_file)) checksum = checksum.encode('UTF-8') if checksum.respond_to?(:encode) checksum end end |
#dependencies ⇒ Array<Dependency>
Returns the dependencies of the all the target definitions.
88 89 90 |
# File 'lib/cocoapods-core/podfile.rb', line 88 def dependencies target_definition_list.map(&:dependencies).flatten.uniq end |
#dependency(name = nil, *requirements, &block) ⇒ Object
Deprecated in favour of the more succinct Pod::Podfile::DSL#pod. Remove for CocoaPods 1.0.
391 392 393 394 |
# File 'lib/cocoapods-core/podfile.rb', line 391 def dependency(name = nil, *requirements, &block) CoreUI.warn "[DEPRECATED] `dependency' is deprecated (use `pod')" pod(name, *requirements, &block) end |
#generate_bridge_support? ⇒ Bool
Returns whether the podfile should generate a BridgeSupport metadata document.
126 127 128 |
# File 'lib/cocoapods-core/podfile.rb', line 126 def generate_bridge_support? get_hash_value('generate_bridge_support') end |
#plugins ⇒ Hash<String, Hash>
Returns The plugins, keyed by name.
106 107 108 |
# File 'lib/cocoapods-core/podfile.rb', line 106 def plugins get_hash_value('plugins') || {} end |
#post_install!(installer) ⇒ Bool
Calls the post install callback if defined.
168 169 170 171 172 173 174 175 |
# File 'lib/cocoapods-core/podfile.rb', line 168 def post_install!(installer) if @post_install_callback @post_install_callback.call(installer) true else false end end |
#pre_install!(installer) ⇒ Bool
Calls the pre install callback if defined.
151 152 153 154 155 156 157 158 |
# File 'lib/cocoapods-core/podfile.rb', line 151 def pre_install!(installer) if @pre_install_callback @pre_install_callback.call(installer) true else false end end |
#set_arc_compatibility_flag? ⇒ Bool
Returns whether the -fobjc-arc flag should be added to the OTHER_LD_FLAGS.
133 134 135 |
# File 'lib/cocoapods-core/podfile.rb', line 133 def set_arc_compatibility_flag? get_hash_value('set_arc_compatibility_flag') end |
#sources ⇒ Array<String>
Returns The name of the sources.
100 101 102 |
# File 'lib/cocoapods-core/podfile.rb', line 100 def sources get_hash_value('sources') || [] end |
#target_definition_list ⇒ Object
77 78 79 |
# File 'lib/cocoapods-core/podfile.rb', line 77 def target_definition_list root_target_definitions.map { |td| [td, td.recursive_children] }.flatten end |
#target_definitions ⇒ Hash{Symbol,String => TargetDefinition}
Returns the target definitions of the podfile stored by their name.
73 74 75 |
# File 'lib/cocoapods-core/podfile.rb', line 73 def target_definitions Hash[target_definition_list.map { |td| [td.name, td] }] end |
#to_hash ⇒ Hash
Returns The hash representation of the Podfile.
196 197 198 199 200 201 |
# File 'lib/cocoapods-core/podfile.rb', line 196 def to_hash hash = {} hash['target_definitions'] = root_target_definitions.map(&:to_hash) hash.merge!(internal_hash) hash end |
#to_s ⇒ String
Returns a string useful to represent the Podfile in a message presented to the user.
60 61 62 |
# File 'lib/cocoapods-core/podfile.rb', line 60 def to_s 'Podfile' end |
#to_yaml ⇒ String
Returns The YAML representation of the Podfile.
205 206 207 208 |
# File 'lib/cocoapods-core/podfile.rb', line 205 def to_yaml require 'cocoapods-core/yaml_helper' "---\n" << YAMLHelper.convert_hash(to_hash, HASH_KEYS) end |
#workspace_path ⇒ String
Returns the path of the workspace if specified by the user.
112 113 114 115 116 117 118 119 120 121 |
# File 'lib/cocoapods-core/podfile.rb', line 112 def workspace_path path = get_hash_value('workspace') if path if File.extname(path) == '.xcworkspace' path else "#{path}.xcworkspace" end end end |