Telegram 技巧档案UIKIT · APPKIT

报告概览

结论、范围与方法、章节地图和共性规律。

结论

本报告分析了 Telegram 官方 iOS 客户端和 macOS 客户端的源码,整理出两端在 UIKit 和 AppKit 上的非常规做法。15 份主题笔记共收录 300 条技巧,每条都附固定提交的源码行号。其中 88 条被选入报告正文(iOS 61 条,macOS 27 条),在站内标为“报告精选”。

iOS 客户端的技巧集中在三类。第一类绕开 UIKit 的布局与滚动栈:用 AsyncDisplayKit 节点、隐形 UIScrollView 和旋转 π 的列表自建界面。第二类直接操作系统私有对象:键盘窗口、_UIPortalView、_UILiquidLensView 和多个私有 KVC 键。第三类自管渲染管线:IOSurface 图集、Metal 三缓冲和共享 DisplayLink。

macOS 客户端的 TGUIKit 用 AppKit 复刻 UIKit 的习惯:统一翻转坐标,关闭隐式动画,自管 NSTableView 行高,用无键窗口自绘菜单。它的私有 API 集中在系统集成:CAEmitterBehavior 粒子行为、私有缩放光标、NSTitlebarView 重排、AVMovableView 深挖、Dock 图标资源叉和全局 CGEvent tap。

源码分析之后,我在 macOS 云电脑上用 REA 分析了官方 Telegram for macOS 13.0 的二进制,做补充验证。核对的 20 项中,16 项在发布版里有直接证据,2 项是版本差异。在 macOS 26.7 上,有 2 条私有路径已与系统结构不一致。iOS 二进制受 FairPlay 加密,没有验证。详情见 REA 二进制验证。

怎么使用本站

想按条件找技巧,用技巧索引。想比较两端解法,用两端对照。想全文搜索 API 名或文件名,按 ⌘K 或 Ctrl K。

范围与方法

项目Telegram-iOSTelegramSwift(macOS)
仓库TelegramMessenger/Telegram-iOSovertake/TelegramSwift
分析提交f1dd7a2d(2026-10-07)579cebbf(2025-07-29,master 最新)
源码规模5,493 个 Swift 文件,913 个 ObjC/ObjC++ 文件1,265 个 Swift 文件,88 个 ObjC 文件
主题笔记01–11(11 份)12–15(4 份)
二进制验证未做(App Store IPA 加密)官方 13.0(build 283305)

源码精读。 15 个子任务按主题并行读源码,其中第 09 主题(聊天界面)是单独补做的。每条技巧都写明“做了什么、为什么、怎么做到、风险”,并附源码行号。

合并精选。 我把 15 份主题笔记合并、去重,按技巧的独特性和可借鉴性精选出 88 条报告正文条目。

二进制验证。 我在 macOS 26.7 云电脑上用 REA 6.7.0 和 Rizin 0.9.1 分析发布版二进制,并在系统上实测私有类和 selector 是否仍存在。

章节地图

每个章节对应一份主题笔记。右侧数字是“条目数 · 精选数”。

iOS · UIKit

Telegram-iOS · 11 份主题笔记

macOS · AppKit

TelegramSwift · 4 份主题笔记

共性规律

两个客户端都以显示层为真源。布局先写模型层,再让显式动画追赶屏幕。presentation() 与 additive 动画负责接力中断的动画。稳定身份与延迟销毁维持 diff 过渡。

iOS 借 UIScrollView 的物理和私有窗口拼装新栈。macOS 复刻 UIKit 习语,并显式管理 Core Animation 的生命周期。两端都用 Portal 思路复用像素。文本与贴纸都采用“占位几何加独立渲染”。

渲染依靠 IOSurface、像素池与按需提交。列表用旋转或翻转坐标保存锚点语义。算法与缓存通常不依赖私有 API。共享播放和解码上下文减少重复成本。

状态栏和键盘代理隔离了系统差异。复杂转场先镜像 Portal,再归还真实视图树。私有入口只在必要处使用,并尽量自检 ABI。

条目格式

章节页中的每条技巧都按同一结构组织。标题下方是元信息:条目编号、源码项目、框架、验证方式和标签,以及指向固定提交的源码链接。正文依次是“做了什么”“为什么这样做”“关键代码摘录”和“代价与风险”。最后的“证据链”汇总源码确认情况、报告摘要和二进制验证结果。

标记含义
报告精选该条进入报告正文,编号形如 01-1
源码分析已在固定提交中逐行确认
REA 二进制在 13.0 发布版的 arm64 切片中找到字符串、导入或类表证据
macOS 26.7 实测用检查程序确认私有类、selector 或视图树是否仍存在
REA 运行时观测在 LLDB 下启动 13.0 副本 40 秒,记录断点调用
私有 API、运行时 hack依赖未公开接口或改写运行时行为,借鉴前先看风险页

本页目录