Telegram 技巧档案UIKIT · APPKIT

参考与术语

源码仓库与提交、二进制与工具、术语表和研究边界。

源码仓库

项目仓库分析提交说明
iOSTelegramMessenger/Telegram-iOSf1dd7a2d(2026-10-07)Bazel 构建,UI 基于 AsyncDisplayKit 分叉与自研 Display 模块
macOSovertake/TelegramSwift579cebbf(2025-07-29)UI 基于自研 TGUIKit,静态链接 telegram-ios 子模块中的共享模块

站内所有源码链接都指向上表的固定提交,所以行号不会随仓库更新而漂移。

二进制与工具

名称用途链接
Telegram for macOS 13.0被验证的发布版二进制(build 283305)telegram.org/dl/macos
REA 6.7.0二进制分析编排工具,提供 Mach-O、签名、加载关系、Rizin 命令和 LLDB 运行时观测morluto/rea
Rizin 0.9.1REA 的 execute-rizin-command 后端,导出字符串、类表与反汇编rizinorg/rizin
Fumadocs本站使用的文档框架fumadocs.dev

术语表

术语定义
AsyncDisplayKit(ASDK)Facebook 开源、后更名为 Texture 的异步 UI 框架。Telegram-iOS 维护自己的分叉,用 ASDisplayNode 在后台线程布局和绘制
TGUIKitTelegramSwift 的自研 UI 库,用 AppKit 复刻 UIKit 的视图、列表和导航习惯
私有 APIApple SDK 头文件中没有声明的类、方法、selector 或 KVC 键
KVCKey-Value Coding。通过字符串键读写对象属性,私有属性也能这样访问
IMPObjective-C 方法的函数指针。取得 IMP 后可以按 C 函数调用,或替换成自己的实现
方法交换(swizzling)在运行时交换或替换某个 selector 对应的 IMP
ISA 替换在运行时把对象的类指针改成自动生成的子类,以改变单个实例的行为
Portal把同一份图层内容显示在另一位置的私有机制,例如 _UIPortalView 和 CAPortalLayer
CABackdropLayer采样其下方屏幕内容的私有图层,是系统毛玻璃的底层实现
CAFilterCore Animation 的私有滤镜类,可创建高斯模糊、颜色矩阵、位移贴图等效果
additive 动画isAdditive = true 的动画。它的值叠加在模型值上,所以可以从旧位置平滑追赶新位置
presentation layer图层当前在屏幕上的状态。中断动画时,从它取起点可以避免跳变
显示链接CADisplayLink(iOS)或 CVDisplayLink(macOS),按屏幕刷新回调
IOSurface可在进程与 GPU 间共享的像素缓冲
Swift 小字符串15 字节以内的 Swift String 直接存进两个机器字,不单独分配内存,编译后常以立即数形式出现
MOVZ/MOVKarm64 中把 16 位立即数写入寄存器指定位置的指令,短字符串常用它拼出
FairPlayApp Store 对 iOS 可执行文件的加密,因此 iOS 发布版无法直接做静态分析
hardened runtimemacOS 的运行时保护。开启后,未带 get-task-allow 的进程不能被调试器附加
ad-hoc 签名不使用开发者证书的本地签名,用于在本机运行修改过的副本
CGEvent tap在系统事件流中插入的监听器,可以接收其他应用的键盘和鼠标事件
资源叉、FinderInfoHFS+/APFS 文件的附加数据流与 Finder 元数据位,Telegram 用它们给自身 bundle 设置自定义图标
Evidence IDREA 为每次分析输出生成的内容哈希,用于复核结果

研究边界

  • 本站内容来自公开源码的静态分析,以及一次针对 macOS 13.0 的二进制验证。
  • 运行时观测只覆盖启动和登录页,没有登录账号,也没有进入聊天界面。
  • iOS 部分全部是源码分析,没有二进制验证。
  • 条目中的私有 API 用法仅用于技术研究。借鉴前请先看风险与可借鉴性。

数据来源

站点由 15 份主题笔记、1 份 REA 验证笔记和 1 份整合报告生成。笔记保存在项目仓库的 source-notes/ 目录中。scripts/build_content.py 把笔记转换为章节 MDX 和条目数据,所以重新运行脚本即可更新站点内容。

本页目录