diff --git a/.agents/skills/test-t3-mobile/SKILL.md b/.agents/skills/test-t3-mobile/SKILL.md index 1222449cd8a60d4dc9d3b837899d626813156b35..b2f5443e431a13c056c1d8305be2a149b462ded0 100644 --- a/.agents/skills/test-t3-mobile/SKILL.md +++ b/.agents/skills/test-t3-mobile/SKILL.md @@ -41,6 +41,9 @@ Start `vp run dev:client` from `apps/mobile`, or reuse a healthy Metro belonging to this checkout. Open its printed development-client URL with AgentDevice `open com.t3tools.t3code.dev ` and all returned target arguments. The device must be able to reach both Metro and the isolated backend. +Append `&disableAutoLaunch=1&disableFab=1` to the development-client URL query +when developer chrome would obscure screenshots or taps; the SDK 58 dev client +applies these preferences before the app loads. ## Pair and verify diff --git a/scripts/mobile-showcase.ts b/scripts/mobile-showcase.ts index 2b141e12164f17cdea99f3b2eac40dc3cd6f3d97..772ab38963503bfd1e4279ca2b07ac95daba4837 100644 --- a/scripts/mobile-showcase.ts +++ b/scripts/mobile-showcase.ts @@ -34,6 +34,9 @@ const REPO_ROOT = NodePath.resolve(NodePath.dirname(NodeURL.fileURLToPath(import const MOBILE_ROOT = NodePath.join(REPO_ROOT, "apps/mobile"); const ANDROID_PACKAGE = "com.t3tools.t3code"; const APP_SCHEME = "t3code"; +// expo-dev-launcher reads these off the manifest URL and updates the dev menu +// preferences before the app loads, keeping captures free of dev chrome. +const DEV_CLIENT_LAUNCH_FLAGS = "disableOnboarding=1&disableFab=1&disableAutoLaunch=1"; const IOS_READY_FILENAME = "T3ShowcaseReadyScene"; const SERVER_HOST = "0.0.0.0"; const IOS_SIMULATOR_ARCH = NodeProcess.arch === "arm64" ? "arm64" : "x86_64"; @@ -1107,25 +1110,9 @@ async function captureIos( await runCommand("xcrun", ["simctl", "install", simulator.udid, appPath]); } - for (const [key, value] of [ - ["EXDevMenuIsOnboardingFinished", "true"], - ["EXDevMenuShowFloatingActionButton", "false"], - ["EXDevMenuShowsAtLaunch", "false"], - ] as const) { - await runCommand("xcrun", [ - "simctl", - "spawn", - simulator.udid, - "defaults", - "write", - ANDROID_PACKAGE, - key, - "-bool", - value, - ]); - } - - const metroUrl = `http://${metroHost}:${config.metroPort}?disableOnboarding=1`; + // The dev-client launch URL carries the dev menu preferences (SDK 58), so + // nothing is written into the app container ahead of launch. + const metroUrl = `http://${metroHost}:${config.metroPort}?${DEV_CLIENT_LAUNCH_FLAGS}`; const scenePath = NodePath.join( await iosAppContainer(simulator.udid), "Library/Caches/T3ShowcaseScene", @@ -1357,12 +1344,12 @@ async function writeAndroidShowcaseScene(serial: string, scene: ShowcaseScene): ]); } +// Gesture and key-command toggles have no launch-URL flag, so they still go +// through the preferences file; onboarding, auto-launch and the floating button +// come from DEV_CLIENT_LAUNCH_FLAGS on the launch URL. async function prepareAndroidShowcaseApp(serial: string): Promise { const preferences = ` - - - @@ -1435,7 +1422,7 @@ async function captureAndroid( "-a", "android.intent.action.VIEW", "-d", - `${APP_SCHEME}://expo-development-client/?url=${metroUrl}`, + `'${APP_SCHEME}://expo-development-client/?url=${metroUrl}&${DEV_CLIENT_LAUNCH_FLAGS}'`, "--es", "showcasePairingUrl", encodeAndroidPairingUrls(pairingUrls),