參考:
https://github.com/TelegramMessenger/Telegram-iOS/issues/849
https://github.com/TelegramMessenger/Telegram-iOS/issues/877
https://github.com/TelegramMessenger/Telegram-iOS
https://telegra.ph/tgiostests-01-07
https://www.doudianpu.com/telegram/telegram-ioser-ci-kai-fa-zhi-nan-googlezhong-du-yi-lai-zhe-de-huan-jing-da-jian-yu-dai-ma-bian-yi/
環(huán)境
Intel MacOS 12.1
java version "18.0.1"
Python 3.8.9
Xcode 13.4.1
master最新分支
release-9.0.2
1、clone源代碼
git clone --recursive -j8 https://github.com/TelegramMessenger/Telegram-iOS.git
2.1、進(jìn)入下載后的源代碼,
cd Telegram-iOS
2.2 并創(chuàng)建配置參數(shù)
# 創(chuàng)建文件夾
mkdir -p $HOME/telegram-configuration
# 復(fù)制example-configuration
cp -R build-system/example-configuration/* $HOME/telegram-configuration/
# 復(fù)制/appstore-configuration.json
cp build-system/appstore-configuration.json $HOME/telegram-configuration/development-configuration.json
# 復(fù)制fake-codesigning
cp -R build-system/fake-codesigning/* $HOME/telegram-configuration/fake-codesigning

3、創(chuàng)建xcode項(xiàng)目
python3 build-system/Make/Make.py \
--overrideXcodeVersion \
--cacheDir="$HOME/telegram-bazel-cache" \
generateProject \
--configurationPath="$HOME/telegram-configuration/development-configuration.json" \
--codesigningInformationPath "$HOME/telegram-configuration/fake-codesigning" \
--disableExtensions \
--disableProvisioningProfiles
錯(cuò)誤:Make generateProject: error: one of the arguments --gitCodesigningRepository --codesigningInformationPath is required
解決方式:
1、將xxx/Telegram-iOS/build-system/fake-codesigning 復(fù)制到 ~telegram-configuration/fake-codesigning
2、將 xxx/Telegram-iOS/build-system/appstore-configuration.json 復(fù)制到 ~/telegram-configuration/development-configuration.json

增加參數(shù):
--codesigningInformationPath "$HOME/telegram-configuration/fake-codesigning"
報(bào)xcode版本不匹配
Required Xcode version is 14.0, but 13.4.1 is reported by 'xcode-select -p'
解決方式:
將
xxxx/Telegram-iOS/versions.json中的xcode版本改為安裝版本一致即可或者增加參數(shù)--overrideXcodeVersion
但是我本地報(bào)
Make: error: unrecognized arguments: --overrideXcodeVersion
將--overrideXcodeVersion放在命令的generatProject前面就可以解決

改完后重新執(zhí)行創(chuàng)建xcode項(xiàng)目的命令,然后就可以正常的創(chuàng)建項(xiàng)目了
還遇到如下問題:
Could not parse the Xcode version from /Library/Developer/CommandLineTools/../Info.plist
解決方案
sudo xcode-select --reset
sudo xcode-select --switch /Applications/Xcode.app
創(chuàng)建好項(xiàng)目后編譯報(bào)錯(cuò)
Showing Recent Errors Only
/Users/aaa/Documents/workspace/Telegram-source/Telegram-iOS/Telegram/BUILD:1952:16: ProcessEntitlementsFiles Telegram/Telegram_entitlements.entitlements failed: (Exit 1): plisttool failed: error executing command
On target "http://Telegram:Telegram", provisioning profile ExpirationDate ("2022-10-26T17:10:00") is in the past.
Build did NOT complete successfully
/Users/aaa/Documents/workspace/Telegram-source/Telegram-iOS/build-input/gen/project/Telegram.xcodeproj/.tulsi/Scripts/bazel_build.py:590: Bazel build failed with exit code 1. Please check the build log in Report Navigator (?9) for more information.
這是因?yàn)槭褂玫淖C書都過期了,需要增加--disableProvisioningProfiles的參數(shù)
/Users/aaa/Documents/workspace/Telegram-source/Telegram-iOS/submodules/Media/LocalAudioTranscription/Sources/LocalAudioTranscription.swift:57:37: Value of type 'SFSpeechURLRecognitionRequest' has no member 'addsPunctuation'

原因是最新代碼已經(jīng)使用了iOS16的內(nèi)容,xcode13不支持這個(gè)編譯,暫時(shí)方式一:注釋或使用kvo的方式解決

方式二:升級(jí)xcode到最新版本xcode14.0.1

Showing Recent Errors Only
/Users/aaa/Documents/workspace/Telegram-source/Telegram-iOS/submodules/AsyncDisplayKit/BUILD:9:13: Compiling submodules/AsyncDisplayKit/Source/ASControlNode.mm failed: (Aborted): wrapped_clang_pp failed: error executing command
/Users/aaa/Documents/workspace/Telegram-source/Telegram-iOS/submodules/AsyncDisplayKit/Source/PublicHeaders/AsyncDisplayKit/ASRecursiveUnfairLock.h:70:3: 'OSSpinLock' is deprecated: first deprecated in iOS 10.0 - Use os_unfair_lock() from <os/lock.h> instead
/Users/aaa/Documents/workspace/Telegram-source/Telegram-iOS/submodules/AsyncDisplayKit/Source/PublicHeaders/AsyncDisplayKit/ASThread.h:282:5: 'OSSpinLock' is deprecated: first deprecated in iOS 10.0 - Use os_unfair_lock() from <os/lock.h> instead
/Users/aaa/Documents/workspace/Telegram-source/Telegram-iOS/submodules/AsyncDisplayKit/Source/PublicHeaders/AsyncDisplayKit/ASThread.h:153:21: 'OSSpinLockTry' is deprecated: first deprecated in iOS 10.0 - Use os_unfair_lock_trylock() from <os/lock.h> instead
/Users/aaa/Documents/workspace/Telegram-source/Telegram-iOS/submodules/AsyncDisplayKit/Source/PublicHeaders/AsyncDisplayKit/ASThread.h:178:11: 'OSSpinLockLock' is deprecated: first deprecated in iOS 10.0 - Use os_unfair_lock_lock() from <os/lock.h> instead
/Users/aaa/Documents/workspace/Telegram-source/Telegram-iOS/submodules/AsyncDisplayKit/Source/PublicHeaders/AsyncDisplayKit/ASThread.h:201:11: 'OSSpinLockUnlock' is deprecated: first deprecated in iOS 10.0 - Use os_unfair_lock_unlock() from <os/lock.h> instead
Build did NOT complete successfully
/Users/aaa/Documents/workspace/Telegram-source/Telegram-iOS/build-input/gen/project/Telegram.xcodeproj/.tulsi/Scripts/bazel_build.py:590: Bazel build failed with exit code 1. Please check the build log in Report Navigator (?9) for more information.
將#define AS_USE_OS_LOCK false改成#define AS_USE_OS_LOCK true

運(yùn)行成功

問題一、升級(jí)MacOS和Xcode后運(yùn)行Telegram報(bào)如下錯(cuò)誤
error: Could not parse Swift versions from: Swift/ErrorType.swift:200: Fatal error: Error raised at top level: Error Domain=NSCocoaErrorDomain Code=4 "The file “swiftc” doesn’t exist." UserInfo={NSFilePath=swiftc}
解決方案:拉取最新代碼后重新生成,Telegram官方最新代碼已經(jīng)解決此問題
問題二、報(bào)證書過期,設(shè)置了忽略證書不生效
ERROR: /Users/macbookpro/Documents/third/telegram/Telegram-iOS/Telegram/BUILD:1955:16: ProcessEntitlementsFiles Telegram/Telegram_entitlements.entitlements failed: (Exit 1): plisttool failed: error executing command (from target //Telegram:Telegram)
(cd /private/var/tmp/_bazel_macbookpro/c16a409a18375be2510dd63bad28d118/rules_xcodeproj.noindex/build_output_base/execroot/main &&
exec env -
APPLE_SDK_PLATFORM=iPhoneSimulator
APPLE_SDK_VERSION_OVERRIDE=17.0
XCODE_VERSION_OVERRIDE=15.0.1.15A507
bazel-out/darwin-opt-exec-2B5CBBC6-ST-8c945a9593fc/bin/external/build_bazel_rules_apple/tools/plisttool/plisttool bazel-out/applebin_ios-ios_x86_64-dbg-ST-0c73515f5804/bin/Telegram/entitlements/Telegramplisttool-control)Configuration: 078c4bfe815fe328888eed3a62d860580dd34d0b8b7fffcfa3835ee84d3c101c
Execution platform: @local_config_platform//:host
ERROR: On target "@//Telegram:Telegram", provisioning profile ExpirationDate ("2023-10-27T19:16:43") is in the past.
INFO: Elapsed time: 7.171s, Critical Path: 6.37s
INFO: 204 processes: 165 internal, 39 local.
FAILED: Build did NOT complete successfully
error: The bazel build failed, please check the report navigator, which may have more context about the failure.`
解決方案
將相關(guān)對證書校驗(yàn)相關(guān)的腳本內(nèi)容注釋掉即可
1、搜索:provisioning profile ExpirationDate得到ENTITLEMENTS_PROFILE_HAS_EXPIRED
2、搜索:ENTITLEMENTS_PROFILE_HAS_EXPIRED得到調(diào)用這個(gè)地方,注釋掉即可
# if expire and expire < datetime.datetime.now():
# raise PlistToolError(ENTITLEMENTS_PROFILE_HAS_EXPIRED % (
# self.target, expire.isoformat()))

問題三、OSSpinLock報(bào)錯(cuò)
/Users/macbookpro/Documents/third/telegram/Telegram-iOS/submodules/AsyncDisplayKit/Source/PublicHeaders/AsyncDisplayKit/ASRecursiveUnfairLock.h:70:3: 'OSSpinLock' is deprecated: first deprecated in iOS 10.0 - Use os_unfair_lock() from <os/lock.h> instead [-Werror,-Wdeprecated-declarations]
解決方案:
將#define AS_USE_OS_LOCK false改成#define AS_USE_OS_LOCK true

成功運(yùn)行并使用Lookin查看UI

2023.11.01更新
環(huán)境
Intel MacOS 14.0 Sonama / M1 MacOS 14.0 Sonama
java version "18.0.1"
Python 3.11.4
Xcode 15.0.1
下載項(xiàng)目及配置環(huán)境過程查看底部之前說明,配置好后執(zhí)行如下命令生成項(xiàng)目
python3 build-system/Make/Make.py \
--overrideXcodeVersion \
--cacheDir="$HOME/telegram-bazel-cache" \
generateProject \
--configurationPath="$HOME/telegram-configuration/development-configuration.json" \
--codesigningInformationPath "$HOME/telegram-configuration/fake-codesigning" \
--disableExtensions \
--disableProvisioningProfiles
2024.11.21更新
環(huán)境
M1 MacOS 15.0.1 Sequoia
java 20.0.1 2023-04-18
Python 3.10.8
Swift version 6.0
分支:master
問題一:Showing All Messages Unable to discover 'swiftc' command line tool info: Could not parse Swift versions from:
參考:Swift Command Line not working while Xcode works fine - repl_swift not found
sudo xcode-select -s /Applications/Xcode.app
xcrun swift
問題二:
ERROR: On target "@//Telegram:Telegram", provisioning profile ExpirationDate ("2023-10-27T19:16:43") is in the past.
解決方案
將相關(guān)對證書校驗(yàn)相關(guān)的腳本內(nèi)容注釋掉即可
1、搜索:provisioning profile ExpirationDate得到ENTITLEMENTS_PROFILE_HAS_EXPIRED
2、搜索:ENTITLEMENTS_PROFILE_HAS_EXPIRED得到調(diào)用這個(gè)地方,注釋掉即可
/xxx/xxx/Telegram-iOS/build-system/bazel-rules/rules_apple/tools/plisttool/plisttool.py
# if expire and expire < datetime.datetime.now():
# raise PlistToolError(/ % (
# self.target, expire.isoformat()))
python3 build-system/Make/Make.py \
--overrideXcodeVersion \
--cacheDir="$HOME/telegram-bazel-cache" \
generateProject \
--configurationPath="$HOME/telegram-configuration/development-configuration.json" \
--codesigningInformationPath "$HOME/telegram-configuration/fake-codesigning" \
--disableExtensions \
--disableProvisioningProfiles
2025-11-25
環(huán)境
新電腦: mac mini m4
系統(tǒng): iOS 15.1
xcode: 16.2
telegram分支:master
1、先安裝Java環(huán)境
brew install openjdk
2、安裝bazel環(huán)境
brew install bazel
3、clean
bazel clean --expunge
4、下載代碼
git clone --recursive -j8 https://github.com/TelegramMessenger/Telegram-iOS.git
5、編譯運(yùn)行
python3 build-system/Make/Make.py \
--overrideXcodeVersion \
--cacheDir="$HOME/telegram-bazel-cache" \
generateProject \
--configurationPath="$HOME/telegram-configuration/development-configuration.json" \
--codesigningInformationPath "$HOME/telegram-configuration/fake-codesigning" \
--disableExtensions \
--disableProvisioningProfiles
過程中遇到過的問題
fetching local_repository rule //external:rules_xcodeproj: java.io.IOException: No MODULE.bazel, REPO.bazel, or WORKSPACE file found in /Telegram-iOS/build-system/bazel-rules/rules_xcodeproj
File "/xxx/xxx/Telegram-iOS/build-system/Make/BuildEnvironment.py", line 106, in call_executable subprocess.check_call(resolved_arguments, env=resolved_env) File "/Applications/Xcode.app/Contents/Developer/Library/Frameworks/Python3.framework/Versions/3.9/lib/python3.9/subprocess.py", line 373, in check_call raise CalledProcessError(retcode, cmd)
解決方法:
按照從文檔重新重github拉取全部代碼
git clone --recursive -j8 https://github.com/TelegramMessenger/Telegram-iOS.git
PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target
解決方案:
將github的官網(wǎng)證書下載下來,然后將證書加入到信任里
sudo keytool -import -trustcacerts -alias github -file /xxx/xxx/xx/github.com.cer -keystore /opt/homebrew/opt/openjdk@11/libexec/openjdk.jdk/Contents/Home/lib/security/cacerts -storepass changeit