iOS - 自制framework遇到 "_OBJC_CLASS_$_XXX", referenced from:

目錄

  • 該錯誤解決方案
  • 合成framework的腳本

錯誤信息

Undefined symbols for architecture x86_64:"OBJC_CLASS$_XXX", referenced from:objc-class-ref in XXX.o

前情提要

這個問題在維護老代碼,使用第三方framework的時候經常出現,網上解決方案不盡相同,但和作者遇到的情況不一樣。

如果你和作者原因不一樣,出門左轉。

出現場景

作者是在制作自己的framework的時候,并應用到工程中,使用真機編譯時遇到這個問題。

解決過程

因為編譯出錯信息出現x86字眼,作者誤認為是制作出來的framework不支持x86,多次查看了工程配置,最終通過lipo -info xxx.framework命令驗證,是支持x86的。

后來在網上檢閱,回想起來,我并沒有合成真機和模擬器的framework,最終猜想大概率是沒有正確合成framework。

說起沒有合成framework,看了網上分享的合成步驟比較煩,然后用了錯誤的腳本輸出為空的framework,就沒管了,后來又一度懷疑配置問題,結果造成悲劇。

正確姿勢

需要將真機和模擬器環境編譯出來的framework合并,并將所屬目錄下的兩個文件進行合并。

腳本問題

網上以前的腳本不適用當前xcode版本。
腳本訪問的真機和模擬器的路徑有誤,
所以最終合成出來的是空的framework。

錯誤腳本.png

正確腳本:

FMK_NAME=${PROJECT_NAME}
if [ "${ACTION}" = "build" ]
then
INSTALL_DIR=${SRCROOT}/Products/${FMK_NAME}.framework
DEVICE_DIR=${BUILD_ROOT}/${CONFIGURATION}-iphoneos/${FMK_NAME}.framework
SIMULATOR_DIR=${BUILD_ROOT}/${CONFIGURATION}-iphonesimulator/${FMK_NAME}.framework

if [ -d "${INSTALL_DIR}" ]
then
rm -rf "${INSTALL_DIR}"
fi

mkdir -p "${INSTALL_DIR}"
cp -R "${DEVICE_DIR}/" "${INSTALL_DIR}/"

lipo -create "${DEVICE_DIR}/${FMK_NAME}" "${SIMULATOR_DIR}/${FMK_NAME}" -output "${INSTALL_DIR}/${FMK_NAME}"
#這個是合并完成后打開對應的文件夾,你就可以直接看到文件了
open "${SRCROOT}/Products"

最后

TABAnimated原生骨架庫交流群:304543771
可以討論各種技術問題,歡迎您的加入。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容

  • 前言 如果你想將你開發的控件與別人分享,一種方法是直接提供源代碼文件。然而,這種方法并不是很優雅。它會暴露所有的實...
    球哥閱讀 377評論 0 2
  • 這篇教程的主要目的是怎么樣在你的iOS工程中創建并使用一個Framework。 Framework是資源的集合,將...
    慌莫染閱讀 786評論 0 1
  • 前言 如果你想將你開發的控件與別人分享,一種方法是直接提供源代碼文件。然而,這種方法并不是很優雅。它會暴露所有的實...
    大沖哥閱讀 1,402評論 0 4
  • 多點兒耐心,多點兒融洽 今日晨讀感悟: 在日常生活中,或與家人交流的過程中,我總是會回到:“我知道”。從來沒有想到...
    閃閃發光的小骨頭閱讀 159評論 1 1
  • 阿姨不在的兩夜一天。 卿卿很可靠的在幫助一起帶娃,但身體上的勞累依然無法避免。一起洗澡時,寶寶表情僵硬慌張,甚是可...
    奈提奈特閱讀 314評論 0 0