Skip to contentSkip to navigationSkip to topbar
Rate this page:
On this page

Voice iOS SDK


Twilio Programmable Voice SDK for iOS allows you to add voice-over-IP (VoIP) calling into your native iOS applications.

(warning)

Warning

iOS 14 Compatibility Notice

For iOS 14 compatibility, please upgrade to the latest Voice iOS 5.5.1 SDK.

(warning)

Warning

iOS 13 Compatibility Notice

Apps using versions 2.0.x, 3.x, and 4.x may fail to register for incoming calls when running on iOS 13. We recommend you upgrade to 5.0 release. Please refer to this advisory(link takes you to an external page) and this GitHub issue(link takes you to an external page) for more information. Check our migration guides(link takes you to an external page) when planning your migration to our latest SDK.

(warning)

Warning

When using the Voice iOS SDK with Twilio Regions, please make sure the SDK version is updated to at least 6.4.0

(information)

Info

For step-by-step instructions to get up and running with the iOS SDK for Programmable Voice, check out the quickstarts for making calls from your native iOS apps in Objective-C(link takes you to an external page) and Swift(link takes you to an external page).


How it Works

how-it-works page anchor
Mobile Voice SDK Diagram: Your mobile app connects to Twilio, Twilio sends a webhook to your backend to get instructions.
  1. You connect to Twilio from your mobile app with the Voice SDK
  2. Twilio sends you a webhook to get the TwiML instructions
  3. Your backend responds to Twilio with TwiML instructions

    • For example, you can instruct Twilio to call a number, call a VoIP endpoint, or connect to a conference.
    • E.g. To connect to a phone number, your backend would return <Dial callerId="+155512345678"><Number>+155587654321</Number></Dial>
  4. Twilio executes your TwiML instructions (e.g. Dials the number in your TwiML instructions)
  5. Twilio creates a VoIP connection between your callee and your mobile app

The Programmable Voice SDKs are released according to semantic versioning(link takes you to an external page), so you should always note both the major and minor versions of the SDKs to maintain API compatibility with your code.

For versions 1.0 and higher, minor versions will not break existing integrations, but during a Public Beta period, minor version increments in the 0.x range represent breaking API changes. Patch level releases - 0.0.x - represent non-breaking changes during a Public Beta.


Authentication/Authorization

authenticationauthorization page anchor

In the Programmable Voice SDKs we use a new authentication/authorization mechanism for your application server to give your clients access to your voice applications. This is done by providing your app an Access Token, which governs the client application's authentication session with your account in the Twilio cloud.

Access Tokens are different from the Capability Tokens used in the previous versions of Twilio Client. Using a Capability Token in the Programmable Voice SDK will not work. Access Tokens, just like Capability Tokens before, are JWT tokens(link takes you to an external page), but are using a new, more flexible format that is used across all of the new Twilio SDKs.


Developer tools and configuration options for Programmable Voice(link takes you to an external page) can be found in the Programmable Voice Dashboard(link takes you to an external page). Use the console to create TwiML apps, update push credentials, view logs, and much more.


Prerequisites

prerequisites page anchor
  • Xcode 12.0+
  • Swift projects must use Swift 4.0 or higher
  • Support for iOS 11.0+

The iOS Voice SDK can be installed using Swift Package Manager, CocoaPods, or manually.

Swift Package Manager

swift-package-manager page anchor

You can add the iOS Voice SDK by adding the https://github.com/twilio/twilio-voice-ios repository as a Swift Package.

In your Build Settings, you will also need to modify Other Linker Flags to include -ObjC.

As of the latest release of Xcode (currently 12.4), there is a known issue(link takes you to an external page) with consuming binary frameworks distributed via Swift Package Manager. The current workaround to this issue is to add a Run Script Phase to the Build Phases of your Xcode project. This Run Script Phase should come after the Embed Frameworks build phase. This new Run Script Phase should contain the following code:


_10
find "${CODESIGNING_FOLDER_PATH}" -name '*.framework' -print0 | while read -d $'\0' framework
_10
do
_10
codesign --force --deep --sign "${EXPANDED_CODE_SIGN_IDENTITY}" --preserve-metadata=identifier,entitlements --timestamp=none "${framework}"
_10
done

Add the following to your Podfile:


_10
source 'https://github.com/cocoapods/specs'
_10
_10
target 'TARGET_NAME' do
_10
use_frameworks!
_10
_10
pod 'TwilioVoice', '~> 6.10'
_10
end

Then run pod install --verbose to install the dependencies to your project.

TwilioVoice.xcframework is distributed as a dynamic iOS framework that you can drag and drop into your existing projects.

  1. Download the Voice framework here(link takes you to an external page)
  2. Once you've downloaded and unpacked the XCFramework, navigate to your Xcode project's General settings page.
  3. Drag and drop TwilioVoice.xcframework onto the Frameworks, Libraries, and Embedded Content section.
  4. Ensure that "Copy items if needed" is checked and press Finish .
  5. Ensure that "Embed & Sign" is selected.
  6. In your Build Settings , you will also need to modify Other Linker Flags to include -ObjC .

We recommend that you start with our Getting Started guide to get a sense of how all of these components fit together. The Quickstart app is set up to manage dependencies with CocoaPods, but you can also install the frameworks manually as described above.

Carthage is not currently a supported distribution mechanism for Twilio Voice. Carthage does not currently work with .xcframeworks as documented in Carthage's GitHub Issues(link takes you to an external page). Once Carthage supports binary .xcframeworks, Carthage distribution will be re-added.

Voice is also available as a static library.

  1. Download the Voice static library from GitHub(link takes you to an external page)
  2. Drag and drop the libTwilioVoice.a, libboringssl.a, and the include folder into your Xcode project.

    • This will add the static libraries to the Frameworks, Libraries, and Embedded Contents section.
  3. Add -ObjC to the Other Linker Flags
  4. Add the following frameworks to the Linked Frameworks and Libraries section:

    • SystemConfiguration
    • AudioToolbox
    • AVFoundation
    • CoreTelephony
    • PushKit
    • CallKit .

Rate this page: