ClavueClavue
AI workbench for macOS

Mobile update channel

Mobile uses first-class release channels, not ad-hoc APK links. Clients poll a versioned JSON manifest, compare integer build numbers, and prompt (or force) install. This is separate from imux macOS Sparkle updates. Clavue Mobile and imux-mobile each have their own manifest.

Manifests

Canonical URLs:

  • version — semver string (display)
  • versionCode — Android integer; primary upgrade key
  • iosBuildNumber / downloads.ios.buildNumber — iOS CFBundleVersion
  • downloads.android.apk — HTTPS APK URL
  • downloads.ios.appStore / testFlight — when published
  • downloads.ios.ipa — App Store signed archive URL (not sideload)
  • forceUpdate / minVersionCode — block dismiss when required
  • changelog[] — modal and download page copy
  • packageId — com.clavue.xw or com.imux.mobile
GET https://www.clavue.com/downloads/mobile/latest-mobile.json
# Clavue Mobile · package com.clavue.xw

GET https://www.clavue.com/downloads/mobile/latest-imux-mobile.json
# imux-mobile · package com.imux.mobile

# Cache-bust query: ?_=<timestamp> (apps always append)
# Both hosts: www.clavue.com and www.iccjk.com serve the same /downloads/mobile/ tree

Client behavior

  • Cold start: force network check
  • App resume: throttled (default 6h, overridable via checkIntervalHours)
  • Settings → Check for updates: force network, ignore dismiss
  • Local notification channel app-updates (once per remote versionCode)
  • Dismiss stores dismissedVersionCode until a higher remote code appears

Publish a build

versionCode must strictly increase for the same package id. Clavue and imux-mobile must never share a package id or overwrite each other’s manifests.
# Clavue Mobile
cd clavue-mobile
./scripts/publish-android-release.sh --bump patch --deploy \
  --notes "修复说明;第二条 changelog"

# imux-mobile (coding remote)
cd imux-mobile
./scripts/publish-android-release.sh --bump patch --deploy \
  --notes "配对与投影改进"

# Force users below a floor:
./scripts/publish-android-release.sh --bump patch --deploy --force-update

iOS releases

Archive + export App Store IPA (sync CFBundleShortVersionString / CFBundleVersion with app.json first). Upload with Transporter. Host a copy under /downloads/mobile/clavue-mobile-vX.Y.Z-ios.ipa and set downloads.ios.ipa + buildNumber + status ready_for_app_store. After the listing is live, set downloads.ios.appStore and status published. See clavue-mobile/IOS_RELEASE.md.

Next