基於Cocoapods實現組件化

1、前言

在平常項目開發過程當中,不論是單一產品線仍是多個產品線的開發團隊項目,都須要統一對通用的工具類、通用的業務模塊進行解耦抽離,這樣才能保證項目結構的健壯性以及可重塑造性。那麼對於這些模塊,如何才能更好的實現管理? 就須要藉助是iOS平臺當前最流行的包管理工具- Cocoapodsios

本文主要介紹如何經過cocoapods的方式實現工具類私有庫、公有庫、和Framework的過程。git

本文圖解:github

條件準備:sql

2、註冊Cocoapods帳戶

想要建立一個開源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$ 
複製代碼

2、公有庫和私有庫

公有庫和私有庫差別化:
建立公有Pod庫或者私有Pod庫, 實際上原理是同樣的, 都是基於git服務和repo協議。
不同的是, 二者的版本索引查詢方式不同,公有庫的podspec由CocoaPods/Specs管理,而內部私有使用的pod庫須要本身創建一個倉庫來管理podspec.
複製代碼
2.1 搭建公有倉庫
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 (建議使用)
複製代碼
添加tag:
建立倉庫成功後,能夠在其主頁,選擇release,添加tag

Repository主頁 -> release -> create tag
複製代碼

以下:

image

全部信息準備徹底以後,能夠經過客戶端GitHub Desktop,將項目clone到本地。

2.2 基於cocoapods 自動建立工程
命令:
pod lib create 項目名稱
複製代碼

在clone下來的項目目錄路徑下,打開終端,執行:

AllenLASdeMac-Pro:~ allenlas$ cd /Users/allenlas/Documents/GitHub/XKCocoapods
AllenLASdeMac-Pro:~ allenlas$ pod lib create XKCocoapods
複製代碼

執行結果以下:

image

問題模版詳解:
# 你想使用哪一個平臺?
一、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
複製代碼
項目結構以下:

固然對於項目結構包含多一層模版文件,基於結構簡潔,能夠將項目的全部文件上升一個級別,直接在本地倉庫的根路徑下:

2.3 配置podspec

信息詳解:

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
複製代碼

正式信息如圖示:

image

引入工具類
進入根路徑下的`XKCocoapods`下的Classes文件,將須要使用的XKCocoapods.h/m文件放入其中
複製代碼

並在Example目錄路徑下,打開終端:

image

從上述信息中,能夠看到工具類以及其所依賴的類庫,已成功的添加到 演示的demo 項目中使用。

配置完 podspec的信息 且引入類庫以後,須要更新提交到Github上,否則會驗證上一次提交的信息
複製代碼
2.4 驗證podspec
命令:
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類
複製代碼

如圖示:

image

更新提交代碼,從新驗證 podspec 文件的可行性。

2.5 推送podspec到遠程倉庫
命令:
pod trunk push xxxxx.podspec 
複製代碼

若是還沒有註冊過Cocoapods帳戶,則須要參考上述方式,進行註冊:

pod trunk register 郵箱地址 '用戶名' --verbose

pod trunk me
複製代碼

而後再將podspec 推送至遠程倉庫

如圖示:

image

2.6 檢查項目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
複製代碼

搜索成功後如圖示:

3、製做framework

在製做公有庫的過程,若是須要將添加進去的工具類打包成可運行的framework,則須要藉助插件cocoapods-packager

安裝命令:
sudo gem install cocoapods-packager
複製代碼
3.1 打包podspec文件
命令:
# pod package 項目名.podspec --library --force 打包成.a文件。--force是指強制覆蓋

# pod package 項目名.podspec --force 打包成.framework文件
複製代碼
配置podspec文件:
//添加須要集成的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

相關文章
相關標籤/搜索