Upgrade to Pro — share decks privately, control downloads, hide ads and more …

CocoaPods intro

Marin Usalj
September 04, 2014

CocoaPods intro

A beginner - level talk on CocoaPods for NSMeetup 09/2014

Marin Usalj

September 04, 2014
Tweet

More Decks by Marin Usalj

Other Decks in Programming

Transcript

  1. View Slide

  2. Marin Usalj
    supermar.in

    View Slide

  3. View Slide

  4. iOS @ Yammer

    View Slide

  5. View Slide

  6. D3p3nd3ncy
    M4n4g3m3n7
    CocoaPods
    Showtime

    View Slide

  7. D3p3nd3ncy
    M4n4g3m3n7

    View Slide

  8. I can do this myself

    View Slide

  9. Your computer does it
    better and faster

    View Slide

  10. More work for 1
    developer, less work
    for 19238421 users

    View Slide

  11. D3p3nd3ncy
    M4n4g3m3n7
    resolution
    fetching
    integration
    discoverability

    View Slide

  12. resolution
    AFNetworking -> Rechability (> 2.0.0)
    ShareKit -> Rechability (3.1.0)

    View Slide

  13. resolution
    AFNetworking -> Rechability (> 2.0.0)
    ShareKit -> Rechability (3.1.0)
    SocketRocket -> Reachability (2.0.0)

    View Slide

  14. duplicate symbols

    View Slide

  15. Fetching
    [=========> ] 25%

    View Slide

  16. Fetching
    [===================> ] 50%

    View Slide

  17. Fetching
    [=============================> ] 75%

    View Slide

  18. Fetching
    [======================================> ] 99%

    View Slide

  19. Integration
    Let's integrate a complex dependency

    View Slide

  20. View Slide

  21. VS

    View Slide

  22. View Slide

  23. CocoaPods

    View Slide

  24. Ecosystem

    View Slide

  25. Discovery machine

    View Slide

  26. View Slide

  27. View Slide

  28. Deals with deps and
    code sync

    View Slide

  29. Resolves dependencies

    View Slide

  30. Resolves dependencies
    Downloads dependencies

    View Slide

  31. Resolves dependencies
    Downloads dependencies
    Integrates dependencies

    View Slide

  32. Resolves dependencies
    Downloads dependencies
    Integrates dependencies
    Synchronizes dependencies

    View Slide

  33. Bonus

    View Slide

  34. Removes deps easy
    and fast

    View Slide

  35. Core Team

    View Slide

  36. Eloy Durán
    @alloy

    View Slide

  37. Fabio Pelosin
    @irrationalfab

    View Slide

  38. Orta Therox
    @orta

    View Slide

  39. Keith Smiley
    (machine)
    @Keithbsmiley

    View Slide

  40. View Slide

  41. View Slide

  42. Hanging out on Slack
    (Thanks Slack!)

    View Slide

  43. View Slide

  44. Showtime

    View Slide

  45. Using pods

    View Slide

  46. Podfile
    pod 'AFNetworking'
    pod 'Kiwi', :head

    View Slide

  47. Podfile
    pod 'AFNetworking'
    pod 'Kiwi', :head
    pod 'SSKeychain', '~> 2.1.2'

    View Slide

  48. Podfile
    pod 'AFNetworking'
    pod 'Kiwi', :head
    pod 'SSKeychain', '~> 2.1.2'
    pod 'SSKeychain', '~> 2.1.3'
    # ....
    pod 'SSKeychain', '~> 2.1.999'

    View Slide

  49. $ pod install

    View Slide

  50. $ pod install
    def install!
    resolve_dependencies
    download_dependencies
    generate_pods_project
    integrate_user_project if config.integrate_targets?
    perform_post_install_actions
    end

    View Slide

  51. NSMeetup.xcodeproj

    View Slide

  52. NSMeetup.xcodeproj
    NSMeetup.xcworkspace

    View Slide

  53. View Slide

  54. Where did pods come
    from?

    View Slide

  55. View Slide

  56. Where did Specs
    come from?

    View Slide

  57. View Slide

  58. Hosted on Github

    View Slide

  59. On your computer
    ~/.cocoapods/repos/master

    View Slide

  60. Private pods / specs

    View Slide

  61. Private pods / specs
    ~/.cocoapods/repos/master
    ~/.cocoapods/repos/Yammer

    View Slide

  62. Your internal libraries

    View Slide

  63. Private shared code
    between apps

    View Slide

  64. pod command

    View Slide

  65. $ pod
    Commands:
    + help Show help for the given command.
    + init Generate a Podfile for the current directory.
    + install Install project dependencies
    + lib Develop pods
    + list List pods
    + outdated Show outdated project dependencies
    + plugins Show available CocoaPods plugins
    + repo Manage spec-repositories
    + search Searches for pods
    + spec Manage pod specs
    + trunk Interact with the CocoaPods API (e.g.
    publishing new specs)
    + try Try a Pod!
    + update Update outdated project dependencies

    View Slide

  66. Don't be afraid :)
    Try out plugins
    Try out pods

    View Slide

  67. Creating your pod

    View Slide

  68. pod lib create
    To create

    View Slide

  69. .
    ├── Example
    │ ├── AwesomeLib
    │ ├── AwesomeLib.xcodeproj
    │ ├── AwesomeLib.xcworkspace
    │ ├── Pods
    │ └── Tests
    └── Pod
    ├── Assets
    └── Classes
    9 directories

    View Slide

  70. pod lib lint
    When ready to publish

    View Slide

  71. pod trunk push
    Shipit!

    View Slide

  72. View Slide

  73. Trunk
    Robot version of Keith. Lives in
    Herokuland

    View Slide

  74. Installing
    [sudo] gem install cocoapods

    View Slide

  75. Never do
    sudo pod install

    View Slide

  76. Contributing <3

    View Slide

  77. Bunch of Ruby
    Ask for help!

    View Slide

  78. Clone Rainforest
    github.com/cocoapods/rainforest

    View Slide

  79. Swift?
    Bridging header

    View Slide

  80. Thanks
    Steve Derico, CocoaPods team, Yammer

    View Slide

  81. QA
    @supermarin
    supermar.in

    View Slide