Skip to content


Subversion checkout URL

You can clone with
Download ZIP
Tag: 0.17.0.rc5
Fetching contributors…

Cannot retrieve contributors at this time

1047 lines (767 sloc) 38.9 KB



Bug fixes
  • Restored compatibility with Podfile::TargetDefinition#copy_resources_script_name in the Podfile hooks.
  • Updated copy resources script so that it will use base internationalization #846
  • Robustness against an empty configuration file.
  • Fixed a crash with pod push #848
  • Fixed an issue which lead to the creation of a Pods project which would crash Xcode. #854
  • Fixed a crash related to a PBXVariantGroup present in the frameworks build phase of client targets. #859
Ancillary enhancements
  • The podspec option of the pod directive of the Podfile DSL now accepts folders.



Bug fixes
  • CocoaPods will not crash anymore if the license file indicated on the spec doesn't exits.
  • Pre install hooks are called before the Pods are cleaned.
  • Fixed and issue which prevent the inclusion of OTHER_CFLAGS and OTHER_CPLUSPLUSFLAGS in the release builds of the Pods project.
  • Fixed pod lint --local
  • Fixed the --allow-warnings of pod push #835
  • Added copy_resources_script_name to the library representation used in the hooks. #837
Ancillary enhancements
  • General improvements to pod ipc.
  • Added pod ipc repl subcommand.



Bug fixes
  • Restored output coloring.
  • Fixed a crash related to subspecs #819
  • Git repos were not cached for dependencies with external sources. #820
  • Restored support for directories for the preserve_patterns specification attribute. #823




At some point in future the master repo will be switched to the YAML format of specifications. This means that specifications with hooks (or any other kind of dynamic logic) will not be accepted. Please let us know if there is need for other DSL attributes or any other kind of support.

Currently the following specifications fail to load as they depended on the CocoaPods internals and need to be updated:

  • LibComponentLogging-pods/0.0.1/LibComponentLogging-pods.podspec
  • RestKit/0.9.3/RestKit.podspec
  • Three20/1.0.11/Three20.podspec
  • ARAnalytics/1.1/ARAnalytics.podspec

Other specifications, might present compatibility issues for the reasons presented below.

  • Subspecs do not inherit the files patterns from the parent spec anymore. This feature made the implementation more complicated and was not easy to explain to podspecs maintainers. Compatibility can be easily fixed by adding a 'Core' subspec.
  • Support for inline podspecs has been removed.
  • The support for Rake::FileList is being deprecated, in favor of a more consistent DSL. Rake::FileList also presented issues because it would access the file system as soon as it was converted to an array.
  • The hooks architecture has been re-factored and might present incompatibilities (please open an issue if appropriate).
  • The requires_arc attribute default value is transitioning from false to true. In the meanwhile a value is needed to pass the lint.
  • Deprecated copy_header_mapping hook.
  • Deprecated exclude_header_search_paths attribute.
  • External sources are not supported in the dependencies of specifications anymore. Actually they never have been supported, they just happened to work.
  • Podfile:
    • It is not needed to specify the platform anymore (unless not integrating) as CocoaPods now can infer the platform from the integrated targets.
  • Specification:
    • preferred_dependency has been renamed to default_subspec.
    • Added exclude_files attribute.
    • Added screenshots attribute.
    • Added default values for attributes like source_files.
  • Released preview documentation.
  • CocoaPods now has support for working in teams and not committing the Pods folder, as it will keep track of the status of the Pods folder. #552
  • Simplified installation: no specific version of ruby gems is required anymore.
  • The workspace is written only if needed greatly reducing the occasions in which Xcode asks to revert.
  • The Lockfile is sorted reducing the SCM noise. #591
  • Added Podfile, Frameworks, and Resources to the Pods project. #647 #588
  • Adds new subcommand pod spec cat NAME to print a spec file to standard output.
  • Specification hooks are only called when the specification is installed.
  • The --no-clean option of the pod spec lint command now displays the Pods project for inspection.
  • It is now possible to specify default values for the configuration in ~/.cocoapods/config.yaml (default values).
  • CocoaPods now checks the checksums of the installed specifications and reinstalls them if needed.
  • Support for YAML formats of the Podfile and the Specification.
  • Added new command pod ipc to provide support for inter process communication through YAML formats.
  • CocoaPods now detects if the folder of a Pod is empty and reinstalls it. #534
  • Install hooks and the prefix_header_contents attribute are supported in subspecs. #617
  • Dashes are now supported in the versions of the Pods. #293
Bug fixes
  • CocoaPods is not confused anymore by target definitions with different activated subspec. #535
  • CocoaPods is not confused anymore by to dependencies from external sources. #548
  • The git cache will always update against the remote if a tag is requested, resolving issues where library maintainers where updating the tag after a lint and would be confused by CocoaPods using the cached commit for the tag. #407 #596
  • Major clean up and refactor of the whole code base.
  • Extracted the core classes into cocoapods-core gem.
  • Extracted downloader into cocoapods-downloader.
  • Extracted command-line command & option handling into CLAide.



  • Add explicit flattening option to Downloader:Http: :flatten => true. #814 #812 #1314
Bug fixes
  • Explicitely require date in the gemspec for Ruby 2.0.0. 34da3f7



Bug fixes
  • Only flatten tarballs, not zipballs, from HTTP sources. A zipball can contain single directories in the root that should be preserved, for instance a framework bundle. This reverts part of the change in 0.16.1. NOTE This will break some podspecs that were changed after 0.16.1. #783 #727
  • Never consider aggregate targets in the user’s project for integration. #729 #784
  • Support comments on all build phases, groups and targets in Xcode projects. #51
  • Ensure default Xcode project values are copied before being used. b43087c
  • Block assertions in Release builds. #53 #803 #802
  • Compile Core Data model files. #795
  • Add Xcodeproj::Differ, which shows differences between Xcode projects. 308941e



Bug fixes
  • Quote storyboard and xib paths in ‘copy resource’ script. #740
  • Fix use of podspec directive in Podfile with no options specified. #768
  • Generate Mac OS X Pods target with the specified deployment target. #757
  • Disable libSystem objects for ARC libs that target older platforms. This applies when the deployment target is set to < iOS 6.0 or OS X 10.8, or not specified at all. #352 #1161
  • Mark header source files as ‘Project’ not ‘Public’. #747
  • Add PBXGroup as acceptable PBXFileReference value. #49
  • Make xcodeproj show without further arguments actually work. #45
  • Added support for pre-download over Mercurial. #750



Bug fixes
  • After unpacking source from a HTTP location, move the source into the parent dir if the archive contained only one child. This is done to make it consistent with how source from other types of locations are described in a podspec. NOTE This might break some podspecs that assumed the incorrect layout. #727 #728
  • Remove duplicate option in pod update command. #725
  • Memory fixes in Xcodeproj. #43
Xcodeproj Enhancements
  • Sort contents of xcconfig files by setting name. #591
  • Add helpers to get platform name, deployment target, and frameworks build phases
  • Take SDKROOT into account when adding frameworks.



  • Use Rake 0.9.4 #657



  • The usage of specifications defined in a Podfile is deprecated. Use the :podspec option with a file path instead. Complete removal will most probably happen in 0.17.0. #549 #616 #525
Bug fixes
  • Always consider inline podspecs as needing installation.
  • Fix detection when the lib has already been integrated with the user’s target. #643 #614 #613



Bug fixes
  • Fix for Rake 0.9.3 #657



  • Added support for copying frameworks to the app bundle. #597
Bug fixes
  • Ignore PBXReferenceProxy while integrating into user project. #626
  • Added support for PBXAggregateTarget and PBXLegacyTarget. #615
  • Added support for PBXReferenceProxy. #612



Bug fixes
  • Fix for uninitialized constant Xcodeproj::Constants error.



  • Xcodeproj partial rewrite. #565 #561
    • Performance improvements in the Generating support files phase.
    • Better support for editing existing projects and sorting groups.



  • Added support for .hh headers. #576
Bug fixes
  • Restored support for running CocoaPods without a terminal. #575 #577
  • The git cache now always uses a barebones repo preventing a number of related issues. #581 #569
  • Improved fix for the issue that lead to empty directories for Pods. #572 #602
  • Xcodeproj robustness against invalid values, such as malformed UTF8. #592



  • Show error if syntax error in Podfile or Podfile.lock.
Bug fixes
  • Fixed an issue that lead to empty directories for Pods. #519 #568
  • Fixed a crash related to the RubyGems version informative. #570
  • Fixed a crash for pod outdated. #567
  • Fixed an issue that lead to excessively slow sets computation.



  • Pod install will update the specs repo only if needed. #533
  • CocoaPods now searches for the highest version of a Pod on all the repos. #85
  • Added a pre install hook to the Podfile and to root specifications. #486
  • Support for header_mappings_dir attribute in subspecs.
  • Added support for linting a Podspec using the files from its folder pod spec lint --local
  • Refactored UI.
  • Added support for Podfiles named CocoaPods.podfile which allows to associate an editor application in Mac OS X. #528
  • Added config option to disable the new version available message. #448
  • Added support for extracting .tar.bz2 files #522
  • Improved feedback for errors of repo subcommands. #505
Bug fixes
  • Subspecs namespacing has been restored. #541
  • Improvements to the git cache that should be more robust. #517
    • In certain conditions pod setup would execute twice.
  • The git cache now is updated if a branch is not found #514
  • Forcing UTF-8 encoding on licenses generation in Ruby 1.9. #530
  • Added support for .hpp headers. #244



Bug fixes
  • In certain conditions the spec of an external would have been overridden by the spec in the root of a Pod. #489
  • CocoaPods now uses a recent version of Octokit. #490
  • Fixed a bug that caused Pods with preferred dependencies to be always installed. Specs#464
  • Fixed Xcode 4.4+ artwork warning. Specs#508



Bug fixes
  • Fix incorrect name for Pods from external sources with preferred subspecs. #485
  • Prevent duplication of Pod with a local source and mutliple activated specs. #485
  • Fixed the uninitialized constant Pod::Lockfile::Digest error. #484



  • Improve installation process by preserving the installed versions of Pods across installations and machines. A Pod is reinstalled if:
    • the version required in the Podfile changes and becomes incompatible with the installed one. #191
    • the external source changes.
    • the head status changes (from disabled to enabled or vice-versa).
  • Introduce pod update command that installs the dependencies of the Podfile ignoring the lockfile Podfile.lock. #131
  • Introduce pod outdated command that shows the pods with known updates.
  • Add :local option for dependencies which will use the source files directly from a local directory. This is usually used for libraries that are being developed in parallel to the end product (application/library). #458, #415, #156.
  • Folders of Pods which are no longer required are removed during installation. #298
  • Add meaningful error messages
    • ia podspec can’t be found in the root of an external source. #385, #338, #337.
    • a subspec name is misspelled. #327
    • an unrecognized command and/or argument is provided.
  • The subversion downloader now does an export instead of a checkout, which makes it play nicer with SCMs that store metadata in each directory. #245
  • Now the Podfile is added to the Pods project for convenient editing.
Bug fixes
  • The git cache now fetches the tags from the remote if it can’t find the reference.
  • Xcodeproj now builds on 10.6.8 and Travis CI without symlinking headers.
  • Only try to install, add source files to the project, and clean a Pod once. #376
  • External Pods might be reinstalled due to the migration to the new Podfile.lock.
  • The SCM reference of head Pods is not preserved across machines.
  • Pods whose inline specification changed are not detected as modified. As a workaround, remove their folder stored in Pods.
  • Pods whose specification changed are not detected as modified. As a workaround, remove their folder stored in Pods.



  • Add Podfile podspec which allows to use the dependencies of a podspec file. #162
  • Check if any of the build settings defined in the xcconfig files is overridden. #92
  • The Linter now checks that there are no compiler flags that disable warnings.
Bug fixes
  • The final project isn’t affected anymore by the inhibit_all_warnings! option.
  • Support for redirects while using podspec from an url. #462



  • The documentation is generated using the public headers if they are specified.
  • In case of a download failure the installation is aborted and the error message is shown.
  • Git submodules are initialized only if requested.
  • Don’t impose a certain structure of the user’s project by raising if no ‘Frameworks’ group exists. #431
  • Support for GitHub Gists in the linter.
  • Allow specifying ARC settings in subspecs.
  • Add Podfile inhibit_all_warnings! which will inhibit all warnings from the Pods library. #209
  • Make the Pods Xcode project prettier by namespacing subspecs in nested groups. #466



Bug fixes
  • Fixed a crash related to subspecs without header files. [#449]
  • Git submodules are loaded after the appropriate referenced is checked out and will be not loaded anymore in the cache. [#451]
  • Fixed SVN support for the head version. [#432]



  • Added support for public headers. [#440]
  • Added pod repo lint. [#423]
  • Improved support for :head option and SVN repositories.
  • When integrating Pods with a project without "Frameworks" group in root of the project, raise an informative message. #431
  • Dropped support for legacy config.ios? and config.osx?
Bug fixes
  • Version message now correctly terminates with a 0 exit status.
  • Resolved an issue that lead to git error messages in the error report.



  • Added a --local-only option to pod push so that developers can push locally and test before pushing to a remote. #405
  • Added line number information for errors generated in the Podfile. #408
  • Pods stored in git repositories now initialize submodules. #406
Bug fixes
  • Removed note about the post install hook form the linter.
  • Improved xcodebuild error detection in the linter.
  • Ensure the git cache exists, before updating it, when trying to install the ‘bleeding edge’ of a pod. #426
  • Clean downloaded external pods after resolving and activating (sub)specs. #414
  • Support tar.gz as filename in a HTTP source. #428



Bug fixes
  • When generating the PodsDummy class, make that class unique to each target. #402
  • Raise an informative error message when the platform in the Podfile is omitted or incorrect. #403



Bug fixes
  • CocoaPods 0.9.x needs Xcodeproj 0.3.0.



  • Force downloading the ‘bleeding edge’ version of a pod with the :head flag. #392
  • Support for weak frameworks. #263
  • Use double quotes when shelling out. This makes a url like $HOME/local/lib work. #396
Bug fixes
  • Relaxed linter to accepts pod that only specify paths to preserve (like TuneupJS).
  • Gender neutralization of podfile documentation. #384
  • Exit early when using an old RubyGems version (< 1.4.0). These versions contain subtle bugs related to prerelease version comparisons. Unfortunately, OS X >= 10.7 ships with 1.3.6. #398



Breaking change

Syntax change in Podfile: dependency has been replaced by pod.

ruby platform :ios pod 'JSONKit', '~> 1.4' pod 'Reachability', '~> 2.0.4'

Bug fixes
  • Properly quote all paths given to Git.



  • Added support for branches in git repos.
  • Added support for linting remote files, i.e. pod spec lint http://raw/file.podspec.
  • Improved Spec create template.
  • The indentation is automatically stripped for podspecs strings.
Bug fixes
  • The default warnings of Xcode are not overriden anymore.
  • Improvements to the detection of the license files.
  • Improvements to pod spec lint.
  • CocoaPods is now case insensitive.



Bug fixes
  • Switched to master branch for specs repo.
  • Fixed a crash with pod spec lint related to preserve_paths.
  • Fixed a bug that caused subspecs to not inherit the compiler flags of the top level specification.
  • Fixed a bug that caused duplication of system framworks.


A full list of all the changes since 0.5.1 can be found here.

Link with specific targets

CocoaPods can now integrate all the targets specified in your Podfile.

To specify which target, in your Xcode project, a Pods target should be linked with, use the link_with method like so:

``ruby platform :ios

workspace 'MyWorkspace'

link_with ['MyAppTarget', 'MyOtherAppTarget'] dependency 'JSONKit'

target :test, :exclusive => true do xcodeproj 'TestProject', 'Test' => :debug link_with 'TestRunnerTarget' dependency 'Kiwi' end ``

NOTE: As you can see it can take either one target name, or an array of names.

  • If no explicit Xcode workspace is specified and only one project exists in the same directory as the Podfile, then the name of that project is used as the workspace’s name.

  • If no explicit Xcode project is specified for a target, it will use the Xcode project of the parent target. If no target specifies an expicit Xcode project and there is only one project in the same directory as the Podfile then that project will be used.

  • If no explicit target is specified, then the Pods target will be linked with the first target in your project. So if you only have one target you do not need to specify the target to link with.

See #76 for more info.

Finally, CocoaPods will add build configurations to the Pods project for all configurations in the other projects in the workspace. By default the configurations are based on the Release configuration, to base them on the Debug configuration you will have to explicitely specify them as can be seen above in the following line:

xcodeproj 'TestProject', 'Test' => :debug


CocoaPods will now generate documentation for every library with the appledoc tool and install it into Xcode’s documentation viewer.

You can customize the settings used like so:

s.documentation = { :appledoc => ['--product-name', 'My awesome project!'] }

Alternatively, you can specify a URL where an HTML version of the documentation can be found:

s.documentation = { :html => '' }

See #149 and #151 for more info.

Licenses & Documentation

CocoaPods will now generate two 'Acknowledgements' files for each target specified in your Podfile which contain the License details for each Pod used in that target (assuming details have been specified in the Pod spec).

There is a markdown file, for general consumption, as well as a property list file that can be added to a settings bundle for an iOS application.

You don't need to do anything for this to happen, it should just work.

If you're not happy with the default boilerplate text generated for the title, header and footnotes in the files, it's possible to customise these by overriding the methods that generate the text in your Podfile like this:

class ::Pod::Generator::Acknowledgements
  def header_text
    "My custom header text"

You can even go one step further and customise the text on a per target basis by checking against the target name, like this:

class ::Pod::Generator::Acknowledgements
  def header_text
    if @target_definition.label.end_with?("MyTargetName")
      "Custom header text for MyTargetName"
      "Custom header text for other targets"

Finally, here's a list of the methods that are available to override:


Introduced two new classes: LocalPod and Sandbox.

The Sandbox represents the entire contents of the POD_ROOT (normally SOURCE_ROOT/Pods). A LocalPod represents a pod that has been installed within the Sandbox.

These two classes can be used as better homes for various pieces of logic currently spread throughout the installation process and provide a better API for working with the contents of this directory.

Xcodeproj API

All Xcodeproj APIs are now in snake_case, instead of camelCase. If you are manipulating the project from your Podfile's post_install hook, or from a podspec, then update these method calls.


  • #188: list command now displays the specifications introduced in the master repo if it is given as an option the number of days to take into account.

  • #188: Transferred search layout improvements and options to list command.

  • #166: Added printing of homepage and source to search results.

  • #177: Added --stat option to display watchers and forks for pods hosted on GitHub.

  • #177: Introduced colors and tuned layout of search.

  • #112: Introduced --push option to $ pod setup. It configures the master spec repository to use the private push URL. The change is preserved in future calls to $ pod setup.

  • #153: It is no longer required to call $ pod setup.

  • #163: Print a template for a new ticket when an error occurs.

  • Added a new Github-specific downloader that can download repositories as a gzipped tarball.

  • No more global state is kept during resolving of dependencies.

  • Updated Xcodeproj to have a friendlier API.


  • #142: Xcode 4.3.2 no longer supports passing the -fobj-arc flag to the linker and will fail to build. The addition of this flag was a workaround for a compiler bug in previous versions. This flag is no longer included by default - to keep using this flag, you need to add set_arc_compatibility_flag! to your Podfile.

  • #183: Fix for .DS_Store file in ~/.cocoapods prevents $ pod install from running.

  • #134: Match IPHONEOS_DEPLOYMENT_TARGET build setting with deployment_target option in generated Pods project file.

  • #142: Add -fobjc-arc to OTHER_LD_FLAGS if any pods require ARC.

  • #148: External encoding set to UTF-8 on Ruby 1.9 to fix crash caused by non-ascii characters in pod description.

  • Ensure all header search paths are quoted in the xcconfig file.

  • Added weak quoting to ibtool input paths.


No longer requires MacRuby. Runs on MRI 1.8.7 (OS X system version) and 1.9.3.

A full list of all the changes since 0.3.0 can be found here.


Oops, accidentally skipped this version.


Multiple targets

Add support for multiple static library targets in the Pods Xcode project with different sets of depedencies. This means that you can create a separate library which contains all dependencies, including extra ones that you only use in, for instance, a debug or test build. [docs]

# This Podfile will build three static libraries:
# * libPods.a
# * libPods-debug.a
# * libPods-test.a

# This dependency is included in the `default` target, which generates the
# `libPods.a` library, and all non-exclusive targets.
dependency 'SSCatalog'

target :debug do
  # This dependency is only included in the `debug` target, which generates
  # the `libPods-debug.a` library.
  dependency 'CocoaLumberjack'

target :test, :exclusive => true do
  # This dependency is *only* included in the `test` target, which generates
  # the `libPods-test.a` library.
  dependency 'Kiwi'

Install libraries from anywhere

A dependency can take a git url if the repo contains a podspec file in its root, or a podspec can be loaded from a file or HTTP location. If no podspec is available, a specification can be defined inline in the Podfile. [docs]

# From a spec repo.
dependency 'SSToolkit'

# Directly from the Pod’s repo (if it contains a podspec).
dependency 'SSToolkit', :git => ''

# Directly from the Pod’s repo (if it contains a podspec) with a specific commit (or tag).
dependency 'SSToolkit', :git    => '',
                        :commit => '2adcd0f81740d6b0cd4589af98790eee3bd1ae7b'

# From a podspec that's outside a spec repo _and_ the library’s repo. This can be a file or http url.
dependency 'SSToolkit', :podspec => ''

# If no podspec is available anywhere, you can define one right in your Podfile.
dependency do |s|         = 'SSToolkit'
  s.version      = '0.1.3'
  s.platform     = :ios
  s.source       = { :git => '', :commit => '2adcd0f81740d6b0cd4589af98790eee3bd1ae7b' }
  s.resources    = 'Resources'
  s.source_files = 'SSToolkit/**/*.{h,m}'
  s.frameworks   = 'QuartzCore', 'CoreGraphics'

  def s.post_install(target)
    prefix_header = config.project_pods_root + target.prefix_header_filename'a') do |file|
      file.puts(%{#ifdef __OBJC__\n#import "SSToolkitDefines.h"\n#endif})

Add a post_install hook to the Podfile class

This allows the user to customize, for instance, the generated Xcode project before it’s written to disk. [docs]

# Enable garbage collection support for MacRuby applications.
post_install do |installer|
  installer.project.targets.each do |target|
    target.build_configurations.each do |config|
      config.build_settings['GCC_ENABLE_OBJC_GC'] = 'supported'


Generate a Podfile.lock file next to the Podfile, which contains a manifest of your application’s dependencies and their dependencies.

  - JSONKit (1.4)
  - LibComponentLogging-Core (1.1.4)
  - LibComponentLogging-NSLog (1.0.2):
    - LibComponentLogging-Core (>= 1.1.4)
  - RestKit-JSON-JSONKit (0.9.3):
    - JSONKit
    - RestKit (= 0.9.3)
  - RestKit-Network (0.9.3):
    - LibComponentLogging-NSLog
    - RestKit (= 0.9.3)
  - RestKit-ObjectMapping (0.9.3):
    - RestKit (= 0.9.3)
    - RestKit-Network (= 0.9.3)

  - RestKit (0.9.3)

  - RestKit-JSON-JSONKit
  - RestKit-ObjectMapping

Generate Xcode projects from scratch

We no longer ship template projects with the gem, but instead generate them programmatically. This code has moved out into its own Xcodeproj gem, allowing you to automate Xcode related tasks.

Jump to Line
Something went wrong with that request. Please try again.