Cocoapods - mobile-warsaw.plmobile-warsaw.pl/files/dudek_cocoapods.pdf · How do Cocoapods work?...

Preview:

Citation preview

CocoapodsPawel Dudek

1

1Tuesday, August 20, 13

How can we manage dependencies in

Cocoa?

2

2Tuesday, August 20, 13

3

Copy & Paste Submodules

3Tuesday, August 20, 13

Copy & Paste1. 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

4Tuesday, August 20, 13

Copy & Paste Issues

5

• Issues with duplicate symbols

• Really hard to manage versions

• Missing other linker flags and build settings

• Missing resources

5Tuesday, August 20, 13

Submodules

• Issues with duplicate symbols

• Somewhat easier to manage versions (if they’re properly tagged)

• Other linker flags

• And other build settings

• Resources

6

6Tuesday, August 20, 13

Submodules1. 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

7Tuesday, August 20, 13

This is all wrong.

8

8Tuesday, August 20, 13

We are to create things.

9

9Tuesday, August 20, 13

This is all just wasting our time.

10

10Tuesday, August 20, 13

Enter Cocoapods

11

11Tuesday, August 20, 13

Cocoapods goals

12

• Make working with dependencies simple.

• Improve library discoverability and engagement by providing an ecosystem that facilitates this.

12Tuesday, August 20, 13

Cocoapods advantages

• Automatically handle source code and static libraries

• Automatically handle ARC

• Automatically handle frameworks

• Automatically handle builds settings

• Automatically handle resources

13

13Tuesday, August 20, 13

Cocoapods advantagesThe responsibility for configuration requirements lie

with the creator of component, not you.

14

14Tuesday, August 20, 13

How can I install them?

15

gem install cocoapods

15Tuesday, August 20, 13

Basics

16

16Tuesday, August 20, 13

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

<major>.<minor>.<patch>

eg 1.2.5

17Tuesday, August 20, 13

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

18Tuesday, August 20, 13

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

19Tuesday, August 20, 13

Basic commands

20

Installing pods

pod update

pod install

Updating pods

20Tuesday, August 20, 13

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

21Tuesday, August 20, 13

pod update

• Ignored Podfile.lock

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

22

22Tuesday, August 20, 13

Podfile

• Defines platform

• Defines project (optional)

• Defines dependencies

• Defines specific version

• Multiple targets

23Tuesday, August 20, 13

Podfile example

24

24Tuesday, August 20, 13

platform :ios, '5.0'xcodeproj 'TwitterUserTimeline'

pod 'STTwitter'pod 'Mantle', '1.2'

target :cedar do! link_with 'TwitterUserTimelineSpecs' pod 'Cedar'end

Podfile

iOS Version

25Tuesday, August 20, 13

platform :ios, '5.0'xcodeproj 'TwitterUserTimeline'

pod 'STTwitter'pod 'Mantle', '1.2'

target :cedar do! link_with 'TwitterUserTimelineSpecs' pod 'Cedar'end

Podfile

Project

26Tuesday, August 20, 13

platform :ios, '5.0'xcodeproj 'TwitterUserTimeline'

pod 'STTwitter'pod 'Mantle', '1.2'

target :cedar do! link_with 'TwitterUserTimelineSpecs' pod 'Cedar'end

Podfile

Dependencies

27Tuesday, August 20, 13

platform :ios, '5.0'xcodeproj 'TwitterUserTimeline'

pod 'STTwitter'pod 'Mantle', '1.2'

target :cedar do! link_with 'TwitterUserTimelineSpecs' pod 'Cedar'end

Podfile

Exclusive target

28Tuesday, August 20, 13

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

29Tuesday, August 20, 13

platform :ios, '5.0'xcodeproj 'TwitterUserTimeline'

pod 'STTwitter'pod 'Mantle', '1.2'

target :cedar do! link_with 'TwitterUserTimelineSpecs' pod 'Cedar'end

Podfile

Exclusive pod

30Tuesday, August 20, 13

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/

31Tuesday, August 20, 13

Moving patch version

Will automatically update to new available patch version

32

pod 'Mantle', '~> 1.2.0'

32Tuesday, August 20, 13

Fun stuff

33

33Tuesday, August 20, 13

Using Cocoapodsfor in-house components

34

Encourages reusable code

Over 28 components at Taptera

Really encourage to use it!

34Tuesday, August 20, 13

What you’ll need

35

• Cocoapods installed

• Git repo for specs definitions

• And you’re all set!

35Tuesday, August 20, 13

Your own Cocoapods Pod spec

36

36Tuesday, August 20, 13

Example

37

37Tuesday, August 20, 13

Things you’ll have to do first

• Add your own specs repo to local cocoapods repo list

• Push the podspec to your repository

38

38Tuesday, August 20, 13

Adding custom specs repo

39

pod repo add <repo_name> <repo_address>

39Tuesday, August 20, 13

Pushing to Cocoapods specs repo

40

pod push <repo_name>

40Tuesday, August 20, 13

Demo

41

41Tuesday, August 20, 13

Resources & Contact

@eldudi

github.com/paweldudek

pawel@dudek.mobi

Code Examples

Contact

42

42Tuesday, August 20, 13

Recommended