概述
在WWDC 2014全球開發者大會上,蘋果開放了動態庫、App Extension等全新的功能,這為iOS外掛化開發帶來了可能。在iOS開發中,動態庫是iOS提供的一種資源打包方式,可以將程式碼檔案、標頭檔案、資原始檔和說明文件等集中在一起,並且可以在執行時進行動態載入。
目前,很多應用越做越複雜,應用程式也顯得越來越臃腫。試想一下,如果將一些不常用的功能做成一個外掛,然後根據使用者的需求從網路中下載,這樣最大限度的利用了系統資源,這也是外掛化開發的初衷。
使用Cocoapods的優勢
傳統使用第三方庫的劣勢
- 使用一個第三方SDK,需要在工程裡面新增一堆配置,少新增一步配置就會報一大堆錯誤。這個時候為了排查少了哪一個步驟,只能從頭開始重做一遍,太浪費時間和精力。有些配置還不好配置,就更使人煩躁鬱悶了。
- 如果使用的第三方SDK有比較重要的更新,想使用最新的SDK只能到官方下載最新的SDK,重新匯入到自己的專案工程中。
- 如果公司有多個專案,每一個工程都這樣配置一遍,這是多麼痛苦的領悟呀。
使用Cocoapods管理第三方庫的優勢
- 我們可以避免上訴的問題,使用方便。
- 方便我們自己管理,只需要更新版本就行了,以前的庫還可以保留讓他人使用。
建立外掛庫
1,註冊Trunk
trunk需要CocoaPods 0.33以上版本,可以使用pod --version命令來檢視本地的版本。
如果版本太低,可以使用下面的指令升級:sudo gen install cocoapods
pod setup
複製程式碼
接下來,需要檢視自己是否註冊過Trunk。
pod trunk me
複製程式碼
如果沒有註冊,可以使用下面的命令進行註冊:
pod trunk register zhangyqyx@163.com "zhangyqyx" --verbose
複製程式碼
其中,zhangyqyx表示名字,zhangyqyx@163.com表示註冊的郵箱。註冊時,系統會傳送一個驗證連結到你的郵箱,驗證通過後即註冊成功。註冊成功後再次使用命令pod trunk me檢視。
##2, 建立GitHub倉庫 要完成外掛化開發的需求,首先需要在GitHub中建立一個遠端的託管倉庫。如下圖:
將專案克隆下來到本地,並新增公開庫檔案相關的資訊,程式碼上傳和下載建議使用SourceTree等圖形化工具進行操作。
##3, podspec 使用如下命令建立.podspec檔案,建立的命令如下:
pod spec create pluginPods
複製程式碼
其中,CardBannerView為庫的名稱。然後,開啟並編輯.podspec檔案。
Pod::Spec.new do |s|
s.name = 'pluginPods'
s.version = '0.0.3'
s.summary = '自定義輪播外掛'
s.homepage = 'https://github.com/xiangzhihong/pluginPods'
s.license = 'MIT'
s.authors = {'xiangzhihong' => '1044817967@qq.com'}
s.platform = :ios, '8.0'
s.source = {:git => 'https://github.com/xiangzhihong/pluginPods.git', :tag => s.version}
s.source_files = 'pluginPods/*'
end
複製程式碼
其中,上面配置的具體的含義為:
- s.name:名稱,pod search 搜尋的關鍵詞,注意這裡一定要和.podspec的名稱一樣,否則報錯。
- s.version:版本號。
- s.ios.deployment_target:支援的pod最低版本
- s.summary: 專案簡介
- s.homepage:專案主頁地址
- s.social_media_url:社交網址
- s.license:許可證
- s.author:作者
- s.source:專案的地址
- s.requires_arc: 是否支援ARC
- s.source_files:需要包含的原始檔
- s.public_header_files:公開的標頭檔案
- s.resources: 資原始檔
- s.dependency:依賴庫,不能依賴未釋出的庫,可以寫多個依賴庫
常見的寫法
dependency寫法:
s.dependency = 'AFNetworking' , 'SDWebImage'
複製程式碼
source_files寫法:
'runtime/*'
'runtime/runtime/*.{h,m}'
'runtime/**/*.h'
複製程式碼
其中,
- '*'表示匹配所有檔案;
- '*.{h,m}' 表示匹配所有以.h和.m結尾的檔案;
- '**' 表示匹配所有子目錄
4,新增原始碼
接下來,將你的原始碼新增到剛才s.source_files配置的目錄。如果是OC編寫的還需要配置公開的標頭檔案。此處,我使用的是Swift編寫的,就不管那麼多了,如果有任何語法上的警告請忽略相關的警告。
5,上傳Git
將包含配置好的 .podspec, LICENSE 的專案提交 Git。命令如下:
git tag "v0.0.1" // 如果出現錯誤,試一下不加v的情況
git push --tags
複製程式碼
或者,直接使用sourcetree等圖形化工具進行操作。例如:
如果我們的tag打錯了,沒有用的話,我們應該怎麼刪除呢?可以參考下面的方法: 1、檢視tags git tag 就會羅列出我們所有的tags
2、刪除本地tags git tag -d + 分支名稱就會刪除本地的分支
3、刪除遠端分支 git push origin :refs/tags/分支名稱 就刪除了遠端分支
為了驗證是否上傳成功,可以驗證.podspec檔案,命令如下:
pod spec lint WeexHMGesUnlock.podspec --verbose
複製程式碼
如果出現這種警告性的問題,我們可以直接忽略。
pod lib lint --allow-warnings
複製程式碼
如果出現這種情況,可能是你的那個版本找不到這個檔案。
5,釋出
釋出時會驗證 Pod 的有效性,如果你在手動驗證 Pod 時使用了 --use-libraries 或 --allow-warnings 等修飾符,那麼釋出的時候也應該使用相同的欄位修飾,否則出現相同的報錯。
pod trunk push pluginPods.podspec
複製程式碼
如果出現 --use-libraries 或 --allow-warnings 等修飾符警告,可以使用如下的命令:
pod trunk push pluginPods.podspec --allow-warnings
複製程式碼
6, 驗證倉庫
使用下面的命令來驗證,是否上傳成功。
pod search pluginPods
複製程式碼
如果碰到上面的情況,你可以刪除搜尋的檔案路徑,然後重新生成。命令如下:
rm ~/Library/Caches/CocoaPods/search_index.json
pod setup
複製程式碼
如果還是不行,估計是在你的專案還在稽核中,你可以通過其他輔助手段去驗證。例如,使用pod trunk me命令:
當然,你也可以在CocoaPod官網中進行搜尋。 如果沒有任何的錯誤,你將看到如下的搜尋結果: 如果剛才是用 pod lib lint 驗證成功的,就執行以下命令釋出。pod trunk push pluginPods.podspec
複製程式碼
如果剛才是用 pod lib lint --allow-warnings 驗證成功的,就執行以下命令釋出。
pod trunk push pluginPods.podspec --allow-warnings
複製程式碼
TIP:整合時如搜尋不到,可以試著執行pod setup或pod repo update指令來更新pod,pod search搜尋不到時,可以刪除~/Library/Caches/CocoaPods下的search_index.json檔案以更新索引(pod search搜尋不到並不影響整合),因為國內使用的時映象,也可以稍等一段時間後再更新。
建立私有庫
建立私有庫和建立Git庫的流程大體相似:
1、建立一個私有的專案 可以是公司自己的git管理工具、也可以是碼雲上的,建立方法可以參考Git倉庫的建立過程。
2、建立.podspec 使用pod spec create命令建立xxx.podspec檔案。
3、編輯.podspec檔案 編輯podspec檔案,主要是新增專案庫、託管地址、版本號、暴露的檔案等。
4、上傳到Git 將包含配置好的 .podspec, LICENSE 的專案提交 Git或私有云。
5、打tag
6、驗證.podspec檔案 使用pod spec lint來驗證podspec檔案是否配置正確,如果有任何的錯誤,請根據錯誤提示進行修改。如果是warning可以忽略,在指令後面新增--allow-warnings即可。例如:
pod lib lint --allow-warnings
複製程式碼
7、新增一個私有庫並和專案地址做繫結
pod repo add xxx github.com/xiangzhihon…
8、向私有的庫裡新增podspec檔案
9、新建一個專案進行驗證
新建一個Xcode專案,在podfile中新增引用指令碼,看是否能夠成功的依賴,新增時注意版本號。
pod 'pluginPods', '~> 0.0.3'
如果,沒有任何提示錯誤,則說明自定義外掛建立成功。