/Telegram-iOS

Telegram-iOS

Primary LanguageSwift

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.

Compilation Guide

  1. Install Xcode (directly from https://developer.apple.com/download/more or using the App Store).
  2. Clone the project from GitHub:
git clone --recursive -j8 https://github.com/TelegramMessenger/Telegram-iOS.git
  1. Download Bazel 3.7.0
mkdir -p $HOME/bazel-dist
cd $HOME/bazel-dist
curl -O -L https://github.com/bazelbuild/bazel/releases/download/3.7.0/bazel-3.7.0-darwin-x86_64
mv bazel-3.7.0* bazel

Verify that it's working

chmod +x bazel
./bazel --version
  1. Adjust configuration parameters
mkdir -p $HOME/telegram-configuration
cp -R build-system/example-configuration/* $HOME/telegram-configuration/
  • Modify the values in variables.bzl
  • Replace the provisioning profiles in provisioning with valid files
  1. (Optional) Create a build cache directory to speed up rebuilds
mkdir -p "$HOME/telegram-bazel-cache"
  1. Build the app
python3 build-system/Make/Make.py \
    --bazel="$HOME/bazel-dist/bazel" \
    --cacheDir="$HOME/telegram-bazel-cache" \
    build \
    --configurationPath="$HOME/telegram-configuration" \
    --buildNumber=100001 \
    --configuration=release_universal
  1. (Optional) Generate an Xcode project
python3 build-system/Make/Make.py \
    --bazel="$HOME/bazel-dist/bazel" \
    --cacheDir="$HOME/telegram-bazel-cache" \
    generateProject \
    --configurationPath="$HOME/telegram-configuration" \
    --disableExtensions

It is possible to generate a project that does not require any codesigning certificates to be installed: add --disableProvisioningProfiles flag:

python3 build-system/Make/Make.py \
    --bazel="$HOME/bazel-dist/bazel" \
    --cacheDir="$HOME/telegram-bazel-cache" \
    generateProject \
    --configurationPath="$HOME/telegram-configuration" \
    --disableExtensions \
    --disableProvisioningProfiles

Tip: use --disableExtensions when developing to speed up development by not building application extensions and the WatchOS app.

Tips

Bazel is used to build the app. To simplify the development setup a helper script is provided (build-system/Make/Make.py). See help:

python3 build-system/Make/Make.py --help
python3 build-system/Make/Make.py build --help
python3 build-system/Make/Make.py generateProject --help

Each release is built using specific Xcode and Bazel versions (see versions.json). The helper script checks the versions of installed software and reports an error if they don't match the ones specified in versions.json. There are flags that allow to bypass these checks:

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