前言:

Telegram不知道有多少同行听过这玩意,或者在看它的源码。我是出于工作原因才接触到这东西,看的真是的......变方了!一个月估计刚刚找到门,还没进去多深,把自己的心得和对源码的认识以及我工作中一些列的关于这个Telegram引发的问题全都写出来,希望可以遇到同路中人,大家一起探讨学习!有兴趣的同行可以加文章最后面的telegramiOS开发学习群,一起学习讨论Telegram问题,一起进步!

先认识一些Telegram的源码以及基本框架的一个框架,遇到的问题我们会一点点的解决!

一:下载完了源码懵了没?

首先的说一下,我现在能完整运行的这份源码呢,是公司以前的同事运行起来的,听说妹纸运行了一个星期,真的是...辛苦了,谢谢你了,最后我还是尝试着在最新git源码的基础上重新运行一份,增加一下让它能完整运行的经验,希望可以帮到大家,下面是自己整理完之后能够完整运行的git链接,我是把它上传到自己的git。当然你可以去它原来的git下载,自己尝试着运行一下。下面链接这份我是经过了国际化处理的,让它支持了中文!!

Telegram运行起来,可能没那么容易。

二:整体的一个框架认识

先看一下源码整体的一个架构,下面的图就是源码的框架截图:

嗯,第一感觉肯定是很乱,其实你的感觉没错,是真的很乱!这些东西要分析写出来就真的太多了,说那个文件是什么控制器,那个东西在哪里,感觉没有太大的意义,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;}}}}elselocalizationBundle = [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

Telegram学习解析系列(一):认识一下Telegram的源码相关推荐

  1. Crackme006 - 全新160个CrackMe深度解析系列(图文+视频+注册机源码)

    原文链接 CrackMe006 | 难度适中适合练手 |160个CrackMe深度解析(图文+视频+注册机源码) crackme006,依然是delphi的,而且没壳子,条线比较清晰,算法也不难,非常 ...

  2. MVVM架构~knockoutjs系列之从Knockout.Validation.js源码中学习它的用法

    说在前 有时,我们在使用一个插件时,在网上即找不到它的相关API,这时,我们会很抓狂的,与其抓狂,还不如踏下心来,分析一下它的源码,事实上,对于JS这种开发语言来说,它开发的插件的使用方法都在它的源码 ...

  3. Java 集合系列03之 ArrayList详细介绍(源码解析)和使用示例

    转载自  Java 集合系列03之 ArrayList详细介绍(源码解析)和使用示例 第1部分 ArrayList介绍 ArrayList简介 ArrayList 是一个数组队列,相当于 动态数组.与 ...

  4. linux的进程/线程/协程系列3:查看linux内核源码——vim+ctags/find+grep

    linux的进程/线程/协程系列3:查看linux内核源码--vim+ctags/find+grep 前言 摘要: 1. 下载linux内核源码 2. 打标签方法:vim+ctags 2.1 安装vi ...

  5. vscode中安装webpack_leaflet-webpack 入门开发系列一初探篇(附源码下载)

    前言 leaflet-webpack 入门开发系列环境知识点了解: node 安装包下载 webpack 打包管理工具需要依赖 node 环境,所以 node 安装包必须安装,上面链接是官网下载地址w ...

  6. 一步步实现windows版ijkplayer系列文章之三——Ijkplayer播放器源码分析之音视频输出——音频篇

    https://www.cnblogs.com/harlanc/p/9693983.html 目录 OpenSL ES & AudioTrack 源码分析 创建播放器音频输出对象 配置并创建音 ...

  7. 【Active Learning - 00】主动学习重要资源总结、分享(提供源码的论文、一些AL相关的研究者)

    主动学习系列博文: [Active Learning - 00]主动学习重要资源总结.分享(提供源码的论文.一些AL相关的研究者):https://blog.csdn.net/Houchaoqun_X ...

  8. 图文深度解析Linux内存碎片整理实现机制以及源码

    图文深度解析Linux内存碎片整理实现机制以及源码. 物理内存是以页为单位进行管理的,每个内存页大小默认是4K(大页除外).申请物理内存时,一般都是按顺序分配的,但释放内存的行为是随机的.随着系统运行 ...

  9. php手游服务端开发教程,【手游服务端】梦想海贼王 卡牌系列一键端服务端游戏源码+教程...

    [手游服务端]梦想海贼王 卡牌系列一键端服务端游戏源码+教程 游戏介绍: <梦想海贼王>是一款卡牌类手游,游戏以全球第一超人气动漫<海贼王>为题材,用Q版风格配合新奇多样的玩法 ...

最新文章

  1. 教育部公布:清华北大等12校首批开设“未来技术学院”,它们都设置了哪些专业?...
  2. 电子计算机微机调试员,电子计算机(微机)装配调试员国家职业标准
  3. python源码学习_【Python学习】Python源码阅读(一)
  4. Spinner的使用方法
  5. Serverless 落地挑战与蚂蚁金服实践
  6. mysql md5解密_Web渗透测试——Mysql数据库手工注入
  7. VUE+axios+php实现图片上传
  8. Windows动态桌面原理
  9. 机房收费系统——可行性分析报告
  10. 家庭wifi部署建议
  11. WIN10 U盘打开无权限问题
  12. 计算机二级考试python考试大纲
  13. 东方博易OJ——1002 - 【入门】编程求解1+2+3+...+n
  14. 【stm32单片机基础】按键状态机实现长按和短按
  15. 托格机器人_爱,死亡和机器人人第一季
  16. 程序设计基础—什么是逻辑与、或、非关系?
  17. VPS融合怪测评脚本(主体已完善,历史遗留问题解决时间未知)(VPS fusion monster evaluation script)
  18. 2022.10.1 NYIST 国庆欢乐进行曲题解
  19. 开源项目之杀毒软件 clamwin
  20. 文艺中年高晓松成“岛主” 上万册图书免费看

热门文章

  1. 基于人工智能 AIGC 创业 BP计划书示范
  2. 一个阿里巴巴码农的六年回眸
  3. 3、孟子·滕文公上 孟子·滕文公下
  4. prince2 成功的项目管理_PRINCE2成功的项目管理方法论学习开启
  5. 单片机原理及应用流水灯实验
  6. 视频声音怎么翻译?这几个办法教你实现视频声音翻译成中文
  7. 数字孪生智慧园区教学实训平台建设研究案例
  8. 【转】 制作集成了AHCI驱动的xp sp3系统盘
  9. 百度ocr 图片转文字
  10. 浪涌防护器件特点与选型