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
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 SupportRelated documentation
Build with PurpleCallio
Explore the documentation to choose hosted UI, React components, or the headless SDK for your integration.