limrun-xcode-bazel について
limrun-xcode-bazelは、さまざまな環境からLimrunのリモートMacワーカーでBazel製Appleプロジェクトをビルドする旧版スキルです。lim xcode rbeでリモート実行を構成し、シミュレーターへの導入やビルド成果物のアップロードにも対応します。新規セットアップにはlimrun-bazelが案内されています。
主な機能
- 01lim xcode rbeによるBazelリモート実行の構成
- 02ワークスペース固有の.limrun設定を生成
- 03インストール済みXcodeバージョンの選択
- 04成功したビルドを接続済みシミュレーターに導入
- 05ビルド成果物をLimrunアセットとしてアップロード
活用シーン
- 01既存のBazel製Appleワークスペースをリモートビルド
- 02LinuxやコンテナからBazelビルドを実行
- 03単一アプリのビルド成功後にシミュレーターへ導入
- 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 を確認してください。
ビルド
- Bazel ワークスペースのルート(
MODULE.bazelまたはWORKSPACEがある場所)から、lim xcode rbeを実行します。インスタンスと.limrun/設定を準備し、正確なビルドコマンドを 表示します。トンネルはバックグラウンドで実行され(PID が表示されます)、--no-daemonを指定するとフォアグラウンドで実行されます。 - 表示されたコマンドを実行します。例:
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を確認してください。