前言:git
Telegram不知道有多少同行听过这玩意,或者在看它的源码。我是出于工做缘由才接触到这东西,看的真是的......变方了!一个月估计刚刚找到门,还没进去多深,把本身的心得和对源码的认识以及我工做中一些列的关于这个Telegram引起的问题全都写出来,但愿能够遇到同路中人,你们一块儿探讨学习!有兴趣的同行能够加文章最后面的telegramiOS开发学习群,一块儿学习讨论Telegram问题,一块儿进步!github
先认识一些Telegram的源码以及基本框架的一个框架,遇到的问题咱们会一点点的解决!架构
一:下载完了源码懵了没?dom
首先的说一下,我如今能完整运行的这份源码呢,是公司之前的同事运行起来的,据说妹纸运行了一个星期,真的是...辛苦了,谢谢你了,最后我仍是尝试着在最新git源码的基础上从新运行一份,增长一下让它能完整运行的经验,但愿能够帮到你们,下面是本身整理完以后可以完整运行的git连接,我是把它上传到本身的git。固然你能够去它原来的git下载,本身尝试着运行一下。下面连接这份我是通过了国际化处理的,让它支持了中文!!学习
编译经过版本3.16 -- iOS端Telegram源码连接 加密
Telegram运行起来,可能没那么容易。 spa
二:总体的一个框架认识code
先看一下源码总体的一个架构,下面的图就是源码的框架截图:orm
嗯,第一感受确定是很乱,其实你的感受没错,是真的很乱!这些东西要分析写出来就真的太多了,说那个文件是什么控制器,那个东西在哪里,感受没有太大的意义,z这里简单的说一下一个大概,可能刚看的时候会与一点用吧,最下面有群,有问题加进来一块儿讨论吧。有两个地方提一下,看下面的图,单从最简单的出发的话,下面两个地方你关注的可能会多一点:
1:控制器
2:消息发送接收
这里面主要你要了解项目宗最基本的开始的话,几乎都在Telegraph文件里面,我就大概的总结一下这个文件里面的子文件夹都存放的什么,好比说主要的控制器在哪,图片在哪等等的,从最基本的了解一下他的主要的文件都在哪里。剩下的好比说发送的方法在哪的,这个就真的多的没办法说了,有问题仍是在群里面交流!
--------------------------------------------------- 我是分割线 ------------------------------------------------------------------------
AppResources 文件
这个文件放的所有都是整个应用的图片,本身的意见,不喜欢这样直接把项目图片放进去,最好加入Images.xcassets文件中。
Legacy 文件
文件主要是项目用到的一些属性类,好比消息体的封装,本身用到的颜色分装,文件的属性等等这些类。
submodules 文件
这个文件里面的东西真的不太懂。
App Delegate 文件
这个我就很少加解释了,估计也都明白。
User Interface 文件
这里面有分了Legacy和Controllers两个文件,这个文件UI就就几乎都在这里了,登陆和主要的控制器都在这两个文件里面。
Elements 文件
这个文件主要都是一些自定义的基础控件
Core 文件
看字面的意思,这个也是主要的,里面涉及到消息的发送、接收、回调、请求等等都在这里。还有一点须要特别说明的:你要找消息的发送接收的方法的话藏得仍是挺深的 在下面的ActionStage文件的Actors里面有个Messages文件,这里就是具体消息的发送接收,你能够去看看。
Bridge 文件
这个文件里面的东西,我看了看感受就像咱们平时写的Model,具体的须要你去看源码学习了。
--------------------------------------------------- 我是分割线 ------------------------------------------------------------------------
上面说的这的到这里,下面说说怎么对它进行的中文处理,因为公司的项目是在这个的基础上作的,之后很长时间估计本身全都会和这个项目打交道,因此有什么问题你们积极交流,这个我真的也只是刚入门,还在看代码,要是能有大神进群聊聊那就真的是开心了。。
三:让它支持中文
直接进入主题了,先说说这个文件 #import "TGCommon.h".这个TGCommon里面定义的都是一些经常使用的方法,好比比较字符串是否相等、获取系统的版本号、字符串的MD5加密等等的东西,固然咱们要说的这个国际化的 TGLocalized 也是在这里定义的,之前的时候咱们的国际化的可能都是经过NSLocalizedString来获取Value值,设置给相应的控件的。这里的这个 TGLocalized 说白了就是对它的一个自定义封装。先看看在我传到Git上的源码里面是添加了中文支持的文件的。
下面是源码,注意里面哪里的判断,要是不理解或者是有问题仍是那句,加咱们下面的群,想把这个群作好一点,找一些你们都在研究同一个东西的同行,交流能够更快的了解这个Telegram。
#pragma mark -- 自定义本地化TGLocalized NSString * TGLocalized(NSString *s){ static NSString * untranslatedString = nil; static dispatch_once_t onceToken1; dispatch_once(&onceToken1, ^{ untranslatedString = [[NSString alloc] initWithFormat:@"UNTRANSLATED_%x", (int)arc4random()]; if ([[NSFileManager defaultManager] fileExistsAtPath:customLocalizationBundlePath()]) customLocalizationBundle = [NSBundle bundleWithPath:customLocalizationBundlePath()]; }); if (customLocalizationBundle != nil){ NSString *string = [customLocalizationBundle localizedStringForKey:s value:untranslatedString table:nil]; if (string != nil && ![string isEqualToString:untranslatedString]) return string; } static NSBundle * localizationBundle = nil; static NSBundle * fallbackBundle = nil; static dispatch_once_t onceToken; dispatch_once(&onceToken, ^{ fallbackBundle = [NSBundle bundleWithPath:[[NSBundle mainBundle] pathForResource:@"en" ofType:@"lproj"]]; NSString *language = [[NSLocale preferredLanguages] objectAtIndex:0]; if ([language isEqualToString:@"gl"] || [language isEqualToString:@"eu"]) { language = @"es"; } if (![[[NSBundle mainBundle] localizations] containsObject:language]){ localizationBundle = fallbackBundle; if ([language rangeOfString:@"-"].location != NSNotFound){ //****** 经过下面的判断,让它支持中文 ************/ //*******************************************/
NSString *languageWithoutRegion; if ([language isEqualToString:@"zh-Hans-CN"]) { languageWithoutRegion = @"zh-Hans"; }else{ languageWithoutRegion = [language substringToIndex:[language rangeOfString:@"-"].location]; } for (NSString * localization in [[NSBundle mainBundle] localizations]){ if ([languageWithoutRegion isEqualToString:localization]){ NSBundle *candidateBundle = [NSBundle bundleWithPath:[[NSBundle mainBundle] pathForResource:localization ofType:@"lproj"]]; if (candidateBundle != nil) localizationBundle = candidateBundle; break; } } } } else localizationBundle = [NSBundle mainBundle]; }); NSString *string = [localizationBundle localizedStringForKey:s value:untranslatedString table:nil]; if (string != nil && ![string isEqualToString:untranslatedString]) return string; if (localizationBundle != fallbackBundle){ NSString *string = [fallbackBundle localizedStringForKey:s value:untranslatedString table:nil]; if (string != nil && ![string isEqualToString:untranslatedString]) return string; } return s; }
上面说的就这么多吧,写这篇的主要目的除了给出能完整运行的Telegram iOS端的源码以外,还有说说这个支持中文的处理,最后仍是想把这个群推荐出去,不论是Android仍是PC仍是iOS,只要是和Telegram相关的问题,都有人会帮你解决,你找到队伍了!
***************** 群号能够直接粘贴这里:485718322 (已升级千人群)