1. 程式人生 > >使用cocoapods管理元件化開發

使用cocoapods管理元件化開發

.podspec檔案

.podspec檔案描述自己元件工程的程式碼目錄和資源目錄在哪兒,還有自己元件工程所依賴其他框架,根據pod命令:pod spec create spec檔名 建立podspec檔案。

//建立pod索引庫,固定寫法,並且定義索引庫的名字為s,後續通過s,就能拿到索引庫

Pod::Spec.new do |s|

s.name = "HttpManager"//設定名稱

s.version = "0.0.1"//設定版本號

s.summary = "A short description of HttpManager."//設定摘要

s.description = "A long description of HttpManager."//設定詳情

s.homepage = "http://Example/HttpManager"//設定倉庫主頁

s.license = "MIT"//設定許可證

s.author = { "author-name" => "author-account" }//設定作者

s.source = { :git => "git-address", :tag => "#{s.version}" }//設定倉庫源,表示在哪可以找到元件工程

s.source_files = "HttpManager/Classes/**/*.{h,m}"//設定原始檔路徑(不是整個工程的檔案,而是自己封裝的程式碼,以後別的工程引入,就會引入這裡的程式碼)

s.dependency "AFNetworking", "~>2.3"//元件工程依賴哪些第三方框架

s.frameworks = "UIKit", "MapKit" //元件工程依賴哪些原生框架

s.resource_bundles = { 'HttpManager' => ['HttpManager/Assets/*.png'] }//元件工程圖片資源

end

//.podspec檔案注意點

1.s.description不能為空

2.s.license不能亂填,必須是有這樣的協議,例如MIT

Podfile檔案指定主工程載入哪些元件庫,source指定元件庫對應的podspec檔案地址。

建立命令:pod init

cocoapods可以載入遠端倉庫,也可以載入本地倉庫,一般載入遠端倉庫。

建立私有索引庫

GitHub上新建一個工程,例如XMGSpec,本地新增私有遠端索引庫:pod repo add XMGSpec http://git.dev.sh.ctripcorp.com/XMGSpec.git,後面是索引庫遠端地址。Finder前往資料夾~/.cocoapods/repos,可以看到XMGSpec資料夾,只有.git檔案,沒有任何私有庫索引。

建立元件工程

方式一:直接建立工程XMGLib,把元件程式碼放在Class中,只要spec描述好,就會自動載入Class中元件程式碼,使用pod spec create XMGLib 生成spec描述檔案,指定載入元件工程的元件程式碼在哪。

方式二:使用cocoapods命令:pod lib create XMGLib

            這個命令會自動生成一套元件程式碼工程測試程式碼,並且有Git管理,包含podspec檔案,描述好元件程式碼位置。

    編輯元件工程的.podspec檔案,如上所示,使用pod spec lint XMGLib.podspec命令驗證,驗證成功後提示:XMGLib.podspec passed validation,驗證失敗則根據失敗提示修改.podspec檔案直至通過驗證。

元件化(私有遠端倉庫)

      把自己私有庫的索引新增到自己索引庫中:pod repo push XMGSpec XMGLib.podspec --allow-warnings,本地索引庫就會有自己的私有庫的.podspec檔案,Finder進入/.cocoapods/repos/XMGSpec,可以看到XMGLib資料夾,包含0.1.0資料夾,子檔案中包含XMGLib.podspec檔案。而且遠端也會有,pod repo push 會幫我們推送到遠端索引庫,檢視遠端倉庫,可以看到一次提交。

使用自己的私有索引倉庫

  • 建立一個新的工程,執行命令 pod init,生成Podfile檔案
  • 在Podfile檔案頂部新增一個源,表明私有索引庫地址,例:source ‘[email protected]:IBU_App_Tour/TourSpecs.git’  。
  • 在Podfile檔案中pod 'XMGLib', '0.1.0'
  • 執行pod install,在Pods資料夾下成功匯入XMGSpec工程程式碼

Cocoapods原理

根據Podfile描述,找到所用元件庫的描述檔案podspec。

podspec中,s.source指定程式碼庫地址,找到程式碼庫,根據s.source_files指定copy哪些檔案到自己的工程中。

元件化升級

各個元件庫不斷經歷完善,需要更新升級元件庫。

  • 把最新的版本程式碼繫結tag,更新podspec檔案,重新上傳到版本索引庫 pod repo push XMGSpec XMGLib.podspec --allow-warnings
  • 工程檔案在使用過程中,使用pod update就能載入最新版本元件程式碼

元件化資源

  • 使用pod lib create建立的元件工程,有個Assets資料夾,把圖片放這
  • podspec檔案中s.resource_bundles指定資原始檔路徑
  • 倉庫程式碼重新pod install,自動生成bundle檔案。程式碼中如何使用資原始檔,之前獲取圖片都是在主bundle中:[NSBundle mainBundle],但是元件工程資源,不是在主bundle中,是在自己框架的bundle中。獲取自己的bundle,NSBundle *selfBundle = [NSBundle bundleForClass:self]; 

 NSLog(@"%@", selfBundle);

//獲取bundle還不夠,圖片在XMLib.bundle檔案中

//圖片用全名

NSString *path = [selfBundle pathForResource:@"XMGLib.bundle/[email protected]" ofType:nil];

UIImage *image =  [UIImage imageWithContentsOfFile:path];

//注意:xib同樣屬於資源,需要跟圖片一樣使用自己的bundle

//獲取當前bundle名稱 

NSBundle *bundle = [NSBundle bundleForClass:[self class]];

NSString *bundleName = bundle.infoDictionary[@"CFBundleName];

bundleName = [NSString stringWithFormat:@"%@.bundle",bundleName];

//xib名稱需要拼接Bundle名稱

NSString *nibName = [NSString stringWithFormat:@"%@/XMGHomeRecommendCell",bundleName];

[self.tableView registerNib:[UINib nibWithNibName:nibName bundle:[NSBundle bundleForClass:[self class]]] forCellReuseIdentifier:ID];

框架依賴

podspec檔案中描述:s.dependency 'AFNetworking' 

使用框架依賴,則使用此元件的時候自動匯入第三方庫

劃分子元件

隨著元件不斷擴大,如果不劃分子元件,我們的工程就會匯入一些用不到的業務。因此使用劃分子元件,別人在載入你的元件時,就可以根據自己的需求,載入對應的元件程式碼。

注意:如果使用subspec,別人引入你的框架,程式碼也會按照subspec劃分資料夾結構,podspec不需要描述整個資料夾路徑,否則會造成subspec劃分的資料夾沒有程式碼。

示例:

SDWebImage.podspec


使用子元件

//Podfile檔案描述

pod 'SDWebImage/GIF'