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

39次阅读

共计 1172 个字符,预计需要花费 3 分钟才能阅读完成。

目录

该错误解决方案
合成 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。

正确脚本:
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 可以讨论各种技术问题,欢迎您的加入。

正文完
 0