ReactNative 踩坑之 iOS 原生組件

iOS 中Undefined symbols for architecture x86_64

在原生 iOS 開發中,這個錯誤信息,應該或多或少的會碰到過:node

Undefined symbols for architecture x86_64:
  "_OBJC_CLASS_$_XXX", referenced from:
      __XXX in TestClass.o
ld: symbol(s) not found for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)
複製代碼

這個錯誤信息的意思大體是:在TestClass裏面有一些不認識的符號,說白了,就是在TestClass這個類裏面的某些方法或者使用的某些類不能被識別,在這個類裏面一一進行排除,不難找到問題所在。json

通常解決辦法:添加相應的靜態庫,或者 framework,今天筆者並不是要解決 iOS 原生開發的問題,而是解決 ReactNative 中原生組件的問題,若是是解決原生問題,請移步 herebash

筆者針對友盟推送的 SDK 作了 RN 組件開發,將原生SDK內嵌在組件內,這樣在RN中使用,就沒必要再關心友盟的 SDK 了,真正作到 ReactNative 插件化開發。ui

敲上幾行命令,整個環境已經搭建好,在沒有導入 SDK 以前,編譯是 OK 的,導入 SDK 以後編譯也沒問題,實際表現跟本身預想的差很少,這個組件應該很快就會作好。spa

想法是美好的,現實是殘酷的。插件

在我寫好調用 SDK 內的方法以後,開始編譯,WTF 什麼鬼,這個錯誤什麼狀況,嚇得我趕忙去檢查代碼,該註釋的註釋,該還原的還原。編譯->沒問題啊!code

最後經過比對其餘工程,最後找到了解決的辦法。由於筆者的組件中使用了友盟 (第三方) framework 才引發的這個編譯問題,因此最後的解決方法就是:Xcode -> Build Settings -> Other Linker Flags 中添加 -framework "xxx",好比你的是 TestDemo.framework,這裏添加的就是 -framework "TestDemo"component

PS:在RN項目內的package.json中引用第三方組件使用 "xxx-component": "../xxx/",這樣寫,會連同組件package.json所在當前目錄下全部文件一塊兒Copy到RN項目node_moudle/xxx-component目錄,RN在運行會報出一些duplicate xxx這樣的錯誤信息,這個時候,須要在node_moudle/xxx-component這個目錄下刪除不須要的文件。開發

若是剛好你碰到了這個問題,又剛好看到了這篇文章,那恭喜你,找對地方了!若是沒有碰到這些煩人的問題,那你簡直太幸運了!get

以上但願對你有所幫助 have fun 🤘

相關文章
相關標籤/搜索