cocoaPods:公有庫私有庫

一题翻、建立依賴庫

依賴庫說白了就是存放第三方代碼的庫揩徊,而 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 作為演示


創(chuàng)建依賴庫

2.使用git管理工程

直接使用sourceTree新增一個(gè)倉庫即可:


使用sourceTree拉去依賴庫

3.將代碼上傳到依賴庫中

如果初始化中勾選使用readMe初始化慧妄,那么工程中就有一個(gè)README.md文件把篓;
這一步只需要將代碼賦值到改工程中提交即可,這里以修改README.md文件做演示:


update

二腰涧、創(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ǔ)在私有倉庫中;


specRepo

2.使用git管理spec倉庫

同理剩燥,使用sourceTree直接拉取慢逾,略。

三灭红、依賴庫和spec庫的整合鏈接

1.依賴庫生成spec文件

初始化spec的命令:

pod spec create specName
create spec

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:


create License(1)

create License(2)

創(chuàng)建完成后的樣式:


MIT License

備注: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):


source file

寫法:

  s.source_files  = "QLCrashGuardDemo/QLCrashGuardSupportFiles/**/*.{h,m}"

本例子中直接使用README來做演示:


image.png

寫法:

  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)行)

如圖:


image.png

驗(yàn)證后的警告可以不修改蛾狗,報(bào)錯(cuò)是必須修改的蒂秘,按照提示修改報(bào)錯(cuò)知道驗(yàn)證通過即可;
通過后的樣式:


image.png

備注
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ì)見到如下效果:


image.png

這里說一下菠净,如果是直接 push 到公有庫,也就是 github 上的 cocopods 的spec 倉庫彪杉,直接使用 trunk 命令即可嗤练,如下:

pod trunk push XXX.podspec

四、在項(xiàng)目中導(dǎo)入依賴庫

pod

備注:
1.需要添加對(duì)應(yīng)spec repo的地址在讶,不然會(huì)找不到對(duì)應(yīng)的依賴庫
2.pod update之前要確保已經(jīng)add了spec repo

pod成功的結(jié)果:


image.png

五煞抬、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

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末续捂,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子宦搬,更是在濱河造成了極大的恐慌牙瓢,老刑警劉巖,帶你破解...
    沈念sama閱讀 211,376評(píng)論 6 491
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件间校,死亡現(xiàn)場(chǎng)離奇詭異矾克,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)憔足,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,126評(píng)論 2 385
  • 文/潘曉璐 我一進(jìn)店門胁附,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人滓彰,你說我怎么就攤上這事控妻。” “怎么了揭绑?”我有些...
    開封第一講書人閱讀 156,966評(píng)論 0 347
  • 文/不壞的土叔 我叫張陵弓候,是天一觀的道長(zhǎng)。 經(jīng)常有香客問我他匪,道長(zhǎng)菇存,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,432評(píng)論 1 283
  • 正文 為了忘掉前任邦蜜,我火速辦了婚禮依鸥,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘悼沈。我一直安慰自己贱迟,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,519評(píng)論 6 385
  • 文/花漫 我一把揭開白布絮供。 她就那樣靜靜地躺著关筒,像睡著了一般。 火紅的嫁衣襯著肌膚如雪杯缺。 梳的紋絲不亂的頭發(fā)上蒸播,一...
    開封第一講書人閱讀 49,792評(píng)論 1 290
  • 那天,我揣著相機(jī)與錄音,去河邊找鬼袍榆。 笑死胀屿,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的包雀。 我是一名探鬼主播宿崭,決...
    沈念sama閱讀 38,933評(píng)論 3 406
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼才写!你這毒婦竟也來了葡兑?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,701評(píng)論 0 266
  • 序言:老撾萬榮一對(duì)情侶失蹤赞草,失蹤者是張志新(化名)和其女友劉穎讹堤,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體厨疙,經(jīng)...
    沈念sama閱讀 44,143評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡洲守,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,488評(píng)論 2 327
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了沾凄。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片梗醇。...
    茶點(diǎn)故事閱讀 38,626評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖撒蟀,靈堂內(nèi)的尸體忽然破棺而出叙谨,到底是詐尸還是另有隱情,我是刑警寧澤保屯,帶...
    沈念sama閱讀 34,292評(píng)論 4 329
  • 正文 年R本政府宣布唉俗,位于F島的核電站,受9級(jí)特大地震影響配椭,放射性物質(zhì)發(fā)生泄漏虫溜。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,896評(píng)論 3 313
  • 文/蒙蒙 一股缸、第九天 我趴在偏房一處隱蔽的房頂上張望衡楞。 院中可真熱鬧,春花似錦敦姻、人聲如沸瘾境。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,742評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽迷守。三九已至,卻和暖如春旺入,著一層夾襖步出監(jiān)牢的瞬間兑凿,已是汗流浹背凯力。 一陣腳步聲響...
    開封第一講書人閱讀 31,977評(píng)論 1 265
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留礼华,地道東北人咐鹤。 一個(gè)月前我還...
    沈念sama閱讀 46,324評(píng)論 2 360
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像圣絮,于是被迫代替她去往敵國和親祈惶。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,494評(píng)論 2 348

推薦閱讀更多精彩內(nèi)容