CocoaPods 私有庫教程已更新辣苏,如有需要請(qǐng)移駕 CocoaPods 私有庫 step by step - 簡書查看
目錄
更新記錄
CocoaPods簡介
常用命令一覽
一肝箱、CocoaPods 的安裝
1、更換 Gem 的源
2稀蟋、更新升級(jí) Gem 版本
3煌张、安裝CocoaPods
4、更換repo鏡像為國內(nèi)服務(wù)器
二退客、CocoaPods 的使用(圖和文字有細(xì)微的出入)
1骏融、新建 Podfile 文件
2链嘀、編輯 Podfile 文件
3、執(zhí)行導(dǎo)入命令
4档玻、第三方庫更新
5怀泊、文件和指令說明
6、pod install 和 pod update 的區(qū)別
三误趴、遭遇到的問題
四霹琼、原理和說明
五、更多
1凉当、pod install提速
2枣申、關(guān)于Podfile文件編輯時(shí),第三方庫版本號(hào)的各種寫法
更新記錄:
2017.12更新: pod install
和 pod update
的區(qū)別纤怒。
2016.08更新:Podfile 格式更新
在1.0.0的 CocoaPods 版本升級(jí)后糯而,Podfile 文件的使用方法官方已經(jīng)更新,格式如下
platform :ios, "9.0"
target 'BSBDJ' do
pod "AFNetworking"
pod "SDWebImage"
pod "MJExtension"
end
CocoaPods簡介
每種語言發(fā)展到一個(gè)階段泊窘,就會(huì)出現(xiàn)相應(yīng)的依賴管理工具熄驼,例如Java語言的Maven,nodejs的npm烘豹。隨著iOS開發(fā)者的增多瓜贾,業(yè)界也出現(xiàn)了為iOS程序提供依賴管理的工具,它的名字叫做:CocoaPods携悯。
CocoaPods項(xiàng)目的源碼在Github上管理祭芦。該項(xiàng)目開始于2011年8月12日,經(jīng)過多年發(fā)展憔鬼,現(xiàn)在已經(jīng)成為iOS開發(fā)事實(shí)上的依賴管理標(biāo)準(zhǔn)工具龟劲。開發(fā)iOS項(xiàng)目不可避免地要使用第三方開源庫,CocoaPods的出現(xiàn)使得我們可以節(jié)省設(shè)置和更新第三方開源庫的時(shí)間轴或。
在我開發(fā)猿題庫客戶端時(shí)昌跌,其使用了24個(gè)第三方開源庫。在沒有使用CocoaPods以前照雁,我需要:
把這些第三方開源庫的源代碼文件復(fù)制到項(xiàng)目中蚕愤,或者設(shè)置成git的submodule。
對(duì)于這些開源庫通常需要依賴系統(tǒng)的一些framework饺蚊,我需要手工地將這些framework一一增加到項(xiàng)目依賴中萍诱,比如通常情況下,一個(gè)網(wǎng)絡(luò)庫就需要增加以下framework: CFNetwork, SystemConfiguration, MobileCoreServices, CoreGraphics, zlib污呼。
對(duì)于某些開源庫裕坊,我還需要設(shè)置-licucore或者 -fno-objc-arc等編譯參數(shù)管理這些依賴包的更新。
這些體力活雖然簡單燕酷,但毫無技術(shù)含量并且浪費(fèi)時(shí)間碍庵。在使用CocoaPods之后映企,我只需要將用到的第三方開源庫放到一個(gè)名為Podfile的文件中悟狱,然后執(zhí)行pod install静浴。CocoaPods就會(huì)自動(dòng)將這些第三方開源庫的源碼下載下來,并且為我的工程設(shè)置好相應(yīng)的系統(tǒng)依賴和編譯參數(shù)挤渐。
常用命令一覽
# 1.先升級(jí)Gem
sudo gem update --system
# 2.切換cocoapods的數(shù)據(jù)源
【先刪除苹享,再添加,查看】
gem sources --remove https://rubygems.org/
gem sources -a http://ruby.taobao.org/
gem sources -l
3.安裝cocoapods
sudo gem install cocoapods
4.將Podspec文件托管地址從github切換到國內(nèi)的oschina
【先刪除浴麻,再添加得问,再更新】
pod repo remove master
pod repo add master http://git.oschina.net/akuandev/Specs.git
pod repo add master https://gitcafe.com/akuandev/Specs.git
pod repo update
5.設(shè)置pod倉庫
pod setup
6.測試
【如果有版本號(hào),則說明已經(jīng)安裝成功】
pod --version
7.利用cocoapods來安裝第三方框架
01 進(jìn)入要安裝框架的項(xiàng)目的.xcodeproj同級(jí)文件夾
02 在該文件夾中新建一個(gè)文件Podfile
03 在文件中告訴cocoapods需要安裝的框架信息
a.該框架支持的平臺(tái)
b.適用的iOS版本
c.框架的名稱
d.框架的版本
8.安裝
pod install --no-repo-update
pod update --no-repo-update
一软免、CocoaPods 的安裝
CocoaPods是用Ruby實(shí)現(xiàn)的宫纬,要想使用它首先需要有Ruby的環(huán)境。幸運(yùn)的是OS X系統(tǒng)默認(rèn)的已經(jīng)可以運(yùn)行Ruby了膏萧,因此我們只需要執(zhí)行以下命令漓骚。
1、更換 Gem 的源
Gem是一個(gè)管理Ruby庫和程序的標(biāo)準(zhǔn)包榛泛,它通過Ruby Gem(如 http://rubygems.org/ )源來查找蝌蹂、安裝、升級(jí)和卸載軟件包
// 1.移除掉原有的源(服務(wù)器在國外曹锨,速度較慢)
- gem sources --remove https://rubygems.org/
// 2.等有反應(yīng)之后再敲入以下命令(添加國內(nèi)的源孤个,原先是 http://ruby.taobao.org/ ,現(xiàn)在淘寶上的ruby鏡像換成https了)
- gem sources -a https://ruby.taobao.org/
// 3.驗(yàn)證是否替換成功
- gem sources -l
2沛简、更新升級(jí) Gem 版本
Gem是管理Ruby庫和程序的標(biāo)準(zhǔn)包齐鲤,如果它的版本過低也可能導(dǎo)致安裝失敗,解決方案自然是升級(jí)Gem椒楣,執(zhí)行下述命令即可:
// 更新升級(jí)gem
- sudo gem update --system
3给郊、安裝CocoaPods
// 安裝CocoaPods(OS X 10.11以前)
- sudo gem install cocoapods
// 安裝CocoaPods(10.11后蘋果升級(jí)了安全策略)
- sudo gem install -n /usr/local/bin cocoapods
4、更換repo鏡像為國內(nèi)服務(wù)器
所有的項(xiàng)目的Podspec文件都托管在https://github.com/CocoaPods/Specs撒顿。第一次執(zhí)行pod setup時(shí)丑罪,CocoaPods會(huì)將這些podspec索引文件更新到本地的 ~/.cocoapods/目錄下,這個(gè)索引文件比較大凤壁,有80M左右吩屹。所以第一次更新時(shí)非常慢,筆者(唐巧)就更新了將近1個(gè)小時(shí)才完成拧抖。
一個(gè)叫akinliu的朋友在gitcafe和oschina上建立了CocoaPods索引庫的鏡像煤搜,因?yàn)間itcafe和oschina都是國內(nèi)的服務(wù)器,所以在執(zhí)行索引更新操作時(shí)唧席,會(huì)快很多擦盾。如下操作可以將CocoaPods設(shè)置成使用gitcafe鏡像:
// 1.移除原有服務(wù)器
- pod repo remove master
// 2.添加境內(nèi)服務(wù)器(建議使用第一個(gè))
- pod repo add master https://gitcafe.com/akuandev/Specs.git
- pod repo add master http://git.oschina.net/akuandev/Specs.git(開源中國較慢)
二嘲驾、CocoaPods 的使用(圖和文字有細(xì)微的出入)
1、新建 Podfile 文件
使用時(shí)需要在你的項(xiàng)目根目錄下新建一個(gè)名為Podfile的文件迹卢,將依賴的庫名字依次列在文件中即可
//進(jìn)入你的工程目錄
$ cd /Users/peikua/Desktop/CocoaPodsDemo
//創(chuàng)建Pods文件
$ touch Podfile
2辽故、編輯 Podfile 文件
假設(shè)我們想導(dǎo)入 AFNetworking ,進(jìn)入http://cocoapods.org腐碱,搜索AFNetworking
5.2-查詢網(wǎng)站上的信息.png
5.3-根據(jù)信息編輯 Podfile 文件.png
3誊垢、執(zhí)行導(dǎo)入命令
$ cd /Users/peikua/Desktop/CocoaPodsDemo
$ pod install
pod install命令執(zhí)行成功后,會(huì)看到工程目錄下多出CocoaPodsTest.xcworkspace症见、Podfile.lock文件和Pods目錄喂走。再看看剛才執(zhí)行完pod install命令打印出來的內(nèi)容的最后一行:
From now on use CocoaPodsDemo.xcworkspace.
提示我們從現(xiàn)在起,我們需要使用CocoaPodsTest.xcworkspace文件來開發(fā)谋作。
4芋肠、第三方庫更新
只需要在Podfile文件中添加相應(yīng)的第三方庫信息,執(zhí)行pod update命令即可遵蚜。
6.1-假設(shè)已有兩個(gè)庫帖池,新增一個(gè)庫.png
6.2-執(zhí)行 pod update 命令進(jìn)行更新.png
pod outdated:
當(dāng)你運(yùn)行pod outdated
命令,CocoaPods會(huì)列出那些所有較Podfile.lock
里面有新版本的庫(那些當(dāng)前被安裝著的庫的版本)谬晕。這個(gè)意思就是碘裕,如果你運(yùn)行pod update PODNAME
,如果這個(gè)庫有新的版本攒钳,并且新版本仍然符合在Podfile里的限制(pod 'MyPod', '~>x.y'
)帮孔,它就會(huì)被更新。
Podfile 文件的使用方法官方已經(jīng)更新不撑,格式如下
platform :ios, "9.0"
target 'BSBDJ' do
pod "AFNetworking"
pod "SDWebImage"
pod "MJExtension"
end
5文兢、文件和指令說明
- Podfile.lock文件
- 最后一次更新Pods時(shí), 所有第三方框架的版本號(hào)
- 常用指令的區(qū)別
- pod install
- 會(huì)根據(jù)Podfile.lock文件中列舉的版本號(hào)來安裝第三方框架
- 如果一開始Podfile.lock文件不存在, 就會(huì)按照Podfile文件列舉的版本號(hào)來安裝第三方框架
- 安裝框架之前, 默認(rèn)會(huì)執(zhí)行pod repo update指令
- pod update
- 將所有第三方框架更新到最新版本, 并且創(chuàng)建一個(gè)新的Podfile.lock文件
- 安裝框架之前, 默認(rèn)會(huì)執(zhí)行pod repo update指令
- pod install --no-repo-update
- pod update --no-repo-update
- 安裝框架之前, 不會(huì)執(zhí)行pod repo update指令
- pod install
6、pod install
和 pod update
的區(qū)別焕檬。
首先 podfile.lock
和 podfile
必須加入版本控制姆坚。
install
并不是第一次創(chuàng)建 podfile
時(shí)運(yùn)行一次,后面就不再使用了实愚。install
命令不僅在初始時(shí)使用兼呵,在新增或刪除 repo
時(shí)也需要運(yùn)行。每次添加或刪除 repo
后應(yīng)該執(zhí)行 install
命令腊敲,這樣其它的 repo
不會(huì)更新击喂。
update
僅僅在只需更新某一個(gè) repo
或所有時(shí)才使用。
每次執(zhí)行 install
時(shí)碰辅,會(huì)將每個(gè) repo
的版本信息寫入到 podfile.lock
懂昂,已存在于 podfile.lock
的 repo
不會(huì)被更新只會(huì)下載指定版本,不在 podfile.lock
中的 repo
將會(huì)搜索與 podfile
里面對(duì)應(yīng) repo
匹配的版本没宾。
即使某個(gè) repo
指定了版本凌彬,如 pod 'A', '1.0.0'
沸柔,最好也是不要使用 update
,因?yàn)?repo A
可能有依賴铲敛,如果此時(shí)使用 update
會(huì)更新其依賴褐澎。
三、遭遇到的問題
//以后使用CocoaPods過程中出現(xiàn)了莫名其妙的問題原探,執(zhí)行下面命令
- sudo gem update --system
- sudo gem install cocoapods
- pod setup
四乱凿、原理和說明
1、第三方庫會(huì)被編譯成.a靜態(tài)庫供我們真正的工程使用咽弦。
CocoaPods會(huì)將所有的第三方庫以target的方式組成一個(gè)名為Pods的工程,該工程就放在剛才新生成的Pods目錄下胁出。整個(gè)第三方庫工程會(huì)生成一個(gè)名稱為libPods.a的靜態(tài)庫提供給我們自己的CocoaPodsTest工程使用型型。
對(duì)于資源文件,CocoaPods提供了一個(gè)名為Pods-resources.sh的bash腳本全蝶,該腳本在每次項(xiàng)目編譯的時(shí)候都會(huì)執(zhí)行闹蒜,將第三方庫的各種資源文件復(fù)制到目標(biāo)目錄中。
2抑淫、我們的工程和第三方庫所在的工程會(huì)由一個(gè)新生成的workspace管理
為了方便我們直觀的管理工程和第三方庫绷落,CocoaPodsTest工程和Pods工程會(huì)被以workspace的形式組織和管理,也就是我們剛才看到的CocoaPodsTest.xcworkspace文件始苇。
3砌烁、原來的工程設(shè)置已經(jīng)被更改了,這時(shí)候我們直接打開原來的工程文件去編譯就會(huì)報(bào)錯(cuò)催式,只能使用新生成的workspace來進(jìn)行項(xiàng)目管理函喉。
4、CocoaPods通過一個(gè)名為Pods.xcconfig的文件來在編譯時(shí)設(shè)置所有的依賴和參數(shù)荣月。
五管呵、更多
1、pod install提速
每次執(zhí)行pod install
和pod update
的時(shí)候哺窄,cocoapods都會(huì)默認(rèn)更新一次spec倉庫捐下。這是一個(gè)比較耗時(shí)的操作。在確認(rèn)spec版本庫不需要更新時(shí)萌业,給這兩個(gè)命令加一個(gè)參數(shù)跳過spec版本庫更新,可以明顯提高這兩個(gè)命令的執(zhí)行速度坷襟。
pod install --verbose --no-repo-update
pod update --verbose --no-repo-update
2、關(guān)于Podfile文件編輯時(shí)咽白,第三方庫版本號(hào)的各種寫法
#pod 'AFNetworking' //不顯式指定依賴庫版本啤握,表示每次都獲取最新版本
#pod 'AFNetworking', '2.0' //只使用2.0版本
#pod 'AFNetworking', '>2.0′ //使用高于2.0的版本
#pod 'AFNetworking', '>=2.0′ //使用大于或等于2.0的版本
#pod 'AFNetworking', '<2.0′ //使用小于2.0的版本
#pod 'AFNetworking', '<=2.0′ //使用小于或等于2.0的版本
#pod 'AFNetworking', '~>0.1.2′ //使用大于等于0.1.2但小于0.2的版本,相當(dāng)于>=0.1.2并且<0.2.0
#pod 'AFNetworking', '~>0.1′ //使用大于等于0.1但小于1.0的版本
#pod 'AFNetworking', '~>0′ //高于0的版本晶框,寫這個(gè)限制和什么都不寫是一個(gè)效果排抬,都表示使用最新版本
在學(xué)習(xí)CocoaPods和書寫這篇博文的過程我大量參考了唐巧的博客和這篇博文懂从,大家也可以在唐巧的博客中學(xué)習(xí)到更多的內(nèi)容,也可以去往官方學(xué)習(xí)
深入理解 CocoaPodsCocoaPods最佳實(shí)踐探討