build Telegram Messenger iOS App

最近 Telegram 愈來愈紅,彼得潘的很多朋友,像是溫蒂跟奇妙仙子都跑到 Telegram 聊天了。

像 Telegram 這麼厲害的 App,到底程式是怎麼寫的呢 ? 真想看看它的 Swift 程式。這個夢想現在就可以實現,因為 Telegram 將它的 iOS App open source,我們連到 GitHub 就能下載它的完整程式。

從下圖 Telegram-iOS 的 Tag 記錄,我們看到它的最新版 5.14 完全對應 App Store 目前上架的版本。

接下來就讓我們開始進行下載和 compile Telegram App 的大工程吧。

安裝 brew

compile Telegram App 需要事先安裝一些套件,因此我們得先安裝 macOS 上知名的套件管理工具 brew。

我們可在 Terminal 輸入 brew 測試是否已安裝 brew。

若是顯示錯誤訊息 command not found,請參考以下網頁安裝。

安裝 yasm & cmake

brew install yasm cmake

安裝 buck

compile Telegram App 需要透過 buck,因此我們必須先進行安裝 buck 的大工程。為了安裝 buck,請先安裝 java & ant。

brew tap AdoptOpenJDK/openjdkbrew cask install adoptopenjdk8brew install ant

接著再安裝 buck。

brew tap facebook/fb
brew install buck

測試 buck

在 terminal 輸入 buck — help,測試 buck 是否安裝成功。

buck --help

若出現以下錯誤訊息,表示 java 的版本有問題。

You're using Java 9, but Buck requires Java 8.

buck 必須搭配 java 8,彼得潘的 Mac 剛好同時安裝 java 8 & 9,因此彼得再接著安裝 jenv,然後利用 jenv 設定採用 java 8 的版本。

安裝 jenv

brew install jenv

在 ~/.zshrc 裡輸入

export PATH="$HOME/.jenv/bin:$PATH"
eval "$(jenv init -)"

執行以下指令。

source ~/.zshrc

輸入以下指令加入 java 8。

jenv add /Library/Java/JavaVirtualMachines/adoptopenjdk-8.jdk/Contents/Home

執行以下指令查詢目前有哪些 java 版本。

jenv versions

結果

* system (set by /Users/shih-yingpan/.jenv/version)1.81.8.0.242openjdk64-1.8.0.242

輸入以下指令,設定採用 openjdk64–1.8.0.242

jenv global openjdk64-1.8.0.242

下載 Telegram Messenger iOS App 的 source code

git clone --recursive https://github.com/TelegramMessenger/Telegram-iOS.git

產生 Telegram_Buck.xcworkspace

用 Xcode 打開 Telegram 專案前,我們必須先產生它的 xcworkspace 檔。這部分同樣有點麻煩,必須經過以下步驟:

  • 切換到 Telegram-iOS 資料夾下。
cd Telegram-iOS
  • 參考以下連結 klaus01 大大提供的解法設定 Telegram-iOS 下的 Makefile & Config/utils.bzl。
  • 輸入以下指令,產生 Telegram_Buck.xcworkspace。
make project

此步驟會等很久,建議先出門吃個牛排補充一下體力。

成功產生 Telegram_Buck.xcworkspace 後,它會自動從 Xcode 打開,我們終於看到 Telegram 程式碼的廬山真面目了,果然很壯觀 !

從模擬器啟動 Telegram Messenger App

點選 Start Messaging,然後輸入自己的手機號碼。

此時 Telegram 將傳 code 到我們 iPhone 上的 Telegram App,請從 iPhone 查看 code 數字後,再從模擬器的 Telegram App 輸入 code,開始享用原汁原味的 Telegram。

Cool,看到和 iPhone 上 Telegram 一模一樣的聊天頁面了 ~

--

--

彼得潘的 iOS App Neverland
彼得潘的 Swift iOS App 開發問題解答集

彼得潘的iOS App程式設計入門,文組生的iOS App程式設計入門講師,彼得潘的 Swift 程式設計入門,App程式設計入門作者,http://apppeterpan.strikingly.com