If you're new to Vonage, you can sign up for a Vonage API account and get some free credit to get you started.
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.
Looking to build on other platforms? The Vonage Video API Reference App is also available for:
- Web (React): vonage-video-react-app
- Android: vonage-video-android-app
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.
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 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.
-
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.
-
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.
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.
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
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.
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.
- Xcode 26
- Tuist
- SwiftLint
- SwiftFormat
- Git LFS
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 editYou 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.
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.
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.
-
Open the root
Project.swiftand add the desired locale code to thedefaultKnownRegionsproperty:defaultKnownRegions: ["en", "es", /* add new locale here */]
-
Build the project. Because the
SWIFT_EMIT_LOC_STRINGSbuild flag is enabled across all modules, each String Catalog is automatically updated during compilation with any new localizable strings. -
Open the generated
.xcstringscatalog and provide translations for the new locale.
Note: Since
SWIFT_EMIT_LOC_STRINGSis active, you don't need to manually register new strings — the build system detects them and keeps the catalogs in sync automatically.
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.
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.
Please read our Code of Conduct.
If you wish to contribute to this project, read how in Contributing.
We track known issues in Known Issues. Please refer to it for details.
If you have any issues, feel free to open an issue or reach out to support via support@api.vonage.com.
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:
- Open an issue on this repository
- Tweet at us! We're @VonageDev on Twitter
- Or join the Vonage Developer Community Slack
- Check out the Developer Documentation at https://developer.vonage.com





