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能够讨论各类技术问题,欢迎您的加入。

相关文章
相关标签/搜索