【iOS 開發】Cocoapods 中多個本地庫相互依賴的方法

先說一下這裏講的是本地庫,並不是私有庫,如果想了解 Cocoapods 公共庫或者私有庫的支持方法可以看我的另一篇文章:【iOS 開發】創建 podspec 文件,給自己寫的框架添加 CocoaPos 支持

最近公司項目需要以組件化的架構來重構項目,就是各個模塊需要解耦拆分開來,利用 Cocoapods 的管理,主工程只需要將各個模塊 pod install 引入即可,開始想要以私有庫的方式集成,但是公司項目涉及到多個客戶定製開發,定製分支比較多,如果用私有庫方式必定要創建多個 Git 倉庫分開管理,這樣分支管理以及維護成本都大大提高,所以考慮採用本地庫的方式將各個模塊集成,好處是各個模塊的庫不需要打 tag 上傳至私有庫,可以在主工程直接管理各個模塊的代碼,下面就記錄一下遇到的問題。


至於如何給自己的模塊代碼添加 Cocoapods 支持我這邊就不說了,不會的看上面貼出來的另一篇文章即可。

假設

我的項目工程一共分爲以下幾個組件:

  • 測試主工程 (TestProject)
  • 測試組件1 (TestModule1)
  • 測試組件2 (TestModule2)

然後 測試主工程 需要依賴 測試組件1 ,而 測試組件1 又需要依賴 測試組件2 ,兩個組件都是以本地庫方式依賴,所以這裏就涉及到 Cocoapods 本地庫依賴本地庫,因爲是本地庫並沒有上傳,所以在 podspec 中依賴時會出現找不到庫的情況,下面就來說一下解決方法。

相互依賴的方法

測試組件2

由於 測試組件2 並不需要任何依賴,所以 podspec 如下:

Pod::Spec.new do |s|
    s.name                      = 'TestModule2'
    s.version                   = '1.0.0'
    s.summary                   = '測試組件2'
    s.homepage                  = 'xxx'
    s.license                   = { :type => 'MIT', :file => 'LICENSE' }
    s.author                    = { 'Jonzzs' => 'xxx' }
    s.source                    = { :git => '', :tag => s.version }
    s.platform                  = :ios
    s.ios.deployment_target     = '9.0'
    s.swift_version             = '4.2'
    s.source_files              = 'TestModule2/*.swift'
end

測試組件1

由於 測試組件1 需要依賴 測試組件2 ,所以需要添加 s.dependency 依賴, podspec 如下:

Pod::Spec.new do |s|
    s.name                      = 'TestModule1'
    s.version                   = '1.0.0'
    s.summary                   = '測試組件1'
    s.homepage                  = 'xxx'
    s.license                   = { :type => 'MIT', :file => 'LICENSE' }
    s.author                    = { 'Jonzzs' => 'xxx' }
    s.source                    = { :git => '', :tag => s.version }
    s.platform                  = :ios
    s.ios.deployment_target     = '9.0'
    s.swift_version             = '4.2'
    s.source_files              = 'TestModule1/*.swift'

    s.dependency 'TestModule2'  # 這裏需要依賴測試組件2
end

測試主工程

當測試主工程在 podfile 集成 測試組件1測試組件2 時,一般來說,因爲 TestModule1 已經在 podspecs.dependency 依賴了 TestModule2 ,所以直接 pod 'TestModule1' 應該就會自動把 TestModule2pod 下來,但是因爲兩個組件都是本地庫,所以 cocoapods 會找不到 TestModule2 這個本地庫,這時候只要在 podfile 中將 TestModule2 也指明本地地址即可,podfile 如下:

platform :ios, '9.0'
target 'TestProject' do
  use_frameworks!

  pod 'TestModule1',   :path =>'../TestModule1/'
  pod 'TestModule2',   :path =>'../TestModule2/'

end

這裏將 TestModule2 的地址也指明,pod 'TestModule1' 時就不會出現找不到依賴的情況。


將來的你,一定會感激現在拼命的自己,願自己與讀者的開發之路無限美好。

我的傳送門: 博客簡書微博GitHub

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章