Fetching contributors…
Cannot retrieve contributors at this time
420 lines (289 sloc) 13.1 KB

0.8.1 (unreleased)


  • Support for weak frameworks.
Bug fixes
  • Relaxed linter to accepts pod that only specify paths to preserve (like TuneupJS).
  • Gender neutralization of podfile documentation.



Breaking change

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

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:

platform :ios

workspace 'MyWorkspace'

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

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

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.