即时通讯(环信) bug -"_iconv", referenced from: _avcodec_decode_subtitle2 in libHyphenateFullSDK.a(utils.o)

来源:互联网 发布:图解网络硬件 mobi 编辑:程序博客网 时间:2024/06/05 17:02

 因在开发公司项目有即时通讯模块,经商量之后选择了第三方即时通讯sdk环信,由于3.0文档还不是非常全面,且本人之前没有过开发即时通讯的经验,查阅了很多资料,磕磕绊绊几天终于完成了对该模块的开发,故此记录所遇到的问题及解决办法,方便以后自己或朋友的查阅:  

  首先,对于第一次接触的朋友需要初步了解下环信,官方文档非常详尽的介绍了,在此就不赘述.附上官方文档链接:http://docs.easemob.com/doku.php?id=im:start

 

1.先直接根据官方文档集成SDK,在集成之前如果是第一次接触环信,建议备份工程.

注:官方下载的包里会有两个静态库,一个是包含实时语音的库,另一个则不包含,根据业务需求,记得删除掉一个库,直接move to trash就可以.切记要删除!否则在后边的步骤会报重复引用链接错误.

2.根据官方文档导入依赖库的时候,dylib后缀没有的直接用tbd就可以(Xcode 7之后改为tbd).

加入系统SDK依赖库:

        CoreMedia.framework

        AudioToolbox.framework

        AVFoundation.framework

        MobileCoreServices.framework

        ImageIO.framework

        SystemConfiguration.framework

        libc++.a

        libresolv.dylib

        libz.dylib

        libstdc++.6.0.9.dylib

        libsqlite3.dylib

        libHyphenateSDK.a

如果报错:"_iconv", referenced from: _avcodec_decode_subtitle2 in libHyphenateFullSDK.a(utils.o),则另外要加入libiconv.tbd依赖库.

官方依赖库导入之后编译,此处编译会遇到的坑: 

1).报重复引用静态库错误(没删官方两个静态库中的一个) 

2).报与-all_load 冲突错误 根据文档改为-ObjC即可  如果改为-ObjC还有错 可按照文档改为 -force_load

注:项目如果用了友盟分享,改为-force_load之后 会与友盟有冲突,具体原因也不清楚,项目直接crash在分享新浪微博,此处求解惑.  改为-ObjC即可

到此步骤直到编译没错的时候就说明导入SDK 配环境成功.

3.环信官方提供了easeUI这个快速集成单聊界面,在集成easeUI之前建议不要用cocoapods来集成,因为会报一些莫名的错误. 

集成easeUI:

1).将EaseUI工程下载下来之后,直接拖入EaseUI文件夹,EaseUIResource里面的Resource文件夹,export文件夹里的resource文件夹下的EaseUIResource.bundle 包,到工程中.

2).新建一个pch文件,设置好路径之后,在pch文件中添加引用:EaseUI-Prefix.pch 、ChatDemo-UI3.0-Prefix.pch 这两个pch中的代码. 

此时编译会报一个 NSObject + EaseMob类别错误 (该类别是2.0demo中的,根本没有用) 可以选择注释,或者直接删除该类别.将该类别注释掉之后,如果报更多的错误,错误定在NSString或其他系统类上,在你新建的pch文件里,你所包含的头文件开始加上: #ifdef __OBJC__   结尾处加上: #endif 如下图:

450A4D8A-1D3D-463A-8012-D75920068558.png

此时编译如果还报错并且错误定在NSLocalizedString, 在你的pch文件里添上如下宏:

#define NSEaseLocalizedString(key, comment) [[NSBundle bundleWithURL:[[NSBundle mainBundle] URLForResource:@"EaseUIResource"withExtension:@"bundle"]] localizedStringForKey:(key) value:@"" table:nil]


3).下载官方提供的ChatDemo-3.0 拖入demo中3rdparty文件夹,因EaseUI本身集成了几个常用三方库,因此会与工程中你所用的重复,此时编译会报错.本身所包含的常用三方如下:MBProgressHUD、VoiceConvert、MJRefresh、SDWebImage. 如果有冲突,切记删除ChatDemo中的三方库,然后改掉相关报错的代码.

此时编译如果还报错,错误为Setting文件夹下的BackUp类,直接删除掉或注释即可,该类用处不大.

至此,编译成功则EaseUI的集成也完毕了.


环信的EaseUI其实只是做到一个展示的作用,包括一些控件的布局,排版都没有处理,因此我们可以直接用ChatDemo3.0中的ChatViewController这个界面,附上集成视频地址:http://v.youku.com/v_show/id_XMTQxOTgyNjU1Mg==.html?from=y1.2-1-87.3.6-2.1-1-1-5-0


好了,到此当你把ChatViewController也集成完毕,一个初步成型的单聊界面就出来了.ps:环信支持非好友之间的聊天,你只要知道对方的环信id即可.


那么你会疑问了,头像和昵称还没有搞定.因为环信服务器不存储用户的头像和昵称,因此需要你与自己app的服务器交互,聊天界面的头像和昵称在如下方法中修改:

- (id<IMessageModel>)messageViewController:(EaseMessageViewController *)viewController
                           modelForMessage:(EMMessage *)message


如果因业务需求用到会话列表,官方并没有非常完善的文档,可以参考demo中的ConversationListViewController.

0 0