Telegram 技巧档案UIKIT · APPKIT

风险与可借鉴性

主要私有 API 与 hack 的风险分级、13.0 发布版与 macOS 26.7 上的状态,以及可安全借鉴的做法。

风险等级

“高”表示依赖私有类、私有方法或内部层级。系统改动后它会失效,也可能影响 App Store 审核。“中”表示依赖私有 KVC 键、内部名称或进程级方法替换,但失败时影响有限,或会静默跳过。

iOS 条目的状态列都是“未验证”,因为 iOS 二进制受 FairPlay 加密。macOS 条目的状态来自 REA 二进制验证。

平台
风险
19 / 19 项
私有 API / hack平台用途风险13.0 二进制 / macOS 26.7
_UIPortalViewiOS跨层镜像真实内容高未验证(iOS 二进制加密)
CALayer.cornerRadii KVCiOS四角圆角可动画高未验证(iOS 二进制加密)
_scrollHeartbeat KVCiOS滚动高刷心跳高未验证(iOS 二进制加密)
_solveForInput:iOS系统弹簧求值器高未验证(iOS 二进制加密)
WKWebsiteDataStoreReinitializeAppBoundDomainsiOS动态 App-Bound 域高未验证(iOS 二进制加密)
_verticalVelocity KVCiOS个人页二次下拉判定高未验证(iOS 二进制加密)
_UILiquidLensViewiOS系统 Liquid Lens高未验证(iOS 二进制加密)
CAFilter/luminanceToAlpha/variableBluriOS玻璃/可变模糊高未验证(iOS 二进制加密)
CABackdropLayeriOS旧版玻璃 backdrop高未验证(iOS 二进制加密)
FileManager IMP 替换iOS/macOS规避 MTLBinaryArchive 崩溃中13.0 已发布;启动时未触发
CAEmitterBehaviormacOS吸引/生命周期行为高13.0 已发布;26.7 可用
contentsMultiplyColor KVCmacOS图层着色中13.0 已发布;26.7 可用
NSVisualEffectView 内部层与滤镜macOS精简毛玻璃中13.0 已发布;26.7 结构仍吻合,多出 sdrNormalize
NSCursor 私有对角光标macOS调整窗口光标高13.0 已发布;26.7 仍实现
NSTitlebarView 子层重排macOS标题栏自定义高13.0 已发布;26.7 结构仍在
AVMovableView 深挖按钮macOS播放器全屏高13.0 已发布;26.7 类仍在,按钮路径未验证
_shareServiceSelected: 菜单过滤macOS删除系统子菜单中13.0 已发布;26.7 改名,可能失效
MKZoomSegmentedControlmacOS移动地图缩放控件中13.0 已发布;26.7 不在视图树,静默跳过
FinderInfo/资源叉macOSDock 图标替换高13.0 已发布;未执行

可安全借鉴的做法

下列做法只用公开 API 或纯算法,不依赖私有接口。它们可以直接迁移到其他 UIKit 或 AppKit 项目。

  1. 01UI 过渡“模型先到位+additive”与从 presentationLayer 接力的动画接续。
  2. 02列表“稳定身份+锚点+占位”的差分与滚动锚定策略。
  3. 03共享 DisplayLink/Timer 合并多动画帧率诉求与按需降帧。
  4. 04IOSurface/像素池与背压阈值的资源闸门设计。
  5. 05文本“占位几何+独立渲染”的附件/表情架构。
  6. 06设备/窗口安全区与刘海几何表驱动的尺寸适配(公开 API +数据表)。
  7. 07异步绘制的原子取消、主线程原子回填与显式生命周期管理。

两段可复用的代码

共享一张渐变图,只动画 contentsRect。所有 shimmer 图层共用同一份位图,不需要逐帧重绘。来源:SparseItemGrid.swift#L131-L145。

SparseItemGrid.swift
// iOS Shimmer:共享渐变图 + contentsRect
let animation = CABasicAnimation(keyPath: "contentsRect.origin.y")
animation.fromValue = 1.0 as NSNumber
animation.toValue = -1.0 as NSNumber
animation.isAdditive = true
animation.repeatCount = .infinity
animation.duration = 0.8
layer.add(animation, forKey: "shimmer")

本页目录