題內(nèi)話
之前在網(wǎng)上看了一些關于使用 CocoaPods 創(chuàng)建私有庫的相關文章,看著看著就被那些步驟給搞暈了,不知道先做什么后做什么,搞不清配置信息中填寫的地址是模塊的地址還是 .podspec 的地址。后來靜下心來整理了下思路,如果是我的話,我會怎么處理。
我的思考
很多文章的標題都是說創(chuàng)建私有庫,我覺得這類標題不夠準確。應該是“創(chuàng)建及管理私有庫”比較準確。從“創(chuàng)建及管理私有庫”這點就可以看出,我們需要分成兩個部分來處理。
第一部分:創(chuàng)建私有庫
需要的內(nèi)容:
1)私有庫的代碼及資源文件等。
2)管理這個私有庫信息的一個配置文件 .podspec。
要記住的是,這個配置文件中的配置信息只針對這個私有庫本身展開,比如私有庫的創(chuàng)建者信息,版本號是多少,倉庫地址在哪,需要導入哪些系統(tǒng)庫和三方庫等等。
可以參考 AFNetworking 的配置文件。
第二部分:管理私有庫
這里說的管理私有庫,其實就是存放所有私有庫的配置文件。目的是為了在項目中需要使用一些私有庫時,你需要知道從哪里找到這些私有庫一樣。類似于,當我們使用一些第三方庫的時候,我們會通過 CocoaPods 找到并導入這些第三方庫一樣。
這兩部分既是相互獨立又是相互關聯(lián)的。你創(chuàng)建私有庫就只管創(chuàng)建,不用管怎么去管理這個私有庫,那不是它本身的職責。創(chuàng)建完成后,管理的職責就交給了第二部分。
步驟
創(chuàng)建私有庫
- 新建工程,編寫實現(xiàn)代碼。(因為是私有的,所以工程應該放在遠程的私有倉庫中。)




-
創(chuàng)建 .podspec 文件。(一般習慣將模塊名作為文件名,這里為 ModuleA.podspec)
通過
pod spec create 文件名創(chuàng)建 .podspec 文件。內(nèi)容如下:
Pod::Spec.new do |s|
# 模塊名
s.name = "ModuleA"
# 版本號。需要注意的是:當倉庫代碼 push 到遠程倉庫的時候,需要打上 tag。tag 和 版本號必須一致?。。?s.version = "0.0.1"
# 簡短描述
s.summary = "A short description of ModuleA."
# 模塊主頁,如 https://gitlab.com/xxx/ModuleA
s.homepage = "http://EXAMPLE/ModuleA"
# license 類型
s.license = { :type => "MIT", :file => "FILE_LICENSE" }
# 創(chuàng)建者信息
s.author = { "姓名" => "郵箱地址" }
# 平臺信息,后面的數(shù)字指的是最低的系統(tǒng)要求。
s.platform = :ios, "9.0"
# When using multiple platforms
# s.ios.deployment_target = "5.0"
# s.osx.deployment_target = "10.7"
# s.watchos.deployment_target = "2.0"
# s.tvos.deployment_target = "9.0"
# 遠程倉庫路徑
s.source = { :git => "http://EXAMPLE/ModuleA.git", :tag => "#{s.version}" }
# 需要暴露給別人的代碼文件
s.source_files = "Classes", "Classes/**/*.{h,m}"
# 需要暴露給別人的資源文件
# s.resources = "Resources/*.png"
# 需要添加的系統(tǒng) framework
# s.frameworks = "SomeFramework", "AnotherFramework"
# 需要添加的系統(tǒng) .tbd 庫
# s.libraries = "iconv", "xml2"
# 是否是 ARC 環(huán)境
s.requires_arc = true
# xcconfig 路徑配置
# s.xcconfig = { "HEADER_SEARCH_PATHS" => "$(SDKROOT)/usr/include/libxml2" }
# 需要依賴的三方庫
# s.dependency "JSONKit", "~> 1.4"
end
- 將工程 push 到遠程,并且打上 tag(必須打上 tag,且和 .podspec 中的版本號一致)。
管理私有庫
在遠程新建一個倉庫 specRepo,這個倉庫專門只用來存放各個模塊的 .podspec 文件。
通過命令
pod repo add privateSpec https://gitlab.com/xxx/specRepo.git在本地~/.cocoapods/repos下目錄名為 privateSpec 的文件夾下克隆遠程 git 倉庫。

- 進入模塊 ModuleA 根目錄下,通過命令
pod repo push privateSpec ModuleA.podspec將 ModuleA.podspec 推送到第 2 步的 privateSpec 倉庫中。這個命令會同時把 ModuleA.podspec 更新到遠程的 git 倉庫中。
結果如下:
privateSpec下的podspec文件.png

-
在模塊 ModuleA 根目錄下,通過命令
pod lib lint --no-clean驗證 .podspec 文件有效性。ps:必須將所有文件同步到遠程之后才能驗證成功。如果還有報錯,請自行排查。
至此,完成了創(chuàng)建及管理私有庫的所有步驟。
測試
- 新建工程,進入根目錄,然后通過命令
pod init將工程通過 pod 進行管理。此時出現(xiàn) Podfile 文件。
pod 管理.png
-
打開 Podfile 文件,進行編輯
在最前面添加先添加管理私有庫的 specRepo 倉庫的 git 地址,再添加 CocoaPods 倉庫的 git 地址。Podfile 文件.png
-
通過命令
pod install安裝私有庫。ps:如果
pod install報錯,將source 'https://gitlab.com/xxx/specRepo.git'換成 git 形式的路徑source 'git@gitlab.com:xxx/specRepo.git'試試。報錯.png




