このページでは、Bazel を使用して Xcode プロジェクトをビルドまたはテストする方法について説明します。これは、 では、Xcode と Bazel の違いと、 Xcode プロジェクトを Bazel プロジェクトに変換します。また トラブルシューティングや 一般的なエラーに対処できます
Xcode と Bazel の違い
Bazel では、すべてのビルド ターゲットとそのビルド ターゲットを明示的に指定する必要があります。 ビルドルールを介して、対応するビルド設定が作成されます。
Bazel では、プロジェクトが依存しているすべてのファイルが ワークスペース ディレクトリに保存するか、
MODULE.bazel
で依存関係として指定します。 表示されます。Bazel を使用して Xcode プロジェクトをビルドすると、
BUILD
ファイルが あります。Xcode でプロジェクトを扱う場合は、 次のコマンドを使用して、BUILD
ファイルに一致する Xcode プロジェクトの新しいバージョンを rules_xcodeprojBUILD
ファイルを更新するたびに発生します。BUILD
ファイルに対する特定の変更 ターゲットへの依存関係の追加などは、コードを再生成する必要が プロジェクトがあります。Xcode を使用していない場合は、bazel build
コマンドとbazel test
コマンドはビルドとテストの機能を提供します。 一定の制限があります。
始める前に
始める前に、次のことを行います。
Bazel をインストールします(まだインストールしていない場合)。
Bazel とそのコンセプトに詳しくない場合は、iOS アプリ チュートリアルをご覧ください)。Bazel ワークスペースと、 (
MODULE.bazel
ファイル、BUILD
ファイルなど)と、 ターゲット、ビルドルール、Bazel パッケージなど)で構成されます。プロジェクトの依存関係を分析して理解します。
プロジェクトの依存関係を分析する
Xcode とは異なり、Bazel ではすべての依存関係を明示的に宣言し、
BUILD
ファイル内のすべてのターゲット。
外部依存関係の詳細については、外部依存関係との連携 依存関係にあります。
Bazel を使用した Xcode プロジェクトのビルドまたはテスト
Bazel を使用して Xcode プロジェクトをビルドまたはテストする手順は次のとおりです。
ステップ 1: MODULE.bazel
ファイルを作成する
新しいディレクトリに MODULE.bazel
ファイルを作成します。このディレクトリは
Bazel ワークスペース ルート。プロジェクトで外部依存関係を使用しない場合、このファイルは
空にすることもできます。プロジェクトがどれにも含まれていないファイルまたはパッケージに依存している場合
使用する場合は、これらの外部依存関係を
MODULE.bazel
ファイル。
ステップ 2: (試験運用版)SwiftPM の依存関係を統合する
SwiftPM の依存関係を Bazel ワークスペースに統合するには、 swift_bazel には、 以下で説明するように、Bazel パッケージに変換します。 チュートリアル をタップします。
ステップ 3: BUILD
ファイルを作成する
ワークスペースと外部依存関係を定義したら、次の操作を行います。
プロジェクトの構造を Bazel に伝える BUILD
ファイルを作成します。作成
BUILD
ファイルを Bazel ワークスペースのルートに配置し、以下を行うように構成します。
次のようにプロジェクトの初期ビルドを行います。
ヒント: パッケージやその他の 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 ビルド 実行をサポートする 単体テストと UI テストをすべての Apple プラットフォームで実行するテスト ターゲットを次のように追加します。
macos_unit_test
を使用して、macOS でライブラリベースとアプリケーション ベースの単体テストを実行できます。ios_unit_test
を使用して、iOS でライブラリ ベースの単体テストを構築して実行できます。ios_ui_test
を使用して、iOS シミュレータでユーザー インターフェース テストをビルドして実行できます。
少なくとも、minimum_os_version
属性の値を指定します。しばらく
その他のパッケージ属性(bundle_identifier
、infoplists
など)
よく使用される値にデフォルトで設定し、それらのデフォルト値に
必要に応じて調整してください。テストを実行するために
ios_application
のターゲット名を
test_host
属性。
ステップ 3c: ライブラリ ターゲットを追加する
それぞれに objc_library
ターゲットを追加します。
Objective-C ライブラリと
swift_library
アプリケーションやテストが依存する各 Swift ライブラリのターゲットを指定します。
次のようにライブラリ ターゲットを追加します。
アプリケーション ライブラリ ターゲットを依存関係としてアプリケーションに追加する できます。
テスト ライブラリ ターゲットをテスト ターゲットに依存関係として追加します。
srcs
属性に実装ソースをリストします。hdrs
属性のヘッダーを一覧表示します。
さまざまなタイプのアプリケーションの既存のサンプルを 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
をタップします。
トラブルシューティング
Bazel エラーは、選択した Xcode バージョンと同期しなくなると発生することがあります。 更新の適用時などに起こります以下のことをぜひお試しください。 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
を実行してみてください。