- 原文地址:Source Code Walkthrough of Telegram-iOS: Part 1
- 原文作者:Bo
- 译文出自:掘金翻译计划
原文地址 hubo.dev
Telegram is one of the most popular instant messengers in the market. As of April this year, its MAU ......
Telegram是市场上最受欢迎的即时通讯工具之一。截至今年四月,其用户活跃数已经超过4亿。能够在某些国家无法使用其服务的情况下,维持如此之高的活跃用户,这是一项非常了不起的成就。
许多Telegram客户端应用程序均开放了源代码,以此来证明其安全性。Telegram也发起了一个新流程,通过这个流程,使用者们可以验证iOS和Android的源代码是否和他们在AppStore和Google Play上使用的是相同的版本。发起流程的举措值得被赞赏,这也有助于缓解过去几年里对其怠慢的发布习惯的批评。
由于iOS是我最喜欢的平台,第一个系列的文章都是关于Telegram-iOS的。该代码仓库展示了其他iOS工程师们会遇到的一些实际工程问题的解决方法,比如鲁棒网络、安全存储、反应式事件、多媒体播放、交互式用户体验、复杂列表的用户界面、对系统控制器的定制/黑客攻击等。
Telegram-iOS的源代码由200多个子模块构成,代码超过了200万行。我粗略将这些模块罗列为五类:
App,这个模块支持主要应用程序特性,比如基本常用的工具、用户界面、网络等。VoIP(Voice over Internet Phone),这是2017年3月下旬发布的语音通话功能。Watch,手表应用程序。TON,在新区块链平台上进行的试验性集成。3rd-party,Telegram所依赖的其他开源项目。
以下是对每个类别的代码行数的统计:
Telegram-iOS是一个混合语言项目。通过查看App类别,可以看到有将近70%的Swift代码和24%的Objective-C/C++。该项目使用的构建工具为Buck。但似乎该项目也正在转向使用Bazel来进行构建。对于那些不熟悉iOS构建工具的读者来说,普通的Xcode项目文件格式,如".xcodeproj "和".xcworkspace",对于小型项目来说已经足够了。因为文件是用XML表示的,并通过Xcode UI指令进行编辑,从长远来看,若不使用构建工具,将会使得项目变得难以维护。往往多文件在Xcode中产生合并冲突这种事情会让人感到不悦,同时想要在代码审查中发现问题也是件极具挑战性的事情。
Buck是Facebook公司开发的构建系统。它鼓励开发者将代码与资源整合为小模块,这样做的结果就是,产生干净的构建配置文件,使得拥有更快的并行构建能力。对于一个标准模块,它只需要一个简单的BUCK文件通过十几行来描述构建的规则,一个Sources文件夹用于存放代码,还有一个可选的Resouces文件夹用来存放图片。命令buck project可以生成Xcode项目文件,以供工程师们在Xcode中进行开发,并且这些文件在Git中被明确忽视。你可以在Makefile中找到更多的细节。还有一个来自于Airbnb公司的临时项目使用的是Buck来构建iOS应用程序。
以下是所有229种子模块的统计数据列表。其中有136个模块由不超过两个源文件组成,代码只有几百行。有些小模块不值得被放在专用模块中,可能会被并入IMO中,但这不过是设计品味层面上的事罢了。
代码统计应该能让人对Telegram-iOS项目有一个简单的印象。我将在下一篇文章中谈及基础模块。