原文 : 與佳期的個(gè)人博客(gonghonglou.com)
工欲善其事弹灭,必先利其器习绢!在iOS開(kāi)發(fā)中 CocoaPods 作為庫(kù)依賴管理工具就是一把利器。
有了CocoaPods你再也不需要手動(dòng)將需要的第三方庫(kù)拖進(jìn)你的工程、添加第三方庫(kù)所依賴的framework、設(shè)置如-fno-objc-arc
等編譯參數(shù)刁绒、手動(dòng)管理這些庫(kù)的更新,當(dāng)某個(gè)第三方庫(kù)有依賴其他的庫(kù)還要繼續(xù)拖烤黍、拖知市、拖......
我們只需要將所需要的第三方庫(kù)聲明到一個(gè)名為Podfile
文件中傻盟,然后執(zhí)行Pod install
命令就OK了,CocoaPods就會(huì)自動(dòng)去下載我們所需要庫(kù)嫂丙,并為我的工程設(shè)置好相應(yīng)的系統(tǒng)依賴和編譯參數(shù)娘赴。
只能說(shuō),好用到哭~
安裝CocoaPods
CocoaPods依賴于Ruby環(huán)境奢入,剛好Mac下自帶Ruby筝闹,使用Ruby的gem命令即可安裝CocoaPods。
為防止因gem太老而引發(fā)問(wèn)題腥光,建議執(zhí)行如下命令先更新gem:
$ sudo gem update --system
執(zhí)行如下命令安裝CocoaPods:
$ sudo gem install cocoapods
如果執(zhí)行上述命令后沒(méi)有反應(yīng),那是因?yàn)镽uby的軟件源 https://rubygems.org 使用的是亞馬遜的云服務(wù)而被墻了(GFW的偉大糊秆。武福。。)
可以用淘寶的Ruby鏡像來(lái)訪問(wèn)cocoapods痘番,依次執(zhí)行如下命令將官方的Ruby源替換成國(guó)內(nèi)淘寶的源
# $ gem sources --remove https://rubygems.org/
# $ gem sources -a https://ruby.taobao.org/
執(zhí)行如下命令驗(yàn)證Ruby鏡像的確是taobao的:
# $ gem sources -l
出現(xiàn)如下文字才說(shuō)明上面的命令是執(zhí)行成功的:
# *** CURRENT SOURCES ***
#
# https://ruby.taobao.org/
此時(shí)捉片,再次執(zhí)行g(shù)em命令安裝CocoaPods:
$ sudo gem install cocoapods
$ pod setup
稍等片刻 即可安裝成功。
注:
pod setup
是Cocoapods將它的信息下載到~/.cocoapods/repos
目錄下汞舱。即使在安裝時(shí)不執(zhí)行此命令伍纫,在初次執(zhí)行pod install
命令時(shí),系統(tǒng)也會(huì)自動(dòng)執(zhí)行pod setup
------10.27更新 以下------------------------------------------------
ruby.taobao.org 停止更新了昂芜,使用 cocoapods 的同學(xué)莹规,請(qǐng)更新到 ruby china 的源。更新方法:
使用如下命令查看鏡像源:
$ gem sources -l
更改鏡像源:
$ gem sources --add https://gems.ruby-china.org/ --remove https://rubygems.org/
or
$ gem sources --add https://gems.ruby-china.org/ --remove https://ruby.taobao.org/
------10.27更新 以上------------------------------------------------
升級(jí)CocoaPods
升級(jí)CocoaPods非常簡(jiǎn)單泌神,使用Ruby的gem命令:
$ sudo gem update cocoapods // 更新至最新版
or
$ sudo gem update cocoapods --pre // 更新至預(yù)覽版
當(dāng)然執(zhí)行如下命令也可以更新:
$ sudo gem install cocoapods // 更新至最新版
or
$ sudo gem install cocoapods --pre // 更新至預(yù)覽版
注:OS X 10.11之后升級(jí)CocoaPods會(huì)有問(wèn)題良漱。解決方案參見(jiàn)下一篇博客:解決OS X 10.11之后CocoaPods的升級(jí)問(wèn)題
降級(jí)CocoaPods
有時(shí)我們需要降低CocoaPods版本來(lái)解決某些第三方庫(kù)的兼容問(wèn)題,例如RestKit不兼容CocoaPods的0.39.0
版本欢际,降級(jí)到0.38.2
就OK了母市。
移除RubyGems中的Cocoapods程序包
查看gems中本地程序包,執(zhí)行如下命令:
$ gem list
輸出如下:
*** LOCAL GEMS ***
activesupport (4.2.5.2)
bigdecimal (1.2.8)
claide (1.0.0.beta.1, 0.9.1)
cocoapods (1.0.0.beta.4, 0.39.0)
cocoapods-core (1.0.0.beta.4, 0.39.0)
cocoapods-deintegrate (1.0.0.beta.1)
cocoapods-downloader (1.0.0.beta.1, 0.9.3)
cocoapods-plugins (1.0.0.beta.1, 0.4.2)
cocoapods-search (1.0.0.beta.1, 0.1.0)
cocoapods-stats (1.0.0.beta.3, 0.6.2)
cocoapods-trunk (1.0.0.beta.2, 0.6.4)
cocoapods-try (1.0.0.beta.2, 0.5.1)
colored (1.2)
did_you_mean (1.0.0)
escape (0.0.4)
fourflusher (0.3.0)
fuzzy_match (2.0.4)
i18n (0.7.0)
io-console (0.4.5)
json (1.8.3)
minitest (5.8.3)
molinillo (0.4.4)
nap (1.1.0)
net-telnet (0.1.1)
netrc (0.7.8)
power_assert (0.2.6)
psych (2.0.17)
rake (10.4.2)
rdoc (4.2.1)
rubygems-update (2.6.1)
test-unit (3.1.5)
thread_safe (0.3.5)
tzinfo (1.2.2)
xcodeproj (1.0.0.beta.3, 0.28.2)
其中包含的CocoaPods版本:
cocoapods (1.0.0.beta.4, 0.39.0)
移除指定版本cocoapods如1.0.0.beta.4损趋,執(zhí)行如下命令:
$ sudo gem uninstall cocoapods -v 1.0.0.beta.4
成功刪除則輸出:
Successfully uninstalled cocoapods-1.0.0.beta.4
還有一個(gè)0.39.0版本患久,移除程序包,執(zhí)行如下命令:
$ sudo gem uninstall cocoapods -v 0.39.0
當(dāng)移除最后一個(gè)版本時(shí)浑槽,詢問(wèn):
Remove executables:
pod, sandbox-pod
in addition to the gem? [Yn]
按下回車(chē)鍵刪除pod蒋失。查看CocoaPods組件的安裝目錄,執(zhí)行命令$ which pod
所得目錄下的pod
文件隨即刪除括荡。
安裝指定版本的Cocoapods程序包
安裝指定版本的CocoaPods 如0.39.0高镐,執(zhí)行如下命令:
$ sudo gem install cocoapods -v 0.39.0
注:若不指定版本,即命令如
sudo gem install cocoapods
則默認(rèn)安裝最新版畸冲。
安裝成功后嫉髓,執(zhí)行命令查看版本號(hào):
$ pod --version
輸出:
0.39.0
使用CocoaPods
搜索第三方庫(kù)
為判斷某第三方庫(kù)(如AFNetworking)是否支持CocoaPods观腊,執(zhí)行如下命令來(lái)搜索:
$ pod search AFNetworking
若如下圖所示,則可用CocoaPods管理AFNetworking
創(chuàng)建Podfile
的文件
CocoaPods就可以根據(jù)Podfile
文件里的內(nèi)容來(lái)幫你下載你所需要的庫(kù)算行。點(diǎn)擊前往CocoaPods官方對(duì)Podfile
文件的介紹梧油。
終端cd
到你的項(xiàng)目所在目錄下,創(chuàng)建Podfile
文件:
$ vim Podfile
按下i
鍵進(jìn)入輸入狀態(tài)州邢,在Podfile
文件里輸入以下文字:
platform :ios, '8.0'
target 'Your_App_Name' do
pod 'AFNetworking', '~> 3.0'
end
按下esc
鍵退出輸入儡陨。然后保存退出,命令是:wq
量淌。你當(dāng)然可以使用vim
之外的編輯軟件來(lái)編輯Podfile
文件骗村。
注:cocoapods-1.0.0.beta版本后規(guī)定
Podfile
文件必須如上所示格式(加上target
)
當(dāng)然,采用創(chuàng)建
Podfile
文件的另一種方式呀枢,終端cd
到你的項(xiàng)目所在目錄下執(zhí)行命令pod init
會(huì)自動(dòng)生成格式胚股,自己試一下你會(huì)喜歡的~
終端cd
到你的項(xiàng)目所在目錄下執(zhí)行如下命令來(lái)利用CocoPods下載第三方庫(kù):
$ pod install
如下圖所示則下載成功:
提示:[!] Please close any current Xcode sessions and use
Your_App_Name.xcworkspace
for this project from now on.
打開(kāi)Your_App_Name.xcworkspace
工程之后會(huì)看到 Pods
文件,AFNetwoking
已經(jīng)成功導(dǎo)入項(xiàng)目了裙秋。
你或許應(yīng)當(dāng)點(diǎn)擊前往CocoaPods官網(wǎng)查看對(duì)pod install vs. pod update
的介紹琅拌。
注:當(dāng)你
clone
別人的項(xiàng)目到本地后也需要終端cd
到項(xiàng)目所在目錄下執(zhí)行命令$ pod install
關(guān)于Podfile.lock
的文件
執(zhí)行pod install
之后,CocoaPods會(huì)生成一個(gè)名為Podfile.lock
的文件摘刑。并鎖定當(dāng)前各依賴庫(kù)的版本进宝,之后如果多次執(zhí)行pod install
或者團(tuán)隊(duì)中的其它人check下來(lái)這份包含Podfile.lock
文件的工程后再執(zhí)行pod install
命令時(shí),獲取下來(lái)的Pods依賴庫(kù)的版本就和最開(kāi)始用戶獲取到的版本一致枷恕。如果沒(méi)有Podfile.lock
文件党晋,執(zhí)行pod install
命令會(huì)獲取第三方庫(kù)的最新版本,這就有可能造成同一個(gè)團(tuán)隊(duì)使用的依賴庫(kù)版本不一致活尊,這對(duì)團(tuán)隊(duì)協(xié)作的危害無(wú)疑是災(zāi)難性的隶校!
在這種情況下,如果團(tuán)隊(duì)想使用當(dāng)前最新版本的依賴庫(kù)蛹锰,有兩種方案可修改Podfile.lock
的紀(jì)錄:
- 更改
Podfile
中各依賴庫(kù)的版本 - 執(zhí)行
pod update
命令
鑒于Podfile.lock
文件對(duì)團(tuán)隊(duì)協(xié)作如此重要深胳,我們應(yīng)該將它添加到版本控制里。
點(diǎn)擊前往CocoaPods官網(wǎng)查看對(duì)Podfile.lock
的介紹铜犬。
補(bǔ)充:有時(shí)執(zhí)行
pod update
命令會(huì)特別慢舞终,可以嘗試使用如下命令:
$ pod update --verbose --no-repo-update
pod install
命令同理:
$ pod install --verbose --no-repo-update
發(fā)布自己的開(kāi)源框架到CocoaPods
你需要如下圖創(chuàng)建一個(gè)Framework來(lái)打造你自己的開(kāi)源框架
在工程目錄下添加一份開(kāi)源協(xié)議文件,一般為“LICENSE”癣猾,在 github 上新建倉(cāng)庫(kù)時(shí)可以同時(shí)新建 README.md 文件及 LICENSE 文件敛劝。
在開(kāi)始之前你應(yīng)當(dāng)使用郵箱賬號(hào)注冊(cè) CocoaPods:
$ pod trunk register my_name@example.com 'my_name' --description='macbook pro'
隨后會(huì)收到一份驗(yàn)證郵件,點(diǎn)擊鏈接進(jìn)行驗(yàn)證纷宇,之后通過(guò)以下命令查看注冊(cè)結(jié)果:
$ pod trunk me
結(jié)果應(yīng)為:
- Name: my_name
- Email: my_name@example.com
- Since: August 28th, 05:45
- Pods:
- my_framework_name
- Sessions:
- August 28th, 05:45 - January 3rd, 2018 10:00. IP: 116.226.129.252
Description: macbook pro
加下來(lái)就是正式開(kāi)始推送自己的框架到 CocoaPods夸盟,
發(fā)布自己的開(kāi)源框架到CocoaPods同樣需要一個(gè)類(lèi)似Podfile
的文件來(lái)告訴CocoaPods我們開(kāi)源庫(kù)的名稱、版本像捶、作者上陕、描述桩砰、地址、所需的framework释簿、依賴庫(kù)等亚隅,這個(gè)文件叫my_framework_name.podspec
,開(kāi)始創(chuàng)建這個(gè)文件
終端cd
到工程目錄下庶溶,執(zhí)行如下命令:
$ pod spec create my_framework_name
這樣在你的工程目錄下會(huì)生成一個(gè)my_framework_name.podspec
文件煮纵,大概內(nèi)容為(將對(duì)應(yīng)名稱修改為你自己的):
Pod::Spec.new do |s|
s.name = "DJLSplitCollectionView"
s.summary = "It is my first framework."
s.version = "0.0.1"
s.license = { :type => 'MIT', :file => 'LICENSE' }
s.author = { "gonghonglou" => "gonghonglou@gmail.com" }
s.social_media_url = 'http://gonghonglou.com'
s.homepage = "https://github.com/gonghonglou/DJLSplitCollectionView"
s.platform = :ios, '8.0'
s.ios.deployment_target = '8.0'
s.source = { :git => "https://github.com/gonghonglou/DJLSplitCollectionView.git", :tag => s.version.to_s }
s.requires_arc = true
s.source_files = 'DJLSplitCollectionView/*.{h,m}'
s.public_header_files = 'DJLSplitCollectionView/*.{h}'
s.framework = "UIKit"
end
然后執(zhí)行如下命令
$ git tag 0.0.1 // 給框架打上 tag
$ git push origin --tags // 將 tag 推送到 github
檢查 podspec 語(yǔ)法和項(xiàng)目是否正常編譯,執(zhí)行如下命令:
$ pod spec lint my_framework_name.podspec
確保沒(méi)有任何 error 和 warning 偏螺,然后推送 podspec 到 CocoaPods 的主倉(cāng)庫(kù)就可以了
$ pod trunk push my_framework_name.podspec // 提交到 CocoaPods 中心倉(cāng)庫(kù)
成功后結(jié)果應(yīng)該為:
Updating spec repo `master`
Validating podspec
-> DJLSplitCollectionView (0.0.1)
Updating spec repo `master`
--------------------------------------------------------------------------------
?? Congrats
?? DJLSplitCollectionView (0.0.1) successfully published
?? August 28th, 09:39
?? https://cocoapods.org/pods/DJLSplitCollectionView
?? Tell your friends!
--------------------------------------------------------------------------------
如圖:
大功告成行疏,幾秒或者幾分鐘后
pod search my_framework_name
搜索一下吧~如果搜不到的話,建議執(zhí)行如下方法:
rm ~/Library/Caches/CocoaPods/search_index.json
pod search my_framework_name
后記
小白出手套像,請(qǐng)多指教隘擎。如言有誤,還望斧正凉夯!
轉(zhuǎn)載請(qǐng)保留原文地址http://gonghonglou.com/2016/04/01/CocoaPods