前言:最近本身寫了一個圖片選擇器的庫,想借着這個機會學習一下怎麼讓本身的庫支持cocoapod和carthage,因爲我封裝的這個庫內容很是多,因此在開發過程當中遇到了不少的小問題都比較特殊,google半天有時也解決不了,經過慢慢摸索仍是成功了,在這裏記錄一下我在開發中遇到的各類問題點。ios
假如咱們已經建立了一個庫,庫的名稱是CLImagePickerTool,而且已經上傳到github,下面咱們就來一步一步讓它支持cocoapod.git
(對於須要暴露出來的類和方法,必定要用public修飾,由於我第一次搞得時候就沒有注意到這一點,還有一點!!個人工程名稱叫CLImagePickerTool,個人庫的名稱也叫CLImagePickerTool,這樣很差!在下面我集成carthage的時候就遇到了問題,建議項目名稱和庫的名稱不要一致,由於人家引用的是你的庫而不是整個項目,只要保證庫名稱是你想要的就行了。下面先貼出來個人項目目錄,後面也能夠參考)github
1.cd到當前目錄swift
cd CLImagePickerTool
2.在當前文件夾下建立一個podspec文件vim
pod spec create CLImagePickerTool
3.編輯 podspec文件,這裏是用vim打開的服務器
vim CLImagePickerTool.podspec
4.因爲podspec文件自動生成了不少內容,咱們能夠不用管他,全選刪除,將下面的代碼複製到該文件中,下面對這塊代碼進行講解,根據你本身的庫名稱和目錄對照着改一下就行了。學習
Pod::Spec.new do |s| s.name = 'CLImagePickerTool' s.version = '2.0.5' s.license = 'MIT' s.summary = 'This is a picture selector' s.homepage = 'https://github.com/Darren-chenchen/CLImagePickerTool' s.authors = { 'Darren-chenchen' => '1597887620@qq.com' } s.source = { :git => 'https://github.com/Darren-chenchen/CLImagePickerTool.git', :tag => s.version.to_s } s.ios.deployment_target = '8.0' s.source_files = 'CLImagePickerTool/CLImagePickerTool/**/*.swift' s.resource_bundles = { 'CLImagePickerTool' => ['CLImagePickerTool/CLImagePickerTool/images/**/*.png','CLImagePickerTool/CLImagePickerTool/**/*.{xib,storyboard}','CLImagePickerTool/CLImagePickerTool/**/*.{lproj,strings}'] } end
下面咱們來解釋一下各個選項的意義。
s.name = 'CLImagePickerTool' 你的庫的名稱
s.version = '2.0.5' 版本號
s.license = 'MIT' listen文件的類型
s.summary 簡單的描述
s.homepage = 'https://github.com/Darren-che...' 庫的github地址測試
詳細說下下面的含義吧,好比個人庫的所有demo都在CLImagePickerTool項目下的CLImagePickerTool文件夾下,而且都是swift寫的就能夠表示成以下的形式
s.source_files = 'CLImagePickerTool/CLImagePickerTool/*/.swift'ui
對於項目中用到的資源文件,好比個人圖片路徑就是CLImagePickerTool/CLImagePickerTool/images,若是用到了xib或者storyboard,或者用到了本地化相關的文件,總之只要是相關的資源文件都要表現出來
s.resource_bundles = {
'CLImagePickerTool' => ['CLImagePickerTool/CLImagePickerTool/images//.png','CLImagePickerTool/CLImagePickerTool//.{xib,storyboard}','CLImagePickerTool/CLImagePickerTool/*/.{lproj,strings}']google
}
5.提交代碼到github,並打標籤
git commit -a -m 「......」 git push git tag 1.0.0 // 這個版本要和podspec中的version一致 git push origin --tags // 提交到遠端
6.檢查podspec 文件是否有錯誤
pod spec lint CLImagePickerTool.podspec
若是出現CLImagePickerTool.podspec passed validation. 就表示沒有錯誤。
7.若是以前沒有註冊過CocoaPods帳號。
打開終端,在終端中輸入以下命令:
pod trunk register 郵箱地址 '用戶名' --description='描述信息'
而後根據終端顯示信息,若是成功的話會提示讓你去郵箱裏確認進行激活。
輸入以下命令可查看我的CocoaPods帳號信息
pod trunk me
8.若是註冊過,就你直接執行下面的代碼,直接推到cocoapods服務器
pod trunk push CLImagePickerTool.podspec
(若是你完成了第6部,下面的操做跟着終端的提示一步一步也能完成後續操做,主要是遇到問題不要太着急,細心看!)
9.若是你能完成上面操做,在執行完 pod trunk push CLImagePickerTool.podspec後若是出現下面的狀況就說明你的庫已經支持cocoapod了。
10.成功上傳後要先執行 pod setup更新下pod才能搜索到本身的庫。
新建targets
2.添加須要編譯的文件和資源,這個地方要特別注意,Compile Sources 文件中不能添加xib文件和圖片資源,只能添加後綴名爲swift的文件
![
![Uploading 屏幕快照 2017-08-31 下午9.08.55_981672.png . . .]
](http://upload-images.jianshu....
這裏也有一個注意點,你們能夠從圖片中看到,我新建的target名稱是CLImagePickerTool-framework,若是我想打包出來的文件名不要這個名稱,我想要換個名稱,我原本是想用CLImagePickerTool這個名稱,那麼打包出來的framework就是CLImagePickerTool.framework,可是這個名稱和項目名稱重複了,這樣確定不行,可是我如今又不能去改項目名稱,你們都知道改項目名稱又會遇到不少問題,因此我這裏就很無奈的給framework起了另一個名字--ImagePickerTool.framework。說了這麼多,在哪設置名稱呢,看圖片吧!
4.再補充一個注意點!個人庫最低支持ios8,當你新建target後要檢查是否是也是最低支持ios8
5.分享target,勾選咱們的framework ,點擊close
6.下面開始測試咱們的framework庫是否是能夠用,先生成一個framework
進入咱們當前文件夾CLImagePickerTool,執行下面代碼,會生成一個carthage文件夾
carthage build --no-skip-current
7.新建一個項目,測試framework是否可使用,將上面生成的ImagePickerTool.framework,拖到項目中,
運行項目,若是沒有報錯就開始測試是否是已經引入了framework庫,
8.若是能夠用也沒有報錯,就說明這個framework就可使用的,下面就能夠經過Carghage來導入framework了。在這以前先把咱們的demo上傳到github,而且打一個新標籤
git commit -a -m 「......」 git push git tag 1.0.1 // 這個版本要和podspec中的version一致 git push origin --tags // 提交到遠端
9.測試carthage 。建議再建一個項目,在項目根目錄新建一個Cartfile文件,在裏面寫入
github "Darren-chenchen/CLImagePickerTool"
執行
carthage update
執行完成應該是下面的狀態
10.還須要手動添加一下framework庫。
再來講下我在這一步遇到的問題吧!由於個人庫也支持cocoapod,在cocoapod中若是要加載xib或者圖片,確定是要先找到後綴名爲.bundle的文件,然而carthage倒是要找後綴名爲.framework的文件,由於以前一直沒有處理這個問題,致使項目老是在xib的位置奔潰,下面就貼出來我針對carthage的處理