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)

social-media
Searching Database…

What is this?This is the official source code of the Telegram iOS app, written in Swift.
Is this the actual Telegram app or a library to build my own?It is the full application source code; you compile it yourself with Xcode and your own apiid to run your own build on a device or simulator.
How do I build it?Install Xcode, get an apiid, create a new Xcode project named 'Telegram' with your own organization identifier and team ID, edit build-system/templateminimaldevelopmentconfiguration.json with that data, then generate the Xcode project from the build system.
Do I need anything besides Xcode?You need Xcode (matching the version pinned in versions.json), your own Telegram API ID, and for real device/App Store builds, provisioning profiles and certificates from Keychain Access.
Can I just name my app Telegram and use its logo?No — you must not call your app Telegram (or must clearly mark it unofficial) and cannot reuse the official white-paper-plane-in-blue-circle logo.
Is this for end users or developers?This is aimed at developers who want to build their own Telegram client or study/extend the official app's code, not a ready-made download for regular users.
What data/privacy rules apply if I ship an app built from this?Developers are required to study Telegram's security guidelines and take good care of users' data and privacy before publishing their own app.
Do I need to publish my source code if I release a build?Yes, the guide requires you to publish your code as well in order to comply with the licenses under which the official app is distributed.
Can I build and test this without code signing?Yes, for simulator-only builds you can skip codesigning by adding the --disableProvisioningProfiles flag to the generation command.
What if the Xcode project fails to build after a restart?If you see a 'Telegramxcodeproj: no such package' error after a system restart, simply re-run the project generation steps described in the README.
How do I create a distributable IPA?Repeat the Xcode setup steps using distribution provisioning profiles instead of development ones, then run the IPA build command from the advanced guide.
Size
838.5 MB
Stars
9.2K
Age
7y
Commits · 90 Days