准备编译环境
以下是我的开发环境:
- 操作系统:macOS 26.3
- 开发工具:Xcode 26.3
- 包管理器:macports
安装依赖
安装
rsync,然后在PATH环境中覆盖系统自带的路径,不然编译的时候会提示莫名其妙的权限问题。$ sudo port install rsync这里比较坑的一点是 bazel 的规则里写了固定的
PATH="/opt/homebrew/bin:/usr/local/bin:$PATH":
因为我的 macports 安装在
/opt/local下面,bazel 这个糟糕的 workground 会导致我的 macports 的PATH环境变量被覆盖,需要做一个符号链接修正这个问题:$ sudo ln -s /opt/local /opt/homebrew安装
opensdk,因为 bazel 默认依赖它。我安装的是微软预编译的版本:
$ sudo port install openjdk25-microsoft $ export JAVA_HOME=/Library/Java/JavaVirtualMachines/jdk-25-microsoft.jdk/Contents/Home
修改 Telegram 编译配置
首先把 Telegram iOS 的源码 clone 回来:
$ git clone --recursive -j8 https://github.com/TelegramMessenger/Telegram-iOS.git
编辑源码根目录下的 versions.json ,把 bazel 的版本号调整到最新的版本,其他可以不管:
{
"app": "12.5",
"xcode": "26.2",
"bazel": "8.6.0:948a7186641f601c83344b63b88bc6943025585f2bb7f407e19cface5fe4aa3b",
"macos": "26"
}
再调整编译配置文件 build-system/template_minimal_development_configuration.json:
其中的 bundle_id 和 team_id 字段根据你的实际情况进行调整,如果没有开发者账号只能在模拟器上运行,功能上没有区别。
api_id 和 api_hash 字段的值我是从 build-system/appstore-configuration.json 复制过来的。
其他字段不需要调整,保持默认就行。
{
"bundle_id": "me.lvv.Telegram",
"api_id": "8",
"api_hash": "7245de8e747a0d6fbe11f7cc14fcc0bb",
"team_id": "J29VN6AP39",
"app_center_id": "0",
"is_internal_build": "true",
"is_appstore_build": "false",
"appstore_id": "0",
"app_specific_url_scheme": "tg",
"premium_iap_product_id": "",
"enable_siri": false,
"enable_icloud": false
}
现在可以生成 Xcode 项目文件了:
$ python3 build-system/Make/Make.py \
--overrideXcodeVersion \
--cacheDir="$HOME/telegram-bazel-cache" \
generateProject \
--configurationPath=build-system/template_minimal_development_configuration.json \
--xcodeManagedCodesigning --disableProvisioningProfiles
这里需要注意,脚本会先干掉所有正在运行的 Xcode ,如果你有正在打开的 Xcode 项目,需要先保存号项目以避免内容丢失。
脚本运行结束后会自动打开 Telegram 的 Xcode 项目,而且第一次打开需要等待比较久的预编译过程,预编译结束后不出意外的话就可以在模拟器/真机上启动调试了。
