你好,歡迎來到IOS教程網

 Ios教程網 >> IOS編程開發 >> IOS開發基礎 >> 從零開始,讓你的框架支持CocoaPods

從零開始,讓你的框架支持CocoaPods

編輯:IOS開發基礎

cocoapods-orange-on-grey.jpg

本文為投稿文章,作者:奴良(簡書)

這兩天一直琢磨著想讓自己的一個照片多選框架支持CocoaPods下載安裝,就搜了好多資料,但是搜到的資料大多都是最基本的,並沒有解決我遇到的問題,問題如下:

當自己的框架中用到了xib及圖片資源的話,怎麼解決在CocoaPods下載安裝後xib初始化失敗及圖片資源不顯示的問題。

那麼我們從第一步開始,一步一步來使自己的框架支持CocoaPods安裝(關於如何在自己的電腦上安裝CocoaPods的,就請自行搜索,教程很多)。

首先概括一個大概的步驟:

  • 代碼上傳到Github

  • 創建podspec文件

  • 在Github上創建release版本

  • 注冊CocoaPods賬號

  • 上傳代碼到CocoaPods

  • 檢驗是否上傳成功

  • 更新框架版本

重點

  • 解決CocoaPods下載框架中xib初始化crash的問題

  • 解決CocoaPods下載框架中圖片無法正常顯示的問題

代碼上傳到Github

代碼上傳Github的步驟就不說了,相信有Github賬號的人幾乎都會上傳,而且現在代碼上傳Github也不需要繁瑣的終端操作了,使用Github Desktop客戶端即可。

334576-46d58e1c326b461a.jpg

Github Desktop

我們還可以觀察到,支持CocoaPods的代碼下載下來之後,都會有*.podspec、LICENSE和.gitignore(該文件為隱藏文件),那麼先說LICENSE和.gitignore文件,這個可以再github上創建工作目錄時候便勾選出來,如下圖:

334576-12b15a432848881a.jpg

creat repository

334576-2ae83557729a128f.jpg

result

但是通過Github Desktop客戶端推上去的工作目錄是沒有的,怎麼再去創建這兩個文件,筆者暫時沒摸索到,我是直接把這兩個文件copy了一份放到了自己的工作目錄的。

創建podspec文件

這個簡單,首先你需要打開終端進入自己的工作目錄的根目錄,輸入以下命令

touch name.podspec

name便是你最終確定上傳到CocoaPods上的命名。

編輯命令如下

vi name.podspec

英文輸入法下,點擊"i"進入編輯模式,編輯完畢之後首先點擊"esc",然後快捷鍵"shift+zz"(雙擊z鍵)即可。

我的ZLPhotoBrowser.podspec文件如下,涉及到更多的CocoaPods命令,請自行搜索

334576-8d76d29991d19c79.jpg

ZLPhotoBrowser.podspec

在Github上創建release版本

334576-0f49e7bda09e151f.jpg

創建release版本

點進去之後步驟很簡單,填上版本號,標題和簡單的描述即可,需要注意的是版本號需要與你的podspec文件中的s.version 相同。

注冊CocoaPods賬號

打開終端,在終端中輸入如下命令:

pod trunk register 郵箱地址 '用戶名' --description='描述信息'

然後根據終端顯示信息,如果成功的話會提示讓你去郵箱裡確認進行激活。

輸入如下命令可查看個人CocoaPods賬號信息

pod trunk me

上傳代碼到CocoaPods

在上傳CocoaPods之前你需要做一件事,便是驗證自己的podspec文件格式的有效性,終端命令如下

pod spec lint

如果podspec文件格式不合法,終端內會報出相應的提示。

如果通過,終端顯示信息如下

1460703624563475.jpg

podspec

那麼接下來便是把自己的框架推到CocoaPods了,終端命令如下

long:ZLPhotoBrowser long$ pod trunk push ZLPhotoBrowser.podspec --allow-warnings

當然你這裡如果不是在podspec文件目錄下,也可以指定podspec文件的絕對路徑,這裡請注意最後使用了"--allow-warnings",為忽略警告的意思,如果不加該關鍵字的話,如果在執行"pod spec lint"時候報出了警告,那麼這裡上傳框架代碼肯定是不成功的。成功的話,會有如下顯示:

334576-cf1548ecc0eb983f.jpg

push success

檢驗是否上傳成功,終端輸入如下命令搜索你的框架吧

pod search ZLPhotoBrowser

如果成功的話,終端顯示信息如下:

ZLPhotoBrowser

更新框架版本

框架上傳後,避免不了版本的更新,更新版本也簡單,上傳最新的代碼,在github上創建新的release版本(再次提醒注意版本號與podspec文件的s.version保持一致),然後再次執行命令即可:

long:ZLPhotoBrowser long$ pod trunk push ZLPhotoBrowser.podspec --allow-warnings

解決CocoaPods下載框架中xib初始化crash的問題

由於框架中使用到了UITableView及UICollectionView等UI,所以有存在對應的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進行初始化了

解決CocoaPods下載框架中圖片無法正常顯示的問題

解決完了xib的初始化問題,圖片資源不顯示又是一個令人頭痛的問題。我在測試期間,得出如下結果:

  • 通過CocoaPods下載安裝,如果xib中直接填寫好的圖片,則圖片資源能直接顯示,如果通過代碼"[UIImage imageNamed:@""]"去設置的話,則圖片資源根本顯示不了

最終解決方法:

創建bundle資源目錄

command+N -> Resource -> Settings Bundle

刪除bundle攜帶的無用文件,把圖片資源添加到bundle資源內,

  • 改變代碼圖片路徑

// 圖片路徑
#define kZLPhotoBrowserSrcName(file) [@"ZLPhotoBrowser.bundle" stringByAppendingPathComponent:file]
#define kZLPhotoBrowserFrameworkSrcName(file) [@"Frameworks/ZLPhotoBrowser.framework/ZLPhotoBrowser.bundle" stringByAppendingPathComponent:file]
kZLPhotoBrowserSrcName(file) 為通過copy文件夾方式獲取圖片路徑的宏
kZLPhotoBrowserFrameworkSrcName(file) 為通過cocoapods下載安裝獲取圖片路徑的宏

之後修改代碼中設置圖片的方式如下:

UIImage *img = [UIImage imageNamed:kZLPhotoBrowserSrcName(@"img.png")]?:[UIImage imageNamed:kZLPhotoBrowserFrameworkSrcName(@"img.png")];

到了這一步,ok,很好,問題已經解決。

結束語

感謝參考的兩篇文章:

讓代碼支持CocoaPods

iOS為自己的庫添加CocoaPods支持

同時也感謝下小碼哥(MJ李明傑老師),解決圖片不顯示的方式是通過查找各大框架的podspec的等相關才最終在MJRefresh中找到以bundle資源目錄的方式解決的。

  1. 上一頁:
  2. 下一頁:
蘋果刷機越獄教程| IOS教程問題解答| IOS技巧綜合| IOS7技巧| IOS8教程
Copyright © Ios教程網 All Rights Reserved