docs(ios): track ReplayKit screen-broadcast + native audio-routing as phase-2 follow-ups
iOS WebViews don't support getDisplayMedia, so sharing the device screen into a meeting needs a native ReplayKit Broadcast Upload Extension (+ App Groups) — viewing a shared screen works today. Also note native audio routing (AVAudioSession) as a phase-2 plugin. Adjusted the App Review note so we don't advertise iOS screen-sharing before that extension ships.
This commit is contained in:
+24
-2
@@ -65,5 +65,27 @@ collect account info + usage for chat/calls). Then submit for review (or flip `s
|
||||
### App Review note (Guideline 4.2 — "Minimum Functionality")
|
||||
Apple scrutinises apps that look like "just a website". Ours passes because it ships **real native
|
||||
capabilities** — push notifications, camera/microphone for calls, photo sharing. Make sure push (Step 5)
|
||||
is live before the **public** submission, and in the reviewer notes mention the native video calling +
|
||||
screen sharing so it's obvious this is more than a web view. TestFlight builds are fine without push.
|
||||
is live before the **public** submission, and in the reviewer notes mention the **native video/voice
|
||||
calling + push notifications**. Do **not** advertise "share your screen" as an iOS feature in the store
|
||||
listing yet — see the follow-up below (you can still *view* a screen someone else shares).
|
||||
|
||||
---
|
||||
|
||||
## Known iOS limitations & follow-ups (phase 2 — after TestFlight)
|
||||
|
||||
### 1. Sharing YOUR iOS screen into a meeting → needs a ReplayKit Broadcast Upload Extension
|
||||
- **Why:** the app's screen share uses the web `getDisplayMedia` API, which **iOS WebViews and Safari do
|
||||
not support**. Apple only allows capturing the *device* screen via **ReplayKit**.
|
||||
- **What works today on iOS:** *viewing* a screen another participant shares (it's just incoming video),
|
||||
chat, voice/video calls, camera, photo sharing.
|
||||
- **What's needed to broadcast the iOS screen:** a native **Broadcast Upload Extension** target that
|
||||
captures frames via ReplayKit and feeds them into the LiveKit/WebRTC session, plus the **App Groups**
|
||||
capability (to pass data between the app and the extension). This is native Swift work — NOT part of
|
||||
the Capacitor wrapper — so it's tracked as a separate task, done after the app is on TestFlight.
|
||||
- **Store impact:** don't claim iOS screen-sharing in the listing until this ships, or a reviewer may
|
||||
test it and it will fail.
|
||||
|
||||
### 2. Native mobile audio routing (speaker / earpiece / Bluetooth) — needs a Capacitor audio plugin
|
||||
- Mobile **web** can't switch the audio output route (`setSinkId` is unimplemented on iOS/Android), so the
|
||||
in-meeting speaker/earpiece/Bluetooth control is web-only where it works and hidden where it doesn't.
|
||||
- True routing on iOS needs a small native plugin driving `AVAudioSession`. Phase-2 native task.
|
||||
|
||||
Reference in New Issue
Block a user