問題
使用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.
iOS_SDK_V3.1.0
解決辦法
- 方法1
不要在iphone5及以下的模擬器測試,可以在支持64位模擬器比如iphone5s及以上測試。不影響真機。
同時,在TARGETS里面的設置如下:
Xcode設置
- 方法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