基于cocoapods的App模塊化

隨著產(chǎn)品的迭代升級,增加的模塊越來越多,項(xiàng)目也會越來越復(fù)雜.隨之也就帶來的一個非常頭疼的問題:代碼量龐大(動輒上百M(fèi)),更讓人難以忍受的是蝸牛般的編譯速度.為了解決這個問題,我們試著對項(xiàng)目進(jìn)行基于功能的模塊拆分,也就是近來一直提出的模塊化.
前期我們參考了豆瓣的開源模塊化和github上一個star數(shù)字較多的框架,它們都是對一個項(xiàng)目中代碼的分離,利用NSClassFromString方法,通過對路徑處理或者直接傳遞字符串,創(chuàng)建所需要的類型.這樣能對不同模塊的代碼進(jìn)行解耦,但是仍然無法將項(xiàng)目拆解成不同功能的小項(xiàng)目.經(jīng)過不斷的討論,我們最終選擇了基于cocoapod的模塊化.
將不同的模塊獨(dú)立成一個項(xiàng)目,讓后再主工程中通過cocoapod對不同的項(xiàng)目進(jìn)行管理和集成,使負(fù)責(zé)人員專注于自己的模塊進(jìn)行開發(fā),而主工程通過不同的tag對模塊進(jìn)行引用,避免了在所有人都要在主工程運(yùn)行全部代碼的頭疼問題.
基于cocoapod,所以需要對cocoapod有較全面的理解,請參考我上篇寫的:
從零創(chuàng)建cocoapods私有倉庫

下面以一個簡單的Demo,詳細(xì)介紹實(shí)現(xiàn)思路.
項(xiàng)目中"我的"模塊,一般都會帶有登錄驗(yàn)證,兒其他模塊也有可能會用到登錄部分,所以我們可以把登錄獨(dú)立出一個模塊.
首先在gitlub新建一個repository,命名為LoginModule,如下圖:

Snip20170505_9.png

具體選擇請參考上圖.
然后通過SourceTree將工程下載到本地,添加Xcode新建的LoginModule工程,最后的文件層級圖應(yīng)該是下圖這樣的:

文件層級.png

為了更方便的創(chuàng)建.podsepc文件,如果不是上述文件層級,請手動調(diào)整.其中.podspec文件,是cocoapods引用時的識別文件,由于需要與文件層級很嚴(yán)格的配置,建議直接拷貝,下面是我經(jīng)過測試正確的配置:

Pod::Spec.new do |s| #s代表文件夾位置為一級,ss代表文件夾位置為二級

  s.name         = "LoginModule"
  s.version      = "0.0.16"
  s.summary      = "LoginModule for iOS project."
  s.description  = <<-DESC
                  LoginModule
                  DESC
  s.homepage     = "https://github.com/zhudong10/LoginModule"
  s.license      = { :type => "MIT", :file => "LICENSE" }
  #導(dǎo)入工程的pch文件
  s.prefix_header_file = 'LoginModule/ZDPrefixHeader.pch'
  s.author             = { "zhudong" => "zhudongdong@91guoxin.com" }
  s.source       = { :git => "https://github.com/zhudong10/LoginModule", :tag => "#{s.version}" }
  s.source_files  = "LoginModule/LoginModule.h" #此處需要在本級目錄下找到文件
              # 目的文件夾名稱 #
  s.subspec 'LoginModule' do |ss| 
                      # 文件來源 #
    ss.source_files = 'LoginModule/LoginUI/**/*.{h,m}'
                      # 資源文件 #
    ss.resources = ['LoginModule/Login.xcassets', 'LoginModule/LoginUI/**/*.xib']
    #ss.resources = 'LoginModule/LoginUI/**/*.xib'
    #ss.resources = 'LoginModule/**/*.xcassets'
  end
s.subspec 'Category' do |ss| 
              # 文件來源 #
    ss.source_files = 'LoginModule/Category/**/*.{h,m}'
    end

end

.podspec文件識別的是實(shí)體文件夾,為了便于對文件管理,在LoginModule中建立了如下的文件夾和文件,和上述的配置相匹配.

文件夾和文件.png

由于cocoapod引用時,如果沒有tag的區(qū)分,只會引用第一次提交的代碼,所以需要對提交的代碼分支,添加tag,方法如下圖:

添加tag.png

而且需要推動到遠(yuǎn)程分支:

推動到遠(yuǎn)程分支.png

經(jīng)歷上面的步驟,就完成了LoginModule工程的創(chuàng)建.下面讓我們在主工程中對其用cocoapod進(jìn)行引用.

新建工程MineModule,對其進(jìn)行pod init,創(chuàng)建podfile文件,對podfile文件進(jìn)行如下配置:

# Uncomment the next line to define a global platform for your project
# platform :ios, '9.0'

target 'MineModule' do
  # Uncomment the next line if you're using Swift or would like to use dynamic frameworks
  # use_frameworks!
    pod 'LoginModule', :git => 'https://github.com/zhudong10/LoginModule', :tag =>'0.0.16', :inhibit_warnings => false
  
end

其中的tag就是對LoginModule項(xiàng)目引用的區(qū)分.
執(zhí)行pod install命令后,就能順利引如LoginModule模塊,如果出現(xiàn)錯誤:

zhudongdeMacBook-Pro:MineModule zhudong$ pod install
Analyzing dependencies
Pre-downloading: `LoginModule` from `https://github.com/zhudong10/LoginModule`, tag `0.0.3`
[!] Unable to find a specification for 'LoginModule'.

[!] Unable to load a podspec from `LoginModule.podspec`, skipping:

Pod::DSLError

是LoginModule工程中.podspec文件配置錯誤,請?jiān)敿?xì)檢查;
如果pod install成功引用LoginModuel,但是編譯時出現(xiàn):

/Users/zhudong/Documents/Demo/Later2017.5.5/MineModule/MineModule/Pods/LoginModule/LoginModule/LoginUI/LoginSuccessController.m:17:1: Cannot synthesize weak property because the current deployment target does not support weak references

則是因?yàn)閤ib文件沒有正確引用,需要在MineModule的podfile中添加修改代碼,最終的語句如下:

# Uncomment the next line to define a global platform for your project
# platform :ios, '9.0'

target 'MineModule' do
  # Uncomment the next line if you're using Swift or would like to use dynamic frameworks
  # use_frameworks!
    pod 'LoginModule', :git => 'https://github.com/zhudong10/LoginModule', :tag =>'0.0.16', :inhibit_warnings => false
  
  post_install do |installer|
      installer.pods_project.targets.each do |target|
          target.build_configurations.each do |config|
              config.build_settings['IPHONEOS_DEPLOYMENT_TARGET'] = '8.0'
          end
      end
  end

end

如果大功告成,文件層級結(jié)果應(yīng)該如下圖:

結(jié)果.png

最終運(yùn)行MineModule,我們看到:

MineModule03.gif

如果開發(fā)過程中,登錄內(nèi)容有所變化,那就只要在LoginModule中進(jìn)行更改,然后在主工程中更新pod就行了,感覺是不是超棒?

點(diǎn)擊收藏和喜歡都是對我的支持和鼓勵

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子西壮,更是在濱河造成了極大的恐慌睛约,老刑警劉巖,帶你破解...
    沈念sama閱讀 217,509評論 6 504
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件寞肖,死亡現(xiàn)場離奇詭異纲酗,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)新蟆,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,806評論 3 394
  • 文/潘曉璐 我一進(jìn)店門觅赊,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人琼稻,你說我怎么就攤上這事吮螺。” “怎么了?”我有些...
    開封第一講書人閱讀 163,875評論 0 354
  • 文/不壞的土叔 我叫張陵鸠补,是天一觀的道長萝风。 經(jīng)常有香客問我,道長紫岩,這世上最難降的妖魔是什么规惰? 我笑而不...
    開封第一講書人閱讀 58,441評論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮被因,結(jié)果婚禮上卿拴,老公的妹妹穿的比我還像新娘。我一直安慰自己梨与,他們只是感情好堕花,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,488評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著粥鞋,像睡著了一般缘挽。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上呻粹,一...
    開封第一講書人閱讀 51,365評論 1 302
  • 那天壕曼,我揣著相機(jī)與錄音,去河邊找鬼等浊。 笑死腮郊,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的筹燕。 我是一名探鬼主播轧飞,決...
    沈念sama閱讀 40,190評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼撒踪!你這毒婦竟也來了过咬?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,062評論 0 276
  • 序言:老撾萬榮一對情侶失蹤制妄,失蹤者是張志新(化名)和其女友劉穎掸绞,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體耕捞,經(jīng)...
    沈念sama閱讀 45,500評論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡衔掸,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,706評論 3 335
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了砸脊。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片具篇。...
    茶點(diǎn)故事閱讀 39,834評論 1 347
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖凌埂,靈堂內(nèi)的尸體忽然破棺而出驱显,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 35,559評論 5 345
  • 正文 年R本政府宣布埃疫,位于F島的核電站伏恐,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏栓霜。R本人自食惡果不足惜翠桦,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,167評論 3 328
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望胳蛮。 院中可真熱鬧销凑,春花似錦、人聲如沸仅炊。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,779評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽胞枕。三九已至,卻和暖如春殷绍,著一層夾襖步出監(jiān)牢的瞬間呆馁,已是汗流浹背桐经。 一陣腳步聲響...
    開封第一講書人閱讀 32,912評論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留浙滤,地道東北人阴挣。 一個月前我還...
    沈念sama閱讀 47,958評論 2 370
  • 正文 我出身青樓,卻偏偏與公主長得像纺腊,于是被迫代替她去往敵國和親屯吊。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,779評論 2 354

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