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

目錄

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

錯誤信息

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

前情提要

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

若是你和做者緣由不同,出門左轉。github

出現場景

做者是在製做本身的framework的時候,並應用到工程中,使用真機編譯時遇到這個問題。xcode

解決過程

由於編譯出錯信息出現x86字眼,做者誤認爲是製做出來的framework不支持x86,屢次查看了工程配置,最終經過lipo -info xxx.framework命令驗證,是支持x86的。iphone

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

提及沒有合成framework,看了網上分享的合成步驟比較煩,而後用了錯誤的腳本輸出爲空的framework,就沒管了,後來又一度懷疑配置問題,結果形成悲劇。spa

正確姿式

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

腳本問題

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

錯誤腳本.png

正確腳本:rem

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能夠討論各類技術問題,歡迎您的加入。

相關文章
相關標籤/搜索