# Installation

# Requirements

  • Xcode 12.4 or greater
  • Support for iOS 13+

# Swift Packages

The iOS SDK is available as a Swift Package and can be added to an Xcode project as a package dependency using File > Swift Packages > Add Package Dependency and entering the following package URLs:

# Realtime SDK


# WebRTC


# Apollo


Also, when the Apollo package is imported, only select the following package products:

  • Apollo
  • ApolloAPI
  • ApolloWebSocket

# Examples

To include the iOS SDK in your project, add the following import line at the beginning of the source file that will use the SDK.

import VcsRealtimeSdk

# Join Room

Joining a room is how your program will interact with other participants, and allows video and audio to be sent and received from the client.

// Instantiate the realtime SDK
let realtime = RealtimeSDK(delegate: <object implementing RealtimeSDKProtocol>)

let roomHost = "<vcs-domain>/websocket/realtime/websocket"
let userName = "Test User"

var options = RealtimeSDK.RoomOptions(host: roomHost, name: userName)
options.audio = true
options.video = true
options.hdVideo = true

RealtimeSDK.joinRoom(token: token, options: options) { error in
    if let error = error {
        Logger.debug(logTag, "Error in joinRoom, error = \(error.localizedDescription)")

If the joinRoom function is successful, the RealtimeSDKProtocol will provide a callback (onRoomInitialized) with a Room object. This object can be used to access room-specific functions such as mute/unmute, etc.

# Don't ask for camera/mic until other participant(s) joined

options.delayLocalStream = true

RealtimeSDK.joinRoom(token: token, options: options) { error in

# Mute/unmute

// Toggle the microphone mute status
// Returns true if the client is muted
let muteStatus = room.toggleMute()

# Switch Camera

Switch between the front and back camera for local video.


# Toggle video


# Toggle audio

toggleAudio will add or remove an audio MediaStreamTrack in the local MediaStream. This is different from toggleMute, which simply enables/disables the existing audio track.


# Leave the Room


# Logging

The application can capture the SDK-generated log messages and print them to the console by implementing the RealtimeSDKLogProtocol as follows:

class MyLogger: RealtimeSDKLogProtocol {
    func logEvent(message: String) {


let logger = MyLogger()
realtime.subscribeLogEvents(delegate: logger, severity: LogSeverity.debug)