limrun-detox-testing について
limrun-detox-testingは、Limrun上のiOSアプリをDetoxでテストするためのスキルです。テスター、Detoxメディエーター、Limrunアプリクライアントの接続方法に加え、設定とトラブルシューティングを説明します。
主な機能
- 01Detoxメディエーターとテスターの設定
- 02トンネル経由のLimrun iOSアプリ接続
- 03Detox設定と環境変数の構成
- 04接続状態の確認項目
- 05よくある問題のデバッグ手順
活用シーン
- 01Limrun iOSアプリに対するDetoxテスト
- 02アプリやテスターの接続問題の診断
- 03プロジェクトのDetoxセッション設定
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ limrun-inc/ skills --skill limrun-detox-testingインストール後、Claude Code で/limrun-detox-testingを入力して読み込まれたか確認します。
詳細
Limrun Detox
Limrun iOS での Detox ランタイム作業に使用します。ユーザーから明示的にネイティブビルドを求められない限り、ビルドに関する作業は分けてください。
コンポーネント
- テスター:ローカルの Node/Jest/Detox プロセスです。
- メディエーター:
detox run-serverです。通常、エージェントのマシン上でローカルに実行します。 - アプリクライアント:
lim ios launch-app --runtime detoxを介して limulator が注入します。
CLI の流れ
このセッションでまだ使用していないコマンドを実行する前に、現在のヘルプを確認してください。
lim ios tunnel --help
lim ios launch-app --help
長時間実行するメディエーター、テスター、トンネルは、それぞれ別のターミナルで起動してください。
この簡易手順を使用する前に、プロジェクトの .detoxrc がセッション環境を読み込むことを確認してください。Detox はこれらの変数を自動的には使用しません。
session: {
server: process.env.DETOX_SERVER || 'ws://localhost:8099',
sessionId: process.env.DETOX_SESSION_ID || 'limrun-detox',
}
設定の全容は、以下の Detox テストのセットアップ に記載されています。
ターミナル 1:
npx detox run-server -p 8099 -l verbose
ターミナル 2:
lim ios tunnel \
--selector localhost:8099 \
--detach \
--id <ios-id>
DETOX_SERVER_URL="ws://localhost:8099"
ターミナル 3 では、アプリが接続する前にテスターを起動します。
DETOX_SERVER="ws://localhost:8099" \
DETOX_SESSION_ID=<session-id> \
npx detox test --no-start
その後、ターミナル 2 からアプリを再起動します。プロジェクトから node_modules/detox を使って実行する場合、--detox-version は省略可能です。
lim ios launch-app <bundle-id> \
--id <ios-id> \
--runtime detox \
--detox-server-url "$DETOX_SERVER_URL" \
--detox-session-id <session-id> \
--detox-version <detox-version>
テスターをアプリの接続前に起動するか、limrun-inc/typescript-sdk examples/detox-ios の保守されているオーケストレーションを使用して、問題のないメディエーターの「cannot forward」ノイズを避けてください。
npx detox test --no-start を実行する前にアプリを手動で起動した場合、テスターが接続するまでは、このメディエーターのメッセージが表示されるのは想定どおりです。
トンネルの起動時にアクティブなセッションが報告された場合は、lim ios tunnel status --id <ios-id> --json で確認してください。不要になったセッションは lim ios tunnel stop --id <ios-id> で停止し、宣言したメディエーターセレクターを再度起動します。
アイドル状態のトンネルが開いていてもインスタンスのアクティビティとはみなされないため、テスト実行の合間にシミュレーターが非アクティブタイムアウトになるのを妨げません。
Detox テストのセットアップ
npx detox test --no-start でも、通常の Detox プロジェクト設定が必要です。
- プロジェクトの Detox 設定ファイルと設定名を指定します(参考レイアウトは
examples/detox-ios/.detoxrc.cjsin limrun-inc/typescript-sdk を参照してください)。 - Limrun のサードパーティードライバーを使用します:
type: '@limrun/detox/driver'。 DETOX_SERVERとDETOX_SESSION_IDがメディエーターおよび起動コマンドと一致するようにします。- スクリーンショットやドライバー呼び出しでインスタンス API が必要な場合は、
LIMRUN_IOS_ID、LIMRUN_IOS_API_URL、LIMRUN_IOS_TOKENなどの Limrun ドライバー環境変数を指定します。
正確な設定と環境変数の構成については、保守されている標準手順として limrun-inc/typescript-sdk examples/detox-ios を使用してください。詳細なログだけでは不十分な場合に限り、detox run-server で -l trace を使用してください。
ネイティブの SwiftUI アプリでは、通常、最小限の Detox 設定は次のようになります。
const server = process.env.DETOX_SERVER || 'ws://localhost:8099';
const sessionId = process.env.DETOX_SESSION_ID || 'limrun-detox';
module.exports = {
testRunner: { args: { $0: 'jest' }, jest: { setupTimeout: 120000 } },
session: {
server,
sessionId,
debugSynchronization: 0,
},
apps: { ios: { type: 'ios.app', binaryPath: 'unused-by-limrun' } },
devices: {
limrun: {
type: '@limrun/detox/driver',
device: { id: process.env.LIMRUN_IOS_ID },
},
},
configurations: {
'ios.limrun': {
device: 'limrun',
app: 'ios',
behavior: { init: { reinstallApp: false }, cleanup: { shutdownDevice: false } },
},
},
};
次に、lim ios launch-app <bundle-id> --runtime detox ... で起動し、npx detox test --no-start を実行します。
検証シグナル
- アプリが接続済み:
detox run-serverのログにrole:"app"とappConnected:trueが表示されます。 - テスターが接続済み:同じセッションで
testerConnected:true, appConnected:trueになります。 - ランタイムが読み込み済み:
--runtime detoxで起動した後、アプリがメディエーターに接続します。 - UI が表示済み:
lim ios element-tree --id <ios-id>に想定されるアプリ画面が表示されます。
注意点
- 任意の環境変数、アプリ引数、または注入可能なパスを渡さないでください。
--runtime detoxを使用してください。 --detox-versionは、テスターが使用するローカルのdetoxパッケージのバージョンと一致させてください。省略した場合、lim ios launch-appは現在の作業ディレクトリからバージョンを解決します。Detox プロジェクトの外部で実行する場合は、明示的に指定してください。- サポート対象外のバンドル版 Detox が指定された場合は、サポート対象バージョンの一覧を明示して失敗する必要があります。
Cannot forward the message to the Detox clientは、単にテスターより先にアプリが接続したことを意味する場合があります。- SwiftUI では、安定したアクセシビリティ識別子を優先してください。たとえば、
.accessibilityIdentifier("greetingText")とby.id('greetingText')を使用します。by.text(...)では、lim ios element-treeに表示されるラベルを検出できない場合があります。 - エラーをデバッグするには、まず
lim ios element-tree --id <ios-id>を確認し、次にメディエーターのログでアプリとテスターの接続状態を確認してください。 - 手動実行後のクリーンアップでは、
detox run-serverを停止し、lim ios tunnel stop --id <ios-id>を実行してから、lim ios delete <ios-id>でインスタンスを削除してください(--idは delete では無効です)。 - これによって Detox が iOS のライフサイクルを管理するようになるわけではありません。Limrun インスタンスは別途準備するか、再利用してください。