Class: Pod::Generate::Configuration

Inherits:
Object
  • Object
show all
Defined in:
lib/cocoapods/generate/configuration.rb

Class Attribute Summary collapse

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Class Attribute Details

.optionsArray<Option> (readonly)

Returns all of the options available in the configuration.

Returns:

  • (Array<Option>)

    all of the options available in the configuration



11
12
13
# File 'lib/cocoapods/generate/configuration.rb', line 11

def options
  @options
end

Instance Attribute Details

#app_host_source_dir[String, Pathname] (readonly)

defaults to ‘nil`

Returns:

  • ([String, Pathname])

    A directory containing sources to use for the app host



163
164
165
166
167
# File 'lib/cocoapods/generate/configuration.rb', line 163

option :app_host_source_dir, [String, Pathname], 'nil',
'A directory containing sources to use for the app host',
'DIR',
->(dir) { 'not a directory' unless dir.directory? },
coerce_to_pathname

#auto_openBOOLEAN (readonly)

defaults to ‘false`

Returns:

  • (BOOLEAN)

    Whether to automatically open the generated workspaces



160
# File 'lib/cocoapods/generate/configuration.rb', line 160

option :auto_open, BOOLEAN, 'false', 'Whether to automatically open the generated workspaces', nil, nil, coerce_to_bool

#cleanBOOLEAN (readonly)

defaults to ‘false`

Returns:

  • (BOOLEAN)

    Whether to clean the generated directories before generating



161
# File 'lib/cocoapods/generate/configuration.rb', line 161

option :clean, BOOLEAN, 'false', 'Whether to clean the generated directories before generating', nil, nil, coerce_to_bool

#deterministic_uuidsBOOLEAN (readonly)

defaults to ‘(use_podfile && podfile) ? podfile.installation_options.deterministic_uuids : false`

Returns:

  • (BOOLEAN)

    Whether installation should use deterministic UUIDs for pods projects



206
# File 'lib/cocoapods/generate/configuration.rb', line 206

option :deterministic_uuids, BOOLEAN, '(use_podfile && podfile) ? podfile.installation_options.deterministic_uuids : false', 'Whether installation should use deterministic UUIDs for pods projects', nil, nil, coerce_to_bool

#disable_input_output_pathsBOOLEAN (readonly)

defaults to ‘(use_podfile && podfile) ? podfile.installation_options.disable_input_output_paths : false`

Returns:

  • (BOOLEAN)

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



207
# File 'lib/cocoapods/generate/configuration.rb', line 207

option :disable_input_output_paths, BOOLEAN, '(use_podfile && podfile) ? podfile.installation_options.disable_input_output_paths : false', 'Whether to disable the input & output paths of the CocoaPods script phases (Copy Frameworks & Copy Resources)', nil, nil, coerce_to_bool

#gen_directory[String, Pathname] (readonly)

defaults to ‘Pathname(“gen”).expand_path`

Returns:

  • ([String, Pathname])

    Path to generate workspaces in



159
# File 'lib/cocoapods/generate/configuration.rb', line 159

option :gen_directory, [String, Pathname], 'Pathname("gen").expand_path', 'Path to generate workspaces in', 'PATH', ->(path) { 'path is file' if path.file? }, coerce_to_pathname

#generate_multiple_pod_projectsBOOLEAN (readonly)

defaults to ‘false`

Returns:

  • (BOOLEAN)

    Whether to generate multiple Xcode projects



156
# File 'lib/cocoapods/generate/configuration.rb', line 156

option :generate_multiple_pod_projects, BOOLEAN, 'false', 'Whether to generate multiple Xcode projects', nil, nil, coerce_to_bool

#incremental_installationBOOLEAN (readonly)

defaults to ‘false`

Returns:

  • (BOOLEAN)

    Whether to use incremental installation



157
# File 'lib/cocoapods/generate/configuration.rb', line 157

option :incremental_installation, BOOLEAN, 'false', 'Whether to use incremental installation', nil, nil, coerce_to_bool

#local_sourcesnew (readonly)

defaults to ‘[]`

Returns:

  • (new)

    Paths from which to find local podspecs for transitive dependencies. Multiple local-sources must be comma-delimited.



189
190
191
192
193
194
# File 'lib/cocoapods/generate/configuration.rb', line 189

option :local_sources, ArrayOf.new(String),
[],
'Paths from which to find local podspecs for transitive dependencies. Multiple local-sources must be comma-delimited.',
'SOURCE1,SOURCE2',
->(_) { nil },
->(local_sources) { Array(local_sources).flat_map { |s| s.split(',') } }

#lockfile[Pod::Lockfile] (readonly)

defaults to ‘pod_config.lockfile`

Returns:

  • ([Pod::Lockfile])

    nil



150
# File 'lib/cocoapods/generate/configuration.rb', line 150

option :lockfile, [Pod::Lockfile], 'pod_config.lockfile', nil

#platformsnew (readonly)

defaults to ‘nil`

Returns:

  • (new)

    Limit to specific platforms. Default is all platforms supported by the podspec. Multiple platforms must be comma-delimited.



195
196
197
198
199
200
201
202
203
# File 'lib/cocoapods/generate/configuration.rb', line 195

option :platforms, ArrayOf.new(String),
nil,
'Limit to specific platforms. Default is all platforms supported by the podspec. Multiple platforms must be comma-delimited.',
'ios,macos',
lambda { |platforms|
  valid_platforms = Platform.all.map { |p| p.string_name.downcase }
  valid_platforms unless (platforms - valid_platforms).empty?
}, # validates platforms is a subset of Platform.all
->(platforms) { Array(platforms).flat_map { |s| s.split(',') } }

#pod_configConfig (readonly)

defaults to ‘Pod::Config.instance`

Returns:

  • (Config)

    nil



137
# File 'lib/cocoapods/generate/configuration.rb', line 137

option :pod_config, Config, 'Pod::Config.instance', nil

#podfile[Podfile] (readonly)

defaults to ‘Podfile.from_file(podfile_path) if (podfile_path && File.file?(File.expand_path(podfile_path)))`

Returns:

  • ([Podfile])


140
# File 'lib/cocoapods/generate/configuration.rb', line 140

option :podfile, [Podfile], 'Podfile.from_file(podfile_path) if (podfile_path && File.file?(File.expand_path(podfile_path)))'

#podfile_path[String, Pathname] (readonly)

defaults to ‘pod_config.podfile_path`

Returns:

  • ([String, Pathname])

    Path to podfile to use



139
# File 'lib/cocoapods/generate/configuration.rb', line 139

option :podfile_path, [String, Pathname], 'pod_config.podfile_path', 'Path to podfile to use', 'PATH', ->(path) { 'file does not exist' unless path.file? }, coerce_to_pathname

#podfile_pluginsnew (readonly)

defaults to ‘(use_podfile && podfile) ? podfile.plugins : {}`

Returns:

  • (new)

    nil



143
144
145
146
147
148
# File 'lib/cocoapods/generate/configuration.rb', line 143

option :podfile_plugins, HashOf.new(keys: [String], values: [NilClass, HashOf.new(keys: [String], values: [TrueClass, FalseClass, NilClass, String, Hash, Array])]),
'(use_podfile && podfile) ? podfile.plugins : {}',
nil,
nil,
nil,
->(hash) { Hash[hash] }

#podspec_pathsnew (readonly)

defaults to ‘[Pathname(?.)]`

Returns:

  • (new)

    nil



169
170
171
172
173
174
# File 'lib/cocoapods/generate/configuration.rb', line 169

option :podspec_paths, ArrayOf.new(String, Pathname, URI),
'[Pathname(?.)]',
nil,
nil,
->(paths) { ('paths do not exist' unless paths.all? { |p| p.is_a?(URI) || p.exist? }) },
->(paths) { paths && paths.map { |path| path.to_s =~ %r{https?://} ? URI(path) : Pathname(path).expand_path } }

#podspecsnew (readonly)

defaults to ‘self.class.podspecs_from_paths(podspec_paths, gen_directory)`

Returns:

  • (new)

    nil



175
176
177
178
179
180
# File 'lib/cocoapods/generate/configuration.rb', line 175

option :podspecs, ArrayOf.new(Pod::Specification),
'self.class.podspecs_from_paths(podspec_paths, gen_directory)',
nil,
nil,
->(specs) { 'no podspecs found' if specs.empty? },
->(paths) { paths && paths.map { |path| Pathname(path).expand_path } }

#repo_updateBOOLEAN (readonly)

defaults to ‘false`

Returns:

  • (BOOLEAN)

    Force running ‘pod repo update` before install



204
# File 'lib/cocoapods/generate/configuration.rb', line 204

option :repo_update, BOOLEAN, 'false', 'Force running `pod repo update` before install', nil, nil, coerce_to_bool

#share_schemes_for_development_pods[TrueClass, FalseClass, Array] (readonly)

defaults to ‘(use_podfile && podfile) ? podfile.installation_options.share_schemes_for_development_pods : true`

Returns:

  • ([TrueClass, FalseClass, Array])

    Whether installation should share schemes for development pods



208
# File 'lib/cocoapods/generate/configuration.rb', line 208

option :share_schemes_for_development_pods, [TrueClass, FalseClass, Array], '(use_podfile && podfile) ? podfile.installation_options.share_schemes_for_development_pods : true', 'Whether installation should share schemes for development pods', nil, nil

#single_workspaceBOOLEAN (readonly)

defaults to ‘false`

Returns:

  • (BOOLEAN)

    Whether to produce a single workspace for all podspecs specified.



211
# File 'lib/cocoapods/generate/configuration.rb', line 211

option :single_workspace, BOOLEAN, 'false', 'Whether to produce a single workspace for all podspecs specified.', nil, nil, coerce_to_bool

#sourcesnew (readonly)

defaults to ‘if use_podfile && podfile then ::Pod::Installer::Analyzer.new(:sandbox, podfile).sources.map(&:url) else pod_config.sources_manager.all.map(&:url) end`

Returns:

  • (new)

    The sources from which to pull dependent pods (defaults to all repos in the podfile if using the podfile, else all available repos). Can be a repo name or URL. Multiple sources must be comma-delimited.



183
184
185
186
187
188
# File 'lib/cocoapods/generate/configuration.rb', line 183

option :sources, ArrayOf.new(String),
'if use_podfile && podfile then ::Pod::Installer::Analyzer.new(:sandbox, podfile).sources.map(&:url) else pod_config.sources_manager.all.map(&:url) end',
'The sources from which to pull dependent pods (defaults to all repos in the podfile if using the podfile, else all available repos). Can be a repo name or URL. Multiple sources must be comma-delimited.',
'SOURCE1,SOURCE2',
->(_) { nil },
->(sources) { Array(sources).flat_map { |s| s.split(',') } }

#use_default_pluginsBOOLEAN (readonly)

defaults to ‘false`

Returns:

  • (BOOLEAN)

    Whether installation should activate default plugins



205
# File 'lib/cocoapods/generate/configuration.rb', line 205

option :use_default_plugins, BOOLEAN, 'false', 'Whether installation should activate default plugins', nil, nil, coerce_to_bool

#use_librariesBOOLEAN (readonly)

defaults to ‘false`

Returns:

  • (BOOLEAN)

    Whether to use libraries instead of frameworks



154
# File 'lib/cocoapods/generate/configuration.rb', line 154

option :use_libraries, BOOLEAN, 'false', 'Whether to use libraries instead of frameworks', nil, nil, coerce_to_bool

#use_lockfileBOOLEAN (readonly)

defaults to ‘!!lockfile`

Returns:

  • (BOOLEAN)

    Whether the lockfile should be used to discover transitive dependencies



151
# File 'lib/cocoapods/generate/configuration.rb', line 151

option :use_lockfile, BOOLEAN, '!!lockfile', 'Whether the lockfile should be used to discover transitive dependencies', nil, nil, coerce_to_bool

#use_lockfile_versionsBOOLEAN (readonly)

defaults to ‘use_lockfile`

Returns:

  • (BOOLEAN)

    Whether versions from the lockfile should be used



152
# File 'lib/cocoapods/generate/configuration.rb', line 152

option :use_lockfile_versions, BOOLEAN, 'use_lockfile', 'Whether versions from the lockfile should be used', nil, nil, coerce_to_bool

#use_modular_headersBOOLEAN (readonly)

defaults to ‘false`

Returns:

  • (BOOLEAN)

    Whether the target should be generated as a clang module, treating dependencies as modules, as if ‘use_modular_headers!` were specified. Will error if both this option and a podfile are specified



210
# File 'lib/cocoapods/generate/configuration.rb', line 210

option :use_modular_headers, BOOLEAN, 'false', 'Whether the target should be generated as a clang module, treating dependencies as modules, as if `use_modular_headers!` were specified. Will error if both this option and a podfile are specified', nil, nil, coerce_to_bool

#use_podfileBOOLEAN (readonly)

defaults to ‘!!podfile`

Returns:

  • (BOOLEAN)

    Whether restrictions should be copied from the podfile



141
# File 'lib/cocoapods/generate/configuration.rb', line 141

option :use_podfile, BOOLEAN, '!!podfile', 'Whether restrictions should be copied from the podfile', nil, nil, coerce_to_bool

#use_podfile_pluginsBOOLEAN (readonly)

defaults to ‘use_podfile`

Returns:

  • (BOOLEAN)

    Whether plugins should be copied from the podfile



142
# File 'lib/cocoapods/generate/configuration.rb', line 142

option :use_podfile_plugins, BOOLEAN, 'use_podfile', 'Whether plugins should be copied from the podfile', nil, nil, coerce_to_bool

#warn_for_multiple_pod_sourcesBOOLEAN (readonly)

defaults to ‘(use_podfile && podfile) ? podfile.installation_options.warn_for_multiple_pod_sources : false`

Returns:

  • (BOOLEAN)

    Whether installation should warn when a pod is found in multiple sources



209
# File 'lib/cocoapods/generate/configuration.rb', line 209

option :warn_for_multiple_pod_sources, BOOLEAN, '(use_podfile && podfile) ? podfile.installation_options.warn_for_multiple_pod_sources : false', 'Whether installation should warn when a pod is found in multiple sources', nil, nil, coerce_to_bool

#xcode_versionPod::Version (readonly)

defaults to ‘Pod::Version.new('9.3')`

Returns:

  • (Pod::Version)

    The Xcode version to use for producing the consumer sample project



212
# File 'lib/cocoapods/generate/configuration.rb', line 212

option :xcode_version, Pod::Version, 'Pod::Version.new(\'9.3\')', 'The Xcode version to use for producing the consumer sample project', 'xcode_version', nil, coerce_to_version

Class Method Details

.from_env(env = ENV) ⇒ Hash<Symbol,Object>

Returns the configuration hash parsed from the env.

Parameters:

  • env (ENV, Hash<String,String>) (defaults to: ENV)

Returns:

  • (Hash<Symbol,Object>)

    the configuration hash parsed from the env



259
260
261
262
263
264
# File 'lib/cocoapods/generate/configuration.rb', line 259

def self.from_env(env = ENV)
  options.each_with_object({}) do |option, config|
    next unless (value = env["COCOAPODS_GENERATE_#{option.name.upcase}"])
    config[option.name] = option.coerce(value)
  end
end

.from_file(path) ⇒ Hash<Symbol,Object>

Returns the configuration hash parsed from the given file.

Parameters:

  • path (Pathname)

Returns:

  • (Hash<Symbol,Object>)

    the configuration hash parsed from the given file

Raises:

  • (Informative)


235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
# File 'lib/cocoapods/generate/configuration.rb', line 235

def self.from_file(path)
  raise Informative, "No cocoapods-generate configuration found at #{UI.path path}" unless path.file?
  require 'yaml'
  yaml = YAML.load_file(path)
  unless yaml.is_a?(Hash)
    unless path.read.strip.empty?
      raise Informative, "Hash not found in configuration at #{UI.path path} -- got #{yaml.inspect}"
    end
    yaml = {}
  end
  yaml = yaml.with_indifferent_access

  Dir.chdir(path.dirname) do
    options.each_with_object({}) do |option, config|
      next unless yaml.key?(option.name)
      config[option.name] = option.coerce yaml[option.name]
    end
  end
end

.podspecs_from_paths(paths, gen_directory) ⇒ Array<Specification>

Returns the podspecs found at the given paths. This method will download specs from URLs and traverse a directory’s children.

Parameters:

  • paths (Array<Pathname,URI>)

    the paths to search for podspecs

  • gen_directory (Pathname)

    the directory that the gen installation would occur into.

Returns:

  • (Array<Specification>)

    the podspecs found at the given paths. This method will download specs from URLs and traverse a directory’s children.



349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
# File 'lib/cocoapods/generate/configuration.rb', line 349

def self.podspecs_from_paths(paths, gen_directory)
  paths = [Pathname('.')] if paths.empty?
  paths.flat_map do |path|
    if path.is_a?(URI)
      require 'cocoapods/open-uri'
      begin
        contents = open(path.to_s).read
      rescue StandardError => e
        next e
      end
      begin
          Pod::Specification.from_string contents, path.to_s
        rescue StandardError
          $ERROR_INFO
        end
    elsif path.directory?
      glob = Pathname.glob(path.expand_path + '**/*.podspec{.json,}').select { |f| f.relative_path_from(gen_directory).to_s.start_with?('..') }
      next StandardError.new "no specs found in #{UI.path path}" if glob.empty?
      glob.map { |f| Pod::Specification.from_file(f) }.sort_by(&:name)
    else
      Pod::Specification.from_file(path)
    end
  end
end

Instance Method Details

#==(other) ⇒ Boolean

Returns whether this configuration is equivalent to other.

Returns:

  • (Boolean)

    whether this configuration is equivalent to other



296
297
298
299
# File 'lib/cocoapods/generate/configuration.rb', line 296

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

#gen_dir_for_specs(specs) ⇒ Pathname

Returns the directory for installation of the generated workspace.

Parameters:

  • specs (Array<Specification>)

    The specs to get a directory name for.

Returns:

  • (Pathname)

    the directory for installation of the generated workspace.



316
317
318
319
# File 'lib/cocoapods/generate/configuration.rb', line 316

def gen_dir_for_specs(specs)
  basename = specs.count == 1 ? specs.first.name : 'Workspace'
  gen_directory.join(basename)
end

#project_name_for_specs(specs) ⇒ String

Returns The project name to use for generating this workspace.

Parameters:

  • specs (Array<Specification>)

    the specifications to generate project name for.

Returns:

  • (String)

    The project name to use for generating this workspace.



332
333
334
335
336
337
338
# File 'lib/cocoapods/generate/configuration.rb', line 332

def project_name_for_specs(specs)
  project_name = specs.count == 1 ? +specs.first.name.dup : +'Workspace'
  # When using multiple Xcode project the project name will collide with the actual .xcodeproj meant for the pod
  # that we are generating the workspace for.
  project_name << 'Sample' if generate_multiple_pod_projects? && specs.count == 1
  project_name
end

#to_hHash<Symbol,Object>

Returns a hash where the keys are option names and values are the non-nil set values.

Returns:

  • (Hash<Symbol,Object>)

    a hash where the keys are option names and values are the non-nil set values



286
287
288
289
290
291
292
# File 'lib/cocoapods/generate/configuration.rb', line 286

def to_h
  self.class.options.each_with_object({}) do |option, hash|
    value = send(option.name)
    next if value.nil?
    hash[option.name] = value
  end
end

#to_sString

Returns a string describing the configuration, suitable for UI presentation.

Returns:

  • (String)

    a string describing the configuration, suitable for UI presentation



303
304
305
306
307
308
309
310
# File 'lib/cocoapods/generate/configuration.rb', line 303

def to_s
  hash = to_h
  hash.delete(:pod_config)
  hash.each_with_index.each_with_object('`pod gen` configuration {'.dup) do |((k, v), i), s|
    s << ',' unless i.zero?
    s << "\n" << '  ' << k.to_s << ': ' << v.to_s.gsub(/:0x\h+/, '')
  end << ' }'
end

#use_frameworks?Boolean

Returns whether gen should install with dynamic frameworks.

Returns:

  • (Boolean)

    whether gen should install with dynamic frameworks



323
324
325
# File 'lib/cocoapods/generate/configuration.rb', line 323

def use_frameworks?
  !use_libraries?
end

#validateArray<String>

Returns errors in the configuration.

Returns:

  • (Array<String>)

    errors in the configuration



268
269
270
271
272
273
# File 'lib/cocoapods/generate/configuration.rb', line 268

def validate
  hash = to_h
  self.class.options.map do |option|
    option.validate(hash[option.name])
  end.compact
end

#with_changes(changes) ⇒ Configuration

Returns a new configuration object with the given changes applies.

Parameters:

  • changes (Hash<Symbol,Object>)

Returns:

  • (Configuration)

    a new configuration object with the given changes applies



279
280
281
# File 'lib/cocoapods/generate/configuration.rb', line 279

def with_changes(changes)
  self.class.new(**to_h.merge(changes))
end