本人是個升級控挑秉,只要有需要升級的看看日志沒啥問題就開整丑搔,等了大半年的Cocoapods
的1.0.0
終于出正式版本了勾缭,介于0.38.0
到0.39.0
的痛苦過程疏遏,心里有點小擔心脉课,不過那時還好是Objective-C
,問題出在配置上都可以stackoverflow
解決财异,這次要面對這次還要多面臨Swift
的挑戰(zhàn)倘零,廢話太多了,直接開整戳寸。
升級的過程還是老套路:
sudo gem install cocoapods
老套路還是還是老問題/usr
下路徑權(quán)限不夠呈驶,試著改變權(quán)限:
sudo chown $(whoami):admin /usr/local && sudo chown -R $(whoami):admin /usr/local
sudo chown $(whoami):admin /usr/bin && sudo chown -R $(whoami):admin /usr/bin
改變/usr/local
的權(quán)限沒有問題,新提示的/usr/bin
通過這種方式?jīng)]辦法改權(quán)限疫鹊,由于OS X EI Capitan
安全措施Rootless機制
袖瞻,導(dǎo)致/usr/bin
不能隨意寫文件操作,但是想改還是有辦法的拆吆,網(wǎng)上去年就貼出了這個解決方法聋迎,就是在安全模式下操作終端命令,這里不想誤導(dǎo)非程序狗去操作這個大風險的玩意兒枣耀,所以這里我簡單給出蘋果官方解決方案
霉晕,看看就好,我就不詳細介紹了捞奕,有需要的搜索關(guān)鍵字Operation not permitted
牺堰。
由于我潔癖比較嚴重,既然官方不讓搞咱們就另辟蹊徑缝彬,對于gem
來說萌焰,其實是可以在install
的時候使用-n
參數(shù)來指定路徑的哺眯,那么這里我們就選擇/usr/local/bin
這個可寫的路徑來操作谷浅,廢話不多說,直接上命令:
sudo gem install -n /usr/local/bin cocoapods
這個命令也是大多數(shù)人多于安裝Cocoapods
的1.0.0
版本報權(quán)限問題給出的解決方案奶卓,但是這里有個小問題一疯,由于以前的老版本是默認安裝在/usr/bin
,我們這要操作之后就有兩個pod
夺姑,實際使用的時候系統(tǒng)就傻傻分不清了墩邀,很多人覺得改下系統(tǒng)的bash
再source
不久好了,其實我最討厭這種做法盏浙,我的原則不到萬不得已不做額外的操作眉睹,經(jīng)過我一晚上的跳坑荔茬,得到的解決方案就是先刪除老版本的Cocoapods
,然后直接用上面的命令安裝即可竹海。
新版是安裝好了慕蔚,那必須得pod update
一下啊,不然咋體驗升級的快感斋配,你說是不孔飒,結(jié)果可想而知的肯定是報錯,提示需要指明target
才能執(zhí)行pod
艰争,對于新版本的嚴謹我很欣賞坏瞄,于是乎就得改改我們老的Podfile
:
platform :ios, '8.0'
use_frameworks!
target 'EShop' do
pod 'xxx'
end
use_frameworks
加不加看你自己需求,如果是版本都用到8.0
了還不用動態(tài)庫就是腦殼有屎甩卓,不知道動態(tài)庫和靜態(tài)庫的自己查資料鸠匀。或者說還有人在8.0
下堅持寫Swift
的我也很是佩服逾柿。
Bingo
狮崩,果不其然,這盤順利update
了之后Build
新工程鹿寻,得到如下的煞筆提示:
踏馬的提示橋接文件
找不到睦柴,于是乎上stackoverflow
各種找答案啊,最后得來的都是讓確保如下配置是否正確:
我踏馬升級之前都是好的毡熏,工程配置和文件肯定是好的啊坦敌,看到各種復(fù)制粘貼的答案那叫一個暴躁,作為程序狗這個時候必須點根煙冷靜一盤痢法,突然定睛一看其實不是找不到橋接文件
狱窘,而是failed to import bridging header
導(dǎo)入出錯,仔細分析了一下踏馬的原來是找不到頭文件兒導(dǎo)致橋接文件
導(dǎo)入出錯财搁。由于Cocoapods
新版本的問題是根據(jù)target
來install
的蘸炸,所以在頭文件導(dǎo)入上較以前嚴謹太多了,所以上述的解決方案就是用庫的方式引入
尖奔,不要用相對導(dǎo)入
搭儒,學(xué)過C
的應(yīng)該在第一課的時候就知道這個事情了,所以上述問題就這么改:
#import "MJExtension.h"
改為
#import <MJExtension/MJExtension.h>
其實這種問題在純Objective-C
項目里即便是新版本也沒有問題的提茁,主要是1.0.0
以后的Cocoapods
強制的target
的概念淹禾,又由于Objective-C
和Swift
混編的項目需要xxx-Bridging-Header.h
這個橋接文件
,所以import
的時候必須要用庫
的引入方式才能正常導(dǎo)入茴扁。
其實平時只要是用到庫铃岔,不管是靜態(tài)還是動態(tài)我都是用<>
庫的方式來導(dǎo)入,為啥這里會煞筆呢峭火,那就安利一款快速添加頭文件的插件毁习,對于寫純Objective-C
的同學(xué)來說是很提高效率的插件:Peckham
PS:不過Xcode 7.3
以后因為Xcode
自身的原因智嚷,猜測可能是項目解析慢或者是預(yù)處理不及時,導(dǎo)致像FuzzyAutocomplete
這類插件都有點力不從心了纺且,7.3
以后的版本使用Peckham
也開始蛋疼起來纤勒,如果是新添加的.h
和.m
文件找不到,直接Command + B
build一盤就好了隆檀。