前言
官網關于這個知識點已有詳細的介紹,但是對我來說:1.知識點比較凌亂 2.英文描述,很多時候不能很好理解其含義。故,參照官網及其他 blog 親自實踐,做個總結。
幾個概念
我這里用的版本控制是 GitLab 和 GitHub 類似。
- Podfile:描述了工程中 Taget 的依賴。客戶端使用這個文件使用 Pod 庫。
- Pod library:具體的庫,即通常所說的第三方庫。
- Podspec:一個描述文件,描述 Pod library。
- Spec Repo:存放 Podspec 的倉庫。 Repository 注意和 library 區別,剛始看官方英語文檔時,沒能很好區分這兩個詞,給后面的理解造成了不是困難。
需要的組件
- Podfile(必須)
- Pod library(必須),一堆文件的集合,不一定是 xcode 工程,可以是一個文件,或者文件夾等。一般以 project(github 叫 Repository) 形式放到 GitLab 上,是一個 repo。
- Podspec(必須)
- 這三個文件是必須的 調用關系:Podfile 引用 Podspec, Podspec 引用 Pod library。
- Spec Repo 一般是一個 git 庫 只存放 Podspec
現在來實現這些組件。
制作 Pod library 兩種方法
- 直接在 GitLab 新建一個 project,添加相關文件即可。
- 用 CocoaPod 提供的命令
pod lib create MyLib1
一般情況下,第三庫都需要demo和測試來驗證。cocopods 的這條命令幫我們完成了這些繁瑣的工作。 并且幫我們制作了對應的 podspec 參考官網
- 測試時,如果是 swift 的庫 注意給類和方法根據需要添加 publice 關鍵字
- 這個命令會 git pod-template 到本地,根據需要刪除 git 相關的目錄和文件。
- 一般情況要將 Pod library 上傳到 自己的 GitLab。
制作 Podspec 三種方法
- 上面的方法2已經產生了podspec
- 用 CocoaPod 提供的命令
pod spec create Mylib1.podspec
參考官網 - 手動創建一個這樣的文件
注意:
- soure URL 對應的地址是 pod library的地址。 不是 Spec Repo 的地址
- tag 的版本號要對應。當然也可以不使用 tag
官方推薦的制作方法
官方推薦的方法步驟最多,但標準規范。
- 創建 Spec Repo,一般就是在 GitLab 上新建一個 project,github 叫 Repository。并添加
Mylib1.podspec
等spec文件 - Add your Private Repo to your CocoaPods installation
pod repo add REPO_NAME SOURCE_URL
- Add your Podspec to your repo
pod repo push REPO_NAME SPEC_NAME.podspec
注意:
- SOURCE_URL 是 Spec Repo 的地址
- 如果 spec 文件中使用了tag 確保對應的 Pod library 打了對應的 tag。
- Spec Repo 的目錄結構 一定注意是這樣的
.
├── Specs
└── [SPEC_NAME]
└── [VERSION]
└── [SPEC_NAME].podspec
這樣 私有庫就做好了,但是在使用時,請注意添加
source 'URL_TO_REPOSITORY'
- URL_TO_REPOSITORY 是 Spec Repo 的地址
根據文檔總結的其他方法
- 官方推薦的制作方法中的步驟2和步驟3可以不實現。只要在Podfile中加入
source 'URL_TO_REPOSITORY'
pod install
后會自動實現。可以使用Pod repo list
查看前后變化 - 直接在 Podfile 中使用 參考
pod 'Alamofire', :git => 'https://github.com/Alamofire/Alamofire.git'
這種格式
注意:
- podspec 文件必須在 Pod library 的根目錄。
- 也可以這樣參考官網
pod 'JSONKit', :podspec => 'https://example.com/JSONKit.podspec'
- 地址可以是任何可以訪問得到的地址也可以是本地地址
- JSONKit.podspec 也可以 使用 JSONKit.podspec.json 的json格式
pod ipc spec JSONKit.podspec > JSONKit.podspec.json
看 Cocoapod 官網的方法
網站右上角分了4部分,guids 是關注的重點,guids 頁面分了四部分,根據需要查找對應部分,然后細讀。
總結
細讀文檔,動手實踐發現有很多實現方法
方法 | 優點 |
---|---|
pod 'XXX', :git=>'' | 便于直接使用 |
pod 'XXX',:podspec=>'.podspec' | 原生 |
pod 'XXX',:podspec=>'.json' | 便于理解 |
specs 文件 | 便于詳細配置工程 |
specs放在本地 | 便于調試 |
創建 Specs Reopsitroy | 便于集中管理 |
命令總結
pod lib create MyLib1
pod spec create Mylib1.podspec
Pod repo list
pod repo add REPO_NAME SOURCE_URL
pod repo push REPO_NAME SPEC_NAME.podspec
pod ipc spec JSONKit.podspec > JSONKit.podspec.json
pod 'XXX',:podspec=>''
pod 'XXX',git=>''
pod lib lint
實踐過程
也許會遇到的問題
- dyld: lazy symbol binding failed: Symbol not found:解決方法
實踐環境
- xcode Version 10.0 (10A255)
- pod --version 1.5.3
- MacOS High Sierra 10.13.6(17G65)