Using Cocoapods
Upcoming SlideShare
Loading in...5

Using Cocoapods



A quick introduction to using Cocoapods in an Xcode project. ...

A quick introduction to using Cocoapods in an Xcode project.

Demo Notes (in markdown):

## Using Cocoapods Demo
1. Create a new Single View project in Xcode called **MyProject**.
1. Create **Podfile** in project root.
1. Search []( for a pod ([AFNetworking](
1. Point out features of web site.
1. Use clipboard icon to copy/paste AFNetworking.
1. Run `pod` in terminal (installation).
1. point out errors/warnings.
1. point out and explain loc file (bbedit **Podfile.lock**).
1. point out installed dependencies (if any).
1. point out **Pods.xcconfig**.
1. change the pod file (Remove AFNetworking and add [SVProgressHud](
1. run `pod` again to see removal and updates.
1. Open **MyProject.xcworkspace**
1. Add a SVProgressHud call on **ViewDidAppear** of primary view controller.

- (void)viewDidAppear:(BOOL)animated {
[SVProgressHUD showSuccessWithStatus:@"It Worked!"];

12. Build and run the app.


## Creating Podspec Demo

1. Open and demonstrate **AwesomeProject**.
1. Decide to create a pod for **UIViewController+Alerts** category.
1. Show pod creation help in terminal: **`pod lib`** (note options).
1. Create a library on the ~/Desktop **`pod lib create iOSKW`**.
1. Explain the folder structure.
1. Copy in UIViewController+Alerts.h & .m files into **Classes/ios**.
1. run **`pod lib lint`**.
1. note warnings and errors.
1. Edit `bbedit iOSKW.podspec` as follows: do |s| = "iOSKW"
s.version = "0.1.0"
s.summary = "UIViewController Categories."
s.homepage = ""
s.license = 'MIT' = { "jsambells" => "" }
s.source = { :git => ".", :tag => s.version.to_s }
s.platform = :ios, '7.0'
s.requires_arc = true
s.source_files = 'Classes/ios/*.{h,m}'
s.frameworks = 'UIKit'

1. Run `pod lib lint`.
1. Commit to local git repo.
1. Tag local git as **0.1.0** to match Podspec.
1. Re-run `pod lib lint` to verify
1. Create demo app called **Demo** on desktop and copy contents to the lib folder.
1. Remove empty targets from default Podfile (will error if you don't!).
1. Run `pod` in Project, note output.
1. Import `<ioskw />` header into primary view controller.
1. And add test code to view did load.

- (void)viewDidLoad
[super viewDidLoad];
[self alert:@"HEllo!"];

1. Run demo app.



Total Views
Views on SlideShare
Embed Views



1 Embed 3 3


Upload Details

Uploaded via as Adobe PDF

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
Post Comment
Edit your comment

Using Cocoapods Using Cocoapods Presentation Transcript

  • Using CocoaPods Library Dependency Management for Xcode with Jeffrey Sambells!
  • 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 => ' 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 "#{}" 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, • 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 => ‘ iamamused/AFNetworking.git' and a specific commit:
 pod ‘AFNetworking’, :git => ‘ 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: => ‘ MyAwesomePod.git’
  • Bonus Code doesn’t have a pod? no problem. Make your own pod spec for it and use that: ! pod 'ExampleKit', :podspec => !' 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).
  • Thanks! More Info" @iamamused