自定義Cocoapods庫(kù)

做iOS開(kāi)發(fā)時(shí)常常會(huì)使用Cocoapods來(lái)管理第三方依賴庫(kù),指定好依賴之后,自動(dòng)下載依賴即可。
關(guān)于Cocoapods的安裝可以參考這篇文章CocoaPods安裝和使用教程。
現(xiàn)在有一個(gè)場(chǎng)景:有2個(gè)項(xiàng)目,需要提取一個(gè)出一個(gè)公共的庫(kù)提供給兩個(gè)項(xiàng)目使用,如何使用Cocoapods解決使用公共庫(kù)的問(wèn)題呢?
通過(guò)自定義一個(gè)Cocoapods的庫(kù)可以解決這個(gè)問(wèn)題,自定義一個(gè)公共Cocoapods庫(kù)的好處:可以封裝公共代碼,提高代碼的復(fù)用,減少代碼的維護(hù)。
自定義Cocoapods庫(kù),可以通過(guò)pod命令進(jìn)行創(chuàng)建。

創(chuàng)建Cocoapods庫(kù)

podspecCocoapods類庫(kù)的配置文件(Ruby語(yǔ)法)
可以使用命令行創(chuàng)建Cocoapods類庫(kù),命令如下:

pod lib create MyLibrary

運(yùn)行完命令之后需要選擇語(yǔ)言已經(jīng)測(cè)試代碼等,按照自己的項(xiàng)目需求選擇即可:

To get you started we need to ask a few questions, this should only take a minute.

If this is your first time we recommend running through with the guide:
 - http://guides.cocoapods.org/making/using-pod-lib-create.html
 ( hold cmd and click links to open in a browser. )
What language do you want to use?? [ Swift / ObjC ]
 > Swift
Would you like to include a demo application with your library? [ Yes / No ]
 > Yes
Which testing frameworks will you use? [ Quick / None ]
 > Quick
Would you like to do view based testing? [ Yes / No ]
 > Yes
Running pod install on your new library.

安裝完依賴之后,會(huì)得到一個(gè)pod-library.podspec文件,他的內(nèi)容一般都是下面這樣的:

    Pod::Spec.new do |s|
  s.name             = 'pod-library'
  s.version          = '0.1.0'
  s.summary          = 'A short description of pod-library.'
  ...
  s.description      = <<-DESC
TODO: Add long description of the pod here.
                       DESC

  s.homepage         = 'https://github.com/jjz/pod-library'
  # s.screenshots     = 'www.example.com/screenshots_1', 'www.example.com/screenshots_2'
  s.license          = { :type => 'MIT', :file => 'LICENSE' }
  s.author           = { 'jjz' => 'woaf1003@gmail.com' }
  s.source           = { :git => 'https://github.com/jjz/pod-library.git', :tag => s.version.to_s }
  s.ios.deployment_target = '8.0'
  s.source_files = 'pod-library/Classes/**/*'
 ...
end

這段Ruby代碼的意思是創(chuàng)建一個(gè)Spec的配置,該項(xiàng)目發(fā)布之后可以被Pod直接引用,其中一些選項(xiàng)的意義如下:

  • source_files 指定類庫(kù)中的源碼
    source_files中指定要發(fā)布的源代碼文件,這個(gè)項(xiàng)目的源代碼都是在pod-library(項(xiàng)目)目錄下,在這里指定了獲取pod-library/Classes/**/*目錄下的所有文件。
    也可以分別指定不同的文件,比如需要使用swift就需要指定目錄下面的.swift文件,有c++源代碼的還可以指定.mm文件。
    多個(gè)目錄使用,分割類似于下面的配置:

'pod-library/.{h,m}’,'pod-library/utils/.{h,m}’

  • dependency指定類庫(kù)中的依賴庫(kù)
    這個(gè)語(yǔ)法和podfile文件里面的pod文件很像,s.dependency后面指定類庫(kù)名稱和版本,如果加其他類庫(kù)的話需要再新起一行,比如添加OpenSSL的類庫(kù):

s.dependency 'OpenSSL', '1.0.110'

  • 指定類庫(kù)中的資源文件
    指定類庫(kù)中的資源文件,我們可以抽象出來(lái)一些公用的控件,比如progress,alert,prompt 等,這些控件需要使用資源文件。一般我們有可能打包的資源有聲音,圖片,xib...,有兩種指定資源文件的方式:

resources 和 resource_bundles

resources 指定的資源在調(diào)用類庫(kù)的項(xiàng)目中可以直接調(diào)用,和調(diào)用項(xiàng)目?jī)?nèi)的資源一樣。
resource_bundles把需要調(diào)用的資源編譯到bundle來(lái)調(diào)用,
在這里我使用的是resources定義資源文件。

  • name 類庫(kù)的名稱
  • version 指定版本
  • license 開(kāi)源協(xié)議
  • description 簡(jiǎn)單描述
  • homepage 個(gè)人主頁(yè)
  • author 作者信息
  • source 指定git地址
  • platform 指定iOS版本
  • requires_arc 指定支持arc
  • vendored_frameworks 本地的frameworks
  • frameworks 指定需要使用的系統(tǒng)frameworks
  • preserve_paths 本地的.a庫(kù)

使用上面的配置可以完成把一個(gè)項(xiàng)目配置成Cocoapods類庫(kù),在項(xiàng)目中有些只是配置成一個(gè)類庫(kù)并不能滿足需求,有可能會(huì)需要一個(gè)以上的類庫(kù),例如一個(gè)是core核心類庫(kù),一個(gè)是logic業(yè)務(wù)邏輯類庫(kù),還可以使用subspec實(shí)現(xiàn)上述目的。

subspec

subspec是pod的一個(gè)屬性,用來(lái)指定pod類庫(kù)中的子類庫(kù)。配置subspec首先需要指定一個(gè)子類庫(kù),之后再指定子類庫(kù)對(duì)于的配置即可。配置如下:

s.subspec "Core" do |core|
    core.source_files="pod-library/Core/**/*"
  end

在定義一個(gè)自類庫(kù),該類庫(kù)依賴上面定義的子類庫(kù)Core,定義如下:

s.subspec "Logic" do |logic|
    logic.dependency 'pod-library/Core'
    logic.source_files="pod-library/Logic/**/*"
  end

這樣就完成了兩個(gè)子類庫(kù)的定義,在調(diào)用的時(shí)候直接指定對(duì)應(yīng)的類庫(kù)即可,例如:

pod 'pod-library/Core', :path => '../'

以上是定義類庫(kù)的內(nèi)容,下面再看下如何在其他項(xiàng)目中調(diào)用已定義的類庫(kù)。

在項(xiàng)目中調(diào)用pod-library

創(chuàng)建一個(gè)和pod-library同級(jí)的目錄,命名為pod-project,用來(lái)調(diào)用pod-library。
在pod-project目錄中添加Podfile。
指定對(duì)pod-library的依賴:

  platform :ios, '8.0'
  target "pod-project" do
      pod 'pod-library', :path => 'pod-library'
      use_frameworks! 
  end

注意,這里必須使用use_frameworks!,Pod中使用Swift的類庫(kù)必須使用其標(biāo)識(shí),不然會(huì)出現(xiàn)錯(cuò)誤:

Pods written in Swift can only be integrated as frameworks; this feature is still in beta. Add `use_frameworks!` to your Podfile or target to opt into using it.

這里需要使用了path來(lái)指定本地的目錄作為庫(kù)的地址,這樣的作用是可以在pod-project項(xiàng)目中直接更新pod-library中的代碼,運(yùn)行安裝命令:

pod install

可以看到pod先去下載pod-library,然后再下載pod-library的依賴。
在pod-project如何更改pod-library的代碼呢?
下載完依賴庫(kù)之后,打開(kāi)pod-project.xcworkspace文件,會(huì)看到pods多了一個(gè)development pods的目錄,這個(gè)目錄下有pod-library項(xiàng)目的代碼以及資源。可以在這里直接編輯pod-library里的代碼,然后就可以直接提交代碼了,這是和其他的pods里的文件最大的區(qū)別,不加path的文件修改之后的文件在運(yùn)行pod installpod update之后就會(huì)被重新覆蓋掉。
(這里pod-library使用的是git submodule的形式包含在項(xiàng)目中的)

參考 :
making cocoa pods
Using Pod Lib Create

開(kāi)源地址:
pod-library
pod-project

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 做Ios開(kāi)發(fā)會(huì)使用Cocoapods來(lái)管理第三方依賴庫(kù),非常好用,指定依賴,自動(dòng)下載依賴。關(guān)于Cocoapods的...
    0xSen閱讀 907評(píng)論 0 5
  • 經(jīng)常使用cocoapods來(lái)管理第三方依賴庫(kù),非常好用 關(guān)于cocoapods的安裝可以參考CocoaPods安裝...
    0xSen閱讀 7,265評(píng)論 7 12
  • 致自己: 最近一周你的狀態(tài)很不好,我能感覺(jué)到你內(nèi)心的糾結(jié),既想要好好的工作,又不想違背你的內(nèi)心,可是啊,每人...
    娜瘋子閱讀 232評(píng)論 0 0
  • 很高興最近學(xué)校開(kāi)設(shè)了創(chuàng)業(yè)培訓(xùn)課,作為創(chuàng)業(yè)狗一只,怎么也得抱著試一試的心態(tài)去參加。 到了周末晚上,本以為是坐在教室上...
    花樹哥哥閱讀 612評(píng)論 1 1
  • 因?yàn)閷?duì)插花有一份熱愛(ài),所以平時(shí)會(huì)比較留意相關(guān)的信息。有一次在朋友圈看到一條關(guān)于小原流花道的介紹,莫名就有一種喜歡,...
    瀅是一樣閱讀 187評(píng)論 2 4

友情鏈接更多精彩內(nèi)容