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