目錄html
WHAT IS COCOAPODS
CocoaPods is a dependency manager for Swift and Objective-C Cocoa projects. It has over 52 thousand libraries and is used in over 3 million apps. CocoaPods can help you scale your projects elegantly.ios
CocoaPods 官網上的這段話翻譯一下就是:CocoaPods是Swift和Objective-C Cocoa項目的依賴管理器。他擁有超過52000個庫,並在超過300萬個應用程序中使用。CocoaPods能夠幫助您優雅地擴展項目。c++
簡單來講,就是能夠幫助你方便地導入三方庫,並導入庫的依賴,免去了手動完成三方庫導入配置。除了導入,你還能夠利用CocoaPods搭建你本身的私有庫體系。由於這些功能,CocoaPods基本上全部iOS 開發者都在使用。git
CocoaPods是使用Ruby構建的,因此須要在本地準備好Ruby環境。不過Mac默認已經有了Ruby環境,能夠免去搭建Ruby環境了。打開終端(Terminal),咱們開始操做。github
RubyGems在國內的訪問速度極其感人,因此要進行更換,換成國內的鏡像源。例子中我使用的是 Ruby China 的源。api
查看當前的源,這個時候咱們能看到當前的源是 https://rubygems.org
ruby
$ gem sources -l
移除當前源,並添加新的源bash
# Ruby China有https和http兩種源,我一開始添加的是https的源會報SSL錯誤,改爲了http就沒問題 $ gem sources --add http://gems.ruby-china.com/ --remove https://rubygems.org/
再次查看當前源,這個時候就變成了 http://gems.ruby-china.com
app
$ gem sources -l
安裝,執行完下面的命令,等待一會就好ide
$ sudo gem install cocoapods # Mac OS X EI Capitan 之後系統請用下面這個安裝命令 $ sudo gem install -n /usr/local/bin cocoapods # 卸載 $ sudo gem uninstall cocoapods
查看pod版本,驗證是否安裝成功
$ pod --version
在安裝完成以後,進行設置。這一步的主要做用就是把官方的 Specs repo (The CocoaPods Master Repo) 拉到本地,本地倉庫的存放目錄是 ~/.cocoapods/repos/master
$ pod setup
友情提醒1,這一步很慢很慢,請耐心等待
友情提醒2,若是你很沒有耐心,你能夠偷懶從其餘安裝好了CocoaPods的電腦上,拷貝一份repos到你的電腦上
通過上面的折騰,CocoaPods已經安裝成功了,咱們要用來管理依賴庫了,下面以導入AFNetworking進行演示。
查看可用的三方庫
$ pod search AFNetworking # Ctrl+Z 退出
從輸出裏,看到如今AFNetworking最新的版本是3.2.1。
終端進入工程目錄,新建Podfile
$ cd ~/Desktop/CocoaPodsDemo/ $ pod init
編輯Podfile,vi
的相關操做自行了解
$ vi Podfile # 編輯完成以後,:wq 保存退出
導入
$ pod install
Pod install
成功以後,目錄結構就變成了下面這個樣子,雙擊 CocoaPodsDemo.xcworkspace
打開項目
# Uncomment the next line to define a global platform for your project # platform :ios, '9.0'
這一段是指定工程所支持的最低系統版本
# Uncomment the next line if you're using Swift or would like to use dynamic frameworks # use_frameworks!
這一段是設置是否以動態庫的形式編譯Pods
# use_frameworks
是以靜態庫的形式編譯,產出的庫是 .a
use_frameworks
是以動態庫的形式編譯,產出的庫是 .framework
pod 'AFNetworking', '~> 3.2.1'
這一句是設置三方庫, '~> 3.2.1'
是指定了庫的版本。
有的時候也這麼寫,這樣子就是導入最新版本的:
pod 'AFNetworking'
利用CocoaPods導入三方庫,是大多數狀況下的使用場景,可是CocoaPods還有一個大殺器是建立私有庫。
開源三方庫能用CocoaPods導入工程,是由於CocoaPods官方維護了一個公開的索引倉庫。那麼若是咱們本身維護私有庫和私有的索引倉庫呢?
爲何私有庫能被正確地導入工程,自動完成配置?這主要依賴的是Pod項目工程中的podspec文件。這個文件的建立有兩種方法:
pod spec creare <庫名>
新建podspec。這個更適合於把已有項目轉爲Pod項目pod lib create <庫名>
,自動建立Pod項目工程。下面的演示就在這種形式上進行。pod lib create
是Pod提供的一個自動化建立私有pod工程的命令,實質上是下載一個Pod工程模板到本地,再作修改。命令在運行過程當中,會彈出幾個配置項進行配置,按需設置就行,很簡單。
$ cd ~/Desktop $ pod lib create MyUtils
看一下MyUtils的目錄結構,Example目錄是測試工程,MyUtils是私有庫代碼。咱們雙擊Example裏的MyUtils.xcworkspace
打開這個工程。
我這裏就簡單寫一個測試類 MUAppInfo
,寫完以後再 pod install
進行開發模式下的導入,我把這個測試項目放到了碼雲上面 :
MUAPPInfo.h
MUAPPInfo.m
MUViewController.m
Podspec是這個pod的配置文件,當咱們引用這個pod到工程的時候,就會按這個文件裏的配置項進行配置。這邊順便提一下,podspec是Ruby文件,咱們能夠用 Visual Studio Code 再裝上Ruby插件來編輯,真的很好用。
那咱們來看一下 MyUtils.podspec
這個文件,通過配置以下(能夠做爲模板使用):
Pod::Spec.new do |s| s.name = 'MyUtils' s.version = '0.1.0' s.summary = 'MyUtils' s.description = <<-DESC CocoaPods私有庫測試工程 DESC s.homepage = 'https://gitee.com/vincedev/MyUtils' # 證書 s.license = { :type => 'MIT', :file => 'LICENSE' } # 做者信息 s.author = { 'superman' => 'superman@gmail.com' } # 源地址 s.source = { :git => 'https://gitee.com/vincedev/MyUtils.git', :tag => s.version.to_s } # 支持最低系統版本 s.ios.deployment_target = '8.0' # 源文件 s.source_files = 'MyUtils/Classes/**/*' # 公開的頭文件 s.public_header_files = 'MyUtils/Classes/**/*.h' # 資源,多個用逗號隔開 # s.resource = 'MyUtils/Assets/resource.bundle' # 是否arc s.requires_arc = true # 依賴的系統Frameworks,多個用逗號隔開 s.frameworks = 'UIKit' # 依賴的系統Library,多個用逗號隔開 # s.libraries = 'stdc++.6.0.9' # 依賴的三方庫,有多個依賴就寫多行 # s.dependency 'AFNetworking', '~> 2.3' # s.dependency 'MJRefresh' end
Podspec寫好了,接下來須要驗證是否正確,驗證也有兩個方法 pod spec lint
和 pod lib lint
:
# 會去匹配 s.source 的配置 $ pod spec lint # 不指定,默認當前文件夾內的podspec $ pod spec lint MyUtils.podspec # 指定podspec # 忽略 s.source 的配置 $ pod lib lint # 不指定,默認當前文件夾內的podspec $ pod lib lint MyUtils.podspec # 指定podspec
當看到終端打印 passed validation.
,就說明驗證經過,不經過就根據提示進行修改。
當驗證經過以後,打上tag,推送到遠程倉庫
$ git tag 0.1.0 $ git push origin --tags # 推送到遠程
其實私有 Specs repo 不是必須的,它的做用是讓你在導入私有庫的時候像導入官方開源庫同樣,可是我以爲更大的做用是解決私有庫間的互相依賴。
若是該私有庫沒有依賴其餘私有庫,能夠直接這樣導入:
pod 'MyUtils', :git => 'https://gitee.com/vincedev/MyUtils.git'
那接下來進行私有 Specs repo 的建立,打開 ~/.cocoapods/repos
目錄,就看到裏面只有 master
這個目錄,該目錄即存放着上面咱們提到的官方 Specs repo
。咱們來添加本身的 Specs repo
:
VinceSpecs
項目添加到本地 repos
目錄
pod repo add VinceSpecs https://gitee.com/vincedev/VinceSpecs
添加完成以後,~/.cocoapods/repos
目錄下就多了一個 VinceSpecs
目錄。
$ cd ~/Desktop/MyUtils $ pod repo push VinceSpecs MyUtils.podspec
添加成功以後,就能看到 ~/.cocoapods/repos/VinceSpecs
多了 MyUtils
,VinceSpecs
的遠程倉庫同步更新了。
這裏拿出上面的 CocoaPodsDemo
這個工程進行測試,編輯 Podfile ,編輯完成以後執行 install
這一步的重點在於指定私有 Specs repo
倉庫,並且還要指定官方的 Specs repo
倉庫。
這篇文章算是我本身在使用CocoaPods過程當中的一個入門記錄,私有庫建立中還踩了不少坑,這裏就不寫了,請看下回分解吧。若是各位看管搜到了這篇文章並耐心看完了,本文如對你有所幫助,煩請點個贊,謝謝!!!保佑看官們代碼無bug!!!
本人就任於甜橙金融信息技術部,負責翼支付iOS客戶端開發,喜歡數碼科技,喜歡研究技術,深度代碼潔癖患者。