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( installation_method 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 ⇒ Array<TargetDefinition>
All target definitions in the podfile.
-
#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.
-
#installation_method ⇒ (String,Hash)
The installation strategy and installation options to be used during installation.
-
#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.
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
#abstract!, #abstract_target, #generate_bridge_support!, #inherit!, #inhibit_all_warnings!, #install!, #platform, #plugin, #pod, #podspec, #post_install, #pre_install, #project, #set_arc_compatibility_flag!, #source, #target, #use_frameworks!, #workspace
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.abstract = 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.
85 86 87 |
# File 'lib/cocoapods-core/podfile.rb', line 85 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.
245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 |
# File 'lib/cocoapods-core/podfile.rb', line 245 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.
333 334 335 336 337 338 339 340 341 342 |
# File 'lib/cocoapods-core/podfile.rb', line 333 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.
271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 |
# File 'lib/cocoapods-core/podfile.rb', line 271 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, contents) end # rubocop:enable Lint/RescueException end podfile end |
.from_yaml(path) ⇒ Podfile
Configures a new Podfile from the given YAML representation.
313 314 315 316 317 318 319 320 321 |
# File 'lib/cocoapods-core/podfile.rb', line 313 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
226 227 228 229 230 231 232 233 |
# File 'lib/cocoapods-core/podfile.rb', line 226 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.
90 91 92 |
# File 'lib/cocoapods-core/podfile.rb', line 90 def dependencies target_definition_list.map(&:dependencies).flatten.uniq end |
#generate_bridge_support? ⇒ Bool
Returns whether the podfile should generate a BridgeSupport metadata document.
128 129 130 |
# File 'lib/cocoapods-core/podfile.rb', line 128 def generate_bridge_support? get_hash_value('generate_bridge_support') end |
#installation_method ⇒ (String,Hash)
Returns the installation strategy and installation options to be used during installation.
142 143 144 145 |
# File 'lib/cocoapods-core/podfile.rb', line 142 def installation_method get_hash_value('installation_method', 'name' => 'cocoapods', 'options' => {}). values_at('name', 'options') end |
#plugins ⇒ Hash<String, Hash>
Returns The plugins, keyed by name.
108 109 110 |
# File 'lib/cocoapods-core/podfile.rb', line 108 def plugins get_hash_value('plugins') || {} end |
#post_install!(installer) ⇒ Bool
Calls the post install callback if defined.
178 179 180 181 182 183 184 185 |
# File 'lib/cocoapods-core/podfile.rb', line 178 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.
161 162 163 164 165 166 167 168 |
# File 'lib/cocoapods-core/podfile.rb', line 161 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.
135 136 137 |
# File 'lib/cocoapods-core/podfile.rb', line 135 def set_arc_compatibility_flag? get_hash_value('set_arc_compatibility_flag') end |
#sources ⇒ Array<String>
Returns The name of the sources.
102 103 104 |
# File 'lib/cocoapods-core/podfile.rb', line 102 def sources get_hash_value('sources') || [] end |
#target_definition_list ⇒ Array<TargetDefinition>
Returns all target definitions in the podfile.
79 80 81 |
# File 'lib/cocoapods-core/podfile.rb', line 79 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.
207 208 209 210 211 212 |
# File 'lib/cocoapods-core/podfile.rb', line 207 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.
216 217 218 219 |
# File 'lib/cocoapods-core/podfile.rb', line 216 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.
114 115 116 117 118 119 120 121 122 123 |
# File 'lib/cocoapods-core/podfile.rb', line 114 def workspace_path path = get_hash_value('workspace') if path if File.extname(path) == '.xcworkspace' path else "#{path}.xcworkspace" end end end |