ReactNative 踩坑之 iOS 原生组件

iOS 中Undefined symbols for architecture x86_64

在原生 iOS 开发中,这个错误信息,应该或多或少的会碰到过:

Undefined symbols for architecture x86_64:
  "_OBJC_CLASS_$_XXX", referenced from:
      __XXX in TestClass.o
ld: symbol(s) not found for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)
复制代码

这个错误信息的意思大致是:在TestClass里面有一些不认识的符号,说白了,就是在TestClass这个类里面的某些方法或者使用的某些类不能被识别,在这个类里面一一进行排除,不难找到问题所在。

一般解决办法:添加相应的静态库,或者 framework,今天笔者并非要解决 iOS 原生开发的问题,而是解决 ReactNative 中原生组件的问题,如果是解决原生问题,请移步 here

笔者针对友盟推送的 SDK 做了 RN 组件开发,将原生SDK内嵌在组件内,这样在RN中使用,就不必再关心友盟的 SDK 了,真正做到 ReactNative 插件化开发。

敲上几行命令,整个环境已经搭建好,在没有导入 SDK 之前,编译是 OK 的,导入 SDK 之后编译也没问题,实际表现跟自己预想的差不多,这个组件应该很快就会做好。

想法是美好的,现实是残酷的。

在我写好调用 SDK 内的方法之后,开始编译,WTF 什么鬼,这个错误什么情况,吓得我赶紧去检查代码,该注释的注释,该还原的还原。编译->没问题啊!

最后通过比对其他工程,最后找到了解决的办法。因为笔者的组件中使用了友盟 (第三方) framework 才引起的这个编译问题,所以最后的解决方法就是:Xcode -> Build Settings -> Other Linker Flags 中添加 -framework "xxx",比如你的是 TestDemo.framework,这里添加的就是 -framework "TestDemo"

PS:在RN项目内的package.json中引用第三方组件使用 "xxx-component": "../xxx/",这样写,会连同组件package.json所在当前目录下所有文件一起Copy到RN项目node_moudle/xxx-component目录,RN在运行会报出一些duplicate xxx这样的错误信息,这个时候,需要在node_moudle/xxx-component这个目录下删除不需要的文件。

如果恰好你碰到了这个问题,又恰好看到了这篇文章,那恭喜你,找对地方了!如果没有碰到这些烦人的问题,那你简直太幸运了!

以上希望对你有所帮助 have fun ?

转载于:https://juejin.im/post/5c7a3610518825470368d701

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值