Telegram-iOS —— 01-源码编译

10,823 阅读1分钟

OverView

建议首先看官方文档,避免时效性信息,造成误导。开始先看中文blog,运行一堆指令,准备环境🤣,现在脚手架丰富了完全不需要了。

环境
Telegram Version:9.0.2
Xcode Version: 14.1

步骤

1、代码拉取

git clone --recursive -j8 https://github.com/TelegramMessenger/Telegram-iOS.git 
  • --recursive 会读取 .gitmodules 文件,并拉取子模块
  • -j<n>(-job<n>) 同时抓取的子模块数。默认为 submodule.fetchJobs 选项。更多

2、增加配置参数

mkdir -p $HOME/telegram-configuration
cp -R build-system/example-configuration/* $HOME/telegram-configuration/

telegram-configuration 目录结构如下:

example-configuration
├── BUILD
├── WORKSPACE
├── appstore-configuration.json
├── provisioning
│   ├── BUILD
│   ├── BroadcastUpload.mobileprovision
│   ├── Intents.mobileprovision
│   ├── NotificationContent.mobileprovision
│   ├── NotificationService.mobileprovision
│   ├── Share.mobileprovision
│   ├── Telegram.mobileprovision
│   ├── WatchApp.mobileprovision
│   ├── WatchExtension.mobileprovision
│   └── Widget.mobileprovision
└── variables.bzl
  • appstore-configuration.json 应用配置信息,eg: app_id/bundle_id等。
  • variables.bzl 文件内容和json等同,用于 bazel 构建工程,见配置文件 Telegram/BUILD
  • provisioning是证书,需要替换有效证书,放到 profiles 下(运行报错得知)

3、(可选)创建缓存目录,加速再构建

mkdir -p "$HOME/telegram-bazel-cache"

4、Build the app

python3 build-system/Make/Make.py \
    --cacheDir="$HOME/telegram-bazel-cache" \
    build \
    --configurationPath="$HOME/telegram-configuration" \
    --buildNumber=100001 \
    --configuration=release_universal

官方脚本会报错:
Make build: error: one of the arguments --gitCodesigningRepository --codesigningInformationPath is required

需要增加脚本参数:
--codesigningInformationPath="$HOME/telegram-configuration/provisioning"

5、生成 Xcode 工程

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

--disableProvisioningProfiles 可以生成不需要安装任何 codesign 证书的项目,但实际无效,报错如下: image.png

按照提示增加证书路径配置,报错2: image.png

修正后,最终指令如下:

python3 build-system/Make/Make.py \
    --cacheDir="$HOME/telegram-bazel-cache" \
    generateProject \
    --configurationPath="$HOME/telegram-configuration/appstore-configuration.json" \
    --disableExtensions\
    --codesigningInformationPath="$HOME/telegram-configuration/provisioning"

此时开始生成工程,可能会再次报错,再执行一次脚本即可。(可能是脚本任务时序问题)

image.png 可以膜拜大佬的工程了😀😀😀~