Skip to content

Vonage/vonage-video-ios-app

Vonage Video API Reference App for iOS (Beta)

Nexmo is now known as Vonage

Welcome to Vonage

If you're new to Vonage, you can sign up for a Vonage API account and get some free credit to get you started.

What is it?

The Vonage Video API Reference App for iOS is an open-source video conferencing reference application for the Vonage Video API using the iOS SDK.

The Reference App demonstrates the best practices for integrating the Vonage Video API with your application for various use cases, from one-to-one and multi-participant video calling to CallKit integration and more.

Why use it?

The Vonage Video API Reference App for iOS provides developers an easy-to-setup way to get started with using our APIs with the iOS SDK.

The application is open-source, so you can not only get started quickly, but easily extend it with features needed for your use case. Any features already implemented in the Reference App use best practices for scalability and security.

As a commercial open-source project, you can also count on a solid information security architecture. While no packaged solution can guarantee absolute security, the transparency that comes with open-source software, combined with the proactive and responsive open-source community and vendors, provides significant advantages in addressing information security challenges compared to closed-source alternatives.

This application provides features for common conferencing use cases, such as:

  • A landing page for users to create and join meeting rooms. Screenshot of landing page
  • A waiting room for users to preview their audio and video device settings and set their name before entering a meeting room. Screenshot of waiting room
  • A post-call page to navigate users to the landing page, re-enter the left room, and display archive(s), if any. Screenshot of goodbye page
  • A video conferencing “room” supporting up to 25 participants and the following features:

  • Configurable features: adapt the app to your specific use cases and roles. Configuration is handled through a app-config.json file that can be moved to the VERA/config folder. When calling to the generate-app-config.py python script in the VERA/Scripts folder, the parameters specified in the app-config.json file will regenerate the AppConfig.swift file of the VERAConfiguration module. Screenshot of a config.json
  • Call participant list with audio on/off indicator. Screenshot of participant list
  • ShareLink integration.

  • Active speaker detection.

  • Layout manager with options to display active speaker, or all participants in a grid view.

  • The dynamic display adjusts to show new joiners, hide video tiles to conserve bandwidth, and show the “next” participant when someone previously speaking leaves.

  • CallKit: Helps iOS to coordinate the calling services with other apps.

Project Architecture

This reference app requires the user to deploy a backend and then use the backend API URL as the base URL in the DependencyContainer.swift file of the VERAApp module. You can find backend code and deploying instructions in the vonage-video-react-app repository.

The backend communicates with the Vonage video platform using the Vonage Server SDK and is responsible of generating the session IDs and tokens used to connect to the video rooms by the Vonage Client SDK.

Module Overview

The Vonage iOS reference app is built with a modular architecture. The app is organized into the following frameworks:

  • VERAApp: Main application target and composition root
  • VERACore: UI and business logic of the main views
  • VERAChat: Meeting room chat
  • VERAVonageChatPlugin: Adapts the chat to the plugin interfaces
  • VERAVonageCallKitPlugin: CallKit adapter plugin
  • VERADomain: Shared domain models and entities
  • VERAConfiguration: Holds the app configuration specification
  • VERACommonUI: Shared UI components and resources
  • VERAVonage: Vonage Video SDK integration

Platforms supported

The current minimum deployment target for the reference app iOS 16+. Some of the mentioned modules are universal, which allows fast testing against macOS targets and platform reusability. For this last point it would be required to adapt the non universal modules to the desired platform.

Requirements

  • Xcode 26
  • Tuist

Running Locally

First follow the steps to create the Vonage account, application and backend set up and deployment at the vonage-video-react-app URL.

Then you can specify the DEVELOPMENT_TEAM, MARKETING_VERSION and CURRENT_PROJECT_VERSION in the regenerateSigningConfig.sh script and execute it to generate the Signing.xcconfig file in the VERA/Config folder.

DEVELOPMENT_TEAM = YOUR_DEVELOPMENT_TEAM
MARKETING_VERSION = 1.0
CURRENT_PROJECT_VERSION = 1

For the BASE_API_URL modify the EnvironmentConstants.swift and the VERA.entitlements files. Or expose it as an environment variable and then execute generateEnvironmentConstants.sh.

export BASE_API_URL=https://api.example.com/
.VERA/Scripts/generateEnvironmentConstants.sh

Then install Tuist, it's required for the project generation.

Once you have Tuist installed generate a new project by typing the following commands in the command line:

cd VERA
tuist generate

Tuist will generate and launch a new Xcode workspace based on the Project.swift definitions. Every module has one Project.swift file where all the targets, SPM dependencies and project details are declared using the Tuist DSL. This unlocks dynamic project generation based on configuration files, simplified merging conflict resolution and some other nice features.

Modify the base URL constant in the DependencyContainer.swift file in the VERAApp module.

Run the VERA app target in Xcode.

Feature configuration

You can fork the repository and start modifying it for your needs. Or you also can modify the app-config.json file of the VERA/Config folder and then run the VERA/Scripts/generate-app-config.py python script. This will generate a Swift file with all the flags to customize the features of the app.

Note that some of the features declared in the JSON file are not yet implemented.

Once the app-config.json is configured the Tuist generate command will read the json file and configure the project by only adding the required modules.

Theme customization

You can customize the app colors by editing the semantics.json file light and dark color scheme values and then by executing the generate-app-theme.py Script in the VERA/Scripts folder. This will generate the xcasset resources with the specified RGB values in the VERACommonUI module.

Testing

This project uses the Swift Testing framework for the unit, integration and snapshot tests.

Tuist will generate the testing schemes for all the modules, then for testing you could execute the tests by running the tuist test command or by executing them with ⌘U in the selected testing target in Xcode.

You can also edit the snapshot test images by recording new screenshots in the snapshot testing files.

Code style

We use Swift Lint to format and fix the code linting. Check if the code follows the linting rules by running the ./Scripts/format.sh or ./Scripts/format.sh --fix for fixing the formatting in the command line.

Code of Conduct

Please read our Code of Conduct.

Getting Involved

If you wish to contribute to this project, read how in Contributing.

Known Issues

We track known issues in Known Issues. Please refer to it for details.

Report Issues

If you have any issues, feel free to open an issue or reach out to support via support@api.vonage.com.

Getting Help

We love to hear from you so if you have questions, comments or find a bug in the project, let us know! You can either:

Further Reading