在WWDC 2014全球開發者大會上,蘋果開放了動態庫、App Extension等全新的功能,這爲iOS插件化開發帶來了可能。在iOS開發中,動態庫是iOS提供的一種資源打包方式,能夠將代碼文件、頭文件、資源文件和說明文檔等集中在一塊兒,而且能夠在運行時進行動態加載。ios
目前,不少應用越作越複雜,應用程序也顯得愈來愈臃腫。試想一下,若是將一些不經常使用的功能作成一個插件,而後根據用戶的需求從網絡中下載,這樣最大限度的利用了系統資源,這也是插件化開發的初衷。git
傳統使用第三方庫的劣勢
一、使用一個第三方SDK,須要在工程裏面添加一堆配置,少添加一步配置就會報一大堆錯誤。這個時候爲了排查少了哪個步驟,只能從頭開始重作一遍,太浪費時間和精力。有些配置還很差配置,就更令人煩躁鬱悶了。
二、若是使用的第三方SDK有比較重要的更新,想使用最新的SDK只能到官方下載最新的SDK,從新導入到本身的項目工程中。
三、若是公司有多個項目,每個工程都這樣配置一遍,這是多麼痛苦的領悟呀。github
使用Cocoapods管理第三方庫的優點
一、咱們能夠避免上訴的問題,使用方便。
二、方便咱們本身管理,只須要更新版本就好了,之前的庫還能夠保留讓他人使用。json
trunk須要CocoaPods 0.33以上版本,可使用pod --version命令來查看本地的版本。
若是版本過低,可使用下面的指令升級:網絡
sudo gen install cocoapods pod setup
接下來,須要查看本身是否註冊過Trunk。工具
pod trunk me
若是沒有註冊,可使用下面的命令進行註冊:ui
pod trunk register zhangyqyx@163.com "zhangyqyx" --verbose
其中,zhangyqyx表示名字,zhangyqyx@163.com表示註冊的郵箱。註冊時,系統會發送一個驗證連接到你的郵箱,驗證經過後即註冊成功。註冊成功後再次使用命令pod trunk me查看。
url
要完成插件化開發的需求,首先須要在GitHub中建立一個遠端的託管倉庫。以下圖:
spa
將項目克隆下來到本地,並添加公開庫文件相關的信息,代碼上傳和下載建議使用SourceTree等圖形化工具進行操做。
插件
使用以下命令建立.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
其中,上面配置的具體的含義爲:
dependency寫法:
s.dependency = 'AFNetworking' , 'SDWebImage'
source_files寫法:
'runtime/*' 'runtime/runtime/*.{h,m}' 'runtime/**/*.h'
其中,
接下來,將你的源碼添加到剛纔s.source_files配置的目錄。若是是OC編寫的還須要配置公開的頭文件。此處,我使用的是Swift編寫的,就無論那麼多了,若是有任何語法上的警告請忽略相關的警告。
將包含配置好的 .podspec, LICENSE 的項目提交 Git。命令以下:
git tag "v0.0.1" // 若是出現錯誤,試一下不加v的狀況 git push --tags
或者,直接使用sourcetree等圖形化工具進行操做。例如:
若是咱們的tag打錯了,沒有用的話,咱們應該怎麼刪除呢?能夠參考下面的方法:
一、查看tags
git tag 就會羅列出咱們全部的tags
二、刪除本地tags
git tag -d + 分支名稱就會刪除本地的分支
三、刪除遠程分支
git push origin :refs/tags/分支名稱 就刪除了遠程分支
爲了驗證是否上傳成功,能夠驗證.podspec文件,命令以下:
pod spec lint WeexHMGesUnlock.podspec --verbose
若是出現這種警告性的問題,咱們能夠直接忽略。
pod lib lint --allow-warnings
若是出現這種狀況,多是你的那個版本找不到這個文件。
發佈時會驗證 Pod 的有效性,若是你在手動驗證 Pod 時使用了 --use-libraries 或 --allow-warnings 等修飾符,那麼發佈的時候也應該使用相同的字段修飾,不然出現相同的報錯。
pod trunk push pluginPods.podspec
若是出現 --use-libraries 或 --allow-warnings 等修飾符警告,可使用以下的命令:
pod trunk push pluginPods.podspec --allow-warnings
使用下面的命令來驗證,是否上傳成功。
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庫的流程大致類似:
一、建立一個私有的項目
能夠是公司本身的git管理工具、也能夠是碼雲上的,建立方法能夠參考Git倉庫的建立過程。
二、建立.podspec
使用pod spec create命令建立xxx.podspec文件。
三、編輯.podspec文件
編輯podspec文件,主要是添加項目庫、託管地址、版本號、暴露的文件等。
四、上傳到Git
將包含配置好的 .podspec, LICENSE 的項目提交 Git或私有云。
五、打tag
六、驗證.podspec文件
使用pod spec lint來驗證podspec文件是否配置正確,若是有任何的錯誤,請根據錯誤提示進行修改。若是是warning能夠忽略,在指令後面添加--allow-warnings便可。例如:
pod lib lint --allow-warnings
七、添加一個私有庫並和項目地址作綁定
pod repo add xxx https://github.com/xiangzhiho...
八、向私有的庫裏添加podspec文件
九、新建一個項目進行驗證
新建一個Xcode項目,在podfile中添加引用腳本,看是否可以成功的依賴,添加時注意版本號。
pod 'pluginPods', '~> 0.0.3'
若是,沒有任何提示錯誤,則說明自定義插件建立成功。