如何试用Teamtalk iOS端源码

image


什么是Teamtalk?

首先,我想向Teamtalk开源团队致敬,感谢你们的开源精神!致敬!

什么是TeamtalkTeamtalk是蘑菇街开源的一套即时通讯系统。通俗的说,就是可以拿它来做即时通讯,而且跨平台做的比较好。


为什么写这篇文章?

因为,在使用过程中遇到很多麻烦。踩着坑过来,现在我是来填坑的。希望帮助到一些人,能让大家按照修改,快速用起来。不过还是希望官方能够处理掉啊,毕竟也算是大公司了。


怎么用?

首先,下载Teamtalk开源代码。

Github下载地址:https://github.com/mogujie/TeamTalk

iOS端代码在TeamTalk-master/ios目录下。进入这个目录,先执行下

1
$ pod update

没安装CocoaPods的同学需要先装下。

然后,打开项目。注意,此时项目是跑不起来的。

首先,需要注释掉AppDelegate.m里面的以下引用:

1
2
//#import <Fabric/Fabric.h>
//#import <Crashlytics/Crashlytics.h>

以及以下代码

1
// [Fabric with:@[CrashlyticsKit]];

因为,我们不需要这些。不得不吐槽下iOS代码,需要各种改才能跑起来。

仅仅做了上面的工作,你会发现项目还是运行不起来的。报错信息:

ld: warning: directory not found for option ‘-L/Users/zcx/Downloads/TeamTalk-master/ios/TeamTalk/Exist/MobClick’
ld: framework not found Fabric
clang: error: linker command failed with exit code 1 (use -v to see invocation)

信息显示是跟Fabric这个库有关。

Linked Frameworks and Libraries下面找到Fabric.frameworkCrashlytics.framework,将这个两个framework删掉。

然后,继续报错。

…/Library/Developer/Xcode/DerivedData/TeamTalk-clkdsersjrkmjkgcqvhwkdgktpoc/Build/Intermediates/TeamTalk.build/Debug-iphonesimulator/TeamTalk.build/Script-817CB3AD1B3BC68D0004AFEA.sh: line 2: ./Fabric.framework/run: No such file or directory

此错误信息还是跟Fabric有关,不过这时候可以看到一个单词Script。于是去Build Phases下找了下,发现Run Script有以下脚本:

1
./Fabric.framework/run c85ad901eb0173a488b631e90f5913415f7424d1 bcd847cf6b15b2605cfff9400a4da335ce5ea3a0ac481dd143db404b55a09e73

将其删除。

另外,Info.plist文件里面包含一个Fabric字典,这个也可以删除掉,不过删不删没啥影响。

到此,项目就可以正常的运行起来了,运行起来的坑算是解决了。不过,要想用好这些东西,后面的坑还多着呢。

如果你搭建好了Teamtalk服务器。

回到iOS端代码,注释掉以下代码:

1
2
//    userName = @"铸剑";
// password = @"123456";

偷懒也不带这样的吧,可以给输入框赋默认值啊。提交代码更不该这么做吧,很多人会看你写的东西呢。

然后,修改

1
#define SERVER_ADDR @"http://61.153.100.221:8080/msg_server"

这个宏,换成你自己配的。

再然后,进到LoginAPI.m这个文件,将if (loginResult != 0)改成if (loginResult == 0) 或者直接去掉这个判断直接交给外界处理,这个错误怎么说呢… 完全就不想你看到登录成功呀!!!

另外,给result字典添加键值@"code":@(loginResult),如下

1
2
3
4
5
result = @{@"serverTime":@(serverTime),
@"result":resultString,
@"user":user,
@"code":@(loginResult)
};

后面明明用到了code,你却不传给我…

处理到这里,基本可以登录上了。如果不行,看看服务端配的是否正确。另外,登录账号输入框提示写的内网花名,实际却是真名…

另外,你需要将bubble.bundle添加到项目中,否则文本和语音会崩。这个文件在Resource/Bundle目录下面,拖到项目中即可。

开启日志打印:

1
#define NEED_OUTPUT_LOG             1

小结

看完文章,想必大家也看到了很多的问题。不过代码还是值得研究的,熟悉了底层通讯、PB的使用、如何在客户端增加接口等,你就可以开始彻底的改造源码了。


原创文章,版权声明:自由转载-非商用-非衍生-保持署名 | Creative Commons BY-NC-ND 3.0