CocoaPods(二) 私有庫(kù)

CocoaPods庫(kù)的種類

創(chuàng)建一個(gè)其他人用pod也能夠搜索到的庫(kù)贸人。這種庫(kù)分為兩種:一種是公有的,所有人都能訪問(wèn)到褒颈;一種是私有需要Podfile中提供source才能使用廓推。
下面是創(chuàng)建私有庫(kù)的原理圖

CocoaPods私有庫(kù)原理圖.png

想要?jiǎng)?chuàng)建私有庫(kù),首先要搞清楚CocoaPods的原理锻煌,其功能是讓創(chuàng)建一個(gè)工程導(dǎo)入所有項(xiàng)目需要依賴的庫(kù)妓布,然后讓項(xiàng)目依賴這個(gè)工程。這樣項(xiàng)目只需要導(dǎo)入這一個(gè)工程宋梧,就能使用所有需要的第三方庫(kù)匣沼。簡(jiǎn)化了項(xiàng)目的集成的復(fù)雜性。詳細(xì)的原理可以參考這篇文章捂龄。

創(chuàng)建私有庫(kù)

首先要選擇一個(gè)位置用來(lái)存放podspec文件释涛,該文件的作用就是記錄你的私有庫(kù)的信息,包含版本倦沧、位置等唇撬。
另外還要有一個(gè)位置來(lái)存放私有庫(kù)的內(nèi)容,私有庫(kù)存放位置信息就被保存在上面的podspec文件中展融。
所以一共會(huì)有兩個(gè)倉(cāng)庫(kù)窖认,一個(gè)用來(lái)保存podspec,另一個(gè)用來(lái)保存私有庫(kù)。
提供倉(cāng)庫(kù)保存的平臺(tái)有很多耀态,github轮傍、gitlab、碼云等等首装,由于github私有倉(cāng)庫(kù)收費(fèi)创夜,故用碼云來(lái)創(chuàng)建私有庫(kù)。但原理都是一樣的仙逻。

1.創(chuàng)建版本記錄倉(cāng)庫(kù)

碼云創(chuàng)建版本描述倉(cāng)庫(kù)

創(chuàng)建成功之后驰吓,打開(kāi)terminal把這個(gè)描述倉(cāng)庫(kù)clone到本地。安裝了CocoaPods的電腦都會(huì)在用戶根目錄下創(chuàng)建一個(gè).cocoapods文件夾系奉,來(lái)存放github上面所有的公開(kāi)庫(kù)記錄倉(cāng)庫(kù)檬贰。repos下本來(lái)只有master文件夾,另外兩個(gè)是創(chuàng)建的記錄倉(cāng)庫(kù)缺亮。

cocoapods本地目錄

執(zhí)行pod repo add testRepo https://gitee.com/zhouzheren/TestRepo.git指令將記錄倉(cāng)庫(kù)添加到本地電腦翁涤。

添加記錄倉(cāng)庫(kù)后的repo目錄

打開(kāi)目錄發(fā)現(xiàn)里面只有兩個(gè)文件,.git隱藏文件夾和README.md文件萌踱。

2.創(chuàng)建代碼庫(kù)

創(chuàng)建用來(lái)測(cè)試的代碼庫(kù)

步驟同創(chuàng)建描述倉(cāng)庫(kù)相同葵礼,不過(guò)需要按照?qǐng)D中勾選幾項(xiàng)。創(chuàng)建好之后將其clone到本地并鸵,添加倉(cāng)庫(kù)名.podspec鸳粉、.swift-version(針對(duì)swift)兩個(gè)文件。

clone代碼庫(kù)

添加一個(gè)TestClass類測(cè)試私有庫(kù)园担。使用下圖的指令把內(nèi)容上傳到私有庫(kù)届谈。非常重要的一點(diǎn)是完成對(duì)TestClass的修改之后,千萬(wàn)不要忘記去修改.podspec文件中的s.version弯汰,要設(shè)置高于0.1.0這個(gè)版本艰山。當(dāng)然如果有想要描述的內(nèi)容,也要在描述項(xiàng)目中去添加蝙泼。

將添加的文件上傳到私有庫(kù)中

完成之后還有一步很重要的操作:添加tag.

給版本添加tag

tag值與上傳的.podspec文件中s.version保持一致程剥,tag值是用來(lái)區(qū)分同一個(gè)私有庫(kù)不同的版本的劝枣。

2.2編輯.podspec文件

上面clone代碼庫(kù)的圖片中汤踏,包含了一個(gè)指令創(chuàng)建的podspec文件注釋內(nèi)容非常多,可以復(fù)制下面的內(nèi)容來(lái)創(chuàng)建舔腾。

Pod::Spec.new do |s|
s.name = "TestFramework" # 項(xiàng)目名稱
s.version = "0.1.0" # 版本號(hào) 與 你倉(cāng)庫(kù)的tag值對(duì)應(yīng)
s.license = "MIT" # 開(kāi)源證書
s.summary = "私人pod代碼" # 項(xiàng)目簡(jiǎn)介
s.homepage = "https://gitee.com/zhouzheren/TestFramework" # 倉(cāng)庫(kù)的主頁(yè)
s.source = { :git => "https://gitee.com/zhouzheren/TestFramework.git", :tag => "#{0.1.0}" }#你的倉(cāng)庫(kù)地址溪胶,不能用SSH地址
s.source_files = "TestFramework/*/"
s.requires_arc = true # 是否啟用ARC
s.platform = :ios, "7.0" #平臺(tái)及支持的最低版本
s.author = { "蝸牛" => "a595429717@163.com" } # 作者信息
s.social_media_url = "http://www.reibang.com/u/611e4882e4dc" # 個(gè)人主頁(yè)
end

pod spec create TestFramework命令可以創(chuàng)建TestFramework.podspec文件,但注釋比較的多稳诚,可以精簡(jiǎn)為上面的內(nèi)容哗脖。

名稱 作用
s.name 是私有庫(kù)的名字,因?yàn)閷懙腄emo是TestFramework,所以使用這個(gè)
s.version 當(dāng)前私有庫(kù)版本默認(rèn)值是0.1.0才避,每次修改私有庫(kù)都需要增加這個(gè)值
s.summary 總結(jié)橱夭,你的私有庫(kù)的主要功能是什么
s.description 詳細(xì)的描述,可以寫當(dāng)次修改的內(nèi)容有哪些桑逝,增加了什么功能
s.source_files 私有庫(kù)文件路徑棘劣,會(huì)用到哪些文件
s.homepage 是主頁(yè)的地址,私有庫(kù)的主頁(yè)地址
s.source 私有庫(kù)內(nèi)容clone地址

pod lib lint指令可以測(cè)試編輯的.podspec文件是否正確楞遏。使用這個(gè)命令先要cd到.podspec目錄茬暇。提示了錯(cuò)誤就要根據(jù)提示內(nèi)容修改,當(dāng)修改到?jīng)]有error信息只有warning信息的時(shí)候就可以使用pod lib lint --allow-warnings指令寡喝。

測(cè)試.podspec文件是否合法

綠色文字表示.podspec文件是合法的糙俗,這就算編輯完成了≡蓿可以將.podspec文件上傳到描述倉(cāng)庫(kù)巧骚。

上傳podspec文件

testRepo是在.cocoapods文件夾里的目錄,TestFramework.podspec版本描述庫(kù)文件的名字格二。
.podspec文件上傳完畢之后网缝,可以使用pod search 私有庫(kù)名字在終端搜索這個(gè)庫(kù)。

3.使用私有庫(kù)

首先要編輯Podfile的內(nèi)容蟋定,使用了私有庫(kù)的Podfile需要指定source粉臊,詳情見(jiàn)下圖。

使用了私有庫(kù)的Podfile文件的內(nèi)容

然后cd到對(duì)應(yīng)的工程目錄下驶兜,使用pod install扼仲,安裝完成pod之后,可以去工程中調(diào)用對(duì)應(yīng)的測(cè)試文件抄淑。如果使用#import不到對(duì)應(yīng)的類屠凶,可以嘗試先cmd+b編譯一下對(duì)應(yīng)的項(xiàng)目,然后再來(lái)#import肆资。

4.如果更新維護(hù)私有庫(kù)

第一步:修改私有庫(kù)內(nèi)容矗愧,修改.podspec文件;將這些修改push到私有庫(kù)中郑原。
第二步:打上tag,tag值保持和.podspec中的version相同唉韭,上傳tag。
第三步:利用pod repo push 本地repo名 .podspec文件指令更新本地repo,同時(shí)上傳.podspec文件到描述倉(cāng)犯犁。
如果希望把別人更新的repo拉到本地属愤,可以使用pod repo update repo名字命令。

tips

1.pod install 之后酸役,測(cè)試私有庫(kù)內(nèi)容的時(shí)候住诸,使用#import不到對(duì)應(yīng)的類驾胆,可以先cmd +b 編譯一下項(xiàng)目。

2.podspec文件上傳了兩次贱呐,一次是修改私有庫(kù)的時(shí)候丧诺,修改.podspec,然后一起上傳到私有庫(kù)中奄薇;另一次是給私有庫(kù)打上tag之后锅必,將.podspec上傳到描述倉(cāng)庫(kù)。

  1. 每次修改完.podspec文件之后惕艳,使用了私有庫(kù)的項(xiàng)目需要執(zhí)行pod update搞隐,這樣才能拿到最新的私有庫(kù)內(nèi)容。當(dāng)然如果Podfile文件中指定了引用私有庫(kù)的版本远搪,就不需要update了劣纲,除非修改Podfile文件然后updata。

4.多人協(xié)同維護(hù)私有庫(kù)時(shí)谁鳍,更新本地私有庫(kù)的repo癞季,pod repo update repo名字

如何刪除一個(gè)私有庫(kù)呢?
私有庫(kù)如何包含圖片等資源文件倘潜?
私有庫(kù)包含其他私有庫(kù)绷柒?

問(wèn)題集合

幫同事上傳.podspec的時(shí)候出現(xiàn)這個(gè)錯(cuò)誤。

pod repo push 問(wèn)題

我的步驟是先幫他打出framework涮因,并把庫(kù)放到一級(jí)目錄下面废睦,然后修改.podspec文件中的版本號(hào)到0.1.1,然后把所有的內(nèi)容push到代碼庫(kù)中并貼上tag0.1.1养泡。
之后忽然發(fā)現(xiàn)s.ios.vendored_frameworks = "ZLLBanner.framework"少了一個(gè)下劃線嗜湃,應(yīng)該是s.ios.vendored_frameworks = "ZLL_Banner.framework"。重新修改了.podspec文件并push澜掩。

pod lib lint成功购披,但Push失敗

懷疑是貼上tag之后,又傳了代碼導(dǎo)致的問(wèn)題肩榕。于是撤銷0.1.1的tag刚陡。在最新的一次提交上貼tag。最后就成功了株汉。

.podspec文件push成功
常用命令集合
name function
git clone 私有庫(kù)地址 將server上的倉(cāng)庫(kù)復(fù)制到本地電腦上
pod repo add repoName podspec地址 在.cocoapods目錄下增加一個(gè)repo
echo "3.0" > .swifit-version 創(chuàng)建一個(gè).swift-version文件筐乳,swift版本是3.0
pod spec create name.podspec 創(chuàng)建一個(gè)name.podspec文件
git add . 將當(dāng)前目錄下所有的修改都添加到git緩存
git commit -s -m "commit description " commit這次的修改,并添加描述
git push origin master 將修改的內(nèi)容push到server的master分支上
git tag 查看當(dāng)前目錄的所有tag記錄
git tag -m "description " "version" 給修改增加一個(gè)tag,包含描述信息郎逃,和tag的版本號(hào)
git push --tags 將tag push到server倉(cāng)庫(kù)里
pod lib lint (--allow-warnings) 編譯name.podspec文件哥童,檢驗(yàn)內(nèi)容是否合法
pod repo push repoName name.podspec 上傳name.podspec文件到描述倉(cāng)庫(kù)里,并更新本地repo目錄
pod search 私有庫(kù)name 查詢私有庫(kù)信息
pod install 為項(xiàng)目安裝cocoapods
pod outdated 查看本地項(xiàng)目中所有已安裝的庫(kù)的版本
pod repo update repoName 更新本地私有庫(kù)的repo
參考資料

CocoaPods 私有倉(cāng)庫(kù)的創(chuàng)建(超詳細(xì))
實(shí)現(xiàn)CocoaPods的subspec分支功能
使用Cocoapods創(chuàng)建私有podspec
Cocoapods使用私有庫(kù)中遇到的坑
使用私有庫(kù)中遇到的坑
使用Cocoapods創(chuàng)建私有podspec

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末褒翰,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌优训,老刑警劉巖朵你,帶你破解...
    沈念sama閱讀 217,406評(píng)論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異揣非,居然都是意外死亡抡医,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,732評(píng)論 3 393
  • 文/潘曉璐 我一進(jìn)店門早敬,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)忌傻,“玉大人,你說(shuō)我怎么就攤上這事搞监∷ⅲ” “怎么了?”我有些...
    開(kāi)封第一講書人閱讀 163,711評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵琐驴,是天一觀的道長(zhǎng)俘种。 經(jīng)常有香客問(wèn)我,道長(zhǎng)绝淡,這世上最難降的妖魔是什么宙刘? 我笑而不...
    開(kāi)封第一講書人閱讀 58,380評(píng)論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮牢酵,結(jié)果婚禮上悬包,老公的妹妹穿的比我還像新娘。我一直安慰自己馍乙,他們只是感情好玉罐,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,432評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著潘拨,像睡著了一般吊输。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上铁追,一...
    開(kāi)封第一講書人閱讀 51,301評(píng)論 1 301
  • 那天季蚂,我揣著相機(jī)與錄音,去河邊找鬼琅束。 笑死扭屁,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的涩禀。 我是一名探鬼主播料滥,決...
    沈念sama閱讀 40,145評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼艾船!你這毒婦竟也來(lái)了葵腹?” 一聲冷哼從身側(cè)響起高每,我...
    開(kāi)封第一講書人閱讀 39,008評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎践宴,沒(méi)想到半個(gè)月后鲸匿,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,443評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡阻肩,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,649評(píng)論 3 334
  • 正文 我和宋清朗相戀三年带欢,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片烤惊。...
    茶點(diǎn)故事閱讀 39,795評(píng)論 1 347
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡乔煞,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出柒室,到底是詐尸還是另有隱情渡贾,我是刑警寧澤,帶...
    沈念sama閱讀 35,501評(píng)論 5 345
  • 正文 年R本政府宣布伦泥,位于F島的核電站剥啤,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏不脯。R本人自食惡果不足惜府怯,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,119評(píng)論 3 328
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望防楷。 院中可真熱鬧牺丙,春花似錦、人聲如沸复局。這莊子的主人今日做“春日...
    開(kāi)封第一講書人閱讀 31,731評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)亿昏。三九已至峦剔,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間角钩,已是汗流浹背吝沫。 一陣腳步聲響...
    開(kāi)封第一講書人閱讀 32,865評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留递礼,地道東北人惨险。 一個(gè)月前我還...
    沈念sama閱讀 47,899評(píng)論 2 370
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像脊髓,于是被迫代替她去往敵國(guó)和親辫愉。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,724評(píng)論 2 354

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