一题翻、建立依賴庫
依賴庫說白了就是存放第三方代碼的庫揩徊,而 cocoapods 本質(zhì)就是第三方庫維護(hù)和導(dǎo)入的便利性工具。依賴庫也叫 pod 庫嵌赠,一般都是發(fā)布在公共的代碼存放網(wǎng)站上供別人下載和使用塑荒,比如 github 上的 AF、MJRefesh等姜挺。
而公司中很多時(shí)候并不像泄露代碼齿税,但是又需要使用組件化的框架,這個(gè)時(shí)候就會(huì)把自己的代碼發(fā)布到私有倉庫上炊豪,這種 pod 庫一般稱為私有庫凌箕。其本質(zhì)和 AF拧篮、MJRefesh 等沒有任何區(qū)別,唯一的區(qū)別就是一個(gè)公開牵舱,一個(gè)不公開串绩。
1.在git上創(chuàng)建工程
一般而言,依賴庫的建立可以直接使用公開類服務(wù)器如github中的倉庫芜壁,也可以是私有服務(wù)器礁凡,比如 gitlab。這里使用 gitlab 作為演示
2.使用git管理工程
直接使用sourceTree新增一個(gè)倉庫即可:
3.將代碼上傳到依賴庫中
如果初始化中勾選使用readMe初始化慧妄,那么工程中就有一個(gè)README.md文件把篓;
這一步只需要將代碼賦值到改工程中提交即可,這里以修改README.md文件做演示:
二腰涧、創(chuàng)建spec倉庫
spec 倉庫的概念相當(dāng)于一個(gè)映射韧掩,可以理解成商品的清單。因?yàn)?pod 庫會(huì)有很多窖铡,每個(gè) pod 庫都會(huì)有一個(gè)自己的代碼存放地址疗锐,如果想要導(dǎo)入很多 pod 庫,挨個(gè)在 podfile 上添加地址费彼,這是不現(xiàn)實(shí)的滑臊,也很不方便。
spec 倉庫就是存放了所有的 pod 庫的代碼地址和信息箍铲,在使用特定的 pod 庫時(shí)雇卷,直接在這個(gè)倉庫中查找到其對(duì)應(yīng)的代碼下載地址進(jìn)行下載,并根據(jù) pod 庫的一些配置信息進(jìn)行相對(duì)應(yīng)的配置颠猴,這些過程全都是自動(dòng)化腳本實(shí)現(xiàn)的关划,關(guān)鍵文件有:podfile、spec文件翘瓮、spec倉庫贮折。
我們使用 cocoapods 時(shí),第一次pod update
時(shí)都會(huì)下載 spec 倉庫资盅,倉庫很大调榄,所以第一次會(huì)很慢。本質(zhì)就是下載 https://github.com/CocoaPods/Specs
中的內(nèi)容到本地呵扛,而且在我們電腦中可以直接找到這個(gè) spec 庫的內(nèi)容每庆,具體地址就不貼出來了,很方便就能找到今穿。
1.在git上創(chuàng)建spec倉庫
這一步和上一步中創(chuàng)建依賴庫是同一個(gè)操作缤灵,只是 spec 庫的唯一作用就是用來存儲(chǔ)私有庫對(duì)應(yīng)的spec。在pod時(shí)荣赶,source 需要設(shè)置spec對(duì)應(yīng)的地址凤价,也就是現(xiàn)在要?jiǎng)?chuàng)建的這個(gè)倉庫的地址。和共有庫(比如AF拔创、SDWebimage等)的唯一區(qū)別就是共有庫的spec文件是存儲(chǔ)在cocoapod的master分支中的利诺,私有庫的spec文件存儲(chǔ)在私有倉庫中;
2.使用git管理spec倉庫
同理剩燥,使用sourceTree直接拉取慢逾,略。
三灭红、依賴庫和spec庫的整合鏈接
1.依賴庫生成spec文件
初始化spec的命令:
pod spec create specName
2.spec文件的配置
基礎(chǔ)格式:
Pod::Spec.new do |s|
...
end
解釋:
將spec略縮成s來表達(dá)
步驟:
1.填寫基本信息(Spec Metadata)
s.name = "XKQuote"
s.version = "0.0.1"
s.summary = "the summary of Spec."
s.description = "description of the Spec."
s.homepage = "http://EXAMPLE/XKQuote"
2.Author Metadata
s.author = { "caoxk" => "289722789@qq.com" }
備注:這里的作者和郵箱(聯(lián)系方式)必須和下面的License保持一致
3.Spec License
格式:
s.license = { :type => "MIT", :file => "LICENSE" }
一般使用MIT License:
創(chuàng)建完成后的樣式:
備注:license可以理解成一種版權(quán)信息侣滩,甚至可以理解成就是一串單純的字符串,創(chuàng)建方法可以直接創(chuàng)建空文件然后復(fù)制字符串变擒,也可以再gitlab上創(chuàng)建
4.Platform Specifics(平臺(tái)信息)
s.platform = :ios, "8.0"
# When using multiple platforms
# s.ios.deployment_target = "5.0"
# s.osx.deployment_target = "10.7"
# s.watchos.deployment_target = "2.0"
# s.tvos.deployment_target = "9.0"
5.Source Location(源地址)
s.source = { :git => "http://EXAMPLE/XKQuote.git", :tag => "#{s.version}" }
所支持的key:
:git => :tag, :branch, :commit, :submodules
:svn => :folder, :tag, :revision
:hg => :revision
:http => :flatten, :type, :sha256, :sha1
其中君珠,git、svn娇斑、hg策添、http是來源渠道。另外毫缆,"url地址"唯竹,這個(gè)相當(dāng)于是默認(rèn)的key。
我們例子中g(shù)itlab中依賴庫的地址即可填寫:
s.source = { :git => "https://gitlab.com/caoxk289722789/xkquote", :tag => "#{s.version}" }
備注:
- source和homePage沒有關(guān)系苦丁。homePage只是作者告訴讀者的一個(gè)非必要性信息(其實(shí)Metadata中最重要的幾個(gè)就是name浸颓、version、author)
- s.version == s.version.to_s ???
6.Source Code(很重要)
源文件選項(xiàng)旺拉,也就是告訴cocoapods你需要復(fù)制到項(xiàng)目中的文件有哪些
語法:
// 源文件(要拷貝的文件)
s.source_files = "Classes", "Classes/**/*.{h,m}"
// 排除在外的文件
s.exclude_files = "Classes/Exclude"
// 頭文件(如果沒有則會(huì)暴露所有的頭文件产上,具體怎么用還要再試試)
s.public_header_files = "Classes/**/*.h"
例子:
文件的結(jié)構(gòu):
寫法:
s.source_files = "QLCrashGuardDemo/QLCrashGuardSupportFiles/**/*.{h,m}"
本例子中直接使用README來做演示:
寫法:
s.source_files = "SourceFiles/*.{h,m}"
#s.exclude_files = "Classes/Exclude"
#s.public_header_files = "Classes/**/*.h"
備注:
*:表示所有格式的文件
7.Resources
主要是添加資源文件,比如圖片等
8.Project Linking
主要是添加framework
9.Project Settings(重點(diǎn))
主要是添加依賴
3.驗(yàn)證spec文件
命令:
pod spec lint(需要在對(duì)應(yīng)的路徑下運(yùn)行)
如圖:
驗(yàn)證后的警告可以不修改蛾狗,報(bào)錯(cuò)是必須修改的蒂秘,按照提示修改報(bào)錯(cuò)知道驗(yàn)證通過即可;
通過后的樣式:
備注
1.添加tag時(shí)淘太,要推送到遠(yuǎn)端姻僧,不然仍然找不到和version對(duì)應(yīng)的tag
2.及時(shí)推送了tag,有時(shí)候可能是緩存的原因讓然會(huì)導(dǎo)致更新不及時(shí)蒲牧,此時(shí)新增一個(gè)全新的tag再驗(yàn)證即可
按照模板填寫即可
官方文檔:https://guides.cocoapods.org/syntax/podspec.html#social_media_url
幾個(gè)重點(diǎn)地方:
4.添加spec倉庫到本地
這一步就是下載spec倉庫到本地撇贺,相當(dāng)于第一次 pod update
時(shí),cocoapods會(huì)自動(dòng)下載https://github.com/CocoaPods/Specs
的內(nèi)容到本地冰抢,這一次是我們自己手動(dòng)下載我們自己的 spec 索引到本地松嘶。
命令:
pod repo add specFileName(給spec倉庫在本地的命名) spec(倉庫的地址)
運(yùn)行命令:
pod repo add XKQuote https://gitlab.com/caoxk289722789/xkquotespec
Cloning spec repo `XKQuote` from `https://gitlab.com/caoxk289722789/xkquotespec`
拉取完成后的目錄是這樣的:
注:specFileName 相當(dāng)于一個(gè)文件夾名稱,怎么命名其實(shí)無所謂挎扰。cocoapods 的倉庫命名為 master翠订。spec 倉庫的地址就是上一步中新建存放 spec 文件的倉庫地址巢音。
5.將依賴庫的spec文件push到spec倉庫
本地有了 spec 索引,但是其實(shí)這個(gè) spec 索引中還沒有我們即將使用到的私有庫的信息尽超,也就是沒有源代碼的下載地址官撼,這個(gè)時(shí)候需要把我們私有庫的 podspec 文件 push 到 spec 庫中,從而建立索引似谁,這樣我們 pod 的時(shí)候就可以先去 spec 庫中找到這個(gè)私有庫傲绣,然后提取里面存儲(chǔ)的私有庫的 podspec 文件,利用文件中的 source 地址下載源碼巩踏,并且根據(jù) podspec 文件中的配置命令對(duì)源碼和工程進(jìn)行相應(yīng)的配置秃诵,這樣就大功告成,可以使用我們自己的私有庫了塞琼。
命令如下:
pod repo push XKQuote(spec repo的名稱) XKQuote.podspec(spec文件名)
添加并push之后會(huì)見到如下效果:
這里說一下菠净,如果是直接 push 到公有庫,也就是 github 上的 cocopods 的spec 倉庫彪杉,直接使用 trunk 命令即可嗤练,如下:
pod trunk push XXX.podspec
四、在項(xiàng)目中導(dǎo)入依賴庫
備注:
1.需要添加對(duì)應(yīng)spec repo的地址在讶,不然會(huì)找不到對(duì)應(yīng)的依賴庫
2.pod update之前要確保已經(jīng)add了spec repo
pod成功的結(jié)果:
五煞抬、pod中使用本地路徑:
比如:
pod 'BaseBusiness', :path => '../../BaseBusiness'
幾個(gè)特性:
1.本地沒有spec repo都沒問題,依據(jù)的是本地path中對(duì)應(yīng)的spec
2.spec不用每次都push构哺,修改后立馬生效
3.直接使用本地的source_files中設(shè)置的文件革答,不拷貝,會(huì)建立索引曙强,所以在工程中修改后會(huì)影響到源文件残拐,如果有g(shù)it,也會(huì)有g(shù)it關(guān)聯(lián)碟嘴,所以很適合開發(fā)階段來使用溪食。
總結(jié):
cocoapod的本質(zhì)是分為兩個(gè)倉庫,確切的說分為量種倉庫娜扇〈砦郑可以形象的理解成海港中有很多倉庫,一種是存儲(chǔ)貨物的倉庫雀瓢,而在一個(gè)辦公室里面枢析,有一個(gè)關(guān)于這些貨物信息的清單。依賴庫相當(dāng)于貨物倉庫刃麸,spec repo相當(dāng)于清單倉庫醒叁。每次pod update,先根據(jù)source下載貨物清單,再根據(jù)pod xxx中具體需要哪種貨物去清單找尋找對(duì)應(yīng)的spec把沼,了解這個(gè)貨物的信息和配置后再進(jìn)行pod啊易,其實(shí)pod的做了什么操作,具體見下一章節(jié)
ios中的project饮睬、workspace租谈、libary、framwork