需求條件
- Apple Mac OS X 系統
- 最新版 Xcode
- 已安裝 JDK 11
- Apache Maven
- (建議使用,但非必要) Google 通訊協定緩衝區來源
Mac 設定
- 執行以下指令安裝 Xcode 指令列工具:
sudo xcode-select --install
- 新增至
.bash_profile
:
export JAVA_HOME=`/usr/libexec/java_home -v 11`
- 如果未安裝 Maven (請嘗試在終端機中輸入
mvn -version
),請使用 Homebrew:
brew install maven
建立 J2ObjC 專案的分支
如要分支 J2ObjC 專案,請開啟專案主頁面,然後按一下「分支」按鈕:
選取 GitHub 帳戶名稱,幾秒鐘後分支就會建立。
接下來,請將分支的副本複製到本機系統進行開發。首先,請按一下「複製或下載」按鈕,然後點選「複製到剪貼簿」按鈕:
然後複製到本機目錄:
git clone (Command-V) # Paste the copied URL
安裝 protobuf 和 abseil
您必須先安裝 protobuf C++,才能建構 J2ObjC。
如要安裝 protobuf 二進位檔套件,請使用 Homebrew:
brew install protobuf
Protobuf C++ 版本現在會依附於 Abseil 程式庫,因此請一併安裝該程式庫:
brew install abseil
您必須將 PROTOBUF_ROOT_DIR
設為 protobuf 安裝的根目錄。通常,這是 Homebrew 的預設 /usr/local
。請將以下內容新增至 .bash_profile
:
export PROTOBUF_ROOT_DIR=/usr/local # or your custom Homebrew dir
如要驗證,請執行 $PROTOBUF_ROOT_DIR/bin/protoc --version
。
建構 J2ObjC
如要在終端機視窗的指令列中建構,請執行:
# Build just the translator and libraries
make dist
# Build the protocol buffer compiler and runtime for J2ObjC
make protobuf_dist
# Build everything that is included in the project's distribution bundles
make all_dist
測試 J2ObjC
如要在終端機視窗的指令列中進行測試,請執行以下指令:
# Run translator and library unit tests
make test
# Run all unit tests, including for protocol buffers
make test_all
清理建構作業
# Remove all files generated by the build
make clean
平行建構
J2ObjC 版本支援平行版本,可使用 -j<n>
標記指定,其中 n 是並行工作的最大數量。上限取決於系統的速度,建議您從 -j4
開始。如果系統可以處理,請增加這個數字來縮短建構時間;如果 make 失敗並出現系統錯誤,請減少這個數字。
建構 32 位元 iOS 架構
32 位元 iOS 架構 (「iphone」和「simulator」) 不會在預設情況下建構。您可以先在 J2OBJC_ARCHS 環境變數中指定這些值,然後使用這些值建構 j2objc:
$ export J2OBJC_ARCHS="iphone simulator"
$ make -j8 all_dist
指定部分支援的架構通常可用於加快本機建構作業,只要指定應用程式所需的架構即可。舉例來說,如要只建構 64 位元 iOS 版本 (「iphone64」) 及其相關模擬器 (「simulator64」),請在執行 make 之前定義 J2OBJC_ARCHS="iphone64 simulator64"
。
建構完整發布
雖然 j2objc 團隊已不再因檔案大小限制而將預先建構的發行版本發布至 GitHub,但您仍可使用「一次建構所有項目」指令碼:
$ scripts/build_distribution.sh HEAD-<current-date> $PROTOBUF_ROOT_DIR
這個指令碼需要很長的時間才能執行,因為每個 j2objc 套件都會建構每個架構。不過,如果發生一般建構失敗,這項工具就非常實用,因為它只會使用最少的環境變數集進行建構。如果 build_distribution 指令碼成功,但一般建構步驟失敗,請檢查是否有任何本機環境變數設定錯誤。