Idealisan

Telegram Mac Swift 原生客户端编译流程记录

时间:2026 年 7 月 26 日
目标:在 Intel Mac(黑苹果,macOS 26)上编译 Telegram Swift(Telegram macOS 原生客户端)

环境:

  • macOS 26
  • Intel x86_64 Hackintosh
  • Xcode(命令行构建)
  • 目标架构:
    • arm64
    • x86_64(Universal Binary)

1. 获取源码

首先 clone TelegramSwift:

git clone https://github.com/TelegramMessenger/Telegram-iOS.git

(实际仓库以 TelegramSwift 主仓库为准)

尝试:

git checkout master

但是 master 分支无法成功编译。

因此切换到 release:

git checkout release

当前使用版本:

  • release 分支最后 commit:
    • 2025-08-01 06:16 左右

后续全部基于该版本。


2. Intel Mac 下 FlatBuffers 工具问题

问题

仓库:

scripts/

目录中自带:

flatc

这是 Google FlatBuffers 的编译工具。

但是仓库里的版本是:

ARM64 Mach-O binary

因此 Intel Mac 执行脚本时:

Bad CPU type in executable

解决

从 Google FlatBuffers 官方 release 下载 Intel Mac 版本。

使用版本:

v25.12.19-2026-02-06-03fffb2

对应源码 commit:

03fffb2

替换:

scripts/flatc

确保:

file scripts/flatc

显示:

Mach-O 64-bit executable x86_64

3. 修改 rebuild 配置

根据 Telegram 编译文档要求:

找到:

rebuild

相关配置。

将:

no

修改为:

yes

否则不会重新生成需要的内容。


4. 修复 mozjpeg CMake 版本问题

路径:

submodules/
 telegram-ios/
  submodules/
   third-party/
    mozjpeg/
     CMakeLists.txt

第一行:

原:

cmake_minimum_required(VERSION 2.8.12)

新版 CMake 已经不接受这么低的版本。

尝试删除:

失败。

最终修改:

cmake_minimum_required(VERSION 4.2)

然后重新执行。


5. configure_frameworks 增量编译技巧

脚本:

configure_frameworks.sh

里面有:

libs=(...)
libname=(...)

编译流程:

OpenH264
OpenSSL
libopus
libvpx
mozjpeg
libwebp
dav1d
ffmpeg
webrtc
tde2e

因为 mozjpeg 失败之前:

前面的库已经成功。

所以为了避免重复编译:

删除:

libs
libname

数组前面已经完成的项目。

例如:

从:

OpenH264
OpenSSL
libopus
libvpx

开始删除。

这样重新执行:

./configure_frameworks.sh

会跳过已经完成的库。


6. FFmpeg 编译失败

错误

路径:

TelegramSwift/
 core-xprojects/
  ffmpeg/

寻找源码失败。

实际源码:

submodules/
 telegram-ios/
  submodules/
   ffmpeg/
    sources/
     ffmpeg/
      ffmpeg-7.1.1

但是脚本寻找:

ffmpeg-7.1

修复

直接改目录名:

mv ffmpeg-7.1.1 ffmpeg-7.1

然后继续:

./configure_frameworks.sh

同样:

由于 FFmpeg 前面的库已经成功:

继续修改:

configure_frameworks.sh

跳过:

OpenH264
OpenSSL
libopus
libvpx
mozjpeg
libwebp
dav1d

避免重复编译。


7. 最大问题:tde2e Intel Mac 构建失败

最后一个库:

tde2e

出现架构问题。

现象:

生成:

arm64
native tools

但是:

没有:

x86_64

同时后续步骤直接调用:

arm64 binary

导致:

Intel Mac 无法运行。


原因判断

Telegram 当前 release 分支:

tde2e 构建流程已经默认:

Apple Silicon Mac 环境

而不是 Intel Mac。

因此需要手动告诉 CMake:

当前:

Host:

x86_64

Target:

arm64

属于交叉编译。


8. 修改 tde2e/build.sh

路径:

core-xprojects/tde2e/build.sh

找到:

Build for arm64

部分。

原:

cmake "$SOURCE_DIR" \
    -DCMAKE_OSX_ARCHITECTURES=arm64 \

修改:

cmake "$SOURCE_DIR" \
    -DCMAKE_OSX_ARCHITECTURES=arm64 \
    -DCMAKE_SYSTEM_NAME=Darwin \
    -DCMAKE_HOST_SYSTEM_PROCESSOR=x86_64 \

然后继续原来的 options。


注意

Shell 续行:

错误:

-DCMAKE_SYSTEM_NAME=Darwin \          # comment

因为:

\ 后面不能有任何字符。

正确:

-DCMAKE_SYSTEM_NAME=Darwin \

否则 shell 会认为续行失败。


重新执行:

./configure_frameworks.sh

最终:

configure_frameworks

成功完成。


9. 修改 Telegram API 配置

编译主程序前,需要修改:

API ID

API Hash

Bundle Identifier

建议使用PyCharm全局替换。找到对应位置替换:

api_id
api_hash
bundle id

10. 修改 Apple Team ID

查找 Mac 已存在开发者 Team ID:

例如:

security find-identity -v -p codesigning

输出:

1) XXXXXXXX "Apple Development: YYYY"

其中:

YYYY

就是 Team ID。

然后全局替换项目中的:

TEAM_ID

或者:

DEVELOPMENT_TEAM

11. 命令行编译 Telegram Mac

避免 Xcode GUI 打开工程导致配置污染。

使用:

xcodebuild \
-workspace TelegramMac.xcworkspace \
-scheme TelegramConfigurationRelease \
-derivedDataPath ./build \
build

目标:

生成 Universal Binary:

arm64 + x86_64

12. 总结:Intel Mac 编译关键修改点

Intel Mac 编译 Telegram Swift release:

必须处理:

问题解决
flatc ARM64替换 Intel x86_64 flatc
rebuild disabled改 yes
mozjpeg CMake 版本2.8.12 → 4.2
framework 重编译慢修改 configure_frameworks.sh 跳过已完成库
ffmpeg-7.1.1 找不到目录改名 ffmpeg-7.1
tde2e 默认 Apple Silicon增加 CMake cross compile 参数
Shell 续行失败\ 后不能有空格
签名失败替换 Team ID
Telegram API 配置替换 API ID/API Hash/Bundle ID

当前结论

Telegram Swift 当前 release 分支已经明显偏向 Apple Silicon 开发环境。

在 Intel Mac 上:

  • 主工程 Xcode 编译没有理论问题;
  • 最大障碍是第三方 framework 构建阶段;
  • tde2e 是关键,需要手动补充 cross compile 配置;
  • 完成 framework 后,剩余就是标准 Xcode build + signing 流程。

最终可以通过命令行生成 Intel + Apple Silicon 双架构 Telegram macOS 客户端。

分类

讨论 Telegram Mac Swift 原生客户端编译流程记录

  1. idealisan idealisan说道:

    在MacOS 27 beta上,配合新版xcode还要改项目的目标系统版本,原来的是10.x已经不兼容了,用pytcharm批量替换,开启正则表达式:
    MACOSX_DEPLOYMENT_TARGET[^\d]+=[^\d]+(10.\d+)
    换成
    MACOSX_DEPLOYMENT_TARGET = 12.0

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注