问题
使用2016-05-17更新的QQ互联SDK在使用模拟器运行是会出现以下报错:
Undefined symbols for architecture i386:
"_OBJC_CLASS_$_QQApiInterface", referenced from:
objc-class-ref in ShareSDKManage.o
objc-class-ref in UserLoginViewController.o
"_OBJC_CLASS_$_TencentOAuth", referenced from:
objc-class-ref in ShareSDKManage.o
ld: symbol(s) not found for architecture i386
包括使用ShareSDK、友盟社会化分享SDK等集成QQ互联的SDK。
原因
这是引文QQ互联的iOS_SDK_V3.1.0版本不支持i386.
解决办法
- 方法1
不要在iphone5及以下的模拟器测试,可以在支持64位模拟器比如iphone5s及以上测试。不影响真机。
同时,在TARGETS里面的设置如下:
- 方法2
使用lipo
命令从旧库分离出i386部分,再合并到新库中去。
这么做可能引起一些未知的风险,需要谨慎执行。
由于公司的项目因为历史原因问题,不适合采用方法1,因此在充分考虑之后选择方法2.
查看库支持架构:
lipo -info TencentOpenAPI
可以看到没有i386:
Architectures in the fat file: TencentOpenAPI are: armv7 x86_64 arm64
接下来,从旧库中抽离i386:
lipo TencentOpenAPI -thin i386 -output TencentOpenAPI-i386
把新生成的TencentOpenAPI-i386合并到新库中去:
ipo -create TencentOpenAPI TencentOpenAPI-i386 -output TencentOpenAPI-new