Failed to import bridging header 的奇葩解決方案

本人是個升級控,只要有需要升級的看看日志沒啥問題就開整,等了大半年的Cocoapods1.0.0終于出正式版本了,介于0.38.00.39.0的痛苦過程,心里有點小擔心,不過那時還好是Objective-C,問題出在配置上都可以stackoverflow解決,這次要面對這次還要多面臨Swift的挑戰(zhàn),廢話太多了,直接開整。

升級的過程還是老套路:

sudo gem install cocoapods

老套路還是還是老問題/usr下路徑權限不夠,試著改變權限:

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的權限沒有問題,新提示的/usr/bin通過這種方式沒辦法改權限,由于OS X EI Capitan安全措施Rootless機制,導致/usr/bin不能隨意寫文件操作,但是想改還是有辦法的,網上去年就貼出了這個解決方法,就是在安全模式下操作終端命令,這里不想誤導非程序狗去操作這個大風險的玩意兒,所以這里我簡單給出蘋果官方解決方案,看看就好,我就不詳細介紹了,有需要的搜索關鍵字Operation not permitted。

由于我潔癖比較嚴重,既然官方不讓搞咱們就另辟蹊徑,對于gem來說,其實是可以在install的時候使用-n參數來指定路徑的,那么這里我們就選擇/usr/local/bin這個可寫的路徑來操作,廢話不多說,直接上命令:

sudo gem install -n /usr/local/bin cocoapods

這個命令也是大多數人多于安裝Cocoapods1.0.0版本報權限問題給出的解決方案,但是這里有個小問題,由于以前的老版本是默認安裝在/usr/bin,我們這要操作之后就有兩個pod,實際使用的時候系統(tǒng)就傻傻分不清了,很多人覺得改下系統(tǒng)的bashsource不久好了,其實我最討厭這種做法,我的原則不到萬不得已不做額外的操作,經過我一晚上的跳坑,得到的解決方案就是先刪除老版本的Cocoapods,然后直接用上面的命令安裝即可。

新版是安裝好了,那必須得pod update一下啊,不然咋體驗升級的快感,你說是不,結果可想而知的肯定是報錯,提示需要指明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)庫的自己查資料?;蛘哒f還有人在8.0下堅持寫Swift的我也很是佩服。

Bingo,果不其然,這盤順利update了之后Build新工程,得到如下的煞筆提示:

踏馬的提示橋接文件找不到,于是乎上stackoverflow各種找答案啊,最后得來的都是讓確保如下配置是否正確:

我踏馬升級之前都是好的,工程配置和文件肯定是好的啊,看到各種復制粘貼的答案那叫一個暴躁,作為程序狗這個時候必須點根煙冷靜一盤,突然定睛一看其實不是找不到橋接文件,而是failed to import bridging header導入出錯,仔細分析了一下踏馬的原來是找不到頭文件兒導致橋接文件導入出錯。由于Cocoapods新版本的問題是根據targetinstall的,所以在頭文件導入上較以前嚴謹太多了,所以上述的解決方案就是用庫的方式引入,不要用相對導入,學過C的應該在第一課的時候就知道這個事情了,所以上述問題就這么改:

#import "MJExtension.h"

改為

#import <MJExtension/MJExtension.h>

其實這種問題在純Objective-C項目里即便是新版本也沒有問題的,主要是1.0.0以后的Cocoapods強制的target的概念,又由于Objective-CSwift混編的項目需要xxx-Bridging-Header.h這個橋接文件,所以import的時候必須要用的引入方式才能正常導入。

其實平時只要是用到庫,不管是靜態(tài)還是動態(tài)我都是用<>庫的方式來導入,為啥這里會煞筆呢,那就安利一款快速添加頭文件的插件,對于寫純Objective-C的同學來說是很提高效率的插件:Peckham

PS:不過Xcode 7.3以后因為Xcode自身的原因,猜測可能是項目解析慢或者是預處理不及時,導致像FuzzyAutocomplete這類插件都有點力不從心了,7.3以后的版本使用Peckham也開始蛋疼起來,如果是新添加的.h.m文件找不到,直接Command + Bbuild一盤就好了。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

友情鏈接更多精彩內容