原文連接html
CocoaPods是OS X和iOS下的一個第三類庫管理工具,經過CocoaPods工具咱們能夠爲項目添加被稱爲「Pods」的依賴庫(這些類庫必須是CocoaPods自己所支持的),而且能夠輕鬆管理其版本。react
使用CocoaPods有如下幾點好處:ios
sudo gem install cocoapods
複製代碼
pod --version
複製代碼
在開發中安裝使用cocoapods要注意版本,由於通常開發過程當中要你們一塊兒使用同一個工程,通常爲了指定版本咱們會在工程下建立Gemfile來指定使用cocoapods的版本。git
除了指定Gemfile之外 , 咱們還能夠安裝指定版本的podsgithub
sudo gem install cocoapods -v 1.3.1
複製代碼
再查看一下pod版本咱們就會發現已經安裝了1.3.1swift
當咱們本地同時存在多個版本的pod的時候能夠把多餘的卸載掉xcode
sudo gem uninstall cocoapods
複製代碼
會提示咱們選擇卸載的版本安全
Select gem to uninstall:
1. cocoapods-1.2.1
2. cocoapods-1.3.1
3. All versions
>
複製代碼
咱們選擇想要卸載的版本的序號就行了 。ruby
cocoapods支持咱們去查找想要使用的倉庫 , 好比咱們想查找ReactoveObjC這個庫bash
pod spec cat ReactiveObjC
複製代碼
咱們能夠看到該倉庫的配置信息。
{
"name": "ReactiveObjC",
"version": "3.1.0",
"summary": "The 2.x ReactiveCocoa Objective-C API: Streams of values over time",
"description": "ReactiveObjC (formally ReactiveCocoa or RAC) is an Objective-C\nframework inspired by [Functional Reactive Programming](\nhttp://en.wikipedia.org/wiki/Functional_reactive_programming).\nIt provides APIs for composing and **transforming streams of values**.",
"homepage": "https://reactivecocoa.io",
"screenshots": "https://reactivecocoa.io/img/logo.png",
"license": {
"type": "MIT",
"file": "LICENSE.md"
},
"documentation_url": "https://github.com/ReactiveCocoa/ReactiveObjC/tree/master/Documentation#readme",
"authors": "ReactiveCocoa",
"social_media_url": "https://twitter.com/ReactiveCocoa",
"platforms": {
"ios": "8.0",
"osx": "10.9",
"watchos": "2.0",
"tvos": "9.0"
},
"source": {
"git": "https://github.com/ReactiveCocoa/ReactiveObjC.git",
"tag": "3.1.0"
},
"source_files": [
"ReactiveObjC/*.{h,m,d}",
"ReactiveObjC/extobjc/*.{h,m}"
],
"private_header_files": [
"**/*Private.h",
"**/*EXTRuntimeExtensions.h",
"**/RACEmpty*.h"
],
"ios": {
"exclude_files": "ReactiveObjC/**/*{AppKit,NSControl,NSText,NSTable}*"
},
"osx": {
"exclude_files": "ReactiveObjC/**/*{UIActionSheet,UIAlertView,UIBarButtonItem,UIButton,UICollectionReusableView,UIControl,UIDatePicker,UIGestureRecognizer,UIImagePicker,UIRefreshControl,UISegmentedControl,UISlider,UIStepper,UISwitch,UITableViewCell,UITableViewHeaderFooterView,UIText,MK}*"
},
"tvos": {
"exclude_files": "ReactiveObjC/**/*{AppKit,NSControl,NSText,NSTable,UIActionSheet,UIAlertView,UIDatePicker,UIImagePicker,UIRefreshControl,UISlider,UIStepper,UISwitch,MK}*"
},
"watchos": {
"exclude_files": "ReactiveObjC/**/*{UIActionSheet,UIAlertView,UIBarButtonItem,UIButton,UICollectionReusableView,UIControl,UIDatePicker,UIGestureRecognizer,UIImagePicker,UIRefreshControl,UISegmentedControl,UISlider,UIStepper,UISwitch,UITableViewCell,UITableViewHeaderFooterView,UIText,MK,AppKit,NSControl,NSText,NSTable,NSURLConnection}*"
複製代碼
首先 , 新建一個singlgViewApp ,而後在命令行進入該project目錄
pod init
複製代碼
咱們能夠看到cocoapods爲咱們生成了一個Podfile platform表示這個工程安裝的設備,後面是系統最低版本 如今咱們能夠在裏面添加一下剛纔搜索的倉庫
# Uncomment the next line to define a global platform for your project
platform :ios, '9.0'
target 'ocTest' do
# Uncomment the next line if you're using Swift or would like to use dynamic frameworks
# use_frameworks!
pod 'ReactiveObjC'
# Pods for ocTest
end
複製代碼
這裏咱們添加了一個倉庫,接下來再命令行執行pod update來安裝所須要的倉庫,安裝完畢後咱們能夠看到當前路徑下有兩個工程文件
咱們在使用了cocoapods管理第三方庫的時候,每次install或者update的時候就會生成*.xcworkspace這個文件咱們須要使用這個工程進行開發調試。 如今打開工程,定位到viewController.m中就能夠import並使用ReactiveObjC啦 。
公司內部有本身搭建的gitlab服務時,有的公司搭建的gitlab服務爲了安全並無提供外網接口,咱們只能在內網訪問,這時候就要在podfile中添加私有源的地址
source 'http://xx.xxxx.com/ios/cocoapods-spec.git'
source 'https://github.com/CocoaPods/Specs.git' # 官方庫
複製代碼
上面那個就是咱們要添加的私有源地址,下面的是官方源地址,若是都不寫的話那麼默認就會使用官方源 。
pod lib create TDFCommonUtil
複製代碼
To get you started we need to ask a few questions, this should only take a minute.
If this is your first time we recommend running through with the guide:
- https://guides.cocoapods.org/making/using-pod-lib-create.html
( hold cmd and click links to open in a browser. )
What platform do you want to use?? [ iOS / macOS ]
>
ios
What language do you want to use?? [ Swift / ObjC ]
>
swift
Would you like to include a demo application with your library? [ Yes / No ]
>
yes
Which testing frameworks will you use? [ Quick / None ]
> None
Would you like to do view based testing? [ Yes / No ]
> NO
複製代碼
cd進入剛纔建立的目錄,執行命令 ls
能夠看到控制檯有如下輸出。
Example README.md TDFCommonUtil.podspec
LICENSE TDFCommonUtil _Pods.xcodeproj
複製代碼
解釋一下這裏都是啥
咱們首先要爲咱們的pod建立一個實際的git倉庫 。
打開gitlab服務建立一個空的git倉庫 而後先把pod目錄提交到咱們的倉庫 blalblabla
打開TDFCommonUtil.podspec文件
Pod::Spec.new do |s|
s.name = 'TDFCommonUtil'
s.version = '0.1.0'
s.summary = 'A short description of TDFCommonUtil.'
s.description = <<-DESC TODO: Add long description of the pod here. DESC
s.homepage = 'https://github.com/xxxxx@yeah.net/TDFCommonUtil'
s.license = { :type => 'MIT', :file => 'LICENSE' }
s.author = { 'xxxxx' => 'xxxxx@2dfire.com' }
s.source = { :git => 'https://github.com/xxxxx@yeah.net/TDFCommonUtil.git', :tag => s.version.to_s }
s.ios.deployment_target = '8.0'
s.source_files = 'TDFCommonUtil/Classes/**/*'
# s.resource_bundles = {
# 'TDFCommonUtil' => ['TDFCommonUtil/Assets/*.png']
# }
# s.public_header_files = 'Pod/Classes/**/*.h'
# s.frameworks = 'UIKit', 'MapKit'
# s.dependency 'AFNetworking', '~> 2.3'
end
複製代碼
這裏的配置項就是生成pod須要配置的大部分選項了 ,簡單介紹一下
如今把這些填好吧 。
有的時候咱們開發的pod倉庫須要依賴其餘倉庫,好比咱們須要依賴ReactiveObjC 這裏就能夠在TDFCommonUtil.podspec下面添加這一行
s.dependency 'ReactiveObjC'
複製代碼
ps ,這裏能夠指向特定的版本也能夠用 '~> 2.3' 的形式表示依賴此倉庫至少大於2.3版本可是不會超過3.0 。
一切就緒後你能夠在裏面建立你的文件,添加代碼了,別忘了再有文件的增長或刪除後在運行一遍 ‘pod install’。
先隨便建立幾個文件,而後咱們使用cocoapods檢測咱們的庫
pod lib lint --sources='git@git.xxx.com:ios/cocoapods-spec.git' --use-libraries --allow-warnings --verbose --no-clean
複製代碼
這裏的sources填寫你所使用的私有gitlab服務,而後咱們就能夠靜靜的看着命令行了。
最後若是出現
Test passed validation.
複製代碼
證實你的庫是可運行的,若是沒有出現passed就注意下輸出中的error信息,搜索一下error看是什麼致使的 。
lint經過後咱們就能夠把本身的倉庫信息推送到私有源了,注意不是「倉庫」是「倉庫信息」,也就是x.podspec 。 cocoapod能夠自動幫咱們完成這件事情
pod repo push xxx-cocoapods-spec TDFOpenShopSDK.podspec --sources=git@git.xxx.com:ios/cocoapods-spec.git --allow-warnings --use-libraries --verbose
複製代碼
Cocoapods極大方便了咱們管理外部SDK和內部模塊化解耦,用好這個管理工具無疑會爲咱們的工做效率帶來巨大提高。