前言:最近自己寫了一個(gè)圖片選擇器的庫(kù),想借著這個(gè)機(jī)會(huì)學(xué)習(xí)一下怎么讓自己的庫(kù)支持cocoapod和carthage酣难,由于我封裝的這個(gè)庫(kù)內(nèi)容非常多谍夭,所以在開發(fā)過程中遇到了很多的小問題都比較特殊黑滴,google半天有時(shí)也解決不了,通過慢慢摸索還是成功了紧索,在這里記錄一下我在開發(fā)中遇到的各種問題點(diǎn)袁辈。
假如我們已經(jīng)創(chuàng)建了一個(gè)庫(kù),庫(kù)的名稱是CLImagePickerTool齐板,并且已經(jīng)上傳到github吵瞻,下面我們就來一步一步讓它支持cocoapod.
(對(duì)于需要暴露出來的類和方法,一定要用public修飾甘磨,因?yàn)槲业谝淮胃愕脮r(shí)候就沒有注意到這一點(diǎn),還有一點(diǎn)C型!济舆!我的工程名稱叫CLImagePickerTool,我的庫(kù)的名稱也叫CLImagePickerTool莺债,這樣不好滋觉!在下面我集成carthage的時(shí)候就遇到了問題,建議項(xiàng)目名稱和庫(kù)的名稱不要一致齐邦,因?yàn)閯e人引用的是你的庫(kù)而不是整個(gè)項(xiàng)目椎侠,只要保證庫(kù)名稱是你想要的就好了。下面先貼出來我的項(xiàng)目目錄措拇,后面也可以參考)
一我纪、支持cocoapod
1.cd到當(dāng)前目錄
cd CLImagePickerTool
2.在當(dāng)前文件夾下創(chuàng)建一個(gè)podspec文件
pod spec create CLImagePickerTool
3.編輯 podspec文件,這里是用vim打開的
vim CLImagePickerTool.podspec
4.由于podspec文件自動(dòng)生成了很多內(nèi)容丐吓,我們可以不用管他浅悉,全選刪除,將下面的代碼復(fù)制到該文件中券犁,下面對(duì)這塊代碼進(jìn)行講解术健,根據(jù)你自己的庫(kù)名稱和目錄對(duì)照著改一下就好了。
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
下面我們來解釋一下各個(gè)選項(xiàng)的意義粘衬。
s.name = 'CLImagePickerTool' 你的庫(kù)的名稱
s.version = '2.0.5' 版本號(hào)
s.license = 'MIT' listen文件的類型
s.summary 簡(jiǎn)單的描述
s.homepage = 'https://github.com/Darren-chenchen/CLImagePickerTool' 庫(kù)的github地址
詳細(xì)說下下面的含義吧荞估,比如我的庫(kù)的全部demo都在CLImagePickerTool項(xiàng)目下的CLImagePickerTool文件夾下,并且都是swift寫的就可以表示成如下的形式
s.source_files = 'CLImagePickerTool/CLImagePickerTool/*/.swift'
對(duì)于項(xiàng)目中用到的資源文件稚新,比如我的圖片路徑就是CLImagePickerTool/CLImagePickerTool/images勘伺,如果用到了xib或者storyboard,或者用到了本地化相關(guān)的文件枷莉,總之只要是相關(guān)的資源文件都要表現(xiàn)出來
s.resource_bundles = {
'CLImagePickerTool' => ['CLImagePickerTool/CLImagePickerTool/images//.png','CLImagePickerTool/CLImagePickerTool//.{xib,storyboard}','CLImagePickerTool/CLImagePickerTool/*/.{lproj,strings}']
}
5.提交代碼到github娇昙,并打標(biāo)簽
git commit -a -m “......”
git push
git tag 1.0.0 // 這個(gè)版本要和podspec中的version一致
git push origin --tags // 提交到遠(yuǎn)端
6.檢查podspec 文件是否有錯(cuò)誤
pod spec lint CLImagePickerTool.podspec
如果出現(xiàn)CLImagePickerTool.podspec passed validation. 就表示沒有錯(cuò)誤。
7.如果之前沒有注冊(cè)過CocoaPods賬號(hào)笤妙。
打開終端冒掌,在終端中輸入如下命令:
pod trunk register 郵箱地址 '用戶名' --description='描述信息'
然后根據(jù)終端顯示信息噪裕,如果成功的話會(huì)提示讓你去郵箱里確認(rèn)進(jìn)行激活。
輸入如下命令可查看個(gè)人CocoaPods賬號(hào)信息
pod trunk me
8.如果注冊(cè)過股毫,就你直接執(zhí)行下面的代碼,直接推到cocoapods服務(wù)器
pod trunk push CLImagePickerTool.podspec
(如果你完成了第6部膳音,下面的操作跟著終端的提示一步一步也能完成后續(xù)操作,主要是遇到問題不要太著急铃诬,細(xì)心看<老荨)
9.如果你能完成上面操作,在執(zhí)行完 pod trunk push CLImagePickerTool.podspec后如果出現(xiàn)下面的情況就說明你的庫(kù)已經(jīng)支持cocoapod了趣席。
10.成功上傳后要先執(zhí)行 pod setup更新下pod才能搜索到自己的庫(kù)兵志。
二、支持carthage
- 新建targets
2.添加需要編譯的文件和資源宣肚,這個(gè)地方要特別注意想罕,Compile Sources 文件中不能添加xib文件和圖片資源,只能添加后綴名為swift的文件
- 這里也有一個(gè)注意點(diǎn)霉涨,大家可以從圖片中看到按价,我新建的target名稱是CLImagePickerTool-framework,如果我想打包出來的文件名不要這個(gè)名稱笙瑟,我想要換個(gè)名稱楼镐,我本來是想用CLImagePickerTool這個(gè)名稱,那么打包出來的framework就是CLImagePickerTool.framework,但是這個(gè)名稱和項(xiàng)目名稱重復(fù)了往枷,這樣肯定不行框产,但是我現(xiàn)在又不能去改項(xiàng)目名稱,大家都知道改項(xiàng)目名稱又會(huì)遇到很多問題师溅,所以我這里就很無奈的給framework起了另外一個(gè)名字--ImagePickerTool.framework茅信。說了這么多,在哪設(shè)置名稱呢墓臭,看圖片吧蘸鲸!
4.再補(bǔ)充一個(gè)注意點(diǎn)!我的庫(kù)最低支持ios8窿锉,當(dāng)你新建target后要檢查是不是也是最低支持ios8
5.分享target,勾選我們的framework 酌摇,點(diǎn)擊close
6.下面開始測(cè)試我們的framework庫(kù)是不是可以用,先生成一個(gè)framework
進(jìn)入我們當(dāng)前文件夾CLImagePickerTool嗡载,執(zhí)行下面代碼窑多,會(huì)生成一個(gè)carthage文件夾
carthage build --no-skip-current
7.新建一個(gè)項(xiàng)目,測(cè)試framework是否可以使用洼滚,將上面生成的ImagePickerTool.framework,拖到項(xiàng)目中埂息,
運(yùn)行項(xiàng)目,如果沒有報(bào)錯(cuò)就開始測(cè)試是不是已經(jīng)引入了framework庫(kù),
8.如果可以用也沒有報(bào)錯(cuò)千康,就說明這個(gè)framework就可以使用的享幽,下面就可以通過Carghage來導(dǎo)入framework了。在這之前先把我們的demo上傳到github拾弃,并且打一個(gè)新標(biāo)簽
git commit -a -m “......”
git push
git tag 1.0.1 // 這個(gè)版本要和podspec中的version一致
git push origin --tags // 提交到遠(yuǎn)端
9.測(cè)試carthage 值桩。建議再建一個(gè)項(xiàng)目,在項(xiàng)目根目錄新建一個(gè)Cartfile文件豪椿,在里面寫入
github "Darren-chenchen/CLImagePickerTool"
執(zhí)行
carthage update
執(zhí)行完成應(yīng)該是下面的狀態(tài)
10.還需要手動(dòng)添加一下framework庫(kù)奔坟。
再來說下我在這一步遇到的問題吧!因?yàn)槲业膸?kù)也支持cocoapod搭盾,在cocoapod中如果要加載xib或者圖片咳秉,肯定是要先找到后綴名為.bundle的文件,然而carthage卻是要找后綴名為.framework的文件鸯隅,因?yàn)橹耙恢睕]有處理這個(gè)問題滴某,導(dǎo)致項(xiàng)目總是在xib的位置奔潰,下面就貼出來我針對(duì)carthage的處理