authorgravatar for julius0216@outlook.comJulius Marminge <julius0216@outlook.com> 2026-10-01 10:51:24-07:00
committergravatar for noreply@github.comGitHub <noreply@github.com> 2026-10-01 10:51:24-07:00
logce920f2ac893051bff2108c03346bd35340fd988
treedc3982159929a65b88c56b811c45da732c6e1b37
parent438af295fefdd04cc38629f902d7faa07cf39712
signature Signed by PGP key B5690EEEBB952194

chore(mobile): drive dev-menu suppression from the dev-client launch URL (#12049)

Co-authored-by: Claude Fable 5 <noreply@anthropic.com>

2 files changed, 13 insertions(+), 23 deletions(-)

.agents/skills/test-t3-mobile/SKILL.md+3
......@@ -41,6 +41,9 @@ Start `vp run dev:client` from `apps/mobile`, or reuse a healthy Metro belonging
4141to this checkout. Open its printed development-client URL with AgentDevice
4242`open com.t3tools.t3code.dev <url>` and all returned target arguments.
4343The device must be able to reach both Metro and the isolated backend.
44Append `&disableAutoLaunch=1&disableFab=1` to the development-client URL query
45when developer chrome would obscure screenshots or taps; the SDK 58 dev client
46applies these preferences before the app loads.
4447
4548## Pair and verify
4649
scripts/mobile-showcase.ts+10-23
......@@ -34,6 +34,9 @@ const REPO_ROOT = NodePath.resolve(NodePath.dirname(NodeURL.fileURLToPath(import
3434const MOBILE_ROOT = NodePath.join(REPO_ROOT, "apps/mobile");
3535const ANDROID_PACKAGE = "com.t3tools.t3code";
3636const APP_SCHEME = "t3code";
37// expo-dev-launcher reads these off the manifest URL and updates the dev menu
38// preferences before the app loads, keeping captures free of dev chrome.
39const DEV_CLIENT_LAUNCH_FLAGS = "disableOnboarding=1&disableFab=1&disableAutoLaunch=1";
3740const IOS_READY_FILENAME = "T3ShowcaseReadyScene";
3841const SERVER_HOST = "0.0.0.0";
3942const IOS_SIMULATOR_ARCH = NodeProcess.arch === "arm64" ? "arm64" : "x86_64";
......@@ -1107,25 +1110,9 @@ async function captureIos(
11071110 await runCommand("xcrun", ["simctl", "install", simulator.udid, appPath]);
11081111 }
11091112
1110 for (const [key, value] of [
1111 ["EXDevMenuIsOnboardingFinished", "true"],
1112 ["EXDevMenuShowFloatingActionButton", "false"],
1113 ["EXDevMenuShowsAtLaunch", "false"],
1114 ] as const) {
1115 await runCommand("xcrun", [
1116 "simctl",
1117 "spawn",
1118 simulator.udid,
1119 "defaults",
1120 "write",
1121 ANDROID_PACKAGE,
1122 key,
1123 "-bool",
1124 value,
1125 ]);
1126 }
1127
1128 const metroUrl = `http://${metroHost}:${config.metroPort}?disableOnboarding=1`;
1113 // The dev-client launch URL carries the dev menu preferences (SDK 58), so
1114 // nothing is written into the app container ahead of launch.
1115 const metroUrl = `http://${metroHost}:${config.metroPort}?${DEV_CLIENT_LAUNCH_FLAGS}`;
11291116 const scenePath = NodePath.join(
11301117 await iosAppContainer(simulator.udid),
11311118 "Library/Caches/T3ShowcaseScene",
......@@ -1357,12 +1344,12 @@ async function writeAndroidShowcaseScene(serial: string, scene: ShowcaseScene):
13571344 ]);
13581345}
13591346
1347// Gesture and key-command toggles have no launch-URL flag, so they still go
1348// through the preferences file; onboarding, auto-launch and the floating button
1349// come from DEV_CLIENT_LAUNCH_FLAGS on the launch URL.
13601350async function prepareAndroidShowcaseApp(serial: string): Promise<void> {
13611351 const preferences = `<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
13621352<map>
1363 <boolean name="isOnboardingFinished" value="true" />
1364 <boolean name="showsAtLaunch" value="false" />
1365 <boolean name="showFab" value="false" />
13661353 <boolean name="motionGestureEnabled" value="false" />
13671354 <boolean name="touchGestureEnabled" value="false" />
13681355 <boolean name="keyCommandsEnabled" value="false" />
......@@ -1435,7 +1422,7 @@ async function captureAndroid(
14351422 "-a",
14361423 "android.intent.action.VIEW",
14371424 "-d",
1438 `${APP_SCHEME}://expo-development-client/?url=${metroUrl}`,
1425 `'${APP_SCHEME}://expo-development-client/?url=${metroUrl}&${DEV_CLIENT_LAUNCH_FLAGS}'`,
14391426 "--es",
14401427 "showcasePairingUrl",
14411428 encodeAndroidPairingUrls(pairingUrls),