SlideShare a Scribd company logo
Using CocoaPods
Library Dependency Management for Xcode

with Jeffrey Sambells!
http://JeffreySambells.com
Why CocoaPods?
Build dependencies
Error-prone

+
Difficult upgrade path

Cluttered project

Link binary with libraries

=
Header search path

Libraries in version control
No transitive dependencies
Automatic add/remove

Automatic build configuration

Project is always shippable!
Discoverability

+

+

Large ecosystem

=

Separation of third-party code

Handles ARC and no ARC
Only includes the relevant source files
Installation…
$ sudo gem update -- system
$ sudo gem install cocoapods
$ pod setup
Using CocoaPods
in Xcode
Cocoapods Workflow
1. Create your Podfile
2. Search for and add your dependencies
3. Run pod command
4. Open your new .xcworkspace (it will be created)
5. ???
6. Profit!
Creating the Podfile
$ cd /path/to/project/folder
$ touch Podfile
Simple
pod 'AFNetworking'
pod 'ObjectiveSugar', '~> 0.5'
Advanced
platform :ios, '7.0'
inhibit_all_warnings!
!
workspace 'Example.xcworkspace'
!
pod 'AFNetworking', :git => 'https://github.com/gowalla/
AFNetworking.git', :commit => '082f8319af'
!
pod 'MySecretPod', :path => ‘~/Documents/MySecretPod'
!
pod 'BleedingEdgePod', :head
!
target :KIFTests, :exclusive => false do
pod 'KIF'
end
!
post_install do |installer|
installer.project.targets.each do |target|
puts "#{target.name}"
end
end
Install/Update into Project
$ cd /path/to/project/folder
$ pod

Hint: use pod --verbose if you want more info.
The Podfile and
Dependencies
General Settings
Specify a platform and minimum version

platform :ios, '6.1'
!

Optionally specify project and workspace files.

For example MyProject.xcodeproj and
MyProject.xcworkspace

xcodeproj 'MyProject'
workspace 'MyWorkspace'
Dependencies (Pods)
Specify pod name and other options as
necessary:


•




pod ‘PodName'

Some pods use sub specs to group optional
functionality so you need to specify them as well:


•







 pod

‘PodName'
pod ‘PodName/SubSpecA’
pod ‘PodName/SubSpecB‘
Pod Versioning x.x.x
•

References a specific git tag using a semantic version.

•

Specify no version, a specific version, a logical version
or an optimistic version.








pod
pod
pod
pod




•

‘PodName’
‘PodName’, ‘0.1.0’
‘PodName’, ‘<= 0.1.0’
‘PodName’, ‘~> 0.1.0’

You can also use :head to get the most bleeding edge
version.
pod ‘PodName’, :head
Logical Versions
•

'> 0.1' Any version higher than 0.1

•

'>= 0.1' Version 0.1 and any higher version

•

'< 0.1' Any version lower than 0.1

•

'<= 0.1' Version 0.1 and any lower version
Optimistic Versions
•

'~> 0.1.2' Version 0.1.2 and the versions up to
0.2, not including 0.2 and higher

•

'~> 0.1' Version 0.1 and the versions up to 1.0,
not including 1.1 and higher

•

'~> 0' Version 0 and higher, this is basically the
same as not having it.
Pod Sources
Pods load information from a podspec file.

The podspec files are located in…
•

the shared public spec repo at 

https://github.com/CocoaPods/Specs,

•

on your local machine,

•

in a private git repo.
Public Shared Specs
you only need to specify the name:


•

pod 'AFNetworking'

you can optionally specify a specific branch or
fork:


•




•

pod ‘AFNetworking’, :git => ‘https://github.com/
iamamused/AFNetworking.git'

and a specific commit:

pod ‘AFNetworking’, :git => ‘https://github.com/
myuser/AFNetworking.git', :commit => '082f8319af'
Local Podspecs
Load a podspec from your local machine
using :path






pod ‘MyAwesomePod’, path: => ‘../path/
MyAwesomePod.podspec’
Private Podspecs
Load a podspec from a private git repository using
:git (simiar to public specs)





pod ‘MyAwesomePod’, git: => ‘http://example.com/
MyAwesomePod.git’
Bonus
Code doesn’t have a pod? no problem. Make your
own pod spec for it and use that:
!
pod 'ExampleKit', :podspec => !'https://raw.github.com/gist/
123/ExampleKit.podspec'
Targets
Targets allow you to specify which Xcode target
have which pod dependencies.
Pod dependencies are applied to 

individual or multiple targets.
If no specific target is specified it 

only applies to the first target in your project!
Targets
Use link_with to specify multiple targets for all
pod dependencies:



pod ‘PodName’
link_with [‘MyApp’,’MyAppDemo’]
Targets
Or use target :targetname to specify targets
individually:
pod ‘PodName’
!
target :test, :exclusive => true do
pod 'Kiwi'
end
!

•

exclusive => true will only include pods declared in
the target block.

•

exclusive => false will include pods declared in the
target block along with those declared in the parent.
Hooks
pre_install

Make any changes to the Pods after they have
been downloaded but before they are installed.
!
!

pre_install do |installer_representation|
# Do something fancy!
end
Hooks
post_install

Make any changes to the generated Pods project,
or any other tasks you might want to perform.
!

post_install do |installer_representation|
installer_representation.project.targets.each do |target|
target.build_configurations.each do |config|
config.build_settings['GCC_ENABLE_OBJC_GC'] = 'supported'
end
end
end
Pod Best Practices
•

Check the source, documentation and upkeep
of a pod! Don’t blindly use them.

•

Include pods in source control? NO! err YES!

•

Use inhibit_all_warnings! to hide warnings in
Pods (after you check them).
DEMO TIME!
Thanks!
More Info"
cocoapods.org
JeffreySambells.com
@iamamused

More Related Content

PDF
CocoaPods introduction
PDF
Building a Drupal site with Git
PDF
Intro to Git for Drupal 7
PPTX
Cocoapods
PDF
Hacking on WildFly 9
PPTX
GitFlow, SourceTree and GitLab
PDF
The Modern Developer Toolbox
PPTX
Create Your First Cocoa pods
CocoaPods introduction
Building a Drupal site with Git
Intro to Git for Drupal 7
Cocoapods
Hacking on WildFly 9
GitFlow, SourceTree and GitLab
The Modern Developer Toolbox
Create Your First Cocoa pods

What's hot (20)

ODP
ATDD with Behat and Selenium (LDNSE6)
PDF
OpenShift: Java EE in the clouds
PDF
Symfony Live NYC 2014 - Rock Solid Deployment of Symfony Apps
PDF
Mastering composer
PPTX
Package Management on Windows with Chocolatey
PPTX
Introduction to bower
PDF
Kinect Workshop Part 1/2
PPTX
How to Build & Deploy a HelloWorld API function using Java on OpenShift in...
PDF
SymfonyCon Madrid 2014 - Rock Solid Deployment of Symfony Apps
PPTX
GitHub Presentation
PPTX
PhoneGap Day 2016 EU: Creating the Ideal Cordova Dev Environment
PPT
Git 101 - Crash Course in Version Control using Git
PPT
Dockerizing BDD : Ruby-Cucumber Example
PDF
PHP Conference Argentina 2013 - Independizate de tu departamento IT - Habilid...
PDF
Cocoa pods
PPTX
PHP & JavaScript & CSS Coding style
PDF
Continuous Updating with VersionEye at code.talks 2014
PDF
Docker Tooling for Eclipse
PDF
Deploying Symfony | symfony.cat
PDF
Testing all your code through HipChat in Docker
ATDD with Behat and Selenium (LDNSE6)
OpenShift: Java EE in the clouds
Symfony Live NYC 2014 - Rock Solid Deployment of Symfony Apps
Mastering composer
Package Management on Windows with Chocolatey
Introduction to bower
Kinect Workshop Part 1/2
How to Build & Deploy a HelloWorld API function using Java on OpenShift in...
SymfonyCon Madrid 2014 - Rock Solid Deployment of Symfony Apps
GitHub Presentation
PhoneGap Day 2016 EU: Creating the Ideal Cordova Dev Environment
Git 101 - Crash Course in Version Control using Git
Dockerizing BDD : Ruby-Cucumber Example
PHP Conference Argentina 2013 - Independizate de tu departamento IT - Habilid...
Cocoa pods
PHP & JavaScript & CSS Coding style
Continuous Updating with VersionEye at code.talks 2014
Docker Tooling for Eclipse
Deploying Symfony | symfony.cat
Testing all your code through HipChat in Docker
Ad

Similar to Using Cocoapods (20)

PDF
Cocoapods Overview - library dependency manager for iOS
PDF
Денис Лебедев-Управление зависимостями с помощью CocoaPods
PPTX
CocoaPods.pptx
PDF
CocoaPods Basic Usage
PPTX
What is CocoaPods and how to setup?
PDF
Cocoa tip for Cocoaheads Shanghai February 2016
PPTX
Private pod support using cocoa pods in ios
PDF
Cocoapods in action
KEY
CocoaPods
PDF
How cocoapods can enhance your iOS development - Amir Hayek, Toluna
PDF
Cocoa pods iOSDevUK 14 talk: managing your libraries
PDF
Practical Cocoapods
PDF
Codemotion 2013 - presentación cocoa pods
PDF
RubyMotion Inspect Conference - 2013. (With speaker notes.)
PDF
CocoaHeads Rennes #13 : CocoaPods
PDF
Cocoapods多人協做
PDF
RubyMotion Inspect Conference - 2013. (Without speaker notes.)
PDF
Building static libraries for iOS with CocoaPods
ODP
Coocoo for Cocoapods
PDF
Manage your external libraries with CocoaPods
Cocoapods Overview - library dependency manager for iOS
Денис Лебедев-Управление зависимостями с помощью CocoaPods
CocoaPods.pptx
CocoaPods Basic Usage
What is CocoaPods and how to setup?
Cocoa tip for Cocoaheads Shanghai February 2016
Private pod support using cocoa pods in ios
Cocoapods in action
CocoaPods
How cocoapods can enhance your iOS development - Amir Hayek, Toluna
Cocoa pods iOSDevUK 14 talk: managing your libraries
Practical Cocoapods
Codemotion 2013 - presentación cocoa pods
RubyMotion Inspect Conference - 2013. (With speaker notes.)
CocoaHeads Rennes #13 : CocoaPods
Cocoapods多人協做
RubyMotion Inspect Conference - 2013. (Without speaker notes.)
Building static libraries for iOS with CocoaPods
Coocoo for Cocoapods
Manage your external libraries with CocoaPods
Ad

Recently uploaded (20)

PPTX
SELF ASSESSMENT -SNAPSHOT.pptx an index of yourself by Dr NIKITA SHARMA
PPTX
Emotional Intelligence- Importance and Applicability
PPTX
show1- motivational ispiring positive thinking
PPTX
Chapter-7-The-Spiritual-Self-.pptx-First
PDF
technical writing on emotional quotient ppt
DOCX
Boost your energy levels and Shred Weight
PDF
Red Light Wali Muskurahat – A Heart-touching Hindi Story
PDF
⚡ Prepping for grid failure_ 6 Must-Haves to Survive Blackout!.pdf
PDF
Quiet Wins: Why the Silent Fish Survives.pdf
PPTX
Identity Development in Adolescence.pptx
PPTX
PERDEV-LESSON-3 DEVELOPMENTMENTAL STAGES.pptx
PPTX
UNIVERSAL HUMAN VALUES for NEP student .pptx
PDF
SEX-GENDER-AND-SEXUALITY-LESSON-1-M (2).pdf
PPTX
Commmunication in Todays world- Principles and Barriers
PPTX
Pradeep Kumar Roll no.30 Paper I.pptx....
PDF
Top 10 Visionary Entrepreneurs to Watch in 2025
PPTX
Learn how to prevent Workplace Incidents?
PPT
cypt-cht-healthy-relationships-part1-presentation-v1.1en.ppt
PDF
My 'novel' Account of Human Possibility pdf.pdf
PPT
proper hygiene for teenagers for secondary students .ppt
SELF ASSESSMENT -SNAPSHOT.pptx an index of yourself by Dr NIKITA SHARMA
Emotional Intelligence- Importance and Applicability
show1- motivational ispiring positive thinking
Chapter-7-The-Spiritual-Self-.pptx-First
technical writing on emotional quotient ppt
Boost your energy levels and Shred Weight
Red Light Wali Muskurahat – A Heart-touching Hindi Story
⚡ Prepping for grid failure_ 6 Must-Haves to Survive Blackout!.pdf
Quiet Wins: Why the Silent Fish Survives.pdf
Identity Development in Adolescence.pptx
PERDEV-LESSON-3 DEVELOPMENTMENTAL STAGES.pptx
UNIVERSAL HUMAN VALUES for NEP student .pptx
SEX-GENDER-AND-SEXUALITY-LESSON-1-M (2).pdf
Commmunication in Todays world- Principles and Barriers
Pradeep Kumar Roll no.30 Paper I.pptx....
Top 10 Visionary Entrepreneurs to Watch in 2025
Learn how to prevent Workplace Incidents?
cypt-cht-healthy-relationships-part1-presentation-v1.1en.ppt
My 'novel' Account of Human Possibility pdf.pdf
proper hygiene for teenagers for secondary students .ppt

Using Cocoapods

  • 1. Using CocoaPods Library Dependency Management for Xcode with Jeffrey Sambells! http://JeffreySambells.com
  • 3. Build dependencies Error-prone + Difficult upgrade path Cluttered project Link binary with libraries = Header search path Libraries in version control No transitive dependencies
  • 4. Automatic add/remove Automatic build configuration Project is always shippable! Discoverability + + Large ecosystem = Separation of third-party code Handles ARC and no ARC Only includes the relevant source files
  • 5. Installation… $ sudo gem update -- system $ sudo gem install cocoapods $ pod setup
  • 7. Cocoapods Workflow 1. Create your Podfile 2. Search for and add your dependencies 3. Run pod command 4. Open your new .xcworkspace (it will be created) 5. ??? 6. Profit!
  • 8. Creating the Podfile $ cd /path/to/project/folder $ touch Podfile
  • 10. Advanced platform :ios, '7.0' inhibit_all_warnings! ! workspace 'Example.xcworkspace' ! pod 'AFNetworking', :git => 'https://github.com/gowalla/ AFNetworking.git', :commit => '082f8319af' ! pod 'MySecretPod', :path => ‘~/Documents/MySecretPod' ! pod 'BleedingEdgePod', :head ! target :KIFTests, :exclusive => false do pod 'KIF' end ! post_install do |installer| installer.project.targets.each do |target| puts "#{target.name}" end end
  • 11. Install/Update into Project $ cd /path/to/project/folder $ pod Hint: use pod --verbose if you want more info.
  • 13. General Settings Specify a platform and minimum version
 platform :ios, '6.1' ! Optionally specify project and workspace files.
 For example MyProject.xcodeproj and MyProject.xcworkspace
 xcodeproj 'MyProject' workspace 'MyWorkspace'
  • 14. Dependencies (Pods) Specify pod name and other options as necessary:
 • 
 pod ‘PodName' Some pods use sub specs to group optional functionality so you need to specify them as well:
 • 
 
 
 pod ‘PodName' pod ‘PodName/SubSpecA’ pod ‘PodName/SubSpecB‘
  • 15. Pod Versioning x.x.x • References a specific git tag using a semantic version. • Specify no version, a specific version, a logical version or an optimistic version.
 
 
 
 pod pod pod pod 
 • ‘PodName’ ‘PodName’, ‘0.1.0’ ‘PodName’, ‘<= 0.1.0’ ‘PodName’, ‘~> 0.1.0’ You can also use :head to get the most bleeding edge version. pod ‘PodName’, :head
  • 16. Logical Versions • '> 0.1' Any version higher than 0.1 • '>= 0.1' Version 0.1 and any higher version • '< 0.1' Any version lower than 0.1 • '<= 0.1' Version 0.1 and any lower version
  • 17. Optimistic Versions • '~> 0.1.2' Version 0.1.2 and the versions up to 0.2, not including 0.2 and higher • '~> 0.1' Version 0.1 and the versions up to 1.0, not including 1.1 and higher • '~> 0' Version 0 and higher, this is basically the same as not having it.
  • 18. Pod Sources Pods load information from a podspec file.
 The podspec files are located in… • the shared public spec repo at 
 https://github.com/CocoaPods/Specs, • on your local machine, • in a private git repo.
  • 19. Public Shared Specs you only need to specify the name:
 • pod 'AFNetworking' you can optionally specify a specific branch or fork:
 • 
 • pod ‘AFNetworking’, :git => ‘https://github.com/ iamamused/AFNetworking.git' and a specific commit:
 pod ‘AFNetworking’, :git => ‘https://github.com/ myuser/AFNetworking.git', :commit => '082f8319af'
  • 20. Local Podspecs Load a podspec from your local machine using :path
 
 
 pod ‘MyAwesomePod’, path: => ‘../path/ MyAwesomePod.podspec’
  • 21. Private Podspecs Load a podspec from a private git repository using :git (simiar to public specs)
 
 
 pod ‘MyAwesomePod’, git: => ‘http://example.com/ MyAwesomePod.git’
  • 22. Bonus Code doesn’t have a pod? no problem. Make your own pod spec for it and use that: ! pod 'ExampleKit', :podspec => !'https://raw.github.com/gist/ 123/ExampleKit.podspec'
  • 23. Targets Targets allow you to specify which Xcode target have which pod dependencies. Pod dependencies are applied to 
 individual or multiple targets. If no specific target is specified it 
 only applies to the first target in your project!
  • 24. Targets Use link_with to specify multiple targets for all pod dependencies:
 
 pod ‘PodName’ link_with [‘MyApp’,’MyAppDemo’]
  • 25. Targets Or use target :targetname to specify targets individually: pod ‘PodName’ ! target :test, :exclusive => true do pod 'Kiwi' end ! • exclusive => true will only include pods declared in the target block. • exclusive => false will include pods declared in the target block along with those declared in the parent.
  • 26. Hooks pre_install Make any changes to the Pods after they have been downloaded but before they are installed. ! ! pre_install do |installer_representation| # Do something fancy! end
  • 27. Hooks post_install Make any changes to the generated Pods project, or any other tasks you might want to perform. ! post_install do |installer_representation| installer_representation.project.targets.each do |target| target.build_configurations.each do |config| config.build_settings['GCC_ENABLE_OBJC_GC'] = 'supported' end end end
  • 28. Pod Best Practices • Check the source, documentation and upkeep of a pod! Don’t blindly use them. • Include pods in source control? NO! err YES! • Use inhibit_all_warnings! to hide warnings in Pods (after you check them).