Documentation

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
Full device screen sharing only works on physical devices. It is not supported on the iOS Simulator.

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

  1. In Xcode, go to File > New > Target
  2. Select Broadcast Upload Extension
  3. Uncheck "Include UI Extension"
  4. Name it (e.g., YourAppBroadcast)
  5. 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:

  1. Select your main app target > Signing & Capabilities > + Capability > App Groups
  2. Add a group identifier (e.g., group.com.yourcompany.yourapp)
  3. Select your extension target > Signing & Capabilities > + Capability > App Groups
  4. 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:

  1. The system broadcast picker appears in your app
  2. The user taps Start Broadcast
  3. The agent sees the full device screen
  4. 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.