這兩天一直琢磨著想讓自己的一個照片多選框架支持cocoapods下載安裝,就搜了好多資料傀广,但是搜到的資料大多都是最基本的颁独,并沒有解決我遇到的問題,問題如下:
- 當(dāng)自己的框架中用到了xib及圖片資源的話伪冰,怎么解決在cocoapods下載安裝后xib初始化失敗及圖片資源不顯示的問題誓酒。
那么我們從第一步開始,一步一步來使自己的框架支持cocoapods安裝(關(guān)于如何在自己的電腦上安裝cocoapods的贮聂,就請自行搜索靠柑,教程很多)寨辩。
首先概括一個大概的步驟
- 代碼上傳到github
- 創(chuàng)建podspec文件
- 在github上創(chuàng)建release版本
- 注冊cocoapods賬號
- 上傳代碼到cocoapods
- 檢驗是否上傳成功
- 更新框架版本
重點
- 解決cocoapods下載框架中xib初始化crash的問題
- 解決cocoapods下載框架中圖片無法正常顯示的問題
代碼上傳到github
代碼上傳github的步驟就不說了,相信有g(shù)ithub賬號的人幾乎都會上傳歼冰,而且現(xiàn)在代碼上傳github也不需要繁瑣的終端操作了捣染,使用Github Desktop客戶端即可。
我們還可以觀察到停巷,支持cocoapods的代碼下載下來之后,都會有*.podspec榕栏、LICENSE和.gitignore(該文件為隱藏文件)畔勤,那么先說LICENSE和.gitignore文件,這個可以再github上創(chuàng)建工作目錄時候便勾選出來扒磁,如下圖
但是通過Github Desktop客戶端推上去的工作目錄是沒有的庆揪,怎么再去創(chuàng)建這兩個文件,筆者暫時沒摸索到妨托,我是直接把這兩個文件copy了一份放到了自己的工作目錄的缸榛。
創(chuàng)建podspec文件
這個簡單,首先你需要打開終端進(jìn)入自己的工作目錄的根目錄兰伤,輸入以下命令
touch name.podspec
name便是你最終確定上傳到cocoapods上的命名
編輯命令如下
vi name.podspec
英文輸入法下内颗,點擊"i"進(jìn)入編輯模式,編輯完畢之后首先點擊"esc"敦腔,然后快捷鍵"shift+zz"(雙擊z鍵)即可
我的ZLPhotoBrowser.podspec文件如下均澳,涉及到更多的cocoapods命令,請自行搜索
在github上創(chuàng)建release版本
點進(jìn)去之后步驟很簡單找前,填上版本號,標(biāo)題和簡單的描述即可判族,需要注意的是版本號需要與你的 podspec文件中的 s.version 相同
注冊cocoapods賬號
打開終端躺盛,在終端中輸入如下命令
pod trunk register 郵箱地址 '用戶名' --description='描述信息'
然后根據(jù)終端顯示信息,如果成功的話會提示讓你去郵箱里確認(rèn)進(jìn)行激活
輸入如下命令可查看個人cocoapods賬號信息
pod trunk me
上傳代碼到cocoapods
- 在上傳cocoapods之前你需要做一件事形帮,便是驗證自己的podspec文件格式的有效性槽惫,終端命令如下
pod spec lint
如果podspec文件格式不合法,終端內(nèi)會報出相應(yīng)的提示
如果通過沃缘,終端顯示信息如下
那么接下來便是把自己的框架推到cocoapods了躯枢,終端命令如下
long:ZLPhotoBrowser long$ pod trunk push ZLPhotoBrowser.podspec --allow-warnings
當(dāng)然你這里如果不是在podspec文件目錄下,也可以指定podspec文件的絕對路徑槐臀,這里請注意最后使用了"--allow-warnings"锄蹂,為忽略警告的意思,如果不加該關(guān)鍵字的話水慨,如果在執(zhí)行"pod spec lint"時候報出了警告得糜,那么這里上傳框架代碼肯定是不成功的敬扛。成功的話,會有如下顯示
檢驗是否上傳成功
終端輸入如下命令搜索你的框架吧
pod search ZLPhotoBrowser
如果成功的話朝抖,終端顯示信息如下
更新框架版本
框架上傳后啥箭,避免不了版本的更新,更新版本也簡單治宣,上傳最新的代碼急侥,在github上創(chuàng)建新的release版本(再次提醒注意版本號與podspec文件的s.version保持一致),然后再次執(zhí)行命令即可
long:ZLPhotoBrowser long$ pod trunk push ZLPhotoBrowser.podspec --allow-warnings
解決cocoapods下載框架中xib初始化crash的問題
由于框架中使用到了UITableView及UICollectionView等UI侮邀,所以有存在對應(yīng)的cell的xib文件坏怪。
我們通過cocoapods去下載我們的框架,如果存在xib绊茧,那么我們平常初始化xib的代碼(如下)便不能正常工作了铝宵。
[[[NSBundle mainBundle] loadNibNamed:@"xibName" owner:self options:nil] lastObject];
[self.collectionView registerNib:[UINib nibWithNibName:@"xibName" bundle:nil] forCellWithReuseIdentifier:@"ZLCollectionCell"];
因為通過mainBundle不能獲取到我們的xib了,解決方法如下
#define kZLPhotoBrowserBundle [NSBundle bundleForClass:[self class]]
[[kZLPhotoBrowserBundle loadNibNamed:@"ZLPhotoActionSheet" owner:self options:nil] lastObject];
[self.collectionView registerNib:[UINib nibWithNibName:@"ZLCollectionCell" bundle:kZLPhotoBrowserBundle] forCellWithReuseIdentifier:@"ZLCollectionCell"];
這樣之后华畏,無論是通過copy文件夾方式還是cocoapods下載安裝的方式鹏秋,都能正常使用xib進(jìn)行初始化了
解決cocoapods下載框架中圖片無法正常顯示的問題
解決完了xib的初始化問題,圖片資源不顯示又是一個令人頭痛的問題亡笑。我在測試期間侣夷,得出如下結(jié)果:
- 通過cocoapods下載安裝,如果xib中直接填寫好的圖片仑乌,則圖片資源能直接顯示惜纸,如果通過代碼"[UIImage imageNamed:@""]"去設(shè)置的話,則圖片資源根本顯示不了
最終解決方法:
- 創(chuàng)建bundle資源目錄
command+N -> Resource -> Settings Bundle
刪除bundle攜帶的無用文件绝骚,把圖片資源添加到bundle資源內(nèi)耐版,
- 改變代碼圖片路徑
// 圖片路徑
#define kZLPhotoBrowserSrcName(file) [@"ZLPhotoBrowser.bundle" stringByAppendingPathComponent:file]
#define kZLPhotoBrowserFrameworkSrcName(file) [@"Frameworks/ZLPhotoBrowser.framework/ZLPhotoBrowser.bundle" stringByAppendingPathComponent:file]
- kZLPhotoBrowserSrcName(file) 為通過copy文件夾方式獲取圖片路徑的宏
- kZLPhotoBrowserFrameworkSrcName(file) 為通過cocoapods下載安裝獲取圖片路徑的宏
之后修改代碼中設(shè)置圖片的方式如下
UIImage *img = [UIImage imageNamed:kZLPhotoBrowserSrcName(@"img.png")]?:[UIImage imageNamed:kZLPhotoBrowserFrameworkSrcName(@"img.png")];
到了這一步,ok压汪,很好粪牲,問題已經(jīng)解決。
結(jié)束語
感謝參考的兩篇文章
讓代碼支持CocoaPods
iOS為自己的庫添加CocoaPods支持
同時也感謝下小碼哥(MJ李明杰老師)止剖,解決圖片不顯示的方式是通過查找各大框架的podspec的等相關(guān)才最終在MJRefresh中找到以bundle資源目錄的方式解決的腺阳。
最后發(fā)幾張框架部分功能效果圖
轉(zhuǎn)載請注明出處。