mcpField
L
limrun-xcode-bazel

limrun-xcode-bazel

github.com/limrun-incクラウド・DevOps243.2k 回インストール1 日前に更新
リポジトリ

limrun-xcode-bazel について

limrun-xcode-bazelは、さまざまな環境からLimrunのリモートMacワーカーでBazel製Appleプロジェクトをビルドする旧版スキルです。lim xcode rbeでリモート実行を構成し、シミュレーターへの導入やビルド成果物のアップロードにも対応します。新規セットアップにはlimrun-bazelが案内されています。

主な機能

  1. 01lim xcode rbeによるBazelリモート実行の構成
  2. 02ワークスペース固有の.limrun設定を生成
  3. 03インストール済みXcodeバージョンの選択
  4. 04成功したビルドを接続済みシミュレーターに導入
  5. 05ビルド成果物をLimrunアセットとしてアップロード

活用シーン

  1. 01既存のBazel製Appleワークスペースをリモートビルド
  2. 02LinuxやコンテナからBazelビルドを実行
  3. 03単一アプリのビルド成功後にシミュレーターへ導入
  4. 04プレビューや別シミュレーターへの導入用にビルドを公開

インストール

コマンドをコピーしてターミナルで実行します。

$npx skills add https://github.com/limrun-inc/skills --skill limrun-xcode-bazel

インストール後、Claude Code で/limrun-xcode-bazelを入力して読み込まれたか確認します。

同梱ファイルreferences/project-compatibility.mdreferences/verify-remote.md

詳細

Limrun RBE での Bazel iOS ビルド(レガシー)

lim xcode rbe はレガシーな Bazel の手順です。これに代わるのが lim bazel setup(スキル limrun-bazel)です。サンドボックスやトンネルは不要で、iOS と Android のターゲットに対応し、 組織全体で1つのキャッシュを共有します。このスキルは、すでに lim xcode rbe を使用している ワークスペース、またはユーザーから明示的に依頼された場合にのみ使用してください。

あらゆる環境(Linux、Windows、macOS、VM、コンテナ)から、ローカルに Xcode をインストールせずに、 Limrun のリモート Mac ワーカーで Bazel の Apple プロジェクトをビルドできます。lim xcode rbe は リモート RBE スタックを起動してローカルポートにトンネルし、.limrun/ 設定を書き込みます。 これにより、bazelisk build --config=limrun で Apple のビルド処理をリモートで実行できます。 このワークフローではローカルの Xcode やビルドツールは使用しません。

認証と CLI

必要な場合は、npm install --global lim でインストールします。認証には lim login または LIM_API_KEY を使用します(シェルに表示されていなくても、ユーザーの環境にすでに設定されている 場合があります。確認してから尋ねてください)。CLI が正式な情報源です。このスキルに記載された コマンドは検証済みですが、フラグでエラーが発生した場合や、ここに記載されていないフラグが必要な 場合は、推測せずに lim xcode rbe --help を確認してください。

ビルド

  1. Bazel ワークスペースのルート(MODULE.bazel または WORKSPACE がある場所)から、 lim xcode rbe を実行します。インスタンスと .limrun/ 設定を準備し、正確なビルドコマンドを 表示します。トンネルはバックグラウンドで実行され(PID が表示されます)、 --no-daemon を指定するとフォアグラウンドで実行されます。
  2. 表示されたコマンドを実行します。例: bazelisk --digest_function=sha256 build --config=limrun //App

.limrun/ やフラグを手作業で記述しないでください。CLI がサンドボックスの Xcode と OS に合わせて 生成します。別のインストール済み Xcode でビルドするには、lim xcode version set 27 または 一度だけ使用する lim xcode rbe --xcode-version 27 を指定します。メジャーバージョンだけを指定 すると、そのメジャーバージョンの GA リリースが選択されます。27.1 のようにメジャーとマイナーを 指定すると、そのバージョン(ベータ版)が固定されます。フリートの Xcode がアップグレードされた 場合や Xcode を切り替えた場合は、--stop の後に lim xcode rbe を再実行して更新してください。

生成された設定を編集せずに、limrun の実行に独自の Bazel フラグを追加するには、ワークスペースの ルートにある user.limrun.bazelrc に記述します。生成される設定は最後にこのファイルを try-import するため、ここに記述した build:limrun --… の行が優先され、 lim xcode rbe で再生成しても保持されます(.limrun/ は保持されません)。

シミュレーターで実行する

lim xcode rbe はビルド専用です。ユーザーがアプリを確認または実行できるようにするには、 シミュレーターを接続します。確認または接続すると、最後のビルドがすぐにインストールされるため、 再ビルドは不要です。

lim xcode get             # is a simulator already attached?
lim ios create --attach   # attach one

ユーザーにブラウザーを表示できない場合は --no-open を追加します。ローカルでのストリーム URL の 表示をスキップし、共有用の URL は引き続き表示します。

接続時の出力に署名付きストリーム URL が含まれている場合は、[Live simulator](<signed-stream-url>) のような Markdown リンクでユーザーに共有してください。

シミュレーターを接続している場合、--config=limrun でビルドが成功するたびにアプリが自動的に 再インストールされ、再起動します。別途インストールする手順は不要です。

bazelisk --digest_function=sha256 build --config=limrun //App

注意:

  • シミュレーターを使うことがあらかじめわかっている場合は、最初に接続してください: lim xcode rbe --ios(起動時に接続され、--stop で解除されます)。
  • 自動インストールはビルドのイベントをもとにサーバー側で実行されます。 lim xcode rbe install サブコマンドや --target フラグはありません。再インストールを強制するには 再ビルドしてください(キャッシュヒットなら数秒で完了します)。
  • 成功した実行でアプリが1つ生成された場合に実行されます。そのため、複数のアプリがある ワークスペースでは、1回の実行につきアプリのターゲットを1つビルドしてください(//... ではなく //App)。複数アプリのビルドは成功しますが、何もインストールされません。

タップ、入力、要素ツリーの読み取り、スクリーンショットの撮影、実行中のアプリの録画を行うには、 limrun-ios-simulator スキルに切り替えてください。

ビルドをアセットとしてアップロードする

ビルドを Limrun アセットとして公開する(プレビューリンク、ほかのシミュレーターへのインストール、CI アーティファクト)には、トンネルの開始時にアップロードを有効にするか、後からビルドを 1 つアップロードします。

lim xcode rbe --auto-upload preview/my-app --upload-ttl 24h  # every successful build refreshes the asset
lim xcode rbe upload preview/my-app --ttl 24h                # one-shot: the newest successful build
  • --auto-upload はトンネルの稼働中に有効です。--config=limrun を使ったビルドが成功するたびに、ビルド後の手順なしでアプリがそのアセット名で再アップロードされます。アップロード結果は .limrun/rbe.log に記録されます。
  • rbe upload はワークスペースのルートから実行し、バックグラウンドトンネルと、成功したビルドが少なくとも 1 つ必要です。そうでない場合はエラーになります。
  • TTL は Go の期間形式(24h、30m。1d は無効)で指定し、省略可能です。指定せずにアップロードするたびに、アセットの有効期限はそのアップロードから 14 日後に延長されます。
  • 稼働中のトンネルの --auto-upload 設定を変更するには、--stop してから再実行します。CLI は設定の不一致を黙って無視せず、設定を変更して再度有効にする操作を拒否します。
  • アップロードしたアプリは、ブラウザーで https://console.limrun.com/preview?asset=<name>&platform=ios を開いてプレビューできます。

停止

lim xcode rbe --stop で停止します(リモートスタックの停止に約 20 秒かかります)。lim xcode delete <id> でインスタンスを削除します。

注意事項

  • build の前に、必ず --digest_function=sha256 を渡してください(CLI が出力するコマンドをそのまま使用してください)。Limrun のキャッシュは SHA256 のみ対応しており、Bazel 9 のデフォルトは BLAKE3 です。これは起動時のフラグなので、--config=limrun には指定できません。症状:ビルド → Cannot use hash function BLAKE3 with remote cache、インストール → non-SHA256 digest … rebuild with --digest_function=sha256。
  • lim xcode rbe はサブディレクトリではなく、ワークスペースのルートから実行してください。そこに .limrun/ が書き込まれ、それ以外の場所では即座に失敗します。
  • ビルドが成功しても、リモート実行されたとは限りません。キャッシュヒット(action cache hit/remote cache hit)があると、トンネルが切れていてもビルドは成功します。実際のリモート実行を強制して確認する方法は、references/verify-remote.md を参照してください。
  • 出力された .ipa のパスに、ローカルマシンからアクセスすることはできません。ビルドコマンドには --remote_download_outputs=minimal が含まれており、アーティファクトはインスタンスのキャッシュに保持され、ダウンロードされません。Bazel は通常どおり Target //App:App up-to-date: …/App.ipa と出力しますが、そのファイルはディスク上にありません。これは想定された動作であり、ビルドの失敗ではありません。シミュレーターが接続されている場合、ビルドイベントログから読み取ったアーティファクトのキャッシュダイジェストを使って自動インストールされます(ローカルファイルは使いません)。.ipa をローカルに用意する必要がある場合に限り、ビルドコマンドから --remote_download_outputs=minimal を削除すると、Bazel が最上位の出力をダウンロードします。いずれの場合も自動インストールは引き続き機能します。
  • 新しいインスタンスでは、最初のビルドが Lost inputs no longer available remotely(例:… Assets.car)で失敗することがあります。これはインスタンス間で一時的にキャッシュが削除されたためで、コードの問題ではありません。Bazel は Found transient remote cache error, retrying the build... と出力し、再試行は成功します。デモの途中で発生しないようにするには、lim xcode rbe の直後にフルビルドを実行してキャッシュを事前に温めてください。
  • You don't have permission to save … in "CoreSimulator"(actool/ibtool)は、設定の問題ではなく、フリート側でのデバイス不足です。再試行してください。解決しない場合は Limrun に報告してください。
  • プロジェクト独自の Bazel 設定が RBE と競合する場合があります(Starlark のトランジションによる Xcode の固定、カスタムの remote_default_exec_properties、サンドボックスと相性の悪い genrule など)。これらはプロジェクト固有のものであり、Limrun のバグではありません。RBE の不具合と判断する前に、references/project-compatibility.md を確認してください。

コメント