Skip to content

Vonage/vonage-video-ios-app

Vonage Video API Reference App for iOS

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.

Cross-Platform Support

Looking to build on other platforms? The Vonage Video API Reference App is also available for:

These reference apps share the same backend infrastructure and demonstrate consistent best practices across all platforms, making it easy to build unified video experiences for your users.

Why use it?

The Vonage Video API Reference App for iOS provides developers an easy-to-set-up 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 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.

  • Start, stop and download cloud-based session recording directly from the app.

  • Apply a real-time background blur effect to the local video stream during a call.

  • Display live captions for enhanced accessibility. Screenshot of live captions feature
  • Send and receive emoji reactions during a video session. Screenshot of reactions feature
  • 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 for 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 is 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.

Vonage Video SDK Compatibility

This reference app has been tested with Vonage Video SDK 2.32 and 2.33. We strongly recommend using the latest available SDK version to take advantage of the newest features and avoid potential issues with older, untested releases.

The SDK version is declared in the Tuist package dependencies file (VERA/Tuist/ProjectDescriptionHelpers/Package+Dependencies.swift) and can be adjusted there if needed.

Requirements

  • Xcode 26
  • Tuist
  • SwiftLint
  • SwiftFormat
  • Git LFS

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.

Make sure you have all the required dependencies installed on your computer, or install them:

brew install swiftlint brew install swiftformat brew install --formula tuist brew install git-lfs

After cloning the repository pull the large files by executing git lfs pull in the command line inside the repository folder.

After that specify the DEVELOPMENT_TEAM, MARKETING_VERSION, CURRENT_PROJECT_VERSION and BASE_API_URL by exporting the following environment variables and then running generateEnvironmentConstants.sh and regenerateSigningConfig.sh from within the {SRC_ROOT}/VERA folder.

You can find the DEVELOPMENT_TEAM ID in the top right corner of the Certificates, Identifiers & Profiles page from your Apple developer account.

export BASE_API_URL=https://api.example.net/
export DEVELOPMENT_TEAM=AB0C12DE34
export MARKETING_VERSION=1.0
export CURRENT_PROJECT_VERSION=1

Then run:

./Scripts/generateEnvironmentConstants.sh
./Scripts/regenerateSigningConfig.sh

Once you have Tuist installed, generate a new XCWorkspace by executing tuist generate from within the VERA folder.

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.

Run the VERA app target in Xcode.

*If you find that Xcode caches an Xcode workspace you can reset the tuist cache by executing

tuist clean

*To edit the Tuist DSL project.swift files easily run:

tuist edit

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.

Multi-Language Support

The app is fully prepared for internationalization using Xcode's String Catalogs (.xcstrings). All user-facing strings are localized through this mechanism, making it straightforward to add support for new languages.

Adding a new language

  1. Open the root Project.swift and add the desired locale code to the defaultKnownRegions property:

    defaultKnownRegions: ["en", "es", /* add new locale here */]
  2. Build the project. Because the SWIFT_EMIT_LOC_STRINGS build flag is enabled across all modules, each String Catalog is automatically updated during compilation with any new localizable strings.

  3. Open the generated .xcstrings catalog and provide translations for the new locale.

Note: Since SWIFT_EMIT_LOC_STRINGS is active, you don't need to manually register new strings — the build system detects them and keeps the catalogs in sync automatically.

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

About

Vonage Video API Swift iOS reference application

Topics

Resources

License

Code of conduct

Contributing

Stars

Watchers

Forks

Packages

 
 
 

Contributors