Skip to content

Phone app: the dev client on Google Play's internal track (deploy#22) - #324

Merged
bubulux merged 1 commit into
mainfrom
feat/deploy-22-dev-client-play
Nov 12, 2026
Merged

bubulux merged 1 commit into
mainfrom
feat/deploy-22-dev-client-play

Conversation

@bubulux

@bubulux bubulux commented Nov 12, 2026

Copy link
Copy Markdown
Collaborator

Part of OpenClapper-dev/deploy#22. The deploy side (a "Development · Build phone app" workflow) follows in that repository once this is on main.

What changed

  • build-phone-app.yml: variant: dev takes track: internal. With the environment's four key secrets it builds a signed release: assembleRelease bundleRelease, APP_VARIANT=development, and the build-time version code. The debug-key check, the Play requirements step and the upload then run as they do for staging. Without a key it stays the debug build, as before. A track without a key fails in Settings.
  • app.config.ts:
    • development ("OpenClapper Dev", org.openclapper.dev) is the Play dev client. It gets the build-time version code and withDevClientInRelease. That plugin sets expo.devlauncher.configureInRelease and expo.devmenu.configureInRelease; without them both modules compile themselves out of release builds (their android/build.gradle).
    • New development-local ("OpenClapper Dev Local", org.openclapper.dev.local) for keyless builds. It has the same scheme and icons, so Metro's QR code opens either app.
    • STAGING_VERSION_CODE is renamed to BUILD_TIME_VERSION_CODE, because it is shared now.
  • make dev-build builds development-local. make mobile keeps APP_VARIANT=development, since only the scheme matters there.
  • Docs: development, self-hosting (The phone, Play Store), releasing, the phone-app feature page, and known-issues.

Decisions

  • The Play app and the keyless build have separate package ids. They are signed differently, so neither could update the other.
  • The workflow tells the two builds apart by whether the key is present, not by a new input. For self-hosters without a key nothing changes except the package id: the next keyless dev build installs next to the old org.openclapper.dev instead of replacing it. Uninstall the old one once.

Checked

  • make check is green.
  • expo config --type introspect gives development → org.openclapper.dev, the build-time code and both Gradle properties. development-local → org.openclapper.dev.local, the release code, no properties.
  • The Settings and Build steps pass bash -n. I simulated Settings for dev without a key (passes), dev + internal without a key (fails with the message), and dev + internal with a key (passes).

Not checked

  • No Gradle build ran here.
  • The release-mode dev client has not run on a phone yet: launcher, tunnel URL, Fast Refresh, dev menu. This is in known-issues.

🤖 Generated with Claude Code

…s one as OpenClapper Dev Local (deploy#22)

Build phone app with variant dev and the environment's key builds "OpenClapper Dev" (org.openclapper.dev) as a
signed release build with the build-time version code, APK and App Bundle, and takes track internal. The dev
launcher and menu stay in that release build (expo.devlauncher/devmenu.configureInRelease). Without a key it
stays the debug build, now "OpenClapper Dev Local" (org.openclapper.dev.local), as make dev-build is, so the
two install side by side. STAGING_VERSION_CODE becomes BUILD_TIME_VERSION_CODE.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant