? ? ?最近在學(xué)習(xí)cocoaPods嗤朴,在使用cocoaPods的時候遇到一些問題,記錄下來沐飘,分享給大家游桩,希望多多交流。
一耐朴、簡介:
? ? ?Cocoapods是OS X和iOS下的一個第三方庫管理工具借卧,并且支持Objective-C和swifit語言。通過Cocoapods為項(xiàng)目添加稱為"Pods"的依賴庫(這些庫必須是Cocoapods所支持的)筛峭,并且輕松實(shí)現(xiàn)第三方庫的版本管理铐刘。
二、安裝cocoaPods:
? ? ?這一塊不是重點(diǎn)影晓,大概講講镰吵,CocoaPods用Ruby寫的檩禾,所以首先安裝一下ruby環(huán)境,具體操作可以參考http://www.2cto.com/kf/201411/348389.html疤祭。然后用淘寶鏡像替換cocoaPods.org盼产,并安裝cocoaPods,在終端執(zhí)行:
gem sources --removehttps://rubygems.org/
gem sources -ahttp://ruby.taobao.org/
sudo gem install cocoapods
至此勺馆,cocoaPods安裝完成戏售,為驗(yàn)證是否安裝成功,可以查看cocoaPods的版本號:
pod --version
三谓传、導(dǎo)入第三方公有庫:
? ? ?cocoaPods最常用的是pod命令蜈项,例如搜索AfNetworking在cocoaPods中的所有可用版本芹关,在終端執(zhí)行:
pod search AFNetworking
為了給一個新建項(xiàng)目導(dǎo)入第三方庫续挟,需進(jìn)行如下步驟:
1、cd到當(dāng)前工程目錄侥衬,新建一個podfile文件诗祸,在終端執(zhí)行:
touch Podfile
在工程中多了個Podfile文件
接下來配置Podfile文件,格式如下
platform :ios, '7.0'
pod 'AFNetworking', '3.0.4'
pod 'UIView+Positioning', '1.1'
pod 'Masonry', '0.6.2'
例如pod 'AFNetworking', '3.0.4'是指為項(xiàng)目引入3.0.4版本的AFNetworking轴总,終端執(zhí)行:
pod install
執(zhí)行該命令直颅,cocoaPods默認(rèn)更新資源庫,可以加上--no-repo-update命令禁止更新怀樟。執(zhí)行成功的話功偿,會多出.xcworkspace文件和Podfile.lock文件,打開.xcworkspace往堡,目錄中多出Pods工程械荷。點(diǎn)擊工程文件,發(fā)現(xiàn)每個庫都是一個Target虑灰《窒梗可以在PFHealth工程里面導(dǎo)入第三方庫開發(fā)了。
Podfile.lock:該文件用來保存安裝的Pods依賴庫的版本穆咐,當(dāng)執(zhí)行完pod install命令后颤诀,lock文件會記錄當(dāng)前導(dǎo)入第三方庫的版本號及其依賴庫的版本號,當(dāng)再次pod install時对湃,cocoaPods會去取lock文件記錄的版本號崖叫,而不會去取最新的版本,這對于團(tuán)隊(duì)開發(fā)很有用拍柒。
pod install命令和pod update命令:一開始我也弄不清它倆的區(qū)別归露,后來試了一下,總結(jié)一下:在podfile文件里面編輯
pod 'AFNetworking'
執(zhí)行pod install命令導(dǎo)入的庫根據(jù)lock文件記錄的版本號而定斤儿,例如lock文件里面AFN的版本號是2.5.0剧包,則執(zhí)行pod install命令導(dǎo)入2.5.0的AFN恐锦,但是pod update命令不受lock文件制約,會取最新版本的AFN導(dǎo)入項(xiàng)目疆液。另外podfile文件里面可以指定工程中不同target導(dǎo)入不同的第三方庫一铅,具體參考https://guides.cocoapods.org/syntax/podfile.html。
四堕油、搭建cocoaPods私有庫
首先講講個人對于cocoapods導(dǎo)入第三方庫機(jī)制的理解潘飘,終端執(zhí)行
/Users/PF/.cocoapods/repos
repos目錄下有個master文件夾,進(jìn)入master->Specs掉缺,里面存放許多文件夾卜录,對應(yīng)一個第三方庫的名稱轰绵,里面又維護(hù)了若干版本文件夾拧廊,每個文件夾里面維護(hù)一個podspec.json文件撑螺,該文件存有遠(yuǎn)端github倉庫的索引翘紊。以下是podspec.json:
還有一些字段在這個spec文件沒有配置坊秸,例如resource_bundles绍赛,就不說明了趾痘。當(dāng)執(zhí)行pod install命令時逆济,會根據(jù)podfile文件中列出的庫名稱及版本號去repos里面查找蜀肘,然后找到對應(yīng)的podspec.json绊汹,然后根據(jù)source和source_files找到github地址去下載。
1扮宠、創(chuàng)建私有Spec Repo
master文件夾是官方維護(hù)的西乖,我們需要創(chuàng)建一個類似于master的repos,管理自己的私有庫spec文件坛增,終端執(zhí)行:
pod repo add PFSpec https://coding.net/u/panfeng/p/PFBaseSDK
2获雕、創(chuàng)建私有庫項(xiàng)目
cd到要創(chuàng)建項(xiàng)目的目錄并執(zhí)行
pod lib create PFBaseSDK
PFBaseSDK是自定義的私有庫項(xiàng)目名稱,終端會讓你確認(rèn)5個問題
What language do you want to use?? [ObjC/ Swift ]
Would you like to include a demo application with your library? [Yes/ No ]
Which testing frameworks will you use? [Specta/ Kiwi / None ]
Would you like to do view based testing? [Yes/ No ]
What is your class prefix ?->PF
創(chuàng)建成功后進(jìn)入demo轿偎,打開workspace
上面是demo工程典鸡,在podspec文件中配置一下,s.source_files和s.resource_bundles是私有庫源文件坏晦、資源文件的地址萝玷。下面是Pods私有庫工程,在classes文件夾下添加類昆婿,例如PFHTTPRequest球碉。寫好后cd到demo工程目錄下,執(zhí)行pod install仓蛆,這樣demo里面就可以引入寫好的類PFHTTPRequest睁冬。
3、本地驗(yàn)證私有庫
首先驗(yàn)證該項(xiàng)目能否被添加到pod repos中(warning會導(dǎo)致添加失敗)豆拨,終端執(zhí)行:
pod lib lint
PFBaseSDK passed validation表示驗(yàn)證成功直奋,然后將私有庫項(xiàng)目push到遠(yuǎn)端倉庫,倉庫地址和pod repo add命令后面的倉庫地址一致施禾,同時打上tag版本號脚线,例如0.1.3。接下來在本地項(xiàng)目中引入PFBaseSDK弥搞,cd到相應(yīng)工程邮绿,修改podfile文件,添加
pod 'PFBaseSDK', :path =>'~/code/Cocoapods/podTest/PFBaseSDK'
在終端執(zhí)行pod install 攀例,此時項(xiàng)目中出現(xiàn)私有庫船逮,說明本地引入成功
4、提交podspec到Repos
在終端執(zhí)行:
pod repo push PFSpec PFBaseSDK.podspec
將podspec提交到cocoapods的repos->PFSpec目錄下粤铭,多出PFBaseSDK目錄挖胃,里面是相應(yīng)版本號的podspec
終端執(zhí)行pod search PFBaseSDK,出現(xiàn)相應(yīng)版本號的私有庫承耿,說明已上傳至冠骄。cd到需要引入私有庫的工程目錄伪煤,修改podfile文件為pod ‘PFBaseSDK’ ‘0.1.3’加袋,終端執(zhí)行pod install命令,集成0.1.3的PFBaseSDK抱既。
五职烧、相關(guān)參考:
https://guides.cocoapods.org/syntax/podfile.html