$30 off During Our Annual Pro Sale. View Details »

Managing your dependencies using Carthage

Managing your dependencies using Carthage

Using a dependency manager is cool, but you know what is cooler? ANOTHER DEPENDENCY MANAGER!

Romain Pouclet

February 10, 2015
Tweet

More Decks by Romain Pouclet

Other Decks in Programming

Transcript

  1. Managing&your&dependencies&using&
    CocoaPods&Carthage
    Cocoaheads)Montréal)02/2015

    View Slide

  2. Why$do$we$need$a$new$dependency$
    manager$for$iOS$/$OSX?

    View Slide

  3. We#don't.

    View Slide

  4. Thanks!

    View Slide

  5. Dependency(management?
    Automa'ng*the*process*of*installing,*
    upgrading,*configuring,*and*removing*libraries

    View Slide

  6. Cocoapods(VS(Carthage

    View Slide

  7. Cocoapods!VS!Carthage
    • Ruby&based,&Centralized&repository,&kinda&intrusive
    • List&dependencies&in&a&“Podfile”,&share&your&libs&using&a&JSON&
    “podspec”&file
    • Framework&support&since&0.36
    • AutomaKc&doc&generaKon&at&cocoadocs.org
    • PLUGINS&(ex:&github.com/orta/cocoapodsPkeys)!

    View Slide

  8. Cocoapods!VS!Carthage
    h"ps:/
    /github.com/search?u48=✓&q=filename%3APodfile

    View Slide

  9. Cocoapods(is(s*ll(a(great(tool(and(
    you((probably)(don't(need(to(switch

    View Slide

  10. Carthage
    • S#ll%really%fresh
    • Another%nice%tool%from%Github
    • (Painfully?)%wri

    View Slide

  11. Cocoapods(VS(Carthage
    h"ps:/
    /github.com/search?u48=✓&q=filename%3ACartfile

    View Slide

  12. Ge#ng&started&with&Carthage
    • Visit&github.com/Carthage/Carthage
    • Go&to&releases&and&download&latest
    • Open&*.pkg&blahblahblah
    or
    ! ~ $ brew install carthage

    View Slide

  13. Ge#ng&started&with&Carthage
    ! ~ $ carthage

    View Slide

  14. Carthage(leverages(the(power(of(Frameworks
    • Available)on)OSX)since)~1977)(*reference)required)
    • Available)on)iOS)since)Facebook)and)Dropbox)figured)a)way)to)
    cheat
    • Available)on)iOS)since)iOS)8
    • Frameworks)can)contain)a)lot:)Views,)Controls,)Resources)(cf)
    WWDC)#416)

    View Slide

  15. A"basic"Cartfile
    Add#your#dependencies#(github#repo,#URL#to#git#repository)#into#a#
    Cartfile
    github "realm/realm-cocoa" == 0.90.3
    github "Palleas/ReactiveCSVParser" "master"

    View Slide

  16. Installing)/)Upda.ng)dependencies
    $ `carthage update`
    • Carthage)will)fetch)all)the)dependencies)in)the)Carthage/
    Checkouts)folder)and)build)the)shared)schemes
    • A)Cartfile.resolved)that)you/have/to/commit)will)be)generated
    • Frameworks)will)be)generated)in)Carthage/Build,)simply)drag)
    them)in)your)project

    View Slide

  17. Submodules*are*cool*again!
    $"carthage"update"!!use!submodules
    (Don't'worry,'Carthage'handle'the'hard'part'automagically)

    View Slide

  18. I"have"been"using"Carthage"for"a"few"weeks"
    now

    View Slide

  19. I"tested"it"with"a"CSV"parser"I"wrote
    github.com/Palleas/Reac2veCSVParser

    View Slide

  20. Sharing(my(framework:(share(the(scheme

    View Slide

  21. Sharing(my(framework:(tag(and(push!
    $ git tag 0.0.1
    $ git push origin master --tags
    (Note&that&you&can&use&a&branch,&a&commit,&anything&git rev-
    parse&will&understand)

    View Slide

  22. Adding&my&framework
    (Because(I(like(my(framework)
    $ echo 'Palleas/ReactiveCSVParser "~> 0.0.1"' >> Cartfile
    $ carthage update

    View Slide

  23. Or#if#I#want#to#contribute...
    $ git clone [email protected]:Palleas/Catalog.git
    $ cd Catalog
    $ carthage bootstrap

    View Slide

  24. Some%issues%I%got
    Adding&a&framework&with&no&shared&schemes
    *** Fetching realm-cocoa
    *** Checking out realm-cocoa at "b30"
    *** xcodebuild output can be found in /var/folders/qt/nys5f4b154x88ysnv0bccdbm0000gn/T/carthage-xcodebuild.uEWmAC.log
    Project "TightDbObjcDyn.xcodeproj" has no shared schemes

    View Slide

  25. Project
    "TightDbObjcDyn.xcodeproj"
    has no shared schemes
    (Wat?)

    View Slide

  26. Some%issues%I%got
    Using&Carthage&(well&actually,&it's&Frameworks)&
    in&a&command&line&tool
    (TL;DR:(It's(a(pain)

    View Slide

  27. Con$nuous'Integra$on
    (Yes,&again.)

    View Slide

  28. Se#ng&up&travis/ci
    Carthage(is(not(included(in(Travis3ci((yet?)
    #!/usr/bin/env bash
    echo "*********** Installing Carthage ***********"
    brew update
    brew install carthage --HEAD

    View Slide

  29. Se#ng&up&travis/ci
    Carthage(will(build(all(your(schemes,(even(the(one(you(
    don't(need
    echo "*********** Installing dependencies with Carthage ***********"
    carthage bootstrap --no-build
    find Carthage/Checkouts -type f -name "*iOS*.xcscheme" -delete
    carthage build

    View Slide

  30. Conclusion
    Carthage(is(great.(It(provides(less(features(
    than(Cocoapods(but(is(easier(to(use

    View Slide

  31. Thanks!
    (Want&a&book?)
    (Photos'©'Camille'Furno'!)

    View Slide