Class: Pod::Installer::InstallationOptions

Inherits:
Object
  • Object
show all
Defined in:
lib/cocoapods/installer/installation_options.rb

Overview

Represents the installation options the user can customize via a `Podfile`.

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(options = {}) ⇒ InstallationOptions

Initializes the installation options with a hash of options from a Podfile.

Raises:

  • (Informative)

    if `options` contains any unknown keys.


71
72
73
74
75
76
77
78
79
# File 'lib/cocoapods/installer/installation_options.rb', line 71

def initialize(options = {})
  options = ActiveSupport::HashWithIndifferentAccess.new(options)
  unknown_keys = options.keys - self.class.all_options.map(&:to_s)
  raise Informative, "Unknown installation options: #{unknown_keys.to_sentence}." unless unknown_keys.empty?
  self.class.defaults.each do |key, default|
    value = options.fetch(key, default)
    send("#{key}=", value)
  end
end

Class Method Details

.all_optionsArray<Symbol>


60
61
62
# File 'lib/cocoapods/installer/installation_options.rb', line 60

def self.all_options
  defaults.keys
end

.defaultsHash<Symbol,Object>


54
55
56
# File 'lib/cocoapods/installer/installation_options.rb', line 54

def self.defaults
  @defaults ||= {}
end

.from_podfile(podfile) ⇒ Self

Parses installation options from a podfile.

Raises:

  • (Informative)

    if `podfile` does not specify a `CocoaPods` install.


19
20
21
22
23
24
25
# File 'lib/cocoapods/installer/installation_options.rb', line 19

def self.from_podfile(podfile)
  name, options = podfile.installation_method
  unless name.downcase == 'cocoapods'
    raise Informative, "Currently need to specify a `cocoapods` install, you chose `#{name}`."
  end
  new(options)
end

.option(name, default, boolean: true) ⇒ void

This method returns an undefined value.

Defines a new installation option.

Raises:

  • (ArgumentError)

43
44
45
46
47
48
49
# File 'lib/cocoapods/installer/installation_options.rb', line 43

def self.option(name, default, boolean: true)
  name = name.to_s
  raise ArgumentError, "The `#{name}` option is already defined" if defaults.key?(name)
  defaults[name] = default
  attr_accessor name
  alias_method "#{name}?", name if boolean
end

Instance Method Details

#==(other) ⇒ Object Also known as: eql


94
95
96
# File 'lib/cocoapods/installer/installation_options.rb', line 94

def ==(other)
  other.is_a?(self.class) && to_h == other.to_h
end

#cleanBoolean

Note:

this option defaults to true.

Whether to clean the sources of the pods during installation

Cleaning removes any files not used by the pod as specified by the podspec and the platforms that the project supports

See Also:

  • Pod::Installer::InstallationOptions.{PodSourceInstaller{PodSourceInstaller#clean!}

111
# File 'lib/cocoapods/installer/installation_options.rb', line 111

option :clean, true

#deduplicate_targetsBoolean

Note:

this option defaults to true.

Whether to deduplicate pod targets

Target deduplication adds suffixes to pod targets for the cases where a pod is included in multiple targets that have different requirements. For example, a pod named 'MyPod' with a subspec 'SubA' that is included in two targets as follows:

target 'MyTargetA' do
  pod 'MyPod/SubA'
end

target 'MyTargetB' do
  pod 'MyPod'
end

will result in two Pod targets: `MyPod` and `MyPod-SubA`


129
# File 'lib/cocoapods/installer/installation_options.rb', line 129

option :deduplicate_targets, true

#deterministic_uuidsBoolean

Note:

this option defaults to true.

Whether to generate deterministic UUIDs when creating the Pods project

See Also:

  • Pod::Installer::InstallationOptions.{Xcodeproj{Xcodeproj#generate_uuid}

135
# File 'lib/cocoapods/installer/installation_options.rb', line 135

option :deterministic_uuids, true

#disable_input_output_pathsBoolean

Note:

this option defaults to false.

Whether to disable the input & output paths of the CocoaPods script phases (Copy Frameworks & Copy Resources)


166
# File 'lib/cocoapods/installer/installation_options.rb', line 166

option :disable_input_output_paths, false

#generate_multiple_pod_projectsBoolean

Note:

this option defaults to false.

Whether to generate a project per pod target. Instead of creating 1 `Pods.xcodeproj`, this option will generate a project for every pod target that will be nested under the `Pods.xcodeproj`.


178
# File 'lib/cocoapods/installer/installation_options.rb', line 178

option :generate_multiple_pod_projects, false

#hashObject


100
101
102
# File 'lib/cocoapods/installer/installation_options.rb', line 100

def hash
  to_h.hash
end

#incremental_installationBoolean

Note:

this option defaults to false.

Whether to enable only regenerating targets and their associate projects that have changed since the previous installation.


183
# File 'lib/cocoapods/installer/installation_options.rb', line 183

option :incremental_installation, false

#integrate_targetsBoolean

Note:

this option defaults to true.

Whether to integrate the installed pods into the user project

If set to false, Pods will be downloaded and installed to the `Pods/` directory but they will not be integrated into your project.


142
# File 'lib/cocoapods/installer/installation_options.rb', line 142

option :integrate_targets, true

#lock_pod_sourcesBoolean

Note:

There is a performance penalty to locking the pods during installation. If this is significantly impacting the duration of `pod install` for your project, you can try setting this to `false`

Note:

this option defaults to true.

Whether to lock the source files of pods. Xcode will prompt to unlock the files when attempting to modify their contents


150
# File 'lib/cocoapods/installer/installation_options.rb', line 150

option :lock_pod_sources, true

#preserve_pod_file_structureBoolean

Note:

this option defaults to false.

Whether to preserve the file structure of all Pods, including externally sourced pods.

By default, the file structure of Pod sources is preserved only for development pods. Setting `:preserve_pod_file_structure` to `true` will always preserve the file structure.


173
# File 'lib/cocoapods/installer/installation_options.rb', line 173

option :preserve_pod_file_structure, false

#share_schemes_for_development_podsBoolean

Note:

this option defaults to false.

Whether to share Xcode schemes for development pods.

Schemes for development pods are created automatically but are not shared by default.


160
# File 'lib/cocoapods/installer/installation_options.rb', line 160

option :share_schemes_for_development_pods, false

#skip_pods_project_generationBoolean

Note:

this option defaults to false.

Whether to skip generating the `Pods.xcodeproj` and perform only dependency resolution and downloading.


187
# File 'lib/cocoapods/installer/installation_options.rb', line 187

option :skip_pods_project_generation, false

#to_h(include_defaults: true) ⇒ Hash


86
87
88
89
90
91
92
# File 'lib/cocoapods/installer/installation_options.rb', line 86

def to_h(include_defaults: true)
  self.class.defaults.reduce(ActiveSupport::HashWithIndifferentAccess.new) do |hash, (option, default)|
    value = send(option)
    hash[option] = value if include_defaults || value != default
    hash
  end
end

#warn_for_multiple_pod_sourcesBoolean

Note:

this option defaults to true.

Whether to emit a warning when multiple sources contain a Pod with the same name and version


154
# File 'lib/cocoapods/installer/installation_options.rb', line 154

option :warn_for_multiple_pod_sources, true