在平常項目開發過程當中,不論是單一產品線仍是多個產品線的開發團隊項目,都須要統一對通用的工具類、通用的業務模塊進行解耦抽離,這樣才能保證項目結構的健壯性以及可重塑造性。那麼對於這些模塊,如何才能更好的實現管理? 就須要藉助是iOS平臺當前最流行的包管理工具- Cocoapods
。ios
本文主要介紹如何經過cocoapods的方式實現工具類私有庫、公有庫、和Framework的過程。git
本文圖解:github
條件準備:sql
已經安裝好CocoaPods,如無,可前往參考 CocoaPods安裝json
Github帳號瀏覽器
碼雲帳號bash
其餘平臺或者內部私有服務器搭建的代碼託管平臺服務器
想要建立一個開源pod庫, 首先咱們須要註冊CocoaPods,基於Cocoapods已經安裝好的前提下,這裏是使用trunk
方式,只須要在終端執行:app
pod trunk register 郵箱地址 '用戶名' --verbose
如: pod trunk register xxxxxx@qq.com 'allenlas' --verbose
複製代碼
通常會使用GitHub郵箱和用戶名,固然這個能夠自由選擇,註冊以後,在郵箱中會收到確認郵件,在瀏覽器中點擊連接確認即註冊成功, 成功以後能夠終端執行:框架
pod trunk me //檢測是否註冊成功
複製代碼
查看註冊信息,之後可使用該開源Pod庫發佈工具,也能夠經過此方式查看已經發布過的pods:
AllenLASdeMac-Pro:~ allenlas$ pod trunk me
- Name: yourname
- Email: youremail@qq.com
- Since: December 11th, 2017 02:29
- Pods:
- XKCocoapods
- Sessions:
- December 11th, 2017 02:29 - April 24th, 2018 20:34. IP: 113.119.196.232 Description:
macbook mini
AllenLASdeMac-Pro:~ allenlas$
複製代碼
建立公有Pod庫或者私有Pod庫, 實際上原理是同樣的, 都是基於git服務和repo協議。
不同的是, 二者的版本索引查詢方式不同,公有庫的podspec由CocoaPods/Specs管理,而內部私有使用的pod庫須要本身創建一個倉庫來管理podspec.
複製代碼
Cocoapods是託管在Github平臺上的,全部的Pods也都是託管在github上,因此本文也基於Github平臺的方式製做公有庫,目前Github也支持免費建立私有倉庫,其用法和公有庫大致相同
複製代碼
1. Repository name: 開源庫的名字 (必填)
2. Description : 開源庫的功能做用描述
3. Public: 開源倉庫
4. Private: 私有倉庫,收費(若是是公司內部使用的話這裏推薦你們使用私有的倉庫)
5. Initialize this repository with a README: readme文件,建議勾選進行建立,這是對該庫完整的一個說明文檔
6. gitgnore: 看狀況自行選擇類型
7. License類型: MIT License (建議使用)
複製代碼
建立倉庫成功後,能夠在其主頁,選擇release,添加tag
Repository主頁 -> release -> create tag
複製代碼
以下:
全部信息準備徹底以後,能夠經過客戶端GitHub Desktop
,將項目clone到本地。
pod lib create 項目名稱
複製代碼
在clone下來的項目目錄路徑下,打開終端,執行:
AllenLASdeMac-Pro:~ allenlas$ cd /Users/allenlas/Documents/GitHub/XKCocoapods
AllenLASdeMac-Pro:~ allenlas$ pod lib create XKCocoapods
複製代碼
執行結果以下:
# 你想使用哪一個平臺?
一、What platform do you want to use?? [ iOS / macOS ]
iOS
# 庫語言選擇?
二、What language do you want to use?? [ Swift / ObjC ]
ObjC
# 是否須要一個demo工程,用於調試Pod?
三、Would you like include a demo application with your library? [ Yes / No ]
Yes
# 你要使用哪一個測試框架?
四、Which testing frameworks will you use? [ Specta / Kiwi / None ]
None
# 是否要UI測試?
五、Would you like to do view based testing? [ Yes / No ]
NO
# 類名前綴?
六、What is your class prefix?
XK
複製代碼
固然對於項目結構包含多一層模版文件,基於結構簡潔,能夠將項目的全部文件上升一個級別,直接在本地倉庫的根路徑下:
信息詳解:
Pod::Spec.new do |s|
#庫名稱
s.name = 'XKCocoapods'
#指定支持的平臺和版本,不寫則默認支持全部的平臺,若是支持多個平臺,則使用下面的deployment_target定義
spec.platform = :ios
#版本號
s.version = '1.0.0'
#庫簡短介紹
s.summary = 'iOS 公有庫'
#開源庫描述
s.description = <<-DESC
TODO: iOS 公有庫製做
DESC
#開源庫地址,或者是博客、社交地址等
s.homepage = 'https://github.com/ryanmans/XKCocoapods'
#開源協議
s.license = { :type => 'MIT', :file => 'LICENSE' }
#開源庫做者
s.author = { 'ALLen、LAS' => 'xxxxxx@gmail.com' }
#開源庫GitHub的路徑與tag值,GitHub路徑後必須有.git,tag實際就是上面的版本
s.source = { :git => 'https://github.com/ryanmans/XKCocoapods.git', :tag => s.version }
#社交網址
s.social_media_url = 'https://juejin.im/'
#開源庫最低支持
s.ios.deployment_target = '8.0'
#源庫資源文件
s.source_files = 'XKCocoapods/Classes/**/*'
#是否支持arc
s.requires_arc = true
#依賴系統庫
s.frameworks = 'Foundation'
#開源庫依賴庫
# s.dependency "Masonry", "~> 1.0"
#添加系統依賴靜態庫
#s.library = 'sqlite3', 'xml2'
#添加依賴第三方的framework
#s.vendored_frameworks = 'XXXX/XXXX/**/*.framework'
#靜態庫.a
s.vendored_library = 'XXXX/XXX/XXX.a', 'YYY/YYY/Y.a'
#添加資源文件
#s.resource = 'XXX/XXXX/**/*.bundle'
#在 podspec 文件中添加 s.static_framework = true,CocoaPods 就會把這個庫配置成static framework。同時支持 Swift 和 Objective-C
#s.static_framework = true
end
複製代碼
正式信息如圖示:
進入根路徑下的`XKCocoapods`下的Classes文件,將須要使用的XKCocoapods.h/m文件放入其中
複製代碼
並在Example目錄路徑下,打開終端:
從上述信息中,能夠看到工具類以及其所依賴的類庫,已成功的添加到 演示的demo 項目中使用。
配置完 podspec的信息 且引入類庫以後,須要更新提交到Github上,否則會驗證上一次提交的信息
複製代碼
1. pod lib lint --allow-warnings
2. pod spec lint --allow-warnings
複製代碼
驗證結果如圖示:
驗證過程當中,可能會遇到常見錯誤:
- ERROR | [iOS] file patterns: The `source_files` pattern did not match any file
複製代碼
此錯誤的緣由是沒有找到匹配的文件
解決辦法:
1. 終端執行命令:
open /Users/allenlas/Library/Caches/CocoaPods/Pods/External/XKCocoaPods
2. 進入最近一個日誌文件,將工具類放置和source_files文件路徑對應的Classes目錄中
XKCocoapods文件-> classes目錄 -> 添加XKCocoapods類
複製代碼
如圖示:
更新提交代碼,從新驗證 podspec
文件的可行性。
pod trunk push xxxxx.podspec
複製代碼
若是還沒有註冊過Cocoapods帳戶,則須要參考上述方式,進行註冊:
pod trunk register 郵箱地址 '用戶名' --verbose
pod trunk me
複製代碼
而後再將podspec
推送至遠程倉庫
如圖示:
pod search xxxx(上傳的項目名稱)
如: pod search XKCocoapods
複製代碼
[!] Unable to find a pod with name, author, summary, or description matching `XKCocoapods`
複製代碼
解決方式:
須要更新本地的repo
執行命令 pod setup 或者 刪除本地的搜索索引 rm ~/Library/Caches/CocoaPods/search_index.json
,再次執行 pod search XKCocoapods
複製代碼
搜索成功後如圖示:
在製做公有庫的過程,若是須要將添加進去的工具類打包成可運行的framework,則須要藉助插件cocoapods-packager
sudo gem install cocoapods-packager
複製代碼
# pod package 項目名.podspec --library --force 打包成.a文件。--force是指強制覆蓋
# pod package 項目名.podspec --force 打包成.framework文件
複製代碼
//添加須要集成的framework
s.ios.vendored_frameworks = 'XKCocoapods/Classes/XKCocoapods.framework'
複製代碼
如圖示:
進入項目的根路徑下,打開終端執行命令:
AllenLASdeMac-Pro:~ allenlas$ cd /Users/allenlas/Desktop/XKCocoapods
AllenLASdeMac-Pro:~ allenlas$ pod package XKCocoapods.podspec
複製代碼
執行結果如圖示:
打包以後,本地會多出一個XKCocoapods-1.0.0
文件
在其目錄下ios
文件中,拷貝XKCocoapods.framework
, 將其放置 Classes
下,提交更新代碼
注意: 每次有新的內容修改,記得在github新增tag,並修改podspec中的版本號,才驗證podspec
複製代碼
從新驗證podspec