本頁說明如何使用 Bazel 建構或測試 Xcode 專案。這項服務 說明 Xcode 和 Bazel 之間的差異,並提供 將 Xcode 專案轉換為 Bazel 專案它同時提供疑難排解服務 修正常見錯誤
Xcode 和 Bazel 之間的差異
Bazel 需要您明確指定每個建構目標及其 依附元件,再加上透過建構規則所對應的建構設定。
Bazel 要求專案所處的所有檔案 工作區目錄或指定為
MODULE.bazel
中的依附元件 檔案。使用 Bazel 建構 Xcode 專案時,
BUILD
檔案會成為 可靠結果。如果您是在 Xcode 處理專案,則必須產生 新版與BUILD
檔案相符的 Xcode 專案 rules_xcodeproj 每當您更新BUILD
檔案時。BUILD
檔案有某些變更 將依附元件新增至目標,就不必重新產生 這能加快開發速度如果您不是使用 Xcode,bazel build
和bazel test
指令提供建構與測試功能 以及本指南稍後會說明的某些限制。
事前準備
開始之前,請先執行下列操作:
如果您尚未安裝 Bazel,請先完成安裝。
如果您不熟悉 Bazel 及其概念,請填妥 iOS 應用程式 教學課程)。您應該瞭解 Bazel 工作區 包含
MODULE.bazel
和BUILD
檔案,以及 包括目標、建構規則和 Bazel 套件分析並瞭解專案的依附元件。
分析專案依附元件
與 Xcode 不同的是,Bazel 會要求您明確宣告
BUILD
檔案中的每個目標。
如要進一步瞭解外部依附元件,請參閱使用外部依附元件。 依附元件
使用 Bazel 建構或測試 Xcode 專案
如要使用 Bazel 建構或測試 Xcode 專案,請按照下列步驟操作:
-
a. 新增應用程式目標
b. (選用) 新增測試目標
c. 新增程式庫目標
步驟 1:建立 MODULE.bazel
檔案
在新目錄中建立 MODULE.bazel
檔案。這個目錄會變成
Bazel 工作區根目錄。如果專案沒有使用外部依附元件,則這個檔案
可以是空的如果專案依附的檔案或套件不在
專案的目錄,請在
MODULE.bazel
檔案。
步驟 2:(實驗功能) 整合 SwiftPM 依附元件
如要在 Bazel 工作區中整合 SwiftPM 依附元件,請使用 swift_bazel,您必須 如下文所述,將模型轉換為 Bazel 套件 教學課程 ,直接在 Google Cloud 控制台實際操作。
步驟 3:建立 BUILD
檔案
定義工作區和外部依附元件後,請
建立 BUILD
檔案,告知 Bazel 專案如何結構。建立
BUILD
檔案,並將其設定為執行
執行這個專案:
提示:如要進一步瞭解套件和其他 Bazel 概念,請參閱工作區、 套件和目標
步驟 3a:新增應用程式目標
新增
macos_application
敬上
或
ios_application
規則目標。這個目標會分別建構 macOS 或 iOS 應用程式套件。
在目標中,至少指定下列項目:
bundle_id
:應用程式的軟體包 ID (reverse-DNS 路徑,後接應用程式名稱) 二進位檔案。provisioning_profile
- 來自 Apple Developer 的佈建設定檔 帳戶 (若為 iOS 裝置建構)。families
(僅限 iOS) - 是否建構適用於 iPhone、iPad、 或兩者並行infoplists
- 要合併到最終 Info.plist 檔案的 .plist 檔案清單。minimum_os_version
- 提供的 macOS 或 iOS 最低版本 應用程式。這可確保 Bazel 使用 正確的 API 級別
步驟 3b:(選用) 新增測試目標
Bazel 的 Apple 版本 規則支援執行 單元和使用者介面測試。新增測試目標,如下所示:
macos_unit_test
敬上 在 macOS 上執行以程式庫和應用程式為基礎的單元測試。ios_unit_test
敬上 以便在 iOS 上建構及執行程式庫單元測試。ios_ui_test
敬上 在 iOS 模擬器中建構及執行使用者介面測試。
請至少指定 minimum_os_version
屬性的值。雖然
其他包裝屬性,例如 bundle_identifier
和 infoplists
預設為最常用的值,請確保這些預設值能相容
並視需求進行調整針對需要 iOS 裝置的測試
模擬工具,也會將 ios_application
目標名稱指定為
test_host
屬性。
步驟 3c:新增程式庫目標
為每個項目新增 objc_library
目標
Objective-C 程式庫
swift_library
目標。
新增資料庫目標如下:
將應用程式程式庫目標新增為應用程式的依附元件 目標。
將測試程式庫目標新增為測試目標的依附元件。
在
srcs
屬性中列出實作來源。請在
hdrs
屬性中列出標頭。
您可以直接在 GCP 中瀏覽各類型應用程式的現有範例 rules_apple 範例 目錄。例如:
如要進一步瞭解建構規則,請參閱 Apple 規則: Bazel。
此時,建議您測試版本:
bazel build //:<application_target>
步驟 4:(選用) 將建構進行精細化
如果專案規模龐大或是持續成長,請考慮將專案分成多個部分 Bazel 套件這麼做可提升精細程度,帶來以下好處:
增加版本增幅
提高建構工作的平行處理能力,
日後使用者更容易維護
更有效地控管目標和套件中的原始碼。這個 避免程式庫包含實作詳細資料外洩的情況 轉換為公用 API
將專案精細化的訣竅:
將每個程式庫都放在專屬的 Bazel 套件中。針對需要 盡可能減少依附元件,並向上擴充依附元件樹狀結構。
加入
BUILD
檔案並指定指定目標時,請將這些新的目標加進 依附於目標的deps
屬性。glob()
函式不會跨套件邊界,因此 套件會擴充glob()
比對相符的檔案。將
BUILD
檔案新增至main
目錄時,請一併將BUILD
檔案加入 對應的test
目錄在所有套件中強制執行健康的瀏覽權限限制。
每次對
BUILD
檔案進行重大變更後,建構專案並修正版本 發生錯誤時
步驟 5:執行版本
執行完整遷移的建構作業,確保完成時沒有錯誤或警告。 執行每個應用程式並個別測試目標,更輕鬆地找到來源 任何發生的錯誤
例如:
bazel build //:my-target
步驟 6:使用 rules_xcodeproj 產生 Xcode 專案
使用 Bazel 建構時,MODULE.bazel
和 BUILD
檔案會成為來源檔案
確切的建構內容如要讓 Xcode 瞭解此狀況,您必須產生
與 Bazel 相容的 Xcode 專案
rules_xcodeproj
,直接在 Google Cloud 控制台實際操作。
疑難排解
當 Bazel 與所選 Xcode 版本未同步,就會發生 Bazel 錯誤 例如套用更新如果您遇到這種情況,請嘗試以下做法 Xcode 發生錯誤,例如「必須指定 Xcode 版本 請使用 Apple CROSSTOOL」。
手動執行 Xcode 並接受所有條款及細則。
使用 Xcode 選取表示正確版本、接受授權,以及 清除 Bazel 的狀態
sudo xcode-select -s /Applications/Xcode.app/Contents/Developer
sudo xcodebuild -license
bazel sync --configure
- 如果這個方法無效,也可以嘗試執行
bazel clean --expunge
。