Slide 1

Slide 1 text

Cocoapods Pawel Dudek 1

Slide 2

Slide 2 text

How can we manage dependencies in Cocoa? 2

Slide 3

Slide 3 text

3 Copy & Paste Submodules

Slide 4

Slide 4 text

Copy & Paste 1.Copy & Paste files 2.Add other linker flags 3.Add ARC flags 4.Add frameworks 5.Add any other missing build settings 6.Add resources 7.Finally, use the component 4

Slide 5

Slide 5 text

Copy & Paste Issues 5 • Issues with duplicate symbols • Really hard to manage versions • Missing other linker flags and build settings • Missing resources

Slide 6

Slide 6 text

Submodules • Issues with duplicate symbols • Somewhat easier to manage versions (if they’re properly tagged) • Other linker flags • And other build settings • Resources 6

Slide 7

Slide 7 text

Submodules 1.Add submodule (and check it out) 2.Add source to project 3.Add ARC flags 4.Add frameworks 5.Add other linker flags 6.Add any other missing build settings 7.Fix duplicate symbols 8.Add resources 9.Finally, use the component 7

Slide 8

Slide 8 text

This is all wrong. 8

Slide 9

Slide 9 text

We are to create things. 9

Slide 10

Slide 10 text

This is all just wasting our time. 10

Slide 11

Slide 11 text

Enter Cocoapods 11

Slide 12

Slide 12 text

Cocoapods goals 12 • Make working with dependencies simple. • Improve library discoverability and engagement by providing an ecosystem that facilitates this.

Slide 13

Slide 13 text

Cocoapods advantages • Automatically handle source code and static libraries • Automatically handle ARC • Automatically handle frameworks • Automatically handle builds settings • Automatically handle resources 13

Slide 14

Slide 14 text

Cocoapods advantages The responsibility for configuration requirements lie with the creator of component, not you. 14

Slide 15

Slide 15 text

How can I install them? 15 gem install cocoapods

Slide 16

Slide 16 text

Basics 16

Slide 17

Slide 17 text

How do Cocoapods work? • Pod - single definition of a component • Podfile - list of dependencies • Dependencies use semantic versioning • Resolving dependencies lists all your dependencies and their dependencies • Dependencies definitions are a Github repository 17 .. eg 1.2.5

Slide 18

Slide 18 text

What happens when I install pods? • Resolve dependencies from Podfile • Take an .xcodeproj as a start • Generate .xcconfing files and attaches them to your project • Generate another .xcoproject with static library from defined dependencies 18

Slide 19

Slide 19 text

What happens when I install pods? • Generate an .xcworkspace with your project and generated .xcodeproject • Add a dependency on the generated project results to your targets • Lock used versions in Podfile.lock 19

Slide 20

Slide 20 text

Basic commands 20 Installing pods pod update pod install Updating pods

Slide 21

Slide 21 text

pod install • When there is no Podfile.lock - will use latest version or version defined in Podfile • When there is a Podfile.lock - will use version from Podfile.lock or version defined in Podfile 21

Slide 22

Slide 22 text

pod update • Ignored Podfile.lock • Will work as ‘pod install’ without a Podfile.lock 22

Slide 23

Slide 23 text

Podfile • Defines platform • Defines project (optional) • Defines dependencies • Defines specific version • Multiple targets

Slide 24

Slide 24 text

Podfile example 24

Slide 25

Slide 25 text

platform :ios, '5.0' xcodeproj 'TwitterUserTimeline' ! pod 'STTwitter' pod 'Mantle', '1.2' ! target :cedar do link_with 'TwitterUserTimelineSpecs' pod 'Cedar' end Podfile iOS Version

Slide 26

Slide 26 text

platform :ios, '5.0' xcodeproj 'TwitterUserTimeline' ! pod 'STTwitter' pod 'Mantle', '1.2' ! target :cedar do link_with 'TwitterUserTimelineSpecs' pod 'Cedar' end Podfile Project

Slide 27

Slide 27 text

platform :ios, '5.0' xcodeproj 'TwitterUserTimeline' ! pod 'STTwitter' pod 'Mantle', '1.2' ! target :cedar do link_with 'TwitterUserTimelineSpecs' pod 'Cedar' end Podfile Dependencies

Slide 28

Slide 28 text

platform :ios, '5.0' xcodeproj 'TwitterUserTimeline' ! pod 'STTwitter' pod 'Mantle', '1.2' ! target :cedar do link_with 'TwitterUserTimelineSpecs' pod 'Cedar' end Podfile Exclusive target

Slide 29

Slide 29 text

platform :ios, '5.0' xcodeproj 'TwitterUserTimeline' ! pod 'STTwitter' pod 'Mantle', '1.2' ! target :cedar do link_with 'TwitterUserTimelineSpecs' pod 'Cedar' end Podfile Exclusive target name

Slide 30

Slide 30 text

platform :ios, '5.0' xcodeproj 'TwitterUserTimeline' ! pod 'STTwitter' pod 'Mantle', '1.2' ! target :cedar do link_with 'TwitterUserTimelineSpecs' pod 'Cedar' end Podfile Exclusive pod

Slide 31

Slide 31 text

Cleaning up 31 By wiping whole Cocoapods caches rm -rf Pods/ rm -rf ~/Library/Caches/CocoaPods/ Git/ rm -rf ~/Library/Caches/CocoaPods/ GitHub/ rm -rf ~/.cocoapods/

Slide 32

Slide 32 text

Moving patch version Will automatically update to new available patch version 32 pod 'Mantle', '~> 1.2.0'

Slide 33

Slide 33 text

Fun stuff 33

Slide 34

Slide 34 text

Using Cocoapods for in-house components 34

Slide 35

Slide 35 text

What you’ll need 35 • Cocoapods installed • Git repo for specs definitions • And you’re all set!

Slide 36

Slide 36 text

Your own Cocoapods Pod spec 36

Slide 37

Slide 37 text

Example 37

Slide 38

Slide 38 text

Things you’ll have to do first • Add your own specs repo to local cocoapods repo list • Push the podspec to your repository 38

Slide 39

Slide 39 text

Adding custom specs repo 39 pod repo add

Slide 40

Slide 40 text

Pushing to Cocoapods specs repo 40 pod push

Slide 41

Slide 41 text

Demo 41

Slide 42

Slide 42 text

Resources & Contact @eldudi github.com/paweldudek [email protected] Code Examples Contact 42