Full Device Screen Sharing
By default, the UserView iOS SDK shares only your app's screen. With full device screen sharing, agents can see the entire device screen, including other apps, the home screen, and system UI. This uses Apple's Broadcast Upload Extension (ReplayKit).
Physical devices only
How It Works
Full device screen sharing uses a Broadcast Upload Extension — a separate target in your Xcode project that captures the entire screen via ReplayKit. The extension sends frames to your main app through an App Group, and the SDK transmits them to the agent over the existing connection.
When an agent requests full device mode, the SDK shows the system broadcast picker. The user taps "Start Broadcast" to begin sharing, and can stop at any time from Control Center.
Setup
1. Add the Broadcast Extension dependency
When adding the UpscopeIO package via Swift Package Manager, also add the UpscopeBroadcastExtension product to your Broadcast Extension target (created in step 2).
2. Create the Broadcast Upload Extension target
- In Xcode, go to File > New > Target
- Select Broadcast Upload Extension
- Uncheck "Include UI Extension"
- Name it (e.g.,
YourAppBroadcast) - Note the bundle identifier — it must be prefixed with your main app's bundle identifier (e.g.,
com.yourcompany.yourapp.broadcast)
3. Configure App Groups
Both your main app and the Broadcast Extension need to share data through an App Group:
- Select your main app target > Signing & Capabilities > + Capability > App Groups
- Add a group identifier (e.g.,
group.com.yourcompany.yourapp) - Select your extension target > Signing & Capabilities > + Capability > App Groups
- Add the same group identifier
4. Configure the Extension's Info.plist
Add the App Group identifier to the extension's Info.plist:
<key>UpscopeAppGroupId</key>
<string>group.com.yourcompany.yourapp</string>
5. Implement the Extension
Replace the contents of your extension's SampleHandler.swift with:
import UpscopeBroadcastExtension
class SampleHandler: UpscopeSampleHandler {}
That's it — all the frame capture and forwarding logic is handled by UpscopeSampleHandler.
6. Configure the SDK
Pass the App Group and extension bundle identifiers when initializing the SDK:
let config = UpscopeConfiguration(
apiKey: "YOUR_API_KEY",
broadcastAppGroupId: "group.com.yourcompany.yourapp",
broadcastExtensionBundleId: "com.yourcompany.yourapp.broadcast"
)
try Upscope.shared.initialize(with: config)
How agents trigger full device mode
Once configured, agents can switch to full device mode from the UserView dashboard during an active session. When they do:
- The system broadcast picker appears in your app
- The user taps Start Broadcast
- The agent sees the full device screen
- The user can stop sharing at any time from Control Center
If the user stops the broadcast, the SDK notifies the server automatically. The agent can also switch back to app-only mode at any time.
Limitations
- Only works on physical devices (not the Simulator)
- Element masking is not available in full device mode (the SDK cannot inspect views outside your app)
- Remote control (tap/scroll) only works within your app, not on the home screen or other apps
- Drawing annotations are not displayed in full device mode
- The user must explicitly start the broadcast via the system picker — it cannot be started programmatically
Without full device support
If you do not configure broadcastAppGroupId, the SDK will not advertise full device support. If an agent attempts full device mode, the user will see an "unsupported" message and the mode will revert automatically.
