使用Cocoapods創(chuàng)建私有庫

五一之后门岔,公司要求對代碼進(jìn)行整理爱致,同時進(jìn)行代碼管理、自動化打包等標(biāo)準(zhǔn)化流程寒随,這些東西一直是我想搞的糠悯,這次有了公司的支持,操作起來也更順利了妻往,代碼管理互艾、自動化打包會找時間寫一篇博客,這次主要記錄利用Cocoapods將多個項(xiàng)目中共用的代碼抽離出私有庫讯泣,方便其他項(xiàng)目的引用纫普,也算是組件化的第一步吧。抽離出私有庫的時候好渠,參考了很多的博客昨稼,遇到了很多的問題,主要參考了這篇博客晦墙。

為什么要進(jìn)行代碼抽離

很多公司不止有一個產(chǎn)品悦昵,當(dāng)項(xiàng)目達(dá)到兩個及以上的時候,就需要考慮代碼的共用(理想情況下)晌畅。由于我們公司特殊情況(懶)但指,原來做項(xiàng)目的時候沒有考慮這么多,由于公司新項(xiàng)目與原來的項(xiàng)目有大量功能相似抗楔,當(dāng)時我們就采用了創(chuàng)建新分支的形式創(chuàng)建了新項(xiàng)目棋凳,導(dǎo)致代碼耦合性非常強(qiáng),平常開發(fā)中遇到很多問題连躏,比如:

  • 有些代碼可能這個項(xiàng)目需要剩岳,那個項(xiàng)目不需要
  • 分支切換太過頻繁
  • 創(chuàng)建了大量分支
  • 在這個分支上開發(fā)的時候,測試需要另一個項(xiàng)目的包入热,需要來回切換
  • 拍棕。。勺良。绰播。等等

先看下我們原來的代碼結(jié)構(gòu),確實(shí)感覺很頭疼:


image

綜上所述尚困,代碼抽離迫在眉睫蠢箩。。。谬泌。

1滔韵、創(chuàng)建私有Spec Repo

Spec Repo其實(shí)類似一個容器,里面裝著所有的公開的Pods,當(dāng)使用Cocoapods后掌实,他就會被clone到本地的~/.cocoapods/repos目錄下:

image

因此我們也需要創(chuàng)建一個私有的Spec Repo陪蜻,因?yàn)槭枪卷?xiàng)目,所以我們搞一個私有庫潮峦,這次是我單獨(dú)的練習(xí)囱皿,GitHub上創(chuàng)建私有庫是收費(fèi)的勇婴,所以這次我采用了免費(fèi)的Git服務(wù)忱嘹,我用的是Coding,首先需要在coding上創(chuàng)建一個自己的git倉庫耕渴,創(chuàng)建完成之后拘悦,在終端下執(zhí)行如下命令

pod repo add ZJTestSpecs https://coding.net/u/cenzhijun/p/ZJTestSpecs/git

成功的話就會在~/.cocoapods/repos目錄下看到ZJTestSpecs文件夾了,第一步完成橱脸,這一步通常只需要執(zhí)行一次

2础米、創(chuàng)建Pod項(xiàng)目的文件

首先cd到你想創(chuàng)建項(xiàng)目的文件夾執(zhí)行如下操作

記住一定要創(chuàng)建一個單獨(dú)的名字,否則以后pod search <私有庫>會找到Github上跟你重名的項(xiàng)目

pod lib create ZJPodPrivateTest

之后會出現(xiàn)下列問題:

DA3D7B14F4D628E154A175EFFDE87B27

接下來就是在你的ZJPodPrivateTest文件夾下添加自己的內(nèi)容添诉,將自己的模塊部分放在ZJPodPrivateTest/Classes下屁桑,然后cdExample文件夾下執(zhí)行pod update命令,之后打開項(xiàng)目栏赴,就能在Development Pods/ZJPodPrivateTest文件夾下看到自己添加的組件了蘑斧,之后需要將項(xiàng)目推送到遠(yuǎn)端倉庫,同樣需要先自己去git服務(wù)商哪里創(chuàng)建一個私有倉庫须眷,然后cdZJPodPrivateTest目錄竖瘾,執(zhí)行如下操作:

git add -A
git commit -a -m "init library"
git remote add origin https://git.coding.net/cenzhijun/ZJPodPrivateTest.git

git push origin master

這個時候執(zhí)行push操作會報(bào)如下錯誤:

C3672E624EF076875C02B836EFE87ED7

提示你需要先pull下代碼,這一步不能直接pull,需要執(zhí)行如下命令:

git pull origin master --allow-unrelated-histories
D6043786E0DA1A559CA1DA5F27EB3F90

有可能會出現(xiàn)沖突花颗,解決沖突之后push代碼:

git push origin master 

因?yàn)?code>podspec文件獲取版本控制的項(xiàng)目需要tag號捕传,所以還要搭上一個tag

git tag -m "first release" 0.1.0
git push --tags     #推送tag到遠(yuǎn)端倉庫

做完這些之后開始編輯podspec文件,填上對應(yīng)的信息扩劝。

編輯完之后庸论,執(zhí)行如下命令,驗(yàn)證是否有效棒呛,不能有error或者warning

pod lib lint

當(dāng)看到

6CECC0B42712110AA9F952FFE1C2E179

就說明驗(yàn)證通過

3聂示、本地測試podspec文件

自己可以創(chuàng)建一個新項(xiàng)目,在Podfile中指定自己編輯好的podspec文件条霜,如下:(兩種方式填寫一種就行)

pod 'ZJPodPrivateTest', :path => '~/Desktop/ZJPodPrivateTest'      # 指定路徑
# pod 'PodTestLibrary', :podspec => '~/Desktop/ZJPodPrivateTest/ZJPodPrivateTest.podspec'  # 指定podspec文件

然后執(zhí)行pod install命令安裝催什,然后打開項(xiàng)目發(fā)現(xiàn)庫文件已經(jīng)被加載到Pods子項(xiàng)目中了,不過沒有在Pods目錄下,而是在Development Pods/ZJPodPrivateTest目錄下蒲凶,因?yàn)槭潜镜販y試項(xiàng)目气筋,沒有吧podspec文件添加到Spec Repo中的緣故

EEBF626209D091109DC43B9298F96E26



5B479CE603BFA168CD47132A8E8E5781

確認(rèn)無誤后,就可以提交podspecSpec Repo中了

4旋圆、提交podspec

提交很簡單宠默,只需要一個命令:

pod repo push ZJTestSpecs ZJPodPrivateTest.podspec  #前面是本地Repo名字 后面是podspec名字
481992FDCEF1AB9F310B905AF4D4A

沒有錯誤之后,就可以在~/.cocoapods/repos/ZJTestSpecs目錄下看到自己的私有庫了灵巧,同時我們遠(yuǎn)程的Spec Repo也有一次提交搀矫,已經(jīng)被自動push上去了

可以用pod search ZJPodPrivateTest查看自己的庫了

714E14C7AA77A9CDECE5C5334B28F057

*一定要記住自己的創(chuàng)建的私有庫一定不要跟Github上的第三方庫重名,否則會搜不到刻肄,我博客里面有的是ZJPodPrivateTest有的是ZJPodTest瓤球,就是因?yàn)?code>ZJPodTest跟Github上的一個第三方庫重名了,才會又重新建了ZJPodPrivateTest敏弃,按照我博客操作的時候ZJPodPrivateTestZJPodTest可以認(rèn)為是同一個倉庫卦羡,有的截圖了,有的忘了麦到,有不明白的绿饵,可以問我!F康摺拟赊!

至此,自己的私有庫就算制作好了

5粹淋、使用制作好的Pod

Podfile文件中吸祟,內(nèi)容如下:

source 'https://github.com/CocoaPods/Specs.git'  # 官方庫
source 'https://git.coding.net/cenzhijun/ZJTestSpecs.git'   # 私有庫

platform :ios, '8.0'

target 'TargetName' do
pod 'AFNetworking', '~> 3.0'    
pod 'ZJPodPrivateTest', '0.1.0'   #自己的私有庫
end

至此就算大功告成了

6、更新維護(hù)podspec

這里寫得很詳細(xì)廓啊,參考這個吧

遇到的坑

錯誤一

409FDEA31A5A4FA21B2B14E42D7D96A4

pod lib lint 驗(yàn)證的時候一直報(bào)這個錯欢搜,原因是私有庫中添加了動態(tài)庫或者靜態(tài)庫,解決方案:

pod lib lint --use-libraries

--use-libraries:表示使用靜態(tài)庫或者是framework谴轮,這里主要是解決當(dāng)我們依賴一些framework庫后校驗(yàn)提示找不到庫的時候用到炒瘟。

錯誤二

E03336C72F6E450A612C4021C7FA09E6

pod lib lint的時候一直有一些警告,可以忽略掉這些警告:

pod lib lint --allow-warnings

--allow-warnings:表示允許警告

保險(xiǎn)起見可以使用:

pod lib lint --use-libraries --allow-warnings

錯誤三

pod lib lint驗(yàn)證通過第步,但是repo push的時候卻一直報(bào)錯疮装,又忘截圖了,大概是這樣的:

xcodebuild: Returned an unsuccessful exit code. You can use `--verbose` for more information

我之所以報(bào)這個錯粘都,是因?yàn)槔疲薷牧俗约旱乃接袔欤蛄?code>tag翩隧,podspec文件對應(yīng)的s.version忘了修改了樊展,解決方案:

重新發(fā)一個release版的,打上tag之后,修改podspec文件對應(yīng)的s.version专缠,重新pod repo push

溫馨提示:如果你在pod lib lint的時候用到了--use-libraries或者--allow-warnings雷酪,那么在pod repo push的時候也要加上這些指令!@酝瘛哥力!例如:

pod repo push ZJTestSpecs ZJEncryptPodTest.podspec --use-libraries --allow-warnings

總結(jié)

創(chuàng)建私有庫的時候,盡管我參考的這篇文章已經(jīng)寫得十分詳細(xì)墩弯,但是還是有一個過時的操作吩跋,很導(dǎo)致操作錯誤,尤其是在本地倉庫push到遠(yuǎn)程倉庫那里出現(xiàn)問題渔工,同時創(chuàng)建私有庫不能和GitHub上存在的第三方庫重名也是我摸索很久發(fā)現(xiàn)的锌钮,希望看到這篇文章的同學(xué)能夠少走彎路????????

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市涨缚,隨后出現(xiàn)的幾起案子轧粟,更是在濱河造成了極大的恐慌,老刑警劉巖脓魏,帶你破解...
    沈念sama閱讀 216,651評論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異通惫,居然都是意外死亡茂翔,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,468評論 3 392
  • 文/潘曉璐 我一進(jìn)店門履腋,熙熙樓的掌柜王于貴愁眉苦臉地迎上來珊燎,“玉大人,你說我怎么就攤上這事遵湖』谡” “怎么了?”我有些...
    開封第一講書人閱讀 162,931評論 0 353
  • 文/不壞的土叔 我叫張陵延旧,是天一觀的道長谋国。 經(jīng)常有香客問我,道長迁沫,這世上最難降的妖魔是什么芦瘾? 我笑而不...
    開封第一講書人閱讀 58,218評論 1 292
  • 正文 為了忘掉前任,我火速辦了婚禮集畅,結(jié)果婚禮上近弟,老公的妹妹穿的比我還像新娘。我一直安慰自己挺智,他們只是感情好祷愉,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,234評論 6 388
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般二鳄。 火紅的嫁衣襯著肌膚如雪迫摔。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,198評論 1 299
  • 那天泥从,我揣著相機(jī)與錄音句占,去河邊找鬼。 笑死躯嫉,一個胖子當(dāng)著我的面吹牛纱烘,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播祈餐,決...
    沈念sama閱讀 40,084評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼擂啥,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了帆阳?” 一聲冷哼從身側(cè)響起哺壶,我...
    開封第一講書人閱讀 38,926評論 0 274
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎蜒谤,沒想到半個月后山宾,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,341評論 1 311
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡鳍徽,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,563評論 2 333
  • 正文 我和宋清朗相戀三年资锰,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片阶祭。...
    茶點(diǎn)故事閱讀 39,731評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡绷杜,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出濒募,到底是詐尸還是另有隱情鞭盟,我是刑警寧澤,帶...
    沈念sama閱讀 35,430評論 5 343
  • 正文 年R本政府宣布瑰剃,位于F島的核電站齿诉,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏培他。R本人自食惡果不足惜鹃两,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,036評論 3 326
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望舀凛。 院中可真熱鬧俊扳,春花似錦、人聲如沸猛遍。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,676評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至梯醒,卻和暖如春宽堆,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背茸习。 一陣腳步聲響...
    開封第一講書人閱讀 32,829評論 1 269
  • 我被黑心中介騙來泰國打工畜隶, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人号胚。 一個月前我還...
    沈念sama閱讀 47,743評論 2 368
  • 正文 我出身青樓籽慢,卻偏偏與公主長得像,于是被迫代替她去往敵國和親猫胁。 傳聞我的和親對象是個殘疾皇子箱亿,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,629評論 2 354

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