Gap: on iOS, screen share only worked in native CallKit calls. In a scheduled / code-joined SFU meeting the webview called setScreenShareEnabled() -> getDisplayMedia(), which WKWebView does not implement, so it failed silently. Production meetings are real LiveKit rooms, so we can publish natively instead. Fix (native ReplayKit -> same LiveKit room as a dedicated screen participant): - server: /api/meetings/token accepts screen:true -> mints a distinct <peerId>-screen identity (LiveKit allows one connection per identity), so the native publisher doesn't collide with the webview's own connection. - native plugin: startMeetingScreenShare/stopMeetingScreenShare + connectScreenRoom (a screen-only LiveKit connection: mic off, no camera, no callConnected) that reuses the existing broadcast-extension publishing path. - webview: toggleScreen routes to the native method on iOS SFU meetings; the screenShareState listener now drives the SFU case too (and tears the screen connection down on the system "Stop Broadcast"); sfuAttach/sfuDetach map the '<peerId>-screen' participant's screen track onto the sharer's tile and suppress the phantom person tile + the sharer's own self-view. Web/server deploy now; the native method needs the next Codemagic build to test on device. Verified: db-smoke 22/22; Swift braces balanced. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Biz Connect — Mobile app (Capacitor)
A Capacitor shell that loads the live Connect web UI (server.url in
capacitor.config.json) and adds native push, camera/mic, and store distribution. See the
overall plan in ../CLIENTS.md.
Android: follow the step-by-step in ANDROID_SETUP.md (project generation, icons/splash, permissions, Firebase/FCM, run, and Play Store build).
Prerequisites
- Node +
npm installhere. - Android: Android Studio + SDK.
- iOS: macOS + Xcode (+ an Apple Developer account to run on device / ship).
Setup
npm install
npm run assets # generate app icons + splash from resources/
npx cap add android
npx cap add ios # macOS only
npx cap sync
Run / build
npx cap open android # build & run from Android Studio
npx cap open ios # build & run from Xcode
Server origin
The app loads server.url from capacitor.config.json (default
https://remote.bizgaze.com). For a local device test against a dev server, set it to your
machine's LAN URL (and allow cleartext for plain http).
Native push (next step)
Native push uses the Capacitor Push Notifications plugin (FCM on Android, APNs on iOS) and a server endpoint to register device tokens — tracked in ../CLIENTS.md Phase B. This is separate from the existing Web Push (VAPID) the PWA already uses. Needs Google/Apple credentials to test end-to-end.
Shipping (gated on accounts)
- Google Play: one-time $25; upload an AAB; signing key.
- App Store: Apple Developer $99/yr; archive via Xcode; App Store Connect listing.