目錄
- 該錯誤解決方案
- 合成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
可以討論各種技術問題,歡迎您的加入。