Cocoapods搭建私有庫(kù)

隨著公司項(xiàng)目越來(lái)越多,不同項(xiàng)目間會(huì)有很多相同的功能代碼。比如:網(wǎng)絡(luò)獲取射富、信息彈框矢门、登陸等盆色,將這些封裝成模塊module做成Cocoapods私有庫(kù)或者Framework就很有必要了。這兒我想簡(jiǎn)單記錄下Cocoapods私有庫(kù)的搭建祟剔,如有錯(cuò)誤 歡迎指正隔躲。
Framework 見(jiàn)我另一篇文章:ios Framework制作 (和踩過(guò)的坑)

搭建Cocoapods私有庫(kù)

1、環(huán)境

Cocoapods環(huán)境峡扩,具體環(huán)境的配置過(guò)程其他文章有很多蹭越,就不說(shuō)了。

2教届、搭建

私有庫(kù)搭建組要有兩部分:創(chuàng)建 repo 私有庫(kù)的索引庫(kù) spec响鹃、創(chuàng)建私有庫(kù)并發(fā)布到索引庫(kù)。

<1>創(chuàng)建 repo 私有庫(kù)的索引庫(kù) spec

在git上創(chuàng)建索引庫(kù) spec案训,我這兒用碼云舉例买置,方法和創(chuàng)建項(xiàng)目是一樣的。


截屏2022-05-12 下午1.48.44.png

然后就有了索引庫(kù)的地址:https://gitee.com/*******/test-module-specs.git

截屏2022-05-12 下午1.53.59.png

將索引庫(kù)添加到本地倉(cāng)庫(kù)

// pod repo add specs庫(kù)名 specs庫(kù)地址
pod repo add TestModuleSpecs https://gitee.com/******/test-module-specs.git

查看是否添加成功

pod repo list

//可以看到已經(jīng)添加成功
TestModuleSpecs
- Type: git (master)
- URL:  https://gitee.com/*********/test-module-specs.git
- Path: /Users/*******/.cocoapods/repos/TestModuleSpecs
<2>創(chuàng)建私有庫(kù)并發(fā)布到索引庫(kù)

第一步:先在git上創(chuàng)建私有庫(kù)强霎,還是以碼云舉例忿项。


然后就有了私有庫(kù)地址:
https://gitee.com/*************/test-module-one.git

第二步:創(chuàng)建私有庫(kù)模板

//創(chuàng)建私有庫(kù)模板
pod lib create TestModuleOne

//下面是私有庫(kù)的簡(jiǎn)單配置
//選擇平臺(tái)
What platform do you want to use?? [ iOS / macOS ]
 > ios
//選擇編程語(yǔ)言
What language do you want to use?? [ Swift / ObjC ]
 > objc
//選擇是否創(chuàng)建測(cè)試demo
Would you like to include a demo application with your library? [ Yes / No ]
 > yes
//選擇測(cè)試框架
Which testing frameworks will you use? [ Specta / Kiwi / None ]
 > none
//是否視圖測(cè)試
Would you like to do view based testing? [ Yes / No ]
 > no
//類(lèi)前綴
What is your class prefix?
 > LU

這就得到了庫(kù)模板:


這就創(chuàng)建好了私有庫(kù)模塊了

編輯私有庫(kù)索引 TestModuleOne.podspec

version             功能版本,建議和tag保持一致城舞,版本從0.1.0開(kāi)始轩触。
summary             功能概要,需要填寫(xiě)更新家夺,否則lint檢測(cè)無(wú)法通過(guò)脱柱。
description         功能描述,可以選擇性刪除拉馋,否則lint檢測(cè)無(wú)法通過(guò)榨为。
homepage            資源首頁(yè),私有庫(kù)對(duì)應(yīng)的瀏覽器地址煌茴。
resource            資源地址随闺,git克隆地址。建議使用http/https蔓腐,git類(lèi)型有權(quán)限控制矩乐。
source_file         類(lèi)資源文件,默認(rèn)Classes下的所有文件回论,放置私有庫(kù)核心文件绰精。
resources           Bundle資源文件(不推薦使用)撒璧,會(huì)合并至MainBundle中,訪問(wèn)便利笨使,但會(huì)存在命名沖突問(wèn)題卿樱。個(gè)別SDK必須放在MainBundle中才能使用,比如微博SDKA蛞7钡鳌!靶草。
resource_files      Bundle資源文件(推薦使用)蹄胰,單獨(dú)的Bundle文件,不與MainBundle合并奕翔,使用內(nèi)部資源時(shí)和MainBundle路徑有區(qū)別TU!派继!宾袜。
exclude_files       指定不被包含的文件、目錄
vendored_libraries  內(nèi)部包含的.a靜態(tài)庫(kù) 例如'ModuleName/Classes/Lib/*.{a}'
vendored_framework  內(nèi)部包含的.framework靜態(tài)庫(kù) 例如'ModuleName/Classes/Framework/***.framework'
static_framework    指定pod加靜態(tài)庫(kù)標(biāo)簽 true/false

指定支持的架構(gòu)驾窟,如果因?yàn)閕386等架構(gòu)問(wèn)題lint檢測(cè)不通過(guò)庆猫,可以在檢測(cè)時(shí)添加 --skip-import-validation參數(shù)
s.xcconfig = {
  'VALID_ARCHS' => 'armv7 arm64e armv7s arm64 x86_64',
}

如果支持單文件目錄下的文件引用,可以設(shè)置subspec
s.default_subspec = 'Core'
s.subspec 'Core' do |core|
    core.dependency 'MBProgressHUD'
    core.source_files  = "DYFoundationFramework/Classes/**/*.{h,m}"
end

s.subspec 'OldCommonTools' do |oct|
    oct.dependency 'SAMKeychain'
    oct.source_files  = "DY****Framework/Classes/Object-C/DY****Tools/**/*.{h,m}"
end
截屏2022-05-12 下午2.35.28.png

驗(yàn)證.podspec文件的格式是否正確

// 本地驗(yàn)證pod能否通過(guò)驗(yàn)證绅络,如果失敗使用下面命令: pod lib lint --verbose查看原因
pod lib lint
// 或者使用pod lib lint --allow-warnings忽略警告錯(cuò)誤
pod lib lint --allow-warnings
// 當(dāng)庫(kù)中引用了其他三方庫(kù)
pod lib lint --allow-warnings --use-libraries

將私有庫(kù)代碼提交到git

git remote add origin https://gitee.com/********/test-module-one.git
git add .
git commit -a -m "第一次提交 版本為0.1.0"
git pull origin master --allow-unrelated-histories
git push -f origin master
git tag 0.1.0
git push origin 0.1.0

podspec文件中的地址要和遠(yuǎn)程倉(cāng)庫(kù)保持一致
git push -f origin master月培,本地強(qiáng)制上傳到遠(yuǎn)程,把遠(yuǎn)程的覆蓋恩急,這兒是第一次上傳杉畜,所有就用本地代碼覆蓋掉遠(yuǎn)端代碼了。
這兒就已經(jīng)吧私有庫(kù)代碼提交到git上了

第三步:將私有庫(kù)發(fā)布

//pod repo push 索引庫(kù)名 私有庫(kù).podspec
pod repo push TestModuleSpecs TestModuleOne.podspec --allow-warnings
//檢查一下是否成功
pod search TestModuleOne
-> TestModuleOne (0.1.0)
   A short description of TestModuleOne.
   pod 'TestModuleOne', '~> 0.1.0'
   - Homepage: https://gitee.com/********/test-module-one
   - Source:   https://gitee.com/******/test-module-one.git
   - Versions: 0.1.0 [TestModuleSpecs repo]

這就算是搭建完成了

補(bǔ)充

  • XIB和storeboard文件需要放到Assets文件下衷恭,并在podspec文件中設(shè)置路徑.
s.resource_bundles = {
     'xxx' => ['xxx/Assets/*']
   }
  • 庫(kù)中用到MRC文件此叠,需要在podspec中設(shè)置
non_arc_files = 'xxx/Classes/Bluetooth/protobuf-v1/xxx.{h,m}'
  s.exclude_files = non_arc_files
  s.subspec 'no-arc' do |sp|
  sp.source_files = non_arc_files
  sp.requires_arc = false
  end
  • 在庫(kù)中導(dǎo)入其他三方庫(kù)頭文件,需要用"#import <<#header#>>"方式匾荆,不然pod lib lint會(huì)失敗。例如:
#import <Masonry/Masonry.h>

參考文章:
http://www.reibang.com/p/87145101636a

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末杆烁,一起剝皮案震驚了整個(gè)濱河市牙丽,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌兔魂,老刑警劉巖烤芦,帶你破解...
    沈念sama閱讀 221,198評(píng)論 6 514
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異析校,居然都是意外死亡构罗,警方通過(guò)查閱死者的電腦和手機(jī)铜涉,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,334評(píng)論 3 398
  • 文/潘曉璐 我一進(jìn)店門(mén),熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)遂唧,“玉大人芙代,你說(shuō)我怎么就攤上這事「桥恚” “怎么了纹烹?”我有些...
    開(kāi)封第一講書(shū)人閱讀 167,643評(píng)論 0 360
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)召边。 經(jīng)常有香客問(wèn)我铺呵,道長(zhǎng),這世上最難降的妖魔是什么隧熙? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 59,495評(píng)論 1 296
  • 正文 為了忘掉前任片挂,我火速辦了婚禮,結(jié)果婚禮上贞盯,老公的妹妹穿的比我還像新娘音念。我一直安慰自己,他們只是感情好邻悬,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,502評(píng)論 6 397
  • 文/花漫 我一把揭開(kāi)白布症昏。 她就那樣靜靜地躺著,像睡著了一般父丰。 火紅的嫁衣襯著肌膚如雪肝谭。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 52,156評(píng)論 1 308
  • 那天蛾扇,我揣著相機(jī)與錄音攘烛,去河邊找鬼。 笑死镀首,一個(gè)胖子當(dāng)著我的面吹牛坟漱,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播更哄,決...
    沈念sama閱讀 40,743評(píng)論 3 421
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼芋齿,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了成翩?” 一聲冷哼從身側(cè)響起觅捆,我...
    開(kāi)封第一講書(shū)人閱讀 39,659評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎麻敌,沒(méi)想到半個(gè)月后栅炒,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,200評(píng)論 1 319
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,282評(píng)論 3 340
  • 正文 我和宋清朗相戀三年赢赊,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了乙漓。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,424評(píng)論 1 352
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡释移,死狀恐怖叭披,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情秀鞭,我是刑警寧澤趋观,帶...
    沈念sama閱讀 36,107評(píng)論 5 349
  • 正文 年R本政府宣布,位于F島的核電站锋边,受9級(jí)特大地震影響皱坛,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜豆巨,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,789評(píng)論 3 333
  • 文/蒙蒙 一剩辟、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧往扔,春花似錦贩猎、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 32,264評(píng)論 0 23
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至蝗罗,卻和暖如春艇棕,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背串塑。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,390評(píng)論 1 271
  • 我被黑心中介騙來(lái)泰國(guó)打工沼琉, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人桩匪。 一個(gè)月前我還...
    沈念sama閱讀 48,798評(píng)論 3 376
  • 正文 我出身青樓打瘪,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親傻昙。 傳聞我的和親對(duì)象是個(gè)殘疾皇子闺骚,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,435評(píng)論 2 359

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

  • CocoaPods是非常好用的一個(gè)iOS依賴(lài)管理工具,使用它可以方便的管理和更新項(xiàng)目中所使用到的第三方庫(kù)妆档,以及將自...
    小_夭閱讀 1,156評(píng)論 0 0
  • 一僻爽、前言 公司項(xiàng)目繁多,為了框架的統(tǒng)一和更好維護(hù)过吻,需要將自己的業(yè)務(wù)进泼,封裝為私有庫(kù),上傳到公司私有g(shù)it上纤虽,利用co...
    北風(fēng)閱讀 1,982評(píng)論 0 5
  • 前言 iOS組件化開(kāi)發(fā)很重要的一個(gè)技術(shù)點(diǎn):CocoaPods私有庫(kù)的搭建乳绕。而且最近答應(yīng)一個(gè)網(wǎng)友要寫(xiě)一篇關(guān)于《Coc...
    __Mr_Xie__閱讀 7,368評(píng)論 2 27
  • 最近要將公司項(xiàng)目中幾個(gè)自有庫(kù)用pod統(tǒng)一管理,分別熟悉了一下在svn和git上搭建私有庫(kù)的過(guò)程逼纸。這里記錄下搭建私有...
    Cassandra_Y閱讀 392評(píng)論 0 0
  • 最近想為公司搭建cocoapods私有庫(kù)框架洋措,老早之前做過(guò),踩過(guò)不少坑杰刽,想不到又一次掉坑里菠发。果真是好記性不如爛筆頭...
    生光閱讀 1,548評(píng)論 0 4