Telegram-iOS 源码分析:第一部分

版权声明
本文内容均为搬运,目的只为更方便的学习Telegram编码思维。

如需查阅原作者文章,附赠原文章机票

part-1-cover.png

Telegram是市面上最受欢迎的即时通讯之一。截至今年4月,其MAU(月活跃用户人数)已超过4亿。考虑到某些国家/地区不提供该服务,这显然是一个了不起的成就。

大多数Telegram客户端应用程序源码都是开源的,足以证明其安全性。Telegram官方还启用了一个新流程以允许其他人验证iOS和Android源代码是否与AppStore和Google Play上使用的版本相同。此过程是值得赞赏的举动,有助于缓解过去几年对其缓慢发布习惯的批评。

Telegram-iOS该代码库展示了其解决其他iOS工程师可能遇到的许多实际工程问题的解决方案,例如可靠的网络,安全存储,响应事件,多媒体播放,交互式UX,复杂列表UI,对系统控制器的自定义等。

源码概述

Telegram-iOS通过200多个子模块和200万行代码来构建源代码。我将这些模块大致分为五类:

  • App,支持主要应用功能的模块,例如基础工具,UI,网络等。
  • VoIP,语音通话功能(已于2017年3月发布)。
  • Watch,Watch应用程序。
  • TON,与新区块链平台的实验性集成。
  • 3rd-party,项目所依赖的其他开源库。

以下是每个类别的LOC(项目度量代码行统计方法)统计信息:


part-1-list.png

Telegram-iOS是一个混合语言项目。通过查看App文件分类,Swift占将近70%的代码,Objective-C/C++占24%的代码。Buck用作构建工具。看上去正在移向Bazel。对于不熟悉iOS构建工具的读者,普通的Xcode项目文件格式(如.xcodeproj.xcworkspace)足以用于较小的项目。从长远来看,由于文件以XML表示并通过Xcode UI指令进行编辑,将变得难以维护。当Xcode文件内部存在合并冲突时,通常这不是一种令人愉快的体验,而且在代码检查期间发现问题也十分困难。

Buck是Facebook开发的构建系统。它鼓励由代码和资源组成的小模块,从而产生干净的构建配置文件和更快的并行构建。对于一个典型的模块,它只具有一个BUCK文件来描述构建规则,该Sources文件以十几行代码描述,一个用于代码文件的文件Resouces夹,以及一个存放图片的可选文件夹。该命令buck project可以生成Xcode项目文件,供工程师在Xcode中开发,并且这些文件在Git中被显式忽略。您可以在Makefile文件中找到更多详细信息。

子模块(Submodules)

Telegram-iOS总共有229个子模块,其中136个模块由不超过两个源文件和几百行组成。

总结

代码统计信息应该对Telegram-iOS项目有一个简短的印象。下一篇文章将讨论其基础模块。

你可能感兴趣的:(Telegram-iOS 源码分析:第一部分)