このページでは、Bazel を使用して Xcode プロジェクトをビルドまたはテストする方法について説明します。これは、 Xcode と Bazel の違いと手順を説明します。 Xcode プロジェクトを Bazel プロジェクトに変換します。また、一般的なエラーに対処するためのトラブルシューティング ソリューションも提供しています。
Xcode と Bazel の違い
Bazel では、すべてのビルド ターゲットとその依存関係、およびビルドルールを介して対応するビルド設定を明示的に指定する必要があります。
Bazel では、プロジェクトが依存するすべてのファイルがワークスペース ディレクトリ内にあるか、
WORKSPACE
ファイルでインポートとして指定されている必要があります。Bazel で Xcode プロジェクトをビルドする場合、
BUILD
ファイルが信頼できる情報源になります。Xcode でプロジェクトを操作する場合は、BUILD
ファイルを更新するたびに、rules_xcodeproj を使用して、BUILD
ファイルと一致する新しいバージョンの Xcode プロジェクトを生成する必要があります。BUILD
ファイルに対する特定の変更 ターゲットへの依存関係の追加などは、コードを再生成する必要が プロジェクトがあります。Xcode を使用していない場合は、bazel build
コマンドとbazel test
コマンドはビルドとテストの機能を提供します。 一定の制限があります。
始める前に
始める前に、次のことを行います。
Bazel をインストールします(まだインストールしていない場合)。
Bazel とそのコンセプトに慣れていない場合は、iOS アプリ チュートリアルを完了してください。Bazel に関する理解
WORKSPACE
ファイル、BUILD
ファイル、 ターゲット、ビルドルール、Bazel パッケージの概念について説明します。プロジェクトの依存関係を分析して理解します。
プロジェクトの依存関係を分析する
Xcode とは異なり、Bazel ではすべての依存関係を明示的に宣言し、
BUILD
ファイル内のすべてのターゲット。
外部依存関係について詳しくは、このモジュールの 外部依存関係の操作。
Bazel を使用して Xcode プロジェクトをビルドまたはテストする
Bazel を使用して Xcode プロジェクトをビルドまたはテストする手順は次のとおりです。
ステップ 1: WORKSPACE
ファイルを作成する
新しいディレクトリに WORKSPACE
ファイルを作成します。このディレクトリが Bazel ワークスペースのルートになります。プロジェクトで外部依存関係を使用しない場合は、このファイルを
空です。プロジェクトがプロジェクトのディレクトリにないファイルまたはパッケージに依存している場合は、これらの外部依存関係を WORKSPACE
ファイルに指定します。
ステップ 2: (試験運用版)SwiftPM の依存関係を統合する
swift_bazel を使用して SwiftPM の依存関係を Bazel ワークスペースに統合するには: 次のチュートリアルの説明に沿って、Bazel パッケージに変換する必要があります。
ステップ 3: BUILD
ファイルを作成する
ワークスペースと外部依存関係を定義したら、次の操作を行います。
プロジェクトの構造を Bazel に伝える BUILD
ファイルを作成します。Bazel ワークスペースのルートに BUILD
ファイルを作成し、次のようにプロジェクトの初期ビルドを行うように構成します。
ヒント: パッケージやその他の Bazel のコンセプトについて詳しくは、以下をご覧ください。 ワークスペース、パッケージ、ターゲット。
ステップ 3a: アプリケーション ターゲットを追加する
macos_application
を追加する
または ios_application
指定します。このターゲットは、それぞれ macOS または iOS のアプリケーション バンドルをビルドします。
ターゲットでは、少なくとも次の項目を指定します。
bundle_id
- アプリケーションのバンドル ID(リバース DNS パスの後にアプリ名が続く) バイナリです。provisioning_profile
- Apple Developer からのプロファイルのプロビジョニング (iOS デバイス向けにビルドする場合)families
(iOS のみ)- iPhone、iPad、またはその両方用にアプリケーションをビルドするかどうか。infoplists
- 最終的な Info.plist ファイルに統合する .plist ファイルのリスト。minimum_os_version
- アプリがサポートする macOS または iOS の最小バージョン。これにより、Bazel は vs でアプリケーションを 確認しましょう。
ステップ 3b:(省略可)テスト対象を追加する
Bazel の Apple ビルドルールは、iOS と macOS でのライブラリベースの単体テストの実行と、macOS でのアプリケーション ベースのテストに対応しています。iOS でのアプリベースのテスト、または Bazel はテスト出力をビルドしますが、テストは Xcode 内で実行する必要があります rules_xcodeproj で生成されたプロジェクトを経由します。テスト ターゲットを次のように追加します。
macos_unit_test
: macOS でライブラリベースとアプリケーションベースの単体テストを実行します。ios_unit_test
を使用して、iOS でライブラリ ベースの単体テストを実行できます。iOS シミュレータが必要なテストの場合、Bazel はテスト出力をビルドしますが、テストは実行しません。rules_xcodeproj を使用して Xcode プロジェクトを生成し、Xcode 内からテストを実行する必要があります。ios_ui_test
: Xcode を使用して iOS シミュレータでユーザー インターフェース テストを実行するために必要な出力をビルドします。rules_xcodeproj を使用して Xcode プロジェクトを生成し、Xcode 内からテストを実行する必要があります。Bazel では UI テストをネイティブに実行できません。
少なくとも、minimum_os_version
属性の値を指定します。しばらく
その他のパッケージ属性(bundle_identifier
、infoplists
など)
よく使用される値にデフォルトで設定し、それらのデフォルト値に
必要に応じて調整してください。iOS シミュレータが必要なテストの場合は、test_host
属性の値として ios_application
ターゲット名も指定します。
ステップ 3c: ライブラリ ターゲットを追加する
objc_library
を追加する
Objective-C ライブラリと swift_library
の 1 つのターゲットを
アプリケーションやテストが依存する各 Swift ライブラリのターゲットを指定します。
次のようにライブラリ ターゲットを追加します。
アプリケーション ライブラリ ターゲットを依存関係としてアプリケーションに追加する できます。
テスト ライブラリ ターゲットをテスト ターゲットに依存関係として追加します。
srcs
属性に実装ソースをリストします。hdrs
属性のヘッダーを一覧表示します。
さまざまなタイプのアプリケーションの既存の例は、rules_apple の examples ディレクトリで直接参照できます。例:
ビルドルールの詳細については、Bazel の Apple ルールをご覧ください。
この時点で、ビルドをテストすることをおすすめします。
bazel build //:<application_target>
ステップ 4:(省略可)ビルドを細分化する
プロジェクトの規模が大きい場合、またはプロジェクトが拡大するにつれ、プロジェクトを分割することを検討します。 Bazel パッケージ。この粒度の向上により、次のことが可能になります。
ビルドのインクリメンタリティの向上
ビルドタスクの並列化の増加
将来のユーザーによるメンテナンス性の向上
ターゲットとパッケージ全体でソースコードの可視性をより適切に制御できる。これにより、実装の詳細を含むライブラリが公開 API に漏洩するなどの問題を防ぐことができます。
プロジェクトを詳細化する際のヒント:
各ライブラリを独自の Bazel パッケージに配置します。まずは 依存関係が最小限に抑えられていることを確認します。
BUILD
ファイルを追加してターゲットを指定したら、これらの新しいターゲットを それに依存するターゲットのdeps
属性。glob()
関数はパッケージの境界を越えないため、 パッケージが増加します。glob()
に一致するファイルは縮小されます。BUILD
ファイルをmain
ディレクトリに追加する場合は、対応するtest
ディレクトリにもBUILD
ファイルを追加します。パッケージ全体に健全な可視性の制限を適用します。
BUILD
ファイルに大きな変更を加えるたびにプロジェクトをビルドし、修正する ビルドエラーを自動的に検出します。
ステップ 5: ビルドを実行する
完全に移行されたビルドを実行し、エラーや警告なしで完了することを確認します。すべてのアプリケーションとテスト ターゲットを個別に実行してソースを見つけやすくする 発生時のエラーをすべて把握します
例:
bazel build //:my-target
ステップ 6: rules_xcodeproj を使用して Xcode プロジェクトを生成する
Bazel でビルドする場合、WORKSPACE
ファイルと BUILD
ファイルがビルドに関する信頼できる情報源になります。Xcode にこのことを認識させるには、rules_xcodeproj を使用して、Bazel 互換の Xcode プロジェクトを生成する必要があります。
トラブルシューティング
更新を適用するなど、選択した Xcode バージョンと同期が取れなくなると、Bazel エラーが発生することがあります。以下を試してみましょう Xcode でエラーが発生する場合(例:「Xcode のバージョンを “Apple CROSSTOOL”と表示
Xcode を手動で実行し、利用規約に同意します。
Xcode select を使用して正しいバージョンを指定し、ライセンスを受け入れます。 Bazel の状態をクリアします。
sudo xcode-select -s /Applications/Xcode.app/Contents/Developer
sudo xcodebuild -license
bazel sync --configure
- 問題が解決しない場合は、
bazel clean --expunge
を実行してみてください。