iOS SDK
Twilio Programmable Voice SDK for iOS allows you to add voice-over-IP (VoIP) calling into your native iOS applications.
iOS 14 Compatibility Notice
For iOS 14 compatibility, please upgrade to the latest Voice iOS 5.5.1 SDK.
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 and this GitHub issue for more information. Check our migration guides when planning your migration to our latest SDK.
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 and Swift.
The Programmable Voice SDKs are released according to semantic versioning, 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 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 beta.
Authentication/Authorization
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, but are using a new, more flexible format that is used across all the new Twilio SDKs.
Management Console
Developer tools and configuration options for Programmable Voice can be found in the Programmable Voice Dashboard. Use the console to create TwiML apps, update push credentials, view logs, and much more.
The Programmable Voice SDKs are released according to semantic versioning, 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 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 beta.
Prerequisites
- Xcode 12.0+
- Swift projects must use Swift 4.0 or higher
- Support for iOS 11.0+
Install
The iOS Voice framework can be installed using Swift Package Manager, CocoaPods, Carthage or manually, as you prefer.
Swift Package Manager
You can add Programmable Voice for iOS 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 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:
find "${CODESIGNING_FOLDER_PATH}" -name '*.framework' -print0 | while read -d $'\0' framework
do
codesign --force --deep --sign "${EXPANDED_CODE_SIGN_IDENTITY}" --preserve-metadata=identifier,entitlements --timestamp=none "${framework}"
done
CocoaPods
It's easy to install the Voice framework if you manage your dependencies using CocoaPods. Simply add the following to your Podfile
:
source 'https://github.com/cocoapods/specs'
target 'TARGET_NAME' do
use_frameworks!
pod 'TwilioVoice', '~> 6.4.1'
end
Then run pod install --verbose
to install the dependencies to your project.
Carthage
We support integration using Carthage binary frameworks. You can add the Voice iOS SDK by adding the following line to your Cartfile
:
binary "https://raw.githubusercontent.com/twilio/twilio-voice-ios/Releases/twilio-voice-ios.json"
Then run carthage bootstrap --use-xcframeworks
(or carthage update --use-xcframeworks
if you are updating your SDKs)
On your application target's General settings tab, in the Frameworks, Libraries, and Embedded Content
section, drag and drop TwilioVoice.xcframework
from the Carthage/Build folder on disk.
Manual Install
TwilioVoice.xcframework
is distributed as a dynamic iOS framework that you can drag and drop into your existing projects.
Once you've downloaded and unpacked the XCFramework, navigate to your Xcode project's General settings page. Drag and drop TwilioVoice.xcframework
onto the Frameworks, Libraries, and Embedded Content section. Ensure that "Copy items if needed" is checked and press Finish. Ensure that "Embed & Sign" is selected.
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 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
Carthage is not currently a supported distribution mechanism for Twilio Voice. Carthage does not currently work with .xcframeworks
as documented here. Once Carthage supports binary .xcframeworks
, Carthage distribution will be re-added.
Static Library
Voice is also available as a static library.
Once you've downloaded the static library, 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.
There are a few more things you'll have to add to make the library build with your app:
- Add
-ObjC
to the Other Linker Flags - Add these frameworks to the Linked Frameworks and Libraries section:
SystemConfiguration
,AudioToolbox
,AVFoundation
,CoreTelephony
,PushKit
andCallKit
.
Need some help?
We all do sometimes; code is hard. Get help now from our support team, or lean on the wisdom of the crowd by visiting Twilio's Stack Overflow Collective or browsing the Twilio tag on Stack Overflow.