"_OBJC_CLASS_$_XXX", referenced from:

weixin_34290000發表於2017-10-10

我的問題出現是我直接在專案中右鍵新增了一個資料夾。把其中一些檔案直接拖入這個資料夾,提交到了伺服器。
但是當我從伺服器down下來的時候,開啟工程發現,報紅,找不到檔案。但是專案執行沒問題。
於是我在Finder重新找到報紅檔案,把它copy出來,從外部拖入新增。
再次執行,就出現了上面的問題。

7271477-4d61975e445e40fe.png
螢幕快照 2017-10-10 下午4.30.26.png
問題1:.m檔案沒有匯入

在Build Phases裡的Compile Sources 中新增報錯的檔案


7271477-edff0598f64618c6.png
螢幕快照 2017-10-10 下午4.26.09.png

點選左下角的+號,直接搜尋.m檔案,逐個新增進去
再次執行,就沒有問題了

問題2:.framework檔案沒有匯入

靜態庫編譯時往往需要一些庫的支援,檢視你是否有沒有匯入的庫檔案
同樣是在Build Phases裡的Link Binary With Libraries中新增

7271477-444db0aaad37ad2a.png
螢幕快照 2017-10-10 下午4.42.19.png

點選左下角的+號,檢視有沒有遺漏的

問題3:重複編譯

可能你之前複製過兩個地方,在這裡新增過兩次,刪除時系統沒有預設刪除編譯引用地址
在Build Settings裡搜尋Search Paths 將裡面Library Search Paths 中沒有用到的地址刪除

7271477-689821e9a0bef3ea.png
螢幕快照 2017-10-10 下午4.48.54.png
問題4:出在靜態庫生成上面

系統編譯生成的靜態庫有兩個,一個真機呼叫的,一個模擬器呼叫的。
當你在真機測試時匯入模擬器靜態庫,執行就會報錯;同樣在模擬器測試時呼叫真機靜態庫也會報錯。
解決這一問題也很簡單,就是將兩個靜態庫合併,生成一個相容的靜態庫。
通過Show in finder 找到兩個靜態庫檔案,將兩個檔案複製到一個資料夾裡,當然要進行重新命名啦,否則就覆蓋了。
下面開啟終端,CD到存放兩個檔案的資料夾。
通過lipo[空格]-create[空格] [真機靜態庫檔名][空格] [模擬器靜態庫檔名][空格]-output[空格] [合併後的檔名]

7271477-f17dc6480464959a.png
1.png

再把這個生成的檔案匯入你的工程就可以了。

注:問題3和問題4的出現,我目前還沒有遇到過。

相關文章