iOS DEPENDENCY MANAGEMENT

4 downloads 5337 Views 1MB Size Report
Page 1. COCOAPODS. iOS. DEPENDENCY. MANAGEMENT. Page 2. HELLO. Page 3. WEB. ADOBE FLEX. iOS✼. WINDOWS [PHONE] 8. Page 4. Page 5 ...
COCOAPODS

iOS ! DEPENDENCY MANAGEMENT

HELLO.

iOS✼ WEB

ADOBE FLEX WINDOWS [PHONE] 8

ICON CREDITS: ENDLESSICONS.COM!

TL;DR

1

platform :ios, '6.0’

2

pod 'JSONKit' pod 'POViewFrameBuilder' pod 'AFNetworking', '~> 1.3.1’

3 4 5 6 7

target :test, :exclusive => true do pod 'Kiwi' end

“THE BEST WAY TO MANAGE LIBRARY DEPENDENCIES IN OBJECTIVE-C PROJECTS” — COCOAPODS.ORG

“THE ONLY WAY TO MANAGE LIBRARY DEPENDENCIES IN OBJECTIVE-C PROJECTS?”

+

AUTOMATED DEPENDENCY FETCHING

DEPENDENCY AUTOMATED SUBDEPENDENCY FETCHING

DEPENDENCY SUBDEPENDENCY FETCHING AUTOMATED CONFIGURATION

SCM FRIENDLY

SCM FRIENDLY GIT SVN HG

OPEN SOURCE

DISCOVERABILITY

_

NEW

NEW’ISH’ ± 2 YEARS OLD

FIDDLY SETUP

~

BUNDLER RUBY NUGET MSFT MAVEN / GRADLE JAVA

2 METHODS

2 METHODS DIY GIT SUBMODULES

1 RESULT

1 RESULT CONFIGURATION HELL

⤻ COPY PROJECT ⤻ ADD TARGET DEPENDENCY (BUILD PHASES TAB) ⤻ LINK BINARY WITH LIBS

DIY

(+ ADD ANY FRAMEWORKS)

⤻ COPY BUNDLE RESOURCES ⤻ ADD TO HEADER SEARCH PATH ⤻ ADD ‘OTHER LINKER FLAGS’ (E.G. -all_load, -ObjC)

⤻ #IMPORT HEADER FILE

⤻ ADD GIT SUBMODULE

GIT

$ git submodule add git@somehost:repo path/to/submodule $ git commit $ git submodule update $ cd path/to/submodule $ git checkout branch $ git pull …

⤻ ADD GIT SUBMODULE

GIT

$ git submodule add git@somehost:repo path/to/submodule $ git commit $ git submodule update $ cd path/to/submodule $ git checkout branch $ git pull …

⤻ GO BACK 2 SLIDES ⤻ REPEAT FOR EACH DEPENDENCY

COCOA PODS

⤻ DEFINE DEPENDENCIES IN PODFILE ⤻ RUN ‘POD INSTALL’

⤻ #IMPORT HEADER FILE



?

RUBY ❤ GIT

RUBY ❤ GIT

+ SOME MAGIC?

STATIC LIBRARIES

GITHUB

PUBLIC SPEC REPO GIT CLONE

GIT CLONE

LIB REPO

LIB REPO

LOCAL SPECS

LIB REPO

LIB REPO

LIB REPO

BIG-ASS TEXT SLIDE

◁  

1 2 3 4 5 6 7 8 9

Pod::Spec.new do |s|   s.name = "PayPal-iOS-SDK"   s.version = "1.3.4"   s.summary = "Accept credit cards and PayPal.."   s.description = “The PayPal iOS SDK provides a..”   s.homepage = "https://developer.paypal.com/webap..”   s.author = 'Paypal'   s.source =

10 11 12 13 14 15 16 17

  s.platform = :ios, '5.0'   s.public_header_files = 'PayPalMobile/*.h'   s.source_files = 'PayPalMobile/*.h'   s.preserve_paths = "PayPalMobile/libPayPalMobile.a"   s.frameworks = 'AVFoundation', 'AudioToolbox',   s.libraries = 'stdc++', 'xml2', 'PayPalMobile'   s.xcconfig =

{ :git => "https://github.com/paypal/PayPal-iOS-SDK.git", :tag => "1.3.4" }

{'OTHER_LDFLAGS' => '-lc++ -ObjC' , 'HEADER_SEARCH_PATHS' => '$(SDKROOT)/usr/include/libxml2’, 'LIBRARY_SEARCH_PATHS' => '"$(PODS_ROOT)/PayPal-iOS-.."' }

end

⤻ GIT CLONE PUBLIC & LOCAL LIBS

⤻ APPLY CONFIG

⤻ APPLY HEADER PATHS, ETC

LIB REPO

LIB REPO

CONFIG

LIB REPO

LIB REPO

FRAME WORKS

PRIVATE LIBRARIES

?

git init

CREATE GIT REPO TO HOLD PRIVATE SPECS

pod repo add

ADD TO REPO LIST

pod spec create

CREATE+PUSH SPECS TO PRIVATE SPEC REPO

PRIVATELY HOSTED GIT REPO

PRIVATELY HOSTED SSH GIT REPO KEYS

CLOSED SOURCE PROJECTS

?

REGULAR SPEC FILE

POINT TO .FRAMEWORK OR .A

INSTEAD OF .M FILES

CONTRIBUTING BACK



⤻ FORK

github.com/CocoaPods/Specs

⤻ ADD YOUR SPECS

⤻ SEND PULL REQUEST ✓

VERSIONING TAGGING

SOME GREAT LIBRARIES ON COCOAPODS



AFNetworking Underscore.m RestKit TestFlight Reachability CorePlot

(CocoaControls)

THANK YOU ACEONTECH