使用Cocoapod建立自己公司的私有庫

背景說明

之前一段時間因為公司需要幫客戶定制自己的App蛹尝,但是基本邏輯都是跟我們現(xiàn)有App差不多后豫,如果直接copy一份項目出來改名,無疑會為將來的維護成本添加難度突那,倒不是說解決困難挫酿,而是需要copy重復的代碼,項目少的時候還好說愕难,一旦多起來......

因此饭豹,將公共部分的代碼抽離出來變得很有必要,抽取出來的這部分公共代碼使用Cocoapod進行管理無疑是當下最好的選擇务漩,下面分享在使用Cocoapod創(chuàng)建私有庫的一些經(jīng)驗拄衰,希望能夠幫到你。

利用Cocoapod創(chuàng)建私有庫

一饵骨、創(chuàng)建podspec文件

在終端上cd到需要創(chuàng)建的目錄文件夾下翘悉,然后執(zhí)行命令pod spec create xxx,其中xxx就是對應的podspec文件名居触,應保持與當前統(tǒng)計文件夾名字一致妖混,例如:

pod spec create Tool    // 此時生成的podspec文件就是 Tool.podspec

二、配置podspec文件

基本用法

下面是基本的一些配置轮洋,想要使用可以直接copy然后替換其中的內(nèi)容為自己的即可制市。具體意義是什么我就不解釋了,看字面就可以看得出來弊予,在生成的podspec文件里面也有對應的注釋祥楣,想了解的話可以看注釋。

Pod::Spec.new do |s|
    s.name         = "Tool"
    s.version      = "0.0.1"
    s.summary      = "A short description of Tool."
    s.description  = "我的一些工具類組件"
    s.homepage     = "https://gitee.com/hanten"
    s.license      = "MIT"
    s.author       = { "Hanten" => "zhiqiangit@126.com" }
    s.platform     = :ios
    s.ios.deployment_target = '8.0'
    s.source       = { :git => "https://gitee.com/hanten/swift_pod.git", :tag => "#{s.version}" }
    s.source_files = "Tool/**/*.{h,m}}"  # 如果是swift就將.{h,m}換為.swift
end

高級用法

1、依賴

// 依賴第三方框架
s.dependency 'AFNetworking'
// 依賴第三方存放本地的.framework误褪,Resource是與Tool同級的文件夾责鳍,我用來放資源的地方,路徑可以根據(jù)自己具體配置
s.ios.vendored_frameworks 'Resource/*.framework'
// 依賴第三方存放本地的.a
s.ios.vendored_libraries = "Resource/*.a"
// 依賴系統(tǒng).framework
s.frameworks = 'SystemConfiguration','CoreGraphics','CoreTelephony'
// 依賴系統(tǒng).a
s.libraries  = 'iconv','sqlite3','stdc++'

2兽间、資源文件(包括圖片历葛、plist文件、xib文件)

一般情況下私有庫圖片等資源文件是放在bundle下的嘀略,在使用的時候需要從bundle中拿取出來恤溶,比如:

// 我新建了一個叫myShare.bundle文件夾,里面存放圖片帜羊,然后我需要引用它宏娄,在podspec文件中
s.resource = "Resource/myShare.bundle"

// 在OC代碼中,在使用的時候逮壁,如果不指定bundle的話會找不到該圖片資源
NSURL *bundleURL = [[NSBundle mainBundle] URLForResource:@"myShare" withExtension:@"bundle"];
NSBundle *bundle = [NSBundle bundleWithURL:bundleURL];
UIImage *image = [UIImage imageNamed:@"my_share_session" inBundle:bundle compatibleWithTraitCollection:nil];


// 需要注意的是xib文件的引用孵坚,在podspec中配置,就會在pod install后自動生成ShareXibBundle窥淆,或者你把xib放在自己建的bundle下卖宠,在引用的時候也需要指定該bundle
s.resource_bundles = {
 'ShareXibBundle' => ['Tool/Share/**/*.xib']
}

// 在OC中引用,比如注冊cell忧饭,這樣才能正確引用到xib文件
NSString *path = [[NSBundle mainBundle] pathForResource:@"ShareXibBundle" ofType:@"bundle"];
NSBundle *bundle = [NSBundle bundleWithPath:path];
[_tableView registerNib:[UINib nibWithNibName:@"ShareCell" bundle:bundle] forCellReuseIdentifier:@"Cell"];

3扛伍、使用subspec分模塊引入

有的時候我們并不希望將所有的模塊都一起被引入到項目中,因為某些模塊我們壓根就用不到词裤,但是卻因為其他需要的模塊被一起引入進來了刺洒,這個就很煩了。

這時候我們就需要分模塊引入了吼砂,分模塊引入我知道的兩種方式:
1逆航、建立多個podspec,每一個模塊對應一個podspec文件渔肩,這樣的話就會新建很多個podspec去對應因俐,麻煩且看起來不優(yōu)雅,不建議使用周偎;
2抹剩、使用subspec,只需要添加一個主的podspec即可蓉坎,這是目前我在使用的澳眷,下面是我的配置:

Pod::Spec.new do |s|
    s.name         = "Tool"
    s.version      = "0.0.1"
    s.summary      = "A short description of Tool."
    s.description  = "我的一些工具類組件"
    s.homepage     = "https://gitee.com/hanten"
    s.license      = "MIT"
    s.author       = { "Hanten" => "zhiqiangit@126.com" }
    s.platform     = :ios
    s.ios.deployment_target = '8.0'
    s.source       = { :git => "https://gitee.com/hanten/swift_pod.git", :tag => "#{s.version}" }
    # s.source_files = "Tool/**/*.{h,m}}"  # 如果是swift就將.{h,m}換為.swift
    
    # 基礎(chǔ)依賴
    s.subspec "Base" do |ss|
        ss.source_files     = "Tool/Base/**/*.{h,m}}"
    end

    # 日期控件
    s.subspec "Date" do |ss|
        ss.source_files         = "Tool/Date/**/*.{h,m}"
    end
    
    # 分享組件
    s.subspec "Share" do |ss|
        ss.source_files         = "Tool/Share/**/*.{h,m}"
        ss.dependency 'Tool/Base'
    end
end

只需要簡單的配置就可以分模塊引入了,相關(guān)的依賴在subspec上寫就可以了蛉艾。
需要注意的是父spec需要把source_files給去掉钳踊,因為我們使用了subspec來引用

三衷敌、項目引用

正常引用

如果沒有使用分模塊引用,那么在Podfile中應該這樣引用:

pod 'Tool', :path => '../swift_pod'

分模塊引用

使用了分模塊引用箍土,在Podfile中如下引用:

pod 'Tool', :path => '../swift_pod', :subspecs => [
    'Date', # 日期控件
    'Share' # 分享組件
]

后記

最近有時間會把之前的一些項目經(jīng)驗分享出來逢享,有什么寫得不對的歡迎大家指正罐监,共同進步吴藻!點擊跳轉(zhuǎn)Cocoapod官方鏈接

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市弓柱,隨后出現(xiàn)的幾起案子沟堡,更是在濱河造成了極大的恐慌,老刑警劉巖矢空,帶你破解...
    沈念sama閱讀 218,386評論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件航罗,死亡現(xiàn)場離奇詭異,居然都是意外死亡屁药,警方通過查閱死者的電腦和手機粥血,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,142評論 3 394
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來酿箭,“玉大人复亏,你說我怎么就攤上這事$缘眨” “怎么了缔御?”我有些...
    開封第一講書人閱讀 164,704評論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長妇蛀。 經(jīng)常有香客問我耕突,道長,這世上最難降的妖魔是什么评架? 我笑而不...
    開封第一講書人閱讀 58,702評論 1 294
  • 正文 為了忘掉前任眷茁,我火速辦了婚禮,結(jié)果婚禮上纵诞,老公的妹妹穿的比我還像新娘蔼卡。我一直安慰自己,他們只是感情好挣磨,可當我...
    茶點故事閱讀 67,716評論 6 392
  • 文/花漫 我一把揭開白布雇逞。 她就那樣靜靜地躺著,像睡著了一般茁裙。 火紅的嫁衣襯著肌膚如雪塘砸。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,573評論 1 305
  • 那天晤锥,我揣著相機與錄音掉蔬,去河邊找鬼廊宪。 笑死,一個胖子當著我的面吹牛女轿,可吹牛的內(nèi)容都是我干的箭启。 我是一名探鬼主播,決...
    沈念sama閱讀 40,314評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼蛉迹,長吁一口氣:“原來是場噩夢啊……” “哼傅寡!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起北救,我...
    開封第一講書人閱讀 39,230評論 0 276
  • 序言:老撾萬榮一對情侶失蹤荐操,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后珍策,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體托启,經(jīng)...
    沈念sama閱讀 45,680評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,873評論 3 336
  • 正文 我和宋清朗相戀三年攘宙,在試婚紗的時候發(fā)現(xiàn)自己被綠了屯耸。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 39,991評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡蹭劈,死狀恐怖疗绣,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情链方,我是刑警寧澤持痰,帶...
    沈念sama閱讀 35,706評論 5 346
  • 正文 年R本政府宣布,位于F島的核電站祟蚀,受9級特大地震影響工窍,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜前酿,卻給世界環(huán)境...
    茶點故事閱讀 41,329評論 3 330
  • 文/蒙蒙 一患雏、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧罢维,春花似錦淹仑、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,910評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至平窘,卻和暖如春吓肋,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背瑰艘。 一陣腳步聲響...
    開封第一講書人閱讀 33,038評論 1 270
  • 我被黑心中介騙來泰國打工是鬼, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留肤舞,地道東北人。 一個月前我還...
    沈念sama閱讀 48,158評論 3 370
  • 正文 我出身青樓均蜜,卻偏偏與公主長得像李剖,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子囤耳,可洞房花燭夜當晚...
    茶點故事閱讀 44,941評論 2 355

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