Module: Pod::Specification::DSL

Extended by:
AttributeSupport
Included in:
Pod::Specification
Defined in:
lib/cocoapods-core/specification/dsl.rb,
lib/cocoapods-core/specification/dsl/attribute.rb,
lib/cocoapods-core/specification/dsl/deprecations.rb,
lib/cocoapods-core/specification/dsl/platform_proxy.rb,
lib/cocoapods-core/specification/dsl/attribute_support.rb,
lib/cocoapods-core/specification/root_attribute_accessors.rb

Overview

A specification describes a version of Pod library. It includes details about where the source should be fetched from, what files to use, the build settings to apply, and other general metadata such as its name, version, and description.


A stub specification file can be generated by the pod spec create command.


The specification DSL provides great flexibility and dynamism. Moreover, the DSL adopts the convention over configuration and thus it can be very simple:

Pod::Spec.new do |spec|
  spec.name         = 'Reachability'
  spec.version      = '3.1.0'
  spec.license      = { :type => 'BSD' }
  spec.homepage     = 'https://github.com/tonymillion/Reachability'
  spec.authors      = { 'Tony Million' => '[email protected]' }
  spec.summary      = 'ARC and GCD Compatible Reachability Class for iOS and OS X.'
  spec.source       = { :git => 'https://github.com/tonymillion/Reachability.git', :tag => 'v3.1.0' }
  spec.source_files = 'Reachability.{h,m}'
  spec.framework    = 'SystemConfiguration'
end

Or it can be quite detailed:

Pod::Spec.new do |spec|
  spec.name          = 'Reachability'
  spec.version       = '3.1.0'
  spec.license       = { :type => 'BSD' }
  spec.homepage      = 'https://github.com/tonymillion/Reachability'
  spec.authors       = { 'Tony Million' => '[email protected]' }
  spec.summary       = 'ARC and GCD Compatible Reachability Class for iOS and OS X.'
  spec.source        = { :git => 'https://github.com/tonymillion/Reachability.git', :tag => 'v3.1.0' }
  spec.module_name   = 'Rich'
  spec.swift_version = '4.0'

  spec.ios.deployment_target  = '9.0'
  spec.osx.deployment_target  = '10.10'

  spec.source_files       = 'Reachability/common/*.swift'
  spec.ios.source_files   = 'Reachability/ios/*.swift', 'Reachability/extensions/*.swift'
  spec.osx.source_files   = 'Reachability/osx/*.swift'

  spec.framework      = 'SystemConfiguration'
  spec.ios.framework  = 'UIKit'
  spec.osx.framework  = 'AppKit'

  spec.dependency 'SomeOtherPod'
end

Defined Under Namespace

Modules: AttributeSupport, Deprecations, RootAttributesAccessors Classes: Attribute, PlatformProxy

Root specification A ‘root’ specification stores the information about the specific version of a library. The attributes in this group can only be written to on the ‘root’ specification, **not** on the ‘sub-specifications’. --- The attributes listed in this group are the only one which are required by a podspec. The attributes of the other groups are offered to refine the podspec and follow a convention over configuration approach. A root specification can describe these attributes either directly of through ‘[sub-specifications](#subspec)’. collapse

LICENSE_KEYS =

The keys accepted by the license attribute.

[:type, :file, :text].freeze
SOURCE_KEYS =

The keys accepted by the hash of the source attribute.

{
  :git  => [:tag, :branch, :commit, :submodules].freeze,
  :svn  => [:folder, :tag, :revision].freeze,
  :hg   => [:revision].freeze,
  :http => [:flatten, :type, :sha256, :sha1, :headers].freeze,
}.freeze

Platform A specification should indicate the platform and the correspondent deployment targets on which the library is supported. If not defined in a subspec the attributes of this group inherit the value of the parent. collapse

PLATFORMS =

The names of the platforms supported by the specification class.

[:osx, :ios, :tvos, :watchos].freeze

Build settings In this group are listed the attributes related to the configuration of the build environment that should be used to build the library. If not defined in a subspec the attributes of this group inherit the value of the parent. collapse

SCRIPT_PHASE_REQUIRED_KEYS =

------------------#

[:name, :script].freeze
SCRIPT_PHASE_OPTIONAL_KEYS =
[:shell_path, :input_files, :output_files, :input_file_lists, :output_file_lists,
:show_env_vars_in_log, :execution_position, :dependency_file].freeze
EXECUTION_POSITION_KEYS =
[:before_compile, :after_compile, :any].freeze
ALL_SCRIPT_PHASE_KEYS =
(SCRIPT_PHASE_REQUIRED_KEYS + SCRIPT_PHASE_OPTIONAL_KEYS).freeze

Subspecs A library can specify a dependency on either another library, a subspec of another library, or a subspec of itself. collapse

SUPPORTED_TEST_TYPES =

The list of the test types currently supported.

[:unit, :ui].freeze
SCHEME_KEYS =
[:launch_arguments, :environment_variables, :code_coverage].freeze

Class Attribute Summary collapse

Root specification A ‘root’ specification stores the information about the specific version of a library. The attributes in this group can only be written to on the ‘root’ specification, **not** on the ‘sub-specifications’. --- The attributes listed in this group are the only one which are required by a podspec. The attributes of the other groups are offered to refine the podspec and follow a convention over configuration approach. A root specification can describe these attributes either directly of through ‘[sub-specifications](#subspec)’. collapse

Platform A specification should indicate the platform and the correspondent deployment targets on which the library is supported. If not defined in a subspec the attributes of this group inherit the value of the parent. collapse

Build settings In this group are listed the attributes related to the configuration of the build environment that should be used to build the library. If not defined in a subspec the attributes of this group inherit the value of the parent. collapse

File patterns Podspecs should be located at the **root** of the repository, and paths to files should be specified **relative** to the root of the repository as well. File patterns do not support traversing the parent directory ( `..` ). File patterns may contain the following wildcard patterns: --- ### Pattern: * Matches any file. Can be restricted by other values in the glob. * `*` will match all files * `c*` will match all files beginning with `c` * `*c` will match all files ending with `c` * `*c*` will match all files that have `c` in them (including at the beginning or end) Equivalent to `/.*/x` in regexp. **Note** this will not match Unix-like hidden files (dotfiles). In order to include those in the match results, you must use something like `{*,.*}`. --- ### Pattern: ** Matches directories recursively. --- ### Pattern: ? Matches any one character. Equivalent to `/.{1}/` in regexp. --- ### Pattern: [set] Matches any one character in set. Behaves exactly like character sets in Regexp, including set negation (`[^a-z]`). --- ### Pattern: {p,q} Matches either literal `p` or literal `q`. Matching literals may be more than one character in length. More than two literals may be specified. Equivalent to pattern alternation in regexp. --- ### Pattern: \ Escapes the next meta-character. --- ### Examples Consider these to be evaluated in the source root of [JSONKit](https://github.com/johnezang/JSONKit). "JSONKit.?" #=> ["JSONKit.h", "JSONKit.m"] "*.[a-z][a-z]" #=> ["CHANGELOG.md", "README.md"] "*.[^m]*" #=> ["JSONKit.h"] "*.{h,m}" #=> ["JSONKit.h", "JSONKit.m"] "*" #=> ["CHANGELOG.md", "JSONKit.h", "JSONKit.m", "README.md"] collapse

Subspecs A library can specify a dependency on either another library, a subspec of another library, or a subspec of itself. collapse

Multi-Platform support A specification can store values which are specific to only one platform. --- For example one might want to store resources which are specific to only iOS projects. spec.resources = 'Resources/**/*.png' spec.ios.resources = 'Resources_ios/**/*.png' collapse

Methods included from AttributeSupport

attribute, root_attribute, store_attribute

Class Attribute Details

.attributesObject (readonly)

Returns the value of attribute attributes


7
8
9
# File 'lib/cocoapods-core/specification/dsl/attribute_support.rb', line 7

def attributes
  @attributes
end

Instance Method Details

#app_host_name=(name) ⇒ Object

The app specification to use as an app host, if necessary.


1609
1610
1611
# File 'lib/cocoapods-core/specification/dsl.rb', line 1609

attribute :app_host_name,
:types => [String],
:spec_types => [:test]

#app_spec(name = 'App', &block) ⇒ Object

Represents an app specification for the library. Here you can place all your app source files for your podspec along with the app dependencies.


Examples:


Pod::Spec.new do |spec|
  spec.name = 'NSAttributedString+CCLFormat'

  spec.app_spec do |app_spec|
    app_spec.source_files = 'NSAttributedString+CCLFormat.m'
    app_spec.dependency 'AFNetworking'
  end
end

1675
1676
1677
1678
1679
# File 'lib/cocoapods-core/specification/dsl.rb', line 1675

def app_spec(name = 'App', &block)
  appspec = Specification.new(self, name, :app_specification => true, &block)
  @subspecs << appspec
  appspec
end

#authors=(authors) ⇒ Object

The name and email addresses of the library maintainers, not the Podspec maintainer.

Examples:


spec.author = 'Darth Vader'

spec.authors = 'Darth Vader', 'Wookiee'

spec.authors = { 'Darth Vader' => '[email protected]',
                 'Wookiee'     => '[email protected]' }

Parameters:

  • authors (String, Hash{String=>String})

    the list of the authors of the library and their emails.


201
202
203
204
205
# File 'lib/cocoapods-core/specification/dsl.rb', line 201

root_attribute :authors,
:types       => [String, Array, Hash],
:container   => Hash,
:required    => true,
:singularize => true

#cocoapods_version=(cocoapods_version) ⇒ Object

The version of CocoaPods that the specification supports.

Examples:


spec.cocoapods_version = '>= 0.36'

Parameters:

  • cocoapods_version (String)

    the CocoaPods version that the specification supports. CocoaPods follows semantic versioning.


176
# File 'lib/cocoapods-core/specification/dsl.rb', line 176

root_attribute :cocoapods_version

#compiler_flags=(flags) ⇒ Object

A list of flags which should be passed to the compiler.

Examples:


spec.compiler_flags = '-DOS_OBJECT_USE_OBJC=0', '-Wno-format'

Parameters:

  • flags (String, Array<String>)

    A list of flags.


875
876
877
878
# File 'lib/cocoapods-core/specification/dsl.rb', line 875

attribute :compiler_flags,
:container   => Array,
:singularize => true,
:inherited => true

#default_subspecs=(subspec_array) ⇒ Object

An array of subspecs names that should be used as preferred dependency. If not specified, a specification requires all of its subspecs as dependencies.

You may use the value :none to specify that none of the subspecs are required to compile this pod and that all subspecs are optional.


A Pod should make available the full library by default. Users can fine tune their dependencies, and exclude unneeded subspecs, once their requirements are known. Therefore, this attribute is rarely needed. It is intended to be used to select a default if there are ‘sub-specifications’ which provide alternative incompatible implementations, or to exclude modules rarely needed (especially if they trigger dependencies on other libraries).

Examples:


spec.default_subspec = 'Core'

spec.default_subspecs = 'Core', 'UI'

spec.default_subspecs = :none

Parameters:

  • subspec_names (Array<String>, String, Symbol)

    An array of subspec names that should be inherited as dependency.


1718
1719
1720
1721
# File 'lib/cocoapods-core/specification/dsl.rb', line 1718

root_attribute :default_subspecs,
:container => Array,
:types => [Array, String, Symbol],
:singularize => true

#dependency(*args) ⇒ Object

Any dependency on other Pods or to a ‘sub-specification’.


Dependencies can specify versions requirements. The use of the optimistic version indicator ~> is recommended because it provides good control over the version without being too restrictive. For example, ~> 1.0.1 is equivalent to >= 1.0.1 combined with < 1.1. Similarly, ~> 1.0 will match 1.0, 1.0.1, 1.1, but will not upgrade to 2.0.

Pods with overly restrictive dependencies limit their compatibility with other Pods.

Examples:

spec.dependency 'AFNetworking', '~> 1.0'
spec.dependency 'AFNetworking', '~> 1.0', :configurations => ['Debug']
spec.dependency 'AFNetworking', '~> 1.0', :configurations => :debug
spec.dependency 'RestKit/CoreData', '~> 0.20.0'
spec.ios.dependency 'MBProgressHUD', '~> 0.5'

667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
# File 'lib/cocoapods-core/specification/dsl.rb', line 667

def dependency(*args)
  name, *version_requirements = args
  if name == self.name
    raise Informative, "A specification can't require itself as a " \
      'subspec'
  end
  if @parent
    composed_name = ''
    @parent.name.split('/').each do |component|
      composed_name << component
      if name == composed_name
        raise Informative, "A subspec can't require one of its " \
          'parents specifications'
      else
        composed_name << '/'
      end
    end
  end

  configurations_option = version_requirements.find { |option| option.is_a?(Hash) && option.key?(:configurations) }
  whitelisted_configurations = if configurations_option
                                 version_requirements.delete(configurations_option)
                                 Array(configurations_option.delete(:configurations)).map { |c| c.to_s.downcase }
                               end

  dependency_options = version_requirements.reject { |req| req.is_a?(String) }
  dependency_options.each do |dependency_option|
    if dependency_option.is_a?(Hash)
      if !dependency_option[:path].nil?
        raise Informative, 'Podspecs cannot specify the source of dependencies. The `:path` option is not supported.'\
                           ' `:path` can be used in the Podfile instead to override global dependencies.'
      elsif !dependency_option[:git].nil?
        raise Informative, 'Podspecs cannot specify the source of dependencies. The `:git` option is not supported.'\
                           ' `:git` can be used in the Podfile instead to override global dependencies.'
      end
    end

    raise Informative, "Unsupported version requirements. #{version_requirements.inspect} is not valid."
  end

  attributes_hash['dependencies'] ||= {}
  attributes_hash['dependencies'][name] = version_requirements

  unless whitelisted_configurations.nil?
    if (extras = whitelisted_configurations - %w(debug release)) && !extras.empty?
      raise Informative, "Only `Debug` & `Release` are allowed under configurations for dependency on `#{name}`. " \
        "Found #{extras.map { |configuration| "`#{configuration}`" }.to_sentence}."
    end
    attributes_hash['configuration_pod_whitelist'] ||= {}
    attributes_hash['configuration_pod_whitelist'][name] = whitelisted_configurations
  end
end

#dependency=(args) ⇒ Object

Raises:


720
721
722
723
724
# File 'lib/cocoapods-core/specification/dsl.rb', line 720

def dependency=(args)
  joined = args.join('\', \'')
  arguments = "\'#{joined}\'"
  raise Informative, "Cannot assign value to `dependency`. Did you mean: `dependency #{arguments}`?"
end

#deployment_target=(*_args) ⇒ Object

The minimum deployment targets of the supported platforms.

As opposed to the platform attribute, the deployment_target attribute allows to specify multiple platforms on which this pod is supported — specifying a different deployment target for each.

Examples:


spec.ios.deployment_target = '6.0'

spec.osx.deployment_target = '10.8'

Parameters:

  • _args (String)

    The deployment target of the platform.

Raises:


616
617
618
619
# File 'lib/cocoapods-core/specification/dsl.rb', line 616

def deployment_target=(*_args)
  raise Informative, 'The deployment target can be declared only per ' \
    'platform.'
end

#deprecated=(flag) ⇒ Object

Whether the library has been deprecated.

Examples:


spec.deprecated = true

Parameters:

  • flag (Bool)

    whether the library has been deprecated.


524
525
526
# File 'lib/cocoapods-core/specification/dsl.rb', line 524

root_attribute :deprecated,
:types => [TrueClass, FalseClass],
:default_value => false

#deprecated_in_favor_of=(deprecated_in_favor_of) ⇒ Object

The name of the Pod that this one has been deprecated in favor of.

Examples:


spec.deprecated_in_favor_of = 'NewMoreAwesomePod'

Parameters:

  • deprecated_in_favor_of (String)

    the name of the Pod that this one has been deprecated in favor of.


540
# File 'lib/cocoapods-core/specification/dsl.rb', line 540

root_attribute :deprecated_in_favor_of

#description=(description) ⇒ Object

A description of the Pod more detailed than the summary.

Examples:


spec.description = <<-DESC
                     Computes the meaning of life.
                     Features:
                     1. Is self aware
                     ...
                     42. Likes candies.
                   DESC

Parameters:

  • description (String)

    A longer description of the Pod.


418
# File 'lib/cocoapods-core/specification/dsl.rb', line 418

root_attribute :description

#documentation_url=(documentation_url) ⇒ Object

An optional URL for the documentation of the Pod which will be honoured by CocoaPods web properties. Leaving it blank will default to a CocoaDocs generated URL for your library.

Examples:


spec.documentation_url = 'http://www.example.com/docs.html'

Parameters:

  • documentation_url (String)

    The link of the web documentation of the Pod.


458
# File 'lib/cocoapods-core/specification/dsl.rb', line 458

root_attribute :documentation_url

#exclude_files=(exclude_files) ⇒ Object

A list of file patterns that should be excluded from the other file patterns.

Examples:


spec.ios.exclude_files = 'Classes/osx'

spec.exclude_files = 'Classes/**/unused.{h,m}'

Parameters:

  • exclude_files (String, Array<String>)

    the file patterns that the Pod should ignore.


1393
1394
1395
# File 'lib/cocoapods-core/specification/dsl.rb', line 1393

attribute :exclude_files,
:container     => Array,
:file_patterns => true

#frameworks=(*frameworks) ⇒ Object

A list of system frameworks that the user’s target needs to link against.

Examples:


spec.ios.framework = 'CFNetwork'

spec.frameworks = 'QuartzCore', 'CoreData'

Parameters:

  • frameworks (String, Array<String>)

    A list of framework names.


811
812
813
814
# File 'lib/cocoapods-core/specification/dsl.rb', line 811

attribute :frameworks,
:container   => Array,
:singularize => true,
:inherited => true

#header_dir=(dir) ⇒ Object

The directory where to store the headers files so they don't break includes.

Examples:


spec.header_dir = 'Three20Core'

Parameters:

  • dir (String)

    the headers directory.


1023
1024
# File 'lib/cocoapods-core/specification/dsl.rb', line 1023

attribute :header_dir,
:inherited => true

#header_mappings_dir=(dir) ⇒ Object

A directory from where to preserve the folder structure for the headers files. If not provided the headers files are flattened.

Examples:


spec.header_mappings_dir = 'src/include'

Parameters:

  • dir (String)

    the directory from where to preserve the headers namespacing.


1040
1041
# File 'lib/cocoapods-core/specification/dsl.rb', line 1040

attribute :header_mappings_dir,
:inherited => true

#homepage=(homepage) ⇒ Object

The URL of the homepage of the Pod.

Examples:


spec.homepage = 'http://www.example.com'

Parameters:

  • homepage (String)

    the URL of the homepage of the Pod.


297
298
# File 'lib/cocoapods-core/specification/dsl.rb', line 297

root_attribute :homepage,
:required => true

#info_plist=(info_plist) ⇒ Object

Key-Value pairs to add to the generated Info.plist.

The values will be merged with the default values that CocoaPods generates, overriding any duplicates.

For library specs, the values will be merged into the generated Info.plist for libraries that are integrated using frameworks. It will have no effect for static libraries.

Subspecs (other than app and test specs) are not supported.

For app specs, the values will be merged into the application host's Info.plist.

For test specs, the values will be merged into the test bundle's Info.plist.

Examples:


spec.info_plist = {
  'CFBundleIdentifier' => 'com.myorg.MyLib',
  'MY_VAR' => 'SOME_VALUE'
}

Parameters:

  • info_plist (Hash)

    The Info.plist values for the Pod.


755
756
757
# File 'lib/cocoapods-core/specification/dsl.rb', line 755

attribute :info_plist,
:container => Hash,
:inherited => false

#iosPlatformProxy

Provides support for specifying iOS attributes.

Examples:

spec.ios.source_files = 'Classes/ios/**/*.{h,m}'

Returns:


1747
1748
1749
# File 'lib/cocoapods-core/specification/dsl.rb', line 1747

def ios
  PlatformProxy.new(self, :ios)
end

#libraries=(*libraries) ⇒ Object

A list of system libraries that the user’s target (application) needs to link against.

Examples:


spec.ios.library = 'xml2'

spec.libraries = 'xml2', 'z'

Parameters:

  • libraries (String, Array<String>)

    A list of library names.


857
858
859
860
# File 'lib/cocoapods-core/specification/dsl.rb', line 857

attribute :libraries,
:container   => Array,
:singularize => true,
:inherited => true

#license=(license) ⇒ Object

The license of the Pod.


Unless the source contains a file named LICENSE.* or LICENCE.*, the path of the license file or the integral text of the notice commonly used for the license type must be specified. If a license file is specified, it either must be without a file extensions or be one of txt, md, or markdown.

This information is used by CocoaPods to generate acknowledgement files (markdown and plist) which can be used in the acknowledgements section of the final application.

Examples:


spec.license = 'MIT'

spec.license = { :type => 'MIT', :file => 'MIT-LICENSE.txt' }

spec.license = { :type => 'MIT', :text => <<-LICENSE
                   Copyright 2012
                   Permission is granted to...
                 LICENSE
               }

Parameters:

  • license (String, Hash{Symbol=>String})

Options Hash (license):

  • :type (String)

    license type

  • :file (String)

    file containing full license text. Supports txt, md, and markdown

  • :text (String)

    full license text

Parameters:

  • license (String)

    The type of the license


279
280
281
282
# File 'lib/cocoapods-core/specification/dsl.rb', line 279

root_attribute :license,
:container => Hash,
:keys      => LICENSE_KEYS,
:required  => true

#module_map=(module_map) ⇒ Object

The module map file that should be used when this pod is integrated as a framework.

false indicates that the default CocoaPods modulemap file should not be generated.

true is the default and indicates that the default CocoaPods modulemap file should be generated.


By default, CocoaPods creates a module map file based upon the public headers in a specification.

Examples:


spec.module_map = 'source/module.modulemap'

spec.module_map = false

Parameters:

  • module_map (String, Bool)

    the path to the module map file that should be used or whether to disable module_map generation.


1454
1455
1456
# File 'lib/cocoapods-core/specification/dsl.rb', line 1454

attribute :module_map,
:types => [TrueClass, FalseClass, String],
:root_only => true

#module_name=(name) ⇒ Object

The name to use for the framework / clang module which will be generated for this specification instead of the default (header_dir if set, otherwise the specification name).

Examples:


spec.module_name = 'Three20'

Parameters:

  • name (String)

    the module name.


1007
# File 'lib/cocoapods-core/specification/dsl.rb', line 1007

root_attribute :module_name

#name=(name) ⇒ Object

The name of the Pod.

Examples:


spec.name = 'AFNetworking'

Parameters:

  • name (String)

    the name of the pod.


108
109
110
111
# File 'lib/cocoapods-core/specification/dsl.rb', line 108

attribute :name,
:required => true,
:inherited => false,
:multi_platform => false

#osxPlatformProxy Also known as: macos

Provides support for specifying OS X attributes.

Examples:

spec.osx.source_files = 'Classes/osx/**/*.{h,m}'

Returns:


1758
1759
1760
# File 'lib/cocoapods-core/specification/dsl.rb', line 1758

def osx
  PlatformProxy.new(self, :osx)
end

#platform=(args) ⇒ Object

The platform on which this Pod is supported. Leaving this blank means the Pod is supported on all platforms. When supporting multiple platforms you should use deployment_target below instead.

Examples:


spec.platform = :osx, '10.8'

spec.platform = :ios

spec.platform = :osx

Parameters:

  • args (Array<Symbol, String>)

    A tuple where the first value is the name of the platform, (either :ios or :osx) and the second is the deployment target.


587
588
589
590
591
592
593
594
595
# File 'lib/cocoapods-core/specification/dsl.rb', line 587

def platform=(args)
  name, deployment_target = args
  name = :osx if name.to_s == 'macos'
  attributes_hash['platforms'] = if name
                                   { name.to_s => deployment_target }
                                 else
                                   {}
                                 end
end

#pod_target_xcconfig=(value) ⇒ Object

Any flag to add to the final private pod target xcconfig file.

Examples:


spec.pod_target_xcconfig = { 'OTHER_LDFLAGS' => '-lObjC' }

Parameters:

  • value (Hash{String => String})

    Key-value pairs representing build settings.


893
894
895
# File 'lib/cocoapods-core/specification/dsl.rb', line 893

attribute :pod_target_xcconfig,
:container => Hash,
:inherited => true

#prefix_header_contents=(content) ⇒ Object

Any content to inject in the prefix header of the pod project.


This attribute is not recommended as Pods should not pollute the prefix header of other libraries or of the user project.

Examples:


spec.prefix_header_contents = '#import <UIKit/UIKit.h>'

spec.prefix_header_contents = '#import <UIKit/UIKit.h>', '#import <Foundation/Foundation.h>'

Parameters:

  • content (String)

    The contents of the prefix header.


954
955
956
# File 'lib/cocoapods-core/specification/dsl.rb', line 954

attribute :prefix_header_contents,
:types => [Array, String],
:inherited => true

#prefix_header_file=(path) ⇒ Object

A path to a prefix header file to inject in the prefix header of the pod project. false indicates that the default CocoaPods prefix header should not be generated. true is the default and indicates that the default CocoaPods prefix header should be generated.


The file path options is not recommended as Pods should not pollute the prefix header of other libraries or of the user project.

Examples:


spec.prefix_header_file = 'iphone/include/prefix.pch'

spec.prefix_header_file = false

Parameters:

  • path (Bool, String)

    The path to the prefix header file or whether to disable prefix_header generation.


987
988
989
# File 'lib/cocoapods-core/specification/dsl.rb', line 987

attribute :prefix_header_file,
:types => [TrueClass, FalseClass, String],
:inherited => true

#prepare_command=(command) ⇒ Object

A bash script that will be executed after the Pod is downloaded. This command can be used to create, delete and modify any file downloaded and will be ran before any paths for other file attributes of the specification are collected.

This command is executed before the Pod is cleaned and before the Pods project is created. The working directory is the root of the Pod.

If the pod is installed with the :path option this command will not be executed.

Examples:


spec.prepare_command = 'ruby build_files.rb'

spec.prepare_command = <<-CMD
                        sed -i 's/MyNameSpacedHeader/Header/g' ./**/*.h
                        sed -i 's/MyNameOtherSpacedHeader/OtherHeader/g' ./**/*.h
                   CMD

Parameters:

  • command (String)

    the prepare command of the pod.


490
# File 'lib/cocoapods-core/specification/dsl.rb', line 490

root_attribute :prepare_command

#preserve_paths=(preserve_paths) ⇒ Object

Any file that should not be removed after being downloaded.


By default, CocoaPods removes all files that are not matched by any of the other file pattern.

Examples:


spec.preserve_path = 'IMPORTANT.txt'

spec.preserve_paths = 'Frameworks/*.framework'

Parameters:

  • preserve_paths (String, Array<String>)

    the paths that should be not cleaned.


1419
1420
1421
1422
# File 'lib/cocoapods-core/specification/dsl.rb', line 1419

attribute :preserve_paths,
:container     => Array,
:file_patterns => true,
:singularize   => true

#private_header_files=(private_header_files) ⇒ Object

A list of file patterns that should be used to mark private headers.


These patterns are matched against the public headers (or all the headers if no public headers have been specified) to exclude those headers which should not be exposed to the user project and which should not be used to generate the documentation. When the library is built, these headers will appear in the build directory.

Header files that are not listed as neither public nor private will be treated as private, but in addition will not appear in the build directory at all.

Examples:


spec.private_header_files = 'Headers/Private/*.h'

Parameters:

  • private_header_files (String, Array<String>)

    the private headers of the Pod.


1256
1257
1258
# File 'lib/cocoapods-core/specification/dsl.rb', line 1256

attribute :private_header_files,
:container => Array,
:file_patterns => true

#public_header_files=(public_header_files) ⇒ Object

A list of file patterns that should be used as public headers.


These patterns are matched against the source files to include headers that will be exposed to the user’s project and from which documentation will be generated. When the library is built, these headers will appear in the build directory. If no public headers are specified then all the headers in source_files are considered public.

Examples:


spec.public_header_files = 'Headers/Public/*.h'

Parameters:

  • public_header_files (String, Array<String>)

    the public headers of the Pod.


1226
1227
1228
# File 'lib/cocoapods-core/specification/dsl.rb', line 1226

attribute :public_header_files,
:container => Array,
:file_patterns => true

#requires_app_host=(flag) ⇒ Object

Whether a test specification requires an app host to run tests. This only applies to test specifications.

Examples:


test_spec.requires_app_host = true

Parameters:

  • flag (Bool)

    whether a test specification requires an app host to run tests.


1575
1576
1577
1578
# File 'lib/cocoapods-core/specification/dsl.rb', line 1575

attribute :requires_app_host,
:types => [TrueClass, FalseClass],
:default_value => false,
:spec_types => [:test]

#requires_arc=(flag) ⇒ Object

requires_arc allows you to specify which source_files use ARC. This can either be the files which support ARC, or true to indicate all of the source_files use ARC.

Files which do not use ARC will have the -fno-objc-arc compiler flag.

The default value of this attribute is true.

Examples:


spec.requires_arc = false

spec.requires_arc = 'Classes/Arc'

spec.requires_arc = ['Classes/*ARC.m', 'Classes/ARC.mm']

Parameters:

  • flag (Bool, String, Array<String>)

    whether the source files require ARC.


787
788
789
790
791
# File 'lib/cocoapods-core/specification/dsl.rb', line 787

attribute :requires_arc,
:types => [TrueClass, FalseClass, String, Array],
:file_patterns => true,
:default_value => true,
:inherited => true

#resource_bundles=(*resource_bundles) ⇒ Object

This attribute allows to define the name and the file of the resource bundles which should be built for the Pod. They are specified as a hash where the keys represent the name of the bundles and the values the file patterns that they should include.

For building the Pod as a static library, we strongly recommend library developers to adopt resource bundles as there can be name collisions using the resources attribute.

The names of the bundles should at least include the name of the Pod to minimise the chance of name collisions.

To provide different resources per platform namespaced bundles must be used.

Examples:


spec.ios.resource_bundle = { 'MapBox' => 'MapView/Map/Resources/*.png' }

spec.resource_bundles = {
    'MapBox' => ['MapView/Map/Resources/*.png'],
    'MapBoxOtherResources' => ['MapView/Map/OtherResources/*.png']
  }

Parameters:

  • resource_bundles (Hash{String=>String}, Hash{String=>Array<String>})

    A hash where the keys are the names of the resource bundles and the values are their relative file patterns.


1340
1341
1342
1343
1344
# File 'lib/cocoapods-core/specification/dsl.rb', line 1340

attribute :resource_bundles,
:types => [String, Array],
:container => Hash,
:file_patterns => true,
:singularize => true

#resources=(resources) ⇒ Object

A list of resources that should be copied into the target bundle.

For building the Pod as a static library, we strongly recommend library developers to adopt resource bundles as there can be name collisions using the resources attribute. Moreover, resources specified with this attribute are copied directly to the client target and therefore they are not optimised by Xcode.

Examples:


spec.resource = 'Resources/HockeySDK.bundle'

spec.resources = ['Images/*.png', 'Sounds/*']

Parameters:

  • resources (String, Array<String>)

    The resources shipped with the Pod.


1370
1371
1372
1373
# File 'lib/cocoapods-core/specification/dsl.rb', line 1370

attribute :resources,
:container     => Array,
:file_patterns => true,
:singularize   => true

#scheme=(flag) ⇒ Object

Specifies the scheme configuration to be used for this specification.


Examples:


spec.scheme = { :launch_arguments => ['Arg1'] }

spec.scheme = { :launch_arguments => ['Arg1', 'Arg2'], :environment_variables => { 'Key1' => 'Val1'} }

Parameters:

  • scheme (Hash)

    the scheme configuration to be used for this specification.


1632
1633
1634
1635
# File 'lib/cocoapods-core/specification/dsl.rb', line 1632

attribute :scheme,
:types => [Hash],
:container => Hash,
:keys => SCHEME_KEYS

#screenshots=(screenshots) ⇒ Object

A list of URLs to images showcasing the Pod. Intended for UI oriented libraries. CocoaPods recommends the usage of the gif format.

Examples:


spec.screenshot  = 'http://dl.dropbox.com/u/378729/MBProgressHUD/1.png'

spec.screenshots = [ 'http://dl.dropbox.com/u/378729/MBProgressHUD/1.png',
                     'http://dl.dropbox.com/u/378729/MBProgressHUD/2.png' ]

Parameters:

  • screenshots (String)

    An URL for the screenshot of the Pod.


439
440
441
# File 'lib/cocoapods-core/specification/dsl.rb', line 439

root_attribute :screenshots,
:singularize    => true,
:container      => Array

#script_phases=(*script_phases) ⇒ Object

This attribute allows to define a script phase to execute as part of compilation of the Pod. Unlike a prepare command, script phases execute as part of xcodebuild they can also utilize all environment variables that are set during compilation.

A Pod can provide multiple script phases to execute and they will be added in the order they were declared and after taking into consideration their execution position setting.

Note In order to provide visibility and awareness of the contents of all script phases, a warning will be presented to the user upon installing your pod if it includes any script phases.

Examples:


spec.script_phase = { :name => 'Hello World', :script => 'echo "Hello World"' }

spec.script_phase = { :name => 'Hello World', :script => 'echo "Hello World"', :execution_position => :before_compile }

spec.script_phase = { :name => 'Hello World', :script => 'puts "Hello World"', :shell_path => '/usr/bin/ruby' }

spec.script_phase = { :name => 'Hello World', :script => 'echo "Hello World"',
  :input_files => ['/path/to/input_file.txt'], :output_files => ['/path/to/output_file.txt']
}

spec.script_phase = { :name => 'Hello World', :script => 'echo "Hello World"',
  :input_file_lists => ['/path/to/input_files.xcfilelist'], :output_file_lists => ['/path/to/output_files.xcfilelist']
}

spec.script_phases = [
    { :name => 'Hello World', :script => 'echo "Hello World"' },
    { :name => 'Hello Ruby World', :script => 'puts "Hello World"', :shell_path => '/usr/bin/ruby' },
  ]

Parameters:

  • script_phases (Array<Hash{Symbol=>String}>)

    An array of hashes where each hash represents a single script phase.


1100
1101
1102
1103
# File 'lib/cocoapods-core/specification/dsl.rb', line 1100

attribute :script_phases,
:types => [Hash],
:container => Array,
:singularize => true

#social_media_url=(social_media_url) ⇒ Object

The URL for the social media contact of the Pod, CocoaPods web services can use this.

For example, the @CocoaPodsFeed notifications will include the Twitter handle (shortening the description) if the URL is relative to Twitter. This does not necessarily have to be a Twitter URL, but only those are included in the Twitter @CocoaPodsFeed notifications.

Examples:


spec.social_media_url = 'https://twitter.com/cocoapods'

spec.social_media_url = 'https://groups.google.com/forum/#!forum/cocoapods'

Parameters:

  • social_media_url (String)

    the social media URL.


230
# File 'lib/cocoapods-core/specification/dsl.rb', line 230

root_attribute :social_media_url

#source=(git) ⇒ Object #source=(svn) ⇒ Object #source=(hg) ⇒ Object #source=(http) ⇒ Object

The location from where the library should be retrieved.

Examples:

Specifying a Git source with a tag. This is how most OSS Podspecs work.


spec.source = { :git => 'https://github.com/AFNetworking/AFNetworking.git',
                :tag => spec.version.to_s }

Using a tag prefixed with 'v' and submodules.


spec.source = { :git => 'https://github.com/typhoon-framework/Typhoon.git',
                :tag => "v#{spec.version}", :submodules => true }

Using Subversion with a tag.


spec.source = { :svn => 'http://svn.code.sf.net/p/polyclipping/code', :tag => '4.8.8' }

Using Mercurial with the same revision as the spec's semantic version string.


spec.source = { :hg => 'https://bitbucket.org/dcutting/hyperbek', :revision => "#{s.version}" }

Using HTTP to download a compressed file of the code. It supports zip, tgz, bz2, txz and tar.


spec.source = { :http => 'http://dev.wechatapp.com/download/sdk/WeChat_SDK_iOS_en.zip' }

Using HTTP to download a file using a hash to verify the download. It supports sha1 and sha256.


spec.source = { :http => 'http://dev.wechatapp.com/download/sdk/WeChat_SDK_iOS_en.zip',
                :sha1 => '7e21857fe11a511f472cfd7cfa2d979bd7ab7d96' }

Overloads:

  • #source=(git) ⇒ Object

    Parameters:

    • git (Hash)

    Options Hash (git):

    • :git (String)

      git source URI

    • :tag (String)

      version tag

    • :submodules (Bool)

      Whether to checkout submodules

    • :branch (String)

      branch name

    • :commit (String)

      commit hash

  • #source=(svn) ⇒ Object

    Parameters:

    • svn (Hash)

    Options Hash (svn):

    • :svn (String)

      svn source URI

    • :tag (String)

      version tag

    • :folder (String)

      folder

    • :revision (String)

      revision

  • #source=(hg) ⇒ Object

    Parameters:

    • hg (Hash)

    Options Hash (hg):

    • :hg (String)

      mercurial source URI

    • :revision (String)

      revision

  • #source=(http) ⇒ Object

    Parameters:

    • http (Hash)

    Options Hash (http):

    • :http (String)

      compressed source URL

    • :type (String)

      file type. Supports zip, tgz, bz2, txz and tar

    • :sha1 (String)

      SHA hash. Supports SHA1 and SHA256


369
370
371
372
# File 'lib/cocoapods-core/specification/dsl.rb', line 369

root_attribute :source,
:container => Hash,
:keys      => SOURCE_KEYS,
:required  => true

#source_files=(source_files) ⇒ Object

The source files of the Pod.

Examples:


spec.source_files = 'Classes/**/*.{h,m}'

spec.source_files = 'Classes/**/*.{h,m}', 'More_Classes/**/*.{h,m}'

Parameters:

  • source_files (String, Array<String>)

    the source files of the Pod.


1200
1201
1202
# File 'lib/cocoapods-core/specification/dsl.rb', line 1200

attribute :source_files,
:container     => Array,
:file_patterns => true

#static_framework=(flag) ⇒ Object

Indicates, that if use_frameworks! is specified, the pod should include a static library framework.

Examples:


spec.static_framework = true

Parameters:

  • flag (Bool)

    Indicates, that if use_frameworks! is specified, the pod should include a static library framework.


507
508
509
# File 'lib/cocoapods-core/specification/dsl.rb', line 507

root_attribute :static_framework,
:types => [TrueClass, FalseClass],
:default_value => false

#subspec(name, &block) ⇒ Object

Represents specification for a module of the library.


Subspecs participate on a dual hierarchy.

On one side, a specification automatically inherits as a dependency all it children ‘sub-specifications’ (unless a default subspec is specified).

On the other side, a ‘sub-specification’ inherits the value of the attributes of the parents so common values for attributes can be specified in the ancestors.

Although it sounds complicated in practice it means that subspecs in general do what you would expect:

pod 'ShareKit', '2.0'

Installs ShareKit with all the sharers like ShareKit/Evernote, ShareKit/Facebook, etc, as they are defined as subspecs.

pod 'ShareKit/Twitter',  '2.0'
pod 'ShareKit/Pinboard', '2.0'

Installs ShareKit with only the source files for ShareKit/Twitter, ShareKit/Pinboard. Note that, in this case, the ‘sub-specifications’ to compile need the source files, the dependencies, and the other attributes defined by the root specification. CocoaPods is smart enough to handle any issues arising from duplicate attributes.

Examples:

Subspecs with different source files.


subspec 'Twitter' do |sp|
  sp.source_files = 'Classes/Twitter'
end

subspec 'Pinboard' do |sp|
  sp.source_files = 'Classes/Pinboard'
end

Subspecs referencing dependencies to other subspecs.


Pod::Spec.new do |s|
  s.name = 'RestKit'

  s.subspec 'Core' do |cs|
    cs.dependency 'RestKit/ObjectMapping'
    cs.dependency 'RestKit/Network'
    cs.dependency 'RestKit/CoreData'
  end

  s.subspec 'ObjectMapping' do |os|
  end
end

Nested subspecs.


Pod::Spec.new do |s|
  s.name = 'Root'

  s.subspec 'Level_1' do |sp|
    sp.subspec 'Level_2' do |ssp|
    end
  end
end

1534
1535
1536
1537
1538
# File 'lib/cocoapods-core/specification/dsl.rb', line 1534

def subspec(name, &block)
  subspec = Specification.new(self, name, &block)
  @subspecs << subspec
  subspec
end

#summary=(summary) ⇒ Object

A short (maximum 140 characters) description of the Pod.


The description should be short, yet informative. It represents the tag line of the Pod and there is no need to specify that a Pod is a library (they always are).

The summary is expected to be properly capitalised and containing the correct punctuation.

Examples:


spec.summary = 'Computes the meaning of life.'

Parameters:

  • summary (String)

    A short description of the Pod.


396
397
# File 'lib/cocoapods-core/specification/dsl.rb', line 396

root_attribute :summary,
:required => true

#swift_versions=(version) ⇒ Object

The versions of Swift that the specification supports. A version of '4' will be treated as '4.0' by CocoaPods and not '4.1' or '4.2'.

Note The Swift compiler mostly accepts major versions and sometimes will honor minor versions. While CocoaPods allows specifying a minor or patch version it might not be honored fully by the Swift compiler.

Examples:


spec.swift_versions = ['3.0']

spec.swift_versions = ['3.0', '4.0', '4.2']

spec.swift_version = '3.0'

spec.swift_version = '3.0', '4.0'

Parameters:

  • swift_versions (String, Array<String>)

158
159
160
# File 'lib/cocoapods-core/specification/dsl.rb', line 158

root_attribute :swift_versions,
:container => Array,
:singularize => true

#test_spec(name = 'Tests', &block) ⇒ Object

Represents a test specification for the library. Here you can place all your tests for your podspec along with the test dependencies.


Examples:


Pod::Spec.new do |spec|
  spec.name = 'NSAttributedString+CCLFormat'

  spec.test_spec do |test_spec|
    test_spec.source_files = 'NSAttributedString+CCLFormatTests.m'
    test_spec.dependency 'Expecta'
  end
end

1653
1654
1655
1656
1657
# File 'lib/cocoapods-core/specification/dsl.rb', line 1653

def test_spec(name = 'Tests', &block)
  subspec = Specification.new(self, name, true, &block)
  @subspecs << subspec
  subspec
end

#tvosPlatformProxy

Provides support for specifying tvOS attributes.

Examples:

spec.tvos.source_files = 'Classes/tvos/**/*.{h,m}'

Returns:


1771
1772
1773
# File 'lib/cocoapods-core/specification/dsl.rb', line 1771

def tvos
  PlatformProxy.new(self, :tvos)
end

#user_target_xcconfig=(value) ⇒ Object

Specifies flags to add to the final aggregate target xcconfig file, which propagates to non-overridden and inheriting build settings to the integrated user targets.


This attribute is not recommended as Pods should not pollute the build settings of the user project and this can cause conflicts.

Multiple definitions for build settings that take multiple values will be merged. The user is warned on conflicting definitions for custom build settings and build settings that take only one value.

Typically clang compiler flags or precompiler macro definitions go in here if they are required when importing the pod in the user target. Note that, this influences not only the compiler view of the public interface of your pod, but also all other integrated pods alongside to yours. You should always prefer pod_target_xcconfig, which can contain the same settings, but only influence the toolchain when compiling your pod target.

Examples:


spec.user_target_xcconfig = { 'MY_SUBSPEC' => 'YES' }

Parameters:

  • value (Hash{String => String})

    Key-value pairs representing build settings.


928
929
930
# File 'lib/cocoapods-core/specification/dsl.rb', line 928

attribute :user_target_xcconfig,
:container => Hash,
:inherited => true

#vendored_frameworks=(*frameworks) ⇒ Object

The paths of the framework bundles that come shipped with the Pod. Supports both .framework and .xcframework bundles. The frameworks will be made available to the Pod and to the consumers of the pod.

Examples:


spec.ios.vendored_frameworks = 'Frameworks/MyFramework.framework'

spec.vendored_frameworks = 'MyFramework.framework', 'TheirFramework.xcframework'

Parameters:

  • vendored_frameworks (String, Array<String>)

    A list of framework bundles paths.


1278
1279
1280
1281
# File 'lib/cocoapods-core/specification/dsl.rb', line 1278

attribute :vendored_frameworks,
:container => Array,
:file_patterns => true,
:singularize => true

#vendored_libraries=(*frameworks) ⇒ Object

The paths of the libraries that come shipped with the Pod. The libraries will be available to the Pod and the consumers of the Pod.

Examples:


spec.ios.vendored_library = 'Libraries/libProj4.a'

spec.vendored_libraries = 'libProj4.a', 'libJavaScriptCore.a'

Parameters:

  • vendored_libraries (String, Array<String>)

    A list of library paths.


1301
1302
1303
1304
# File 'lib/cocoapods-core/specification/dsl.rb', line 1301

attribute :vendored_libraries,
:container => Array,
:file_patterns => true,
:singularize => true

#version=(version) ⇒ Object

The version of the Pod. CocoaPods follows semantic versioning.

Examples:


spec.version = '0.0.1'

Parameters:

  • version (String)

    the version of the Pod.


127
128
# File 'lib/cocoapods-core/specification/dsl.rb', line 127

root_attribute :version,
:required => true

#watchosPlatformProxy

Provides support for specifying watchOS attributes.

Examples:

spec.watchos.source_files = 'Classes/watchos/**/*.{h,m}'

Returns:


1782
1783
1784
# File 'lib/cocoapods-core/specification/dsl.rb', line 1782

def watchos
  PlatformProxy.new(self, :watchos)
end

#weak_frameworks=(*frameworks) ⇒ Object

A list of frameworks that the user’s target needs to weakly link against.

Examples:


spec.weak_framework = 'Twitter'

spec.weak_frameworks = 'Twitter', 'SafariServices'

Parameters:

  • weak_frameworks (String, Array<String>)

    A list of frameworks names.


834
835
836
837
# File 'lib/cocoapods-core/specification/dsl.rb', line 834

attribute :weak_frameworks,
:container   => Array,
:singularize => true,
:inherited => true