PurpleCallio

PurpleCallio documentation

PurpleCallio iOS SDK Preview

The Swift package contains a native call engine using PurpleCallio REST, Socket.IO, and WebRTC. It is not released for production: a full Xcode consumer build and physical iPhone or iPad validation remain outstanding.

Release status

The Swift package and 76 Swift Testing cases pass on the macOS target. That does not compile the iOS UIKit, AVFoundation, or device WebRTC path. This environment has no full Xcode installation or physical iOS device, so no iOS target build or device call is claimed.

Add the package

The PurpleCallio SPM package is not published yet. Add mobile/ios as a local Swift package while developing from this repository; use a versioned Git tag only after an official release exists.

Use participant tokens

Your backend creates the call with its project API key and returns a participant-specific token. Pass that token to PurpleCallioClient.joinMeeting(token:). Never include a project API key, API secret, or server credential in the iOS app.

Permissions and media

Add NSCameraUsageDescription and NSMicrophoneUsageDescription to the host app Info.plist. The implementation includes native media capture, camera switching, audio-session handling, state, participant events, remote video rendering, reconnect, and cleanup.

Screen sharing is unsupported

The iOS SDK startScreenShare() call returns screenShareUnavailable. ReplayKit screen broadcast would require a Broadcast Upload Extension and app-group communication, neither of which is included.

Validation required before release

Resolve and build the package from a clean Xcode app, run all XCTest cases, and validate microphone, camera, remote video, audio routes, interruptions, foreground/background, reconnect, cleanup, and leave/rejoin on physical iOS devices.

Swift token-only call example

CallModel.swift
import PurpleCallio

let client = PurpleCallioClient()
let participantToken = try await myBackend.fetchParticipantToken()
let meeting = try await client.joinMeeting(token: participantToken)

try meeting.toggleMicrophone()
try await meeting.toggleCamera()
try await meeting.switchCamera()
await meeting.leave()
client.dispose()

Still having trouble?

If you're having an issue with this integration, our support team can help.

Contact Support

Related documentation

Build with PurpleCallio

Explore the documentation to choose hosted UI, React components, or the headless SDK for your integration.