Agent Skills › K9i-0/ccpocket › sim-preview

sim-preview

GitHub

将Mac上iOS模拟器中的Flutter应用通过Expo Device Hub和Tailscale HTTPS流式传输至手机浏览器,支持H.264高清低延迟预览与交互操作。

.claude/skills/sim-preview/SKILL.md K9i-0/ccpocket

Trigger Scenarios

需要在手机端实时查看或测试iOS模拟器中的Flutter应用界面 需要通过浏览器远程调试或体验移动端应用交互

Install

npx skills add K9i-0/ccpocket --skill sim-preview -g -y
More Options

Non-standard path

npx skills add https://github.com/K9i-0/ccpocket/tree/main/.claude/skills/sim-preview -g -y

Use without installing

npx skills use K9i-0/ccpocket@sim-preview

指定 Agent (Claude Code)

npx skills add K9i-0/ccpocket --skill sim-preview -a claude-code -g -y

安装 repo 全部 skill

npx skills add K9i-0/ccpocket --all -g -y

预览 repo 内 skill

npx skills add K9i-0/ccpocket --list

SKILL.md

Frontmatter
{
    "name": "sim-preview",
    "description": "iOSシミュレーターで動くFlutterアプリをExpo Device HubとTailscale HTTPSでスマホのブラウザへ配信・操作するときに使う。"
}

Simulator Preview (Expo Device Hub)

MacのiOSシミュレーターを Expo Device Hub → Tailscale Serve (HTTPS) → スマホのブラウザ で配信する。Expoプロジェクトは不要。Flutterアプリをそのまま確認・操作できる。

既定はH.264・30fps・最大1000px・2.5Mbps。Device Hub 0.10.1でccpocketの配信を確認し、ユーザーから旧VNC方式より快適との評価を得た設定。TrollVNC / noVNCを既定に戻さない。

1. シミュレーターとアプリ

xcrun simctl list devices booted

対象アプリが既に動いていれば再利用する。起動が必要な場合やhot reloadには mobile-automation を使う。テスト用Bridgeが必要なら8766を使い、本番8765を停止・再起動しない。

前提はMac + Xcode、Node.js/npm、MacとスマホのTailscale接続。CoreSimulatorへのアクセスがサンドボックスで拒否された場合は、シミュレーターの故障と判断せず適切な実行権限で再確認する。

2. Device Hubを起動

既存のDevice HubとTailscale Serveの状態を確認し、目的の配信が動いていれば再利用する。

lsof -nP -iTCP:3400 -sTCP:LISTEN
tailscale serve status

新規起動には以下を使う。スクリプトはDevice Hubのみを起動し、アプリ起動やTailscale設定は別に行う。

bash .claude/skills/sim-preview/scripts/sim-preview.sh
  • ローカル待受は 127.0.0.1:3400。npm経由で検証済みバージョンを取得し、リポジトリの依存関係は変更しない。
  • 長時間実行できるツールセッションで起動し、停止用のセッションID / PIDとログを控える。
  • 3400が使用中ならプロセスを勝手に停止せず、既存配信を確認するか SIM_PREVIEW_PORT=3401 などの空きポートを選ぶ。起動ログの実際のポートを確認する。
  • 更新時は対象バージョンの --help を確認する。配信設定の変更はブラウザの「Stream options」からも試せる。

3. Tailscale内限定のHTTPSを設定

リモートのH.264 / WebRTCにはHTTPSが必要。 http://<Tailscale IP>:3400 ではMJPEGへフォールバックする。localhostでH.264が動くだけではスマホ向け検証の完了にならない。

tailscale serve status に今回のHubを指す設定があれば再利用する。未設定なら、起動ログのポートに合わせて設定する。

tailscale serve --bg --https=443 http://127.0.0.1:3400
  • 443に別サービスの設定がある場合は上書きせず、未使用のHTTPSポート(例: --https=8443)を選ぶ。
  • Serveが未有効なら、CLIが出力した有効化URLを案内する。ログインが必要ならユーザーに操作を依頼し、完了後に上記コマンドを再実行する。有効化だけでは転送設定が作成されないことがある。
  • 出力された https://<MacのDNS名>.ts.net[:port]/ を使う。ホスト名を固定値で書かない。
  • tailscale がPATHにない環境では /Applications/Tailscale.app/Contents/MacOS/Tailscale を確認する。
  • インターネット公開の tailscale funnel は使用しない。

4. 配信確認とユーザーへの案内

実際のHTTPS URLをブラウザで開き、以下を確認する。

  • 対象シミュレーターが Live になり、ccpocketの映像が表示される。
  • 「Stream options」でHTTP codecが H.264、Video FPSが 30 FPS、Max sizeが 1000 px、Video bitrateが 2.5 Mbps になっている(意図して調整した場合はその値)。

スマホのTailscaleをONにして開くHTTPSリンクを案内する。ユーザーにタップ・スクロール・文字入力の体感を試してもらい、Mac側の表示確認とスマホ側の確認結果を区別して報告する。遅延が残る場合は同画面で解像度やビットレートを調整して比較する。

初回のページ遷移がタイムアウトしても、再度画面状態を確認すると Live になっている場合がある。MJPEGになる場合はHTTPS URLとコーデック設定を確認する。

5. 継続・終了

プレビュー依頼中はDevice HubとHTTPS転送を残す。コード変更後のhot reloadはFlutter側で行い、配信画面で結果を確認する。

停止を依頼されたら、自分が起動したHubのセッションまたはPIDだけを停止する。今回追加したServe設定も不要になった場合のみ、対象HTTPSポートの転送を解除する。

# 今回443に追加した転送を終了する場合。別ポートなら置き換える。
tailscale serve --https=443 off

既存の共有設定を巻き込む tailscale serve reset やプロセス名による一括killは使わない。

参照

  • Expo Device Hub: standalone起動と配信方式。
  • 起動オプション: npm exec --yes --package=expo-device-hub@0.10.1 -- expo-device-hub --help

Version History

  • 370a4b0 Current 2026-09-22 13:40

    从基于TrollVNC的VNC连接方式切换为使用Expo Device Hub配合Tailscale HTTPS进行流媒体传输,提升了视频编码效率(H.264)和操作流畅度。

  • aa215a3 2026-07-25 06:59

Same Skill Collection

.claude/skills/codex-guide/SKILL.md
.claude/skills/flutter-ui-design/SKILL.md
.claude/skills/mobile-automation/SKILL.md
.claude/skills/playwright-cli/SKILL.md
.claude/skills/release-bridge/SKILL.md
.claude/skills/submit-store-review/SKILL.md
.claude/skills/update-store/SKILL.md
.claude/skills/web-preview/SKILL.md
.claude/skills/flutter-upgrade/SKILL.md
.claude/skills/merge/SKILL.md
.claude/skills/release-app/SKILL.md
.claude/skills/release-card/SKILL.md
.claude/skills/self-review/SKILL.md
.claude/skills/shorebird-patch/SKILL.md
.claude/skills/test-bridge/SKILL.md
.claude/skills/test-flutter/SKILL.md
.claude/skills/triage/SKILL.md

Metadata

Files
0
Version
370a4b0
Hash
af420d9d
Indexed
2026-07-25 06:59

Accueil - Wiki
Copyright © 2011-2026 iteam. Current version is 2.155.2. UTC+08:00, 2026-09-27 03:33
浙ICP备14020137号-1