Xcode から Bazel への移行

<ph type="x-smartling-placeholder"></ph> 問題を報告する <ph type="x-smartling-placeholder"></ph> ソースを表示 夜間 · 7.3 · 7.2 · 7.1 · 7.0 · 6.5

このページでは、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 コマンドはビルドとテストの機能を提供します。 一定の制限があります。

始める前に

始める前に、次のことを行います。

  1. Bazel をインストールします(まだインストールしていない場合)。

  2. Bazel とそのコンセプトに詳しくない場合は、iOS アプリ チュートリアルをご覧ください)。Bazel ワークスペースと、 (MODULE.bazel ファイル、BUILD ファイルなど)と、 ターゲット、ビルドルール、Bazel パッケージなど)で構成されます。

  3. プロジェクトの依存関係を分析して理解します。

プロジェクトの依存関係を分析する

Xcode とは異なり、Bazel ではすべての依存関係を明示的に宣言し、 BUILD ファイル内のすべてのターゲット。

外部依存関係の詳細については、外部依存関係との連携 依存関係にあります

Bazel を使用した Xcode プロジェクトのビルドまたはテスト

Bazel を使用して Xcode プロジェクトをビルドまたはテストする手順は次のとおりです。

  1. MODULE.bazel ファイルを作成する

  2. (試験運用版)SwiftPM の依存関係を統合する

  3. BUILD ファイルを作成します。

    a. アプリケーション ターゲットを追加する

    b. (省略可)テスト ターゲットを追加する

    c. ライブラリ ターゲットを追加する

  4. (省略可)ビルドを細かくする

  5. ビルドを実行する

  6. rules_xcodeproj を使用して 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 シミュレータでユーザー インターフェース テストをビルドして実行できます。

  • 同様のテストルールが tvOS watchOS および visionOS

少なくとも、minimum_os_version 属性の値を指定します。しばらく その他のパッケージ属性(bundle_identifierinfoplists など) よく使用される値にデフォルトで設定し、それらのデフォルト値に 必要に応じて調整してください。テストを実行するために 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 を実行してみてください。
で確認できます。