XMPP配置的一些坑

工程第一步集成xmpp时就遇到很多问题,网上的有很多的文章,之前基本都有尝试。在很早之前已经成功导入。现在要重新给一个工程添加然后忘记了以前的导入方法,又是各种不顺。参照以前的文章,遇到的问题会有cocoapods版本问题,cocoapod中xmpp库的过时问题。为什么操作不成功呢,有时候我们忘了,过去的方法已经是过去式了,现在拿来用不见得还能ok!反正一顿瞎鼓捣也搞定了。


导入过程很简单,就两处要注意的地,至于这么做会不会成功看你运气了,反正我是ok了XMPP配置的一些坑。我的是oc的工程哈。

第一步:
就用cocoa pods导入xmpp. podfile文件里要注意了platform要在8.0以上,要在 pod 'XMPPFramework', '~> 3.7.0' 之前加上use_frameworks!
没关心pod是不是最新版本,终端命令:pod --version  回车显示1.1.0.rc.2
北京时间17年5月,xmppframework是3.7.0版。所以我的podfile文件就是这样的
platform:ios,'8.0'
target 'yourProjectName‘ do
use_frameworks!
pod 'XMPPFramework', '~> 3.7.0'
end
第二步:
pod导入完成后打开工程,会有让你转换swift的对话框,先选择不转,然后发现还好这次只报了一个错。
提示kissxml库的swift版本问题,然后在工程里点pods文件,右侧targets选报错的kissxml,选择build settings 在搜索框里搜下use legacy 将图中的use legacy swift language version 选择为yes 。编译就ok了,贴张图:
XMPP配置的一些坑


Xcode8之后 XMPP 重定义问题 Redefinition of module 'dnssd'

在升级Xcode到8之后,原来的关于XMPP的项目运行报错,错误信息为: Redefinition of module 'dnssd'

系统和XMPP框架同时用到了 'dnssd',大概就是错误的原因。

网上关于这方面的信息不多,但是还是在 * 中找到了一些信息,原文链接:http://*.com/questions/39930741/redefinition-of-module-dnssd-in-swift-3。

解决方案:# The version pushed to CocoaPods is very out of date, use master branch for now 
pod 'XMPPFramework', :git => "https://github.com/robbiehanson/XMPPFramework.git", :branch => 'master'
#pod 'XMPPFramework',大概意思是需要更新XMPP框架,需要把podfile文件中的 "pod 'XMPPFramework',        '~> 3.6.6'  "用 " # The version pushed to CocoaPods is very out of date, use master branch for now
pod 'XMPPFramework', :git => "https://github.com/robbiehanson/XMPPFramework.git", :branch => 'master'
# pod 'XMPPFramework' " 来替换或者直接改成 "pod 'XMPPFramework',        '~> 3.7.0'  "。

 

在pod update的过程中有的童鞋会遇到下面这样的错误:

这个是因为更新的XMPP框架中支持的最低版本为iOS 8.0 / macOS 10.8.

The minimum deployment target is iOS 8.0 / macOS 10.8.

所有需要把podfile中的 "platform:ios,"7.0" " 7.0改为8.0以上。

等了好久终于等到pod更新完成了,可是运行项目又出现了一堆错误,不,是一大堆错误。

别着急,pod更新之后会遇到这种问题,到报错的工程里面搜一下Enable Strict Checking of objc_msgSend Calls,改成相反的值就行了,别改没有报错的工程。

改完之后的错误明显减少了,可是还是有错误,如下:

Module 'KissXML' not found 找不到了,解决方案是用 #import "DDXML.h" 替换 @import KissXML;

这个替换完了还有错误

CocoaAsyncSocket 又找不到了...,这里用@class GCDAsyncSocket; 替换@import CocoaAsyncSocket;