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.
- Obtain your own api_id for your application.
- Please do not use the name Telegram for your app — or make sure your users understand that it is unofficial.
- Kindly do not use our standard logo (white paper plane in a blue circle) as your app's logo.
- Please study our security guidelines and take good care of your users' data and privacy.
- Please remember to publish your code too in order to comply with the licences.
git clone --recursive -j8 https://github.com/TelegramMessenger/Telegram-iOS.git
Install Xcode (directly from https://developer.apple.com/download/applications or using the App Store).
- Generate a random identifier:
openssl rand -hex 8
- Create a new Xcode project. Use
Telegram
as the Product Name. Useorg.{identifier from step 1}
as the Organization Identifier. - Open
Keychain Access
and navigate toCertificates
. LocateApple Development: [email protected] (XXXXXXXXXX)
and double tap the certificate. UnderDetails
, locateOrganizational Unit
. This is the Team ID. - Edit
build-system/template_minimal_development_configuration.json
. Use data from the previous steps.
python3 build-system/Make/Make.py \
--cacheDir="$HOME/telegram-bazel-cache" \
generateProject \
--configurationPath=build-system/template_minimal_development_configuration.json \
--xcodeManagedCodesigning
- Copy and edit
build-system/appstore-configuration.json
. - Copy
build-system/fake-codesigning
. Create and download provisioning profiles, using theprofiles
folder as a reference for the entitlements. - 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
- Repeat the steps from the previous section. Use distribution provisioning profiles.
- 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
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.
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.
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
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