1.pod lib lint 和 pod spec lint 命令的區(qū)別
pod lib lint 是只從本地驗(yàn)證你的pod能否通過(guò)驗(yàn)證。
pod spec lint 是從本地和遠(yuǎn)程驗(yàn)證你的pod能否通過(guò)驗(yàn)證戏罢。
一般可以直接使用pod spec lint去驗(yàn)證pod有沒(méi)有問(wèn)題。
2.私有pod的驗(yàn)證
使用pod spec lint去驗(yàn)證私有庫(kù)能否通過(guò)驗(yàn)證時(shí)應(yīng)該肚逸,應(yīng)該要添加--sources選項(xiàng)认境,不然會(huì)出現(xiàn)找不到repo的錯(cuò)誤。
pod spec lint --sources='私有倉(cāng)庫(kù)repo地址,https://github.com/CocoaPods/Specs'
3.subspec
為了讓自己的Pod被導(dǎo)入時(shí)顯示出良好的文件層劃分课竣,subspec是必須的嘉赎。
若subspec要依賴(lài)其它的subspec,則subspec的dependency后面接的不是目錄路徑于樟,而是specA/specB這種spec關(guān)系公条。
4.私有庫(kù)引用私有庫(kù)的問(wèn)題
在私有庫(kù)引用了私有庫(kù)的情況下,在驗(yàn)證和推送私有庫(kù)的情況下都要加上所有的資源地址迂曲,不然pod會(huì)默認(rèn)從官方repo查詢(xún)靶橱。
pod spec lint --sources='私有倉(cāng)庫(kù)repo地址,https://github.com/CocoaPods/Specs'
pod repo push 本地repo名 podspec名 --sources='私有倉(cāng)庫(kù)repo地址,https://github.com/CocoaPods/Specs'
引用自己或第三方的framework或.a文件時(shí),在podsepc中應(yīng)該這樣寫(xiě):
s.ios.vendored_frameworks = "xxx/**/*.framework"
s.ios.vendored_libraries = "xxx/**/*.a”
5.便捷地開(kāi)發(fā)本地私有庫(kù)
Cocoapods就提供了一個(gè)開(kāi)發(fā)模式,其實(shí)操作起來(lái)也是非常簡(jiǎn)單的事情路捧,就是將所謂的引用路徑修改成本地路徑即可关霸。就是講Podfile中的pod '庫(kù)名', :path => '本地路徑'即可。這樣在通常的修改代碼中是不需要執(zhí)行pod update的杰扫,但是對(duì)于如果修改了目錄結(jié)構(gòu)(添加队寇、刪除或者移動(dòng)文件文件)或者是修改了Podspec文件的配置的話(huà),最好是運(yùn)行一下pod update的命令章姓。普通修改代碼的情況下就不需要運(yùn)行pod update命令和打tag了佳遣。
pod 'iOS-Test', :path => '../iOS-Test’
6.私有庫(kù)中添加資源(圖片、音視頻等)
方法共有三種:
- 第一種
spec.resources = ["Images/*.png", "Sounds/*"]
- 第二種
spec.resource = "Resources/MYLibrary.bundle"
把資源都放在bundle中凡伊,然后打包時(shí)候這個(gè)bundle會(huì)直接拷貝進(jìn)app的mainBundle中零渐。使用的時(shí)候在mainBundle中查找這個(gè)bundle然后再搜索具體資源。
NSURL *bundleURL = [[NSBundle mainBundle] URLForResource:@"JZShare" withExtension:@"bundle"];
NSBundle *bundle = [NSBundle bundleWithURL:bundleURL];
UIImage *img = [UIImage imageNamed:icon inBundle:bundle compatibleWithTraitCollection:nil];
- 第三種
spec.resource_bundles = {
'MyLibrary' => ['Resources/*.png'],
'OtherResources' => ['OtherResources/*.png']
}
這種方法利用 framework 的命名空間窗声,有效防止了資源沖突相恃。
使用方法是先拿到最外面的 bundle,然后再去找下面指定名字 的 bundle 對(duì)象,再搜索具體資源拦耐。
NSBundle *bundle = [NSBundle bundleForClass:[MYSomeClass class]];
NSURL *bundleURL = [bundle URLForResource:@"MyLibrary" withExtension:@"bundle"];
NSBundle *resourceBundle = [NSBundle bundleWithURL: bundleURL];
UIImage *img = [UIImage imageNamed:icon inBundle:bundle compatibleWithTraitCollection:nil];
7.如果私有庫(kù)添加了靜態(tài)庫(kù)或者dependency用了靜態(tài)庫(kù)
那么執(zhí)行pod lib lint還有pod spec lint時(shí)候需要加上—user-libraries選項(xiàng)
否則會(huì)出現(xiàn)'The 'Pods' target has transitive dependencies錯(cuò)誤耕腾。
8.如果私有庫(kù)只引用其他庫(kù)的subspec
只需要依賴(lài)想依賴(lài)的subspec,不用管主spec(因?yàn)橐蕾?lài)subspec必然要依賴(lài)主spec)杀糯。
9.私有庫(kù)已經(jīng)通過(guò)驗(yàn)證并傳到私有repo也能通過(guò)pod search扫俺,但是就是pod install失敗
這時(shí)候只要執(zhí)行pod update 然后去喝杯水就好了。固翰。狼纬。(前提是你把官方源換成國(guó)內(nèi)的,不然從github上更新官方repo的速度你懂的骂际。 更換官方源)