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.

Parameters:

  • options (Hash) (defaults to: {})

    the options to parse.

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>

Returns the names of all known installation options.

Returns:

  • (Array<Symbol>)

    the names of all known installation options.


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

def self.all_options
  defaults.keys
end

.defaultsHash<Symbol,Object>

Returns all known installation options and their default values.

Returns:

  • (Hash<Symbol,Object>)

    all known installation options and their default values.


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.

Parameters:

  • podfile (Podfile)

    the podfile to parse installation options from.

Returns:

  • (Self)

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.

Parameters:

  • name (#to_s)

    the name of the option.

  • default

    the default value for the option.

  • boolean (Boolean)

    whether the option has a boolean value.

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

Returns:

  • (Boolean)

    the clean option for installation.

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`

Returns:

  • (Boolean)

    the deduplicate_targets option for installation.


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

Returns:

  • (Boolean)

    the deterministic_uuids option for installation.

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)

Returns:

  • (Boolean)

    the disable_input_output_paths option for installation.

See Also:


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`.

Returns:

  • (Boolean)

    the generate_multiple_pod_projects option for installation.


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.

Returns:

  • (Boolean)

    the incremental_installation option for 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.

Returns:

  • (Boolean)

    the integrate_targets option for installation.


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

Returns:

  • (Boolean)

    the lock_pod_sources option for installation.


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.

Returns:

  • (Boolean)

    the preserve_pod_file_structure option for installation.


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.

Returns:

  • (Boolean)

    the share_schemes_for_development_pods option for installation.


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.

Returns:

  • (Boolean)

    the skip_pods_project_generation option for installation.


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

option :skip_pods_project_generation, false

#to_h(include_defaults: true) ⇒ Hash

Returns the options, keyed by option name.

Parameters:

  • include_defaults (Boolean)

    whether values that match the default for their option should be included. Defaults to `true`.

Returns:

  • (Hash)

    the options, keyed by option name.


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

Returns:

  • (Boolean)

    the warn_for_multiple_pod_sources option for installation.


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

option :warn_for_multiple_pod_sources, true