Telegram-iOS README

The project's README from github.com/TelegramMessenger/Telegram-iOS. As one markdown file: README.md.

Telegram iOS Source Code Compilation Guide

We welcome all developers to use our API and source code to create applications on our platform. There are several things we require from all developers for the moment.

Creating your Telegram Application

  1. Obtain your own api_id for your application.
  2. Please do not use the name Telegram for your app — or make sure your users understand that it is unofficial.
  3. Kindly do not use our standard logo (white paper plane in a blue circle) as your app's logo.
  4. Please study our security guidelines and take good care of your users' data and privacy.
  5. Please remember to publish your code too in order to comply with the licences.

Quick Compilation Guide

Get the Code

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

Setup Xcode

Install Xcode (directly from https://developer.apple.com/download/applications or using the App Store).

Adjust Configuration

  1. Generate a random identifier:
openssl rand -hex 8
  1. Create a new Xcode project. Use Telegram as the Product Name. Use org.{identifier from step 1} as the Organization Identifier.
  2. Open Keychain Access and navigate to Certificates. Locate Apple Development: [email protected] (XXXXXXXXXX) and double tap the certificate. Under Details, locate Organizational Unit. This is the Team ID.
  3. Edit build-system/template_minimal_development_configuration.json. Use data from the previous steps.

Generate an Xcode project

python3 build-system/Make/Make.py \
    --cacheDir="$HOME/telegram-bazel-cache" \
    generateProject \
    --configurationPath=build-system/template_minimal_development_configuration.json \
    --xcodeManagedCodesigning

Advanced Compilation Guide

Xcode

  1. Copy and edit build-system/appstore-configuration.json.
  2. Copy build-system/fake-codesigning. Create and download provisioning profiles, using the profiles folder as a reference for the entitlements.
  3. Generate an Xcode project:
python3 build-system/Make/Make.py \
    --cacheDir="$HOME/telegram-bazel-cache" \
    generateProject \
    --configurationPath=configuration_from_step_1.json \
    --codesigningInformationPath=directory_from_step_2

IPA

  1. Repeat the steps from the previous section. Use distribution provisioning profiles.
  2. Run:
python3 build-system/Make/Make.py \
    --cacheDir="$HOME/telegram-bazel-cache" \
    build \
    --configurationPath=...see previous section... \
    --codesigningInformationPath=...see previous section... \
    --buildNumber=100001 \
    --configuration=release_arm64

FAQ

Xcode is stuck at "build-request.json not updated yet"

Occasionally, you might observe the following message in your build log:

"/Users/xxx/Library/Developer/Xcode/DerivedData/Telegram-xxx/Build/Intermediates.noindex/XCBuildData/xxx.xcbuilddata/build-request.json" not updated yet, waiting...

Should this occur, simply cancel the ongoing build and initiate a new one.

Telegram_xcodeproj: no such package

Following a system restart, the auto-generated Xcode project might encounter a build failure accompanied by this error:

ERROR: Skipping '@rules_xcodeproj_generated//generator/Telegram/Telegram_xcodeproj:Telegram_xcodeproj': no such package '@rules_xcodeproj_generated//generator/Telegram/Telegram_xcodeproj': BUILD file not found in directory 'generator/Telegram/Telegram_xcodeproj' of external repository @rules_xcodeproj_generated. Add a BUILD file to a directory to mark it as a package.

If you encounter this issue, re-run the project generation steps in the README.

Tips

Codesigning is not required for simulator-only builds

Add --disableProvisioningProfiles:

python3 build-system/Make/Make.py \
    --cacheDir="$HOME/telegram-bazel-cache" \
    generateProject \
    --configurationPath=path-to-configuration.json \
    --codesigningInformationPath=path-to-provisioning-data \
    --disableProvisioningProfiles

Versions

Each release is built using a specific Xcode version (see versions.json). The helper script checks the versions of the installed software and reports an error if they don't match the ones specified in versions.json. It is possible to bypass these checks:

python3 build-system/Make/Make.py --overrideXcodeVersion build ... # Don't check the version of Xcode

Telegram-iOS (TelegramMessenger/Telegram-iOS)

Searching Database…

这是什么?这是 Telegram iOS 应用的官方源代码,用 Swift 编写。
这是 Telegram 应用本身,还是用来构建自己应用的库?它是完整的应用源代码;你需要用 Xcode 和自己的 apiid 自行编译,才能在真机或模拟器上运行你自己构建的版本。
怎么构建它?安装 Xcode,获取一个 apiid,创建一个名为“Telegram”的新 Xcode 项目并使用你自己的组织标识符和团队 ID,把这些数据编辑进 build-system/templateminimaldevelopmentconfiguration.json,然后从构建系统生成 Xcode 工程。
除了 Xcode 还需要什么?你需要 Xcode(版本要与 versions.json 中锁定的版本一致)、你自己的 Telegram API ID;如果要构建真机/App Store 版本,还需要来自钥匙串访问(Keychain Access)的描述文件和证书。
我可以直接把应用命名为 Telegram 并使用它的标志吗?不可以——你不能把自己的应用叫作 Telegram(或者必须明确标注为非官方),也不能复用官方的蓝底白纸飞机标志。
这是面向最终用户还是开发者的?它面向想构建自己的 Telegram 客户端、或者想研究/扩展官方应用代码的开发者,并不是给普通用户的现成下载。
如果我发布用这份代码构建的应用,需要遵守哪些数据/隐私规则?开发者在发布自己的应用之前,必须研读 Telegram 的安全准则,并妥善保护用户的数据和隐私。
如果我发布构建版本,需要公开我的源代码吗?需要,指南要求你同样公开自己的代码,以符合官方应用发行时所依据的许可证。
不进行代码签名也能构建和测试吗?可以,如果只构建模拟器版本,可以在生成命令中加上 --disableProvisioningProfiles 标志来跳过代码签名。
重启之后 Xcode 工程构建失败了怎么办?如果系统重启后看到“Telegramxcodeproj: no such package”错误,只需重新执行 README 中描述的工程生成步骤即可。
怎么生成可分发的 IPA?用分发描述文件代替开发描述文件,重复 Xcode 的配置步骤,然后运行高级指南中的 IPA 构建命令。
Size
838.5 MB
Stars
9.2K
Age
7y
Commits · 90 Days