Денис Лебедев-Управление зависимостями с помощью...
description
Transcript of Денис Лебедев-Управление зависимостями с помощью...
![Page 1: Денис Лебедев-Управление зависимостями с помощью CocoaPods](https://reader037.fdocuments.in/reader037/viewer/2022102716/5403b0c88d7f72e04c8b4899/html5/thumbnails/1.jpg)
Dependencies management
with CocoaPods
Denis Lebedev
![Page 2: Денис Лебедев-Управление зависимостями с помощью CocoaPods](https://reader037.fdocuments.in/reader037/viewer/2022102716/5403b0c88d7f72e04c8b4899/html5/thumbnails/2.jpg)
Why do we need it?
![Page 3: Денис Лебедев-Управление зависимостями с помощью CocoaPods](https://reader037.fdocuments.in/reader037/viewer/2022102716/5403b0c88d7f72e04c8b4899/html5/thumbnails/3.jpg)
Drag & drop
![Page 4: Денис Лебедев-Управление зависимостями с помощью CocoaPods](https://reader037.fdocuments.in/reader037/viewer/2022102716/5403b0c88d7f72e04c8b4899/html5/thumbnails/4.jpg)
Git submodule
![Page 5: Денис Лебедев-Управление зависимостями с помощью CocoaPods](https://reader037.fdocuments.in/reader037/viewer/2022102716/5403b0c88d7f72e04c8b4899/html5/thumbnails/5.jpg)
3rd-party (do they exist at all?)
![Page 7: Денис Лебедев-Управление зависимостями с помощью CocoaPods](https://reader037.fdocuments.in/reader037/viewer/2022102716/5403b0c88d7f72e04c8b4899/html5/thumbnails/7.jpg)
Install
$ sudo gem install cocoapods
![Page 8: Денис Лебедев-Управление зависимостями с помощью CocoaPods](https://reader037.fdocuments.in/reader037/viewer/2022102716/5403b0c88d7f72e04c8b4899/html5/thumbnails/8.jpg)
Create Podfile
platform :iospod 'AFNetworking'pod 'MBProgressHUD'pod 'OHAttributedLabel'pod 'MagicalRecord', '= 1.8.3'pod 'EGOImageLoading'pod 'AQGridView'pod 'Facebook-iOS-SDK'pod 'DCIntrospect'pod 'OCMock'
![Page 9: Денис Лебедев-Управление зависимостями с помощью CocoaPods](https://reader037.fdocuments.in/reader037/viewer/2022102716/5403b0c88d7f72e04c8b4899/html5/thumbnails/9.jpg)
Add libs to the project$ pod install
![Page 10: Денис Лебедев-Управление зависимостями с помощью CocoaPods](https://reader037.fdocuments.in/reader037/viewer/2022102716/5403b0c88d7f72e04c8b4899/html5/thumbnails/10.jpg)
How it works
![Page 11: Денис Лебедев-Управление зависимостями с помощью CocoaPods](https://reader037.fdocuments.in/reader037/viewer/2022102716/5403b0c88d7f72e04c8b4899/html5/thumbnails/11.jpg)
Write own specs$ pod spec create MySpec$vim MySpec.podspec$pod spec lint MySpec.podspec
![Page 12: Денис Лебедев-Управление зависимостями с помощью CocoaPods](https://reader037.fdocuments.in/reader037/viewer/2022102716/5403b0c88d7f72e04c8b4899/html5/thumbnails/12.jpg)
Spec example
![Page 13: Денис Лебедев-Управление зависимостями с помощью CocoaPods](https://reader037.fdocuments.in/reader037/viewer/2022102716/5403b0c88d7f72e04c8b4899/html5/thumbnails/13.jpg)
Contribute(>650 podspecs already)
![Page 14: Денис Лебедев-Управление зависимостями с помощью CocoaPods](https://reader037.fdocuments.in/reader037/viewer/2022102716/5403b0c88d7f72e04c8b4899/html5/thumbnails/14.jpg)
Podfile options
![Page 15: Денис Лебедев-Управление зависимостями с помощью CocoaPods](https://reader037.fdocuments.in/reader037/viewer/2022102716/5403b0c88d7f72e04c8b4899/html5/thumbnails/15.jpg)
Platformplatform :ios, 4.0
Versioningpod ‘EgoImageView’, ‘<=1.2’pod ‘EgoImageView’, :head
![Page 16: Денис Лебедев-Управление зависимостями с помощью CocoaPods](https://reader037.fdocuments.in/reader037/viewer/2022102716/5403b0c88d7f72e04c8b4899/html5/thumbnails/16.jpg)
Multiple targetspod 'RestKit'
target :debug do pod 'CocoaLumberjack'end
target :test, :exclusive => true do link_with “MyAppTests” pod 'Kiwi'end
![Page 17: Денис Лебедев-Управление зависимостями с помощью CocoaPods](https://reader037.fdocuments.in/reader037/viewer/2022102716/5403b0c88d7f72e04c8b4899/html5/thumbnails/17.jpg)
Turn off all warnings in lib sources
inhibit_all_warnings!
![Page 18: Денис Лебедев-Управление зависимостями с помощью CocoaPods](https://reader037.fdocuments.in/reader037/viewer/2022102716/5403b0c88d7f72e04c8b4899/html5/thumbnails/18.jpg)
Podspec sources
![Page 19: Денис Лебедев-Управление зависимостями с помощью CocoaPods](https://reader037.fdocuments.in/reader037/viewer/2022102716/5403b0c88d7f72e04c8b4899/html5/thumbnails/19.jpg)
Spec in the root of lib repo
pod 'AFNetworking', :git => 'https://github.com/gowalla/
![Page 20: Денис Лебедев-Управление зависимостями с помощью CocoaPods](https://reader037.fdocuments.in/reader037/viewer/2022102716/5403b0c88d7f72e04c8b4899/html5/thumbnails/20.jpg)
Lib without podspecpod 'JSONKit', :podspec => 'https://raw.github.com/gist/1346394/1d26570f68ca2d72/
![Page 21: Денис Лебедев-Управление зависимостями с помощью CocoaPods](https://reader037.fdocuments.in/reader037/viewer/2022102716/5403b0c88d7f72e04c8b4899/html5/thumbnails/21.jpg)
Lib without any available podspec
pod do |spec| spec.name = 'JSONKit' spec.version = '1.4' spec.source = { :git => 'https://github.com/ johnezang/JSONKit.git', :tag => 'v1.4' } spec.source_files = 'JSONKit.*'end
![Page 22: Денис Лебедев-Управление зависимостями с помощью CocoaPods](https://reader037.fdocuments.in/reader037/viewer/2022102716/5403b0c88d7f72e04c8b4899/html5/thumbnails/22.jpg)
Local podpod 'libAwesome', :local => '~/path/
libAwesome'
*podspec should be in the folder
![Page 23: Денис Лебедев-Управление зависимостями с помощью CocoaPods](https://reader037.fdocuments.in/reader037/viewer/2022102716/5403b0c88d7f72e04c8b4899/html5/thumbnails/23.jpg)
Pod specification
![Page 24: Денис Лебедев-Управление зависимостями с помощью CocoaPods](https://reader037.fdocuments.in/reader037/viewer/2022102716/5403b0c88d7f72e04c8b4899/html5/thumbnails/24.jpg)
![Page 25: Денис Лебедев-Управление зависимостями с помощью CocoaPods](https://reader037.fdocuments.in/reader037/viewer/2022102716/5403b0c88d7f72e04c8b4899/html5/thumbnails/25.jpg)
Dependencies...s.dependency = ‘JSONKit’, ‘<1.4’...
![Page 26: Денис Лебедев-Управление зависимостями с помощью CocoaPods](https://reader037.fdocuments.in/reader037/viewer/2022102716/5403b0c88d7f72e04c8b4899/html5/thumbnails/26.jpg)
~pod spec create https://github.com/repo
Spec template
![Page 27: Денис Лебедев-Управление зависимостями с помощью CocoaPods](https://reader037.fdocuments.in/reader037/viewer/2022102716/5403b0c88d7f72e04c8b4899/html5/thumbnails/27.jpg)
Subspecspod ‘RestKit/JSON’
Pod::Spec.new do |s| s.name = 'RestKit' s.preferred_dependency = 'JSON' ... s.subspec 'JSON' do |js| js.dependency 'RestKit/ObjectMapping/JSON' js.dependency 'RestKit/ObjectMapping/CoreData' js.dependency 'RestKit/UI' end s.subspec 'XML' do |xs| ... end ...end
![Page 28: Денис Лебедев-Управление зависимостями с помощью CocoaPods](https://reader037.fdocuments.in/reader037/viewer/2022102716/5403b0c88d7f72e04c8b4899/html5/thumbnails/28.jpg)
More
weak_frameworks
s.osx.source_files = ‘MyNSTableView.{h,m}’
![Page 29: Денис Лебедев-Управление зависимостями с помощью CocoaPods](https://reader037.fdocuments.in/reader037/viewer/2022102716/5403b0c88d7f72e04c8b4899/html5/thumbnails/29.jpg)
Share pod specifications
![Page 30: Денис Лебедев-Управление зависимостями с помощью CocoaPods](https://reader037.fdocuments.in/reader037/viewer/2022102716/5403b0c88d7f72e04c8b4899/html5/thumbnails/30.jpg)
‘Private’ specs repo$ pod repo add my-spec-repo http://github.com/my-account/spec-repo.git
$ pod push my-spec-repo
$ cd ~/.cocoapods/my-spec-repo$ git remote add upstream git://github.com/CocoaPods/Specs.git
![Page 31: Денис Лебедев-Управление зависимостями с помощью CocoaPods](https://reader037.fdocuments.in/reader037/viewer/2022102716/5403b0c88d7f72e04c8b4899/html5/thumbnails/31.jpg)
Public specs repo*$ cd ~/.cocoapods/master$ git remote set-url origin [email protected]:CocoaPods/Specs.git
*If you have push access to master-repo
![Page 32: Денис Лебедев-Управление зависимостями с помощью CocoaPods](https://reader037.fdocuments.in/reader037/viewer/2022102716/5403b0c88d7f72e04c8b4899/html5/thumbnails/32.jpg)
‘Appstore’ for libs
![Page 33: Денис Лебедев-Управление зависимостями с помощью CocoaPods](https://reader037.fdocuments.in/reader037/viewer/2022102716/5403b0c88d7f72e04c8b4899/html5/thumbnails/33.jpg)
Thanks!Questions?
twitter: @delebedevskype: d2.lebedev