Menu

Expand
Rate this page:

Thanks for rating this page!

We are always striving to improve our documentation quality, and your feedback is valuable to us. How could this documentation serve you better?

Changelog

Welcome to Programmable Voice iOS SDK

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

Please note, Programmable Voice SDKs use Semantic Versioning

4.x is the latest release of Programmable Voice SDKs. If you are using an older version, Twilio recommends upgrading to 4.x as soon as possible.

Support for 3.x will cease Jul 1st, 2020.This branch will only receive fixes for critical issues. Check this guide when planning your migration to 4.x.

Support for 2.x will cease Jan 1st, 2020.This branch will only receive fixes for critical issues. Check this guide when planning your migration to 3.x.

4.3.0

August 19, 2019

Enhancements

Differentiated Services Code Point (DSCP) Tagging API

The Differentiated Services Code Point (DSCP) Tagging API allows you to mark the audio packets with Expedited Forwarding (EF) for the purposes of improved packet routing. When enabled, supporting networks will prioritize audio packet delivery for improved audio quality.

Use enableDscp to enable or disable DSCP tagging. Note, enableDscp is enabled by default. For example:

// Configure DSCP with `TVOConnectOptions`
let connectOptions = TVOConnectOptions(accessToken: accessToken) { (builder) in
    builder.enableDscp = true
}

let call = TwilioVoice.connect(with: connectOptions, delegate: callDelegate)
// Configure DSCP with `TVOAcceptOptions`
let acceptOptions = TVOAcceptOptions(accessToken: accessToken) { (builder) in
    builder.enableDscp = true
}

let call = callInvite.accept(with: acceptOptions, delegate: callDelegate)

For more information, refer to the docs.

Size Impact for 4.3.0

Architecture App Download Size App Storage Size
Universal 5.9 MB 12.4 MB
arm64 2.8 MB 6.7 MB
armv7 3.0 MB 5.5 MB

4.2.1

August 8, 2019

This release includes changes in how the static library libTwilioVoice.a is built and packaged. libTwilioVoice.a now contains all the dependencies of the static libraries. Use -lTwilioVoice in the Other Linker Flags setting to link the SDK. BoringSSL is not packaged as a separate artifact.

Known Issues

  • CLIENT-4943 Restrictive networks may fail unless ICE servers are provided via TVOConnectOptions or TVOAcceptOptions. ICE servers can be obtained from Twilio's Network Traversal Service.

Size Impact for 4.2.1

Architecture App Download Size App Storage Size
Universal 5.9 MB 12.4 MB
arm64 2.7 MB 6.7 MB
armv7 3.0 MB 5.5 MB

4.2.0

August 7, 2019

Enhancements

Custom Parameters in Canceled Call Notification

You can now retrieve the custom parameters set in your TwiML application from TVOCancelledCallInvite. With this addition, you can for example, display a missed call notification with the caller’s display name retrieved from the TVOCancelledCallInvite customParameters.

For more information, refer to the API docs

Pass custom parameters in TwiML

  <?xml version="1.0" encoding="UTF-8"?>
  <Response>
    <Dial callerId="client:alice">
      <Client>
        <Identity>bob</Identity>
        <Parameter name="caller_first_name" value="alice" />
        <Parameter name="caller_last_name" value="smith" />
      </Client>
    </Dial>
  </Response>

cancelledCallInvite.customParameters:

  {
    "caller_first_name" = "alice";
    "caller_last_name" = "smith";
  }

Known Issues

  • CLIENT-4943 Restrictive networks may fail unless ICE servers are provided via TVOConnectOptions or TVOAcceptOptions. ICE servers can be obtained from Twilio's Network Traversal Service.

Size Impact for 4.2.0

Architecture App Download Size App Storage Size
Universal 5.9 MB 12.4 MB
arm64 2.7 MB 6.7 MB
armv7 3.0 MB 5.5 MB

4.1.0

July 15, 2019

New Features

Max Average Bandwidth API

By default, the Opus codec is set up with a transmission rate of around 32 kbps (40-50kbps on the wire). With this release, you are able to set a custom max average bitrate to better control how much bandwidth your VoIP application should use. See RFC-7587 7.1 for information about Max Average Bitrate.

The main purpose of this API is to set a lower max average bitrate to minimise bandwidth usage. This is particularly useful in deployments where bandwidth is at a premium. Where bandwidth is not of concern, you do not need to use this API. at Max Average Bitrate can be set to as low as 6,000bps and as high as 51,000 bps. Values outside this range are ignored and the default Opus operation mode is used. See API Docs for more information.

As would be expected, lowering the max average bitrate impacts audio quality. We don’t recommend setting max average bitrate to a value below 8,000 bps. On the other hand, setting values over 32,000 bps will have negligible audio quality improvements.

For example, to set a new max average bitrate to 16,000 bps:

let connectOptions = TVOConnectOptions(accessToken: accessToken) { (builder) in
    builder.params = params
    builder.preferredAudioCodecs = [TVOOpusCodec(maxAverageBitrate: 16000)]
}

let call = TwilioVoice.connect(with: connectOptions, delegate: callDelegate)

Other Enhancements

  • Programmable Voice iOS SDK transmits data for VoIP calls and for Insights. With this release, we have reduced Insights related data consumption by around 25%. This was accomplished by reducing the events reporting interval.
  • CLIENT-6358 The SDK now reports ice-candidate events to Insights. These events are raised when OnIceCandidate is called on the PeerConnection.

Known Issues

  • CLIENT-4943 Restrictive networks may fail unless ICE servers are provided via TVOConnectOptions or TVOAcceptOptions. ICE servers can be obtained from Twilio's Network Traversal Service.

Size Impact for 4.1.0

Architecture App Download Size App Storage Size
Universal 5.9 MB 12.4 MB
arm64 2.7 MB 6.7 MB
armv7 3.0 MB 5.5 MB

4.0.0

June 28, 2019

New Features

Reconnecting State API

This release introduces the new Reconnecting State API. This API adds a new state TVOCallStateReconnecting to TVOCallState and two new optional TVOCallDelegate methods, call:isReconnectingWithError: and callDidReconnect:.

Call reconnection capability has been available since SDK 3.0. For example, if a call is established over a wifi network and the wifi network becomes unavailable, the SDK will automatically switch the call over to the next available network.

This release adds the reconnection related callbacks. call:isReconnectingWithError: is invoked to indicate a call is being reconnected due to a network disruption or network switch over and callDidReconnect: is called once the call has been re-connected. You can use this information to provide intuitive feedback to your App user when a reconnection is taking place.

Enhancements

Passing a malformed callee to either [TwilioVoice connectWithAccessToken:] or [TwilioVoice connectWithOptions:delegate:] will now result in TVOErrorAddressIncompleteError

Migration Guide

Migrating from 3.x is very simple. Please refer to our migration guide for more information.

Known Issues

Restrictive networks may fail unless ICE servers are provided via TVOConnectOptions or TVOAcceptOptions. ICE servers can be obtained from Twilio's Network Traversal Service.

Size Impact for 4.0.0

Architecture App Download Size App Storage Size
Universal 5.8 MB 12.4 MB
arm64 2.7 MB 6.7 MB
armv7 2.9 MB 5.5 MB

3.1.1

June 6, 2019

Bug Fixes

  • CLIENT-6220 Fixed an issue where an NSInvalidArgumentException exception is raised while connecting a call. #13

Known Issues

  • CLIENT-4943 Restrictive networks may fail unless ICE servers are provided via TVOConnectOptions or TVOAcceptOptions. ICE servers can be obtained from Twilio's Network Traversal Service.

Size Report

Architecture App Download Size App Storage Size
Universal 5.8 MB 12.4 MB
arm64 2.8 MB 6.8 MB
armv7 3.0 MB 5.6 MB

3.1.0

May 16, 2019

Enhancements

Improved error codes

We now surface more details about errors encountered during [TwilioVoice registerWithAccessToken:deviceToken:completion:], [TwilioVoice unregisterWithAccessToken:deviceToken:completion:], [TwilioVoice connectWithOptions:delegate:], and [TVOCallInvite acceptWithOptions:delegate:]. Previously, these functions reported these errors with the generic error TVOErrorRegistrationError or TVOErrorConnectionError.

With the new error codes, you can make more informed decisions with how to remedy the problem. For example, TVOErrorBadRequestError and TVOErrorTooManyRequestsError indicate potential programming issues, while TVOErrorTokenAuthenticationRejected indicate an issue with your Access Token.

Please note, you may need to change your code if you have added special handling for TVOErrorRegistrationError or TVOErrorConnectionError.

For more information see the API docs

The following is a summary of the new codes available for [TwilioVoice registerWithAccessToken:deviceToken:completion:], [TwilioVoice unregisterWithAccessToken:deviceToken:completion:]:

Error Code Value Error Message
TVOErrorBadRequestError 31400 Bad Request
TVOErrorForbiddenError 31403 Forbidden
TVOErrorNotFoundError 31404 Not Found
TVOErrorRequestTimeoutError 31408 Request Timeout
TVOErrorConflictError 31409 Conflict
TVOErrorUpgradeRequiredError 31426 Upgrade Required. This is most likely related to a TLS version not accepted by Twilio's infrastructure
TVOErrorTooManyRequestsError 31429 Too Many Requests
TVOErrorInternalServerError 31500 Internal Server Error
TVOErrorBadGatewayError 31502 Bad Gateway
TVOErrorServiceUnavailableError 31503 Service Unavailable
TVOErrorGatewayTimeoutError 31504 Gateway Timeout

The following is a summary of the new codes available for [TwilioVoice connectWithOptions:delegate:], and [TVOCallInvite acceptWithOptions:delegate:]:

Error Code Value Error Message
TVOErrorTransportError 31009 Transport Error
TVOErrorBadRequestError 31400 Bad Request
TVOErrorForbiddenError 31403 Forbidden
TVOErrorNotFoundError 31404 Not Found
TVOErrorRequestTimeoutError 31408 Request Timeout
TVOErrorTemporarilyUnavailableError 31480 Temporarily Unavailable
TVOErrorCallDoesNotExistError 31481 Call/Transaction Does Not Exist
TVOErrorBusyHereError 31486 Busy Here
TVOErrorRequestTerminatedError 31487 Request Terminated
TVOErrorInternalServerError 31500 Internal Server
TVOErrorBadGatewayError 31502 Bad Gateway
TVOErrorServiceUnavailableError 31503 Service Unavailable
TVOErrorGatewayTimeoutError 31504 Gateway Timeout
TVOErrorDNSResolutionError 31530 DNS Resolution Error
TVOErrorBusyEverywhereError 31600 Busy Everywhere
TVOErrorDeclineError 31603 Decline
TVOErrorDoesNotExistAnywhereError 31604 Does Not Exist Anywhere

Known Issues

  • CLIENT-4943 Restrictive networks may fail unless ICE servers are provided via TVOConnectOptions or TVOAcceptOptions. ICE servers can be obtained from Twilio's Network Traversal Service.

Size Report

Architecture App Download Size App Storage Size
Universal 5.8 MB 12.4 MB
arm64 2.8 MB 6.8 MB
armv7 3.0 MB 5.6 MB

3.0.0

April 25, 2019

We have promoted 3.0.0-beta13 to 3.0.0. Reference our migration guide to upgrade your applications to 3.0.

Known Issues

  • CLIENT-4943 Restrictive networks may fail unless ICE servers are provided via TVOConnectOptions or TVOAcceptOptions. ICE servers can be obtained from Twilio's Network Traversal Service.

Size Report

Architecture App Download Size App Storage Size
Universal 5.8 MB 12.3 MB
arm64 2.8 MB 6.8 MB
armv7 3.0 MB 5.6 MB

3.0.0-beta13

April 18, 2019

Bug Fixes

  • CLIENT-5982 Fixed a bug where call quality warnings might be sent to Insights multiple times before the warning is cleared.

Known Issues

  • CLIENT-4943 Restrictive networks may fail unless ICE servers are provided via TVOConnectOptions or TVOAcceptOptions. ICE servers can be obtained from Twilio's Network Traversal Service.

Size Report

Architecture App Download Size App Storage Size
Universal 5.8 MB 12.3 MB
arm64 2.8 MB 6.8 MB
armv7 3.0 MB 5.6 MB

3.0.0-beta12

April 17, 2019

Enhancements

  • CLIENT-5973 Removed TVOErrorConnectionTimeoutError, TVOErrorSignalingConnectionError, TVOErrorSignalingConnectionTimeoutError, TVOErrorSignalingIncomingMessageInvalidError, TVOErrorSignalingOutgoingMessageInvalidError, TVOErrorConfigurationAcquireFailedError and TVOErrorConfigurationAcquireTurnFailedError from TVOError.h.

Bug Fixes

  • CLIENT-5935 Fixed a bug where constant audio level warning events are being sent to Insights when the call is muted or onhold.
  • CLIENT-5969 Renamed kDefaultAVAudioSessionConfigurationBlock to kTVODefaultAVAudioSessionConfigurationBlock so that TwilioVoice.framework and TwilioVideo.framework may be used in the same application.
  • CLIENT-5977 Fixed a bug where the SDK was sending double values for packets_lost_fraction to Insights instead of integer.

Known Issues

  • CLIENT-4943 Restrictive networks may fail unless ICE servers are provided via TVOConnectOptions or TVOAcceptOptions. ICE servers can be obtained from Twilio's Network Traversal Service.

Size Report

Architecture App Download Size App Storage Size
Universal 5.8 MB 12.3 MB
arm64 2.8 MB 6.8 MB
armv7 3.0 MB 5.6 MB

3.0.0-beta11

April 4, 2019

Enhancements

  • CLIENT-5379 Added network reachability monitoring for the signaling socket for a reliable network change detection.

Bug Fixes

  • CLIENT-5379 Fixed a bug where WiFi to WiFi network hand off was causing one-way audio followed by Call disconnect.

Known Issues

  • CLIENT-4943 Restrictive networks may fail unless ICE servers are provided via TVOConnectOptions or TVOAcceptOptions. ICE servers can be obtained from Twilio's Network Traversal Service.

Size Report

Architecture App Download Size App Storage Size
Universal 5.8 MB 12.4 MB
arm64 2.8 MB 6.8 MB
armv7 3.0 MB 5.6 MB

3.0.0-beta10

April 2, 2019

Bug Fixes

  • CLIENT-5828, CLIENT-5868 A network change that occurs during a reconnection will now trigger another reconnection attempt ensuring media is restored on the correct network.
  • CLIENT-5882 Call metrics insights will always be available after a network handover when the call is in TVOCallStateConnected state.

Known Issues

  • CLIENT-5576 LTE -> WiFi may cause one way audio.
  • CLIENT-4943 Restrictive networks may fail unless ICE servers are provided via TVOConnectOptions or TVOAcceptOptions. ICE servers can be obtained from Twilio's Network Traversal Service.

Size Report

Architecture App Download Size App Storage Size
Universal 5.8 MB 12.4 MB
arm64 2.8 MB 6.8 MB
armv7 3.0 MB 5.6 MB

3.0.0-beta9

March 27, 2019

Enhancements

  • CLIENT-5806 CLIENT-5807 Updated the API documentation for [TVOCallInvite acceptWithDelegate:] and [TVOCallInvite acceptWithOptions:delegate:].
  • CLIENT-5810 Updated the API documentation for TVOCall.

API Changes

  • Attempts to connect a Call via [TwilioVoice connectWithDelegate:] or [TVOCallInvite acceptWithDelegate:] that fail prior to reaching the TVOCallStateConnected state will always result in the call:didFailToConnectWithError: callback with an error code. However, if [TVOCall disconnect] is called while an attempt to connect or accept a call is made, the call:didDisconnectWithError: callback will be raised with no error.

Bug Fixes

  • CLIENT-5813 Network loss scenarios that resulted in a Call failure now raise the call:didFailToConnectWithError: callback. Previously these scenarios erroneously raised call:didDisconnectWithError:.
  • CLIENT-5754 A Call that fails as a result of not establishing a media connection prior to being connected now raises the call:didFailToConnectWithError: callback. Previously this scenario erroneously raised call:didDisconnectWithError:.
  • CLIENT-5821 The packets_lost_fraction value reported to Insights is correctly computed and within the expect range of 0 to 100.
  • CLIENT-5835 Events were erroneously reported to Insights when the TVOConnectOptions.enableInsights property was set to false.

Known Issues

  • CLIENT-5576 LTE -> WiFi may cause one way audio.
  • CLIENT-4943 Restrictive networks may fail unless ICE servers are provided via TVOConnectOptions or TVOAcceptOptions. ICE servers can be obtained from Twilio's Network Traversal Service.
  • CLIENT-5882 Call metrics insights becomes unavailable after a network handover during a call.

Size Report

Architecture App Download Size App Storage Size
Universal 5.8 MB 12.4 MB
arm64 2.8 MB 6.8 MB
armv7 3.0 MB 5.6 MB

3.0.0-beta8

March 20, 2019

Bug Fixes

  • CLIENT-5796 Fixed an issue where the millisecond timestamp in the Insights event payload overflows on 32-bit architecture devices.
  • CLIENT-5830 Removed scripts from TwilioVoice.framework that could cause code signing issue when uploading apps to iTunes Connect.

Known Issues

  • CLIENT-5576 LTE -> WiFi may cause one way audio.
  • CLIENT-4943 Restrictive networks may fail unless ICE servers are provided via TVOConnectOptions or TVOAcceptOptions. ICE servers can be obtained from Twilio's Network Traversal Service.
  • CLIENT-5821 The packets_lost_fraction value reported to Insights is incorrectly computed and within the expect range of 0 to 100.
  • CLIENT-5835 Events were erroneously reported to Insights when the TVOConnectOptions.enableInsights property was set to false.
  • CLIENT-5882 Call metrics insights becomes unavailable after a network handover during a call.

Size Report

Architecture App Download Size App Storage Size
Universal 5.8 MB 12.4 MB
arm64 2.8 MB 6.8 MB
armv7 3.0 MB 5.6 MB

3.0.0-beta7

March 19, 2019

API Changes

  • The from property of the TVOCallInvite and TVOCancelledCallInvite objects is now nullable in case the value is not available in the call invite notification.

Bug Fixes

  • CLIENT-5801 Fixed an issue where an incoming call invite that did not contain a from field was not considered a valid notification.

Known Issues

  • CLIENT-5830 Apps using 3.0.0-beta7 may have code signing issue when uploading to iTunes Connect due to some development scripts included in TwilioVoice.framework.
  • CLIENT-5576 LTE -> WiFi may cause one way audio.
  • CLIENT-4943 Restrictive networks may fail unless ICE servers are provided via TVOConnectOptions or TVOAcceptOptions. ICE servers can be obtained from Twilio's Network Traversal Service.
  • CLIENT-5821 The packets_lost_fraction value reported to Insights is incorrectly computed and within the expect range of 0 to 100.
  • CLIENT-5835 Events were erroneously reported to Insights when the TVOConnectOptions.enableInsights property was set to false.
  • CLIENT-5882 Call metrics insights becomes unavailable after a network handover during a call.

Size Report

Architecture App Download Size App Storage Size
Universal 5.8 MB 12.4 MB
arm64 2.8 MB 6.8 MB
armv7 3.0 MB 5.6 MB

3.0.0-beta6

March 14, 2019

Enhancements

  • CLIENT-5258 Reduced SDK size by stripping video software codecs.
  • CLIENT-5353 Reduced SDK size by stripping SCTP data channels.

Known Issues

  • CLIENT-5830 Apps using 3.0.0-beta6 may have code signing issue when uploading to iTunes Connect due to some development scripts included in TwilioVoice.framework.
  • CLIENT-5576 LTE -> WiFi may cause one way audio.
  • CLIENT-4943 Restrictive networks may fail unless ICE servers are provided via TVOConnectOptions or TVOAcceptOptions. ICE servers can be obtained from Twilio's Network Traversal Service.
  • CLIENT-5821 The packets_lost_fraction value reported to Insights is incorrectly computed and within the expect range of 0 to 100.
  • CLIENT-5835 Events were erroneously reported to Insights when the TVOConnectOptions.enableInsights property was set to false.
  • CLIENT-5882 Call metrics insights becomes unavailable after a network handover during a call.

Size Report

Architecture App Download Size App Storage Size
Universal 5.8 MB 12.4 MB
arm64 2.8 MB 6.8 MB
armv7 3.0 MB 5.6 MB

3.0.0-beta5

March 4, 2019

Enhancements

  • CLIENT-5678 The size impact report now includes both armv7 and arm64 architectures.
  • The libboringssl.a library is now separated and shipped alongside the static library libTwilioVoice.a. Add -lboringssl in the Other Linker Flags to link the SDK properly.

Bug Fixes

  • CLIENT-5664 The static library libTwilioVoice.a is now properly linked with dependencies.

Known Issues

  • CLIENT-5830 Apps using 3.0.0-beta5 may have code signing issue when uploading to iTunes Connect due to some development scripts included in TwilioVoice.framework.
  • CLIENT-5576 LTE -> WiFi may cause one way audio.
  • CLIENT-4943 Restrictive networks may fail unless ICE servers are provided via TVOConnectOptions or TVOAcceptOptions. ICE servers can be obtained from Twilio's Network Traversal Service.
  • CLIENT-4805 The SDK size is significantly larger than 2.x. A reduced size will be introduced during the beta period.
  • CLIENT-5821 The packets_lost_fraction value reported to Insights is incorrectly computed and within the expect range of 0 to 100.
  • CLIENT-5835 Events were erroneously reported to Insights when the TVOConnectOptions.enableInsights property was set to false.
  • CLIENT-5882 Call metrics insights becomes unavailable after a network handover during a call.

Size Report

Architecture App Download Size App Storage Size
Universal 6.4 MB 13.4 MB
arm64 3.1 MB 7.4 MB
armv7 3.3 MB 6.1 MB

3.0.0-beta4

February 14, 2019

API Changes

  • TVOCallFeedbackScoreNoScore is replaced with TVOCallFeedbackScoreNotReported.

Known Issues

  • CLIENT-5576 LTE -> WiFi may cause one way audio.
  • CLIENT-5578 WiFi to WiFi handover may disconnect the Call.
  • CLIENT-4943 Restrictive networks may fail unless ICE servers are provided via TVOConnectOptions or TVOAcceptOptions. ICE servers can be obtained from Twilio's Network Traversal Service.
  • CLIENT-4805 The SDK size is significantly larger than 2.x. A reduced size will be introduced during the beta period.
  • CLIENT-5821 The packets_lost_fraction value reported to Insights is incorrectly computed and within the expect range of 0 to 100.
  • CLIENT-5835 Events were erroneously reported to Insights when the TVOConnectOptions.enableInsights property was set to false.
  • CLIENT-5882 Call metrics insights becomes unavailable after a network handover during a call.

Size Report

Architecture App Download Size App Storage Size
Universal 6.4 MB 13.4 MB
arm64 3.1 MB 7.3 MB
armv7 3.3 MB 6.0 MB

3.0.0-beta3

February 7, 2019

Enhancements

  • The Voice SDK publishes Call Insights. Publishing is enabled by default. The preference can be updated by configuring TVOCallOptions.enableInsights.
  • CLIENT-5595 Added TVOErrorTokenAuthenticationRejected (51007). This error is raised when attempting to perform registration or unregistration with a token that is invalid.
  • Added [TVOCall postFeedback:issue:] method to TVOCall that posts the feedback collected for this Call to Twilio. If TVOCallFeedbackScoreNoScore and TVOCallFeedbackIssueNotReported are passed, Twilio will report feedback was not available for this call.
  • CLIENT-2985 The SDK can connect to Twilio’s Servers in an IPv6 environment.
  • CLIENT-4998 Call will continue after network handoff.

Bug Fixes

  • CLIENT-5573 Fixed a crash that occurred when a client issued a disconnect while already processing a termination request from the server.

Known Issues

  • CLIENT-5576 LTE -> WiFi may cause one way audio.
  • CLIENT-5578 WiFi to WiFi handover may disconnect the Call.
  • CLIENT-4943 Restrictive networks may fail unless ICE servers are provided via TVOConnectOptions or TVOAcceptOptions. ICE servers can be obtained from Twilio's Network Traversal Service.
  • CLIENT-4805 The SDK size is significantly larger than 2.x. A reduced size will be introduced during the beta period.
  • CLIENT-5821 The packets_lost_fraction value reported to Insights is incorrectly computed and within the expect range of 0 to 100.
  • CLIENT-5835 Events were erroneously reported to Insights when the TVOConnectOptions.enableInsights property was set to false.
  • CLIENT-5882 Call metrics insights becomes unavailable after a network handover during a call.

Size Report

Architecture App Download Size App Storage Size
Universal 3.1 MB 7.3 MB
arm64 3.1 MB 7.3 MB

3.0.0-beta2

December 13, 2018

Enhancements

  • Added a preferredAudioCodecs property to TVOCallOptions. Support for Opus is added to the Voice SDK but yet to be enabled on Twilio infrastructure. It will be notified to the users of the Voice SDK when Opus codec is enabled on Twilio infrastructure.
  • Added new error code 31008. This error is raised when a TVOCallInvite is accepted after the Call has ended.

Bug Fixes

  • CLIENT-5398 Unmuting a Call on hold causes audio to flow.

Known Issues

  • CLIENT-4943 Restrictive networks may fail unless ICE servers are provided via TVOConnectOptions or TVOAcceptOptions. ICE servers can be obtained from Twilio's Network Traversal Service.
  • CLIENT-4805 The SDK size is significantly larger than 2.x. A reduced size will be introduced during the beta period.
  • CLIENT-4998 Network handoff, and subsequent connection renegotiation is not supported.
  • CLIENT-2985 IPv6 is not supported.
  • CLIENT-4547 Insights is not published.
  • CLIENT-4537 PCMU is the only supported codec. We plan on adding support for Opus moving forward. #117

Size Report

Architecture App Download Size App Storage Size
Universal 3.1 MB 7.2 MB
arm64 3.1 MB 7.2 MB

3.0.0-beta1

November 26, 2018

Enhancements

  • Added media and signaling related error codes.

Known Issues

  • CLIENT-4943 Restrictive networks may fail unless ICE servers are provided via TVOConnectOptions or TVOAcceptOptions. ICE servers can be obtained from Twilio's Network Traversal Service.
  • CLIENT-5258 The SDK size is significantly larger than 2.x. A reduced size will be introduced during the beta period.
  • CLIENT-4998 Network handoff, and subsequent connection renegotiation is not supported.
  • CLIENT-2985 IPv6 is not supported.
  • CLIENT-4547 Insights is not published.
  • CLIENT-4537 PCMU is the only supported codec. We plan on adding support for Opus moving forward. #117
  • CLIENT-5398 Unmuting a call on hold causes audio to flow.

3.0.0-preview5

October 24, 2018

Bug Fixes

  • CLIENT-5186 Fixed a crash when network is lost during an active Call.
  • CLIENT-5132 The call:didDisconnectWithError: delegate method of the caller should be called with nil error instead of call:didFailToConnectWithError: when the TVOCallInvite is rejected with answerOnBridge enabled.
  • CLIENT-4837 Fixed a crash caused by SIGPIPE when a signaling socket is closed due to an error.

Known Issues

  • CLIENT-5059 Calls made to a client or PSTN number that have a long duration before answering may not get connected.
  • CLIENT-4943 Restrictive networks may fail unless ICE servers are provided via TVOConnectOptions or TVOAcceptOptions. ICE servers can be obtained from Twilio's Network Traversal Service.
  • CLIENT-5258 The SDK size is significantly larger than 2.x. A reduced size will be introduced during the beta period.
  • CLIENT-4998 Network handoff, and subsequent connection renegotiation is not supported.
  • CLIENT-2985 IPv6 is not supported.
  • CLIENT-4547 Insights is not published.
  • CLIENT-4672 CLIENT-4673 Error codes 20157 and 20151 report different message and explanation text than Voice 2.0 SDKs.
  • CLIENT-4537 PCMU is the only supported codec. We plan on adding support for Opus moving forward. #117

3.0.0-preview4

October 2, 2018

Enhancements

  • Added customParameters property to TVOCallInvite.

Pass custom parameters in TwiML

  <?xml version="1.0" encoding="UTF-8"?>
  <Response>
    <Dial callerId="client:alice">
      <Client>
        <Identity>bob</Identity>
        <Parameter name="caller_first_name" value="alice" />
        <Parameter name="caller_last_name" value="smith" />
      </Client>
    </Dial>
  </Response>

callInvite.customParameters:

  {
    "caller_first_name" = "alice";
    "caller_last_name" = "smith";
  }

Bug Fixes

  • CLIENT-5202 Fixed a potential crash caused by a memory corruption when a custom TVOAudioDevice is created.
  • CLIENT-5160 The Voice SDK is built using the audio variant of WebRTC 67. Developers are no longer are required to add NSCameraUsageDescription key in app's Info.plist to consume the Voice SDK in an app and upload it to the App Store. #164
  • CLIENT-5204 Call audio was not able to recover from AVAudioSession interruptions. TVOAVAudioSessionConfigurationBlock now configures AVAudioSession.preferredIOBufferDuration to 20 milliseconds by default, to match changes in WebRTC.

Known Issues

  • CLIENT-5059 Calls made to a PSTN number may not get connected when answerOnBridge is set to true.
  • CLIENT-4943 Restrictive networks may fail unless ICE servers are provided via TVOConnectOptions or TVOAcceptOptions. ICE servers can be obtained from Twilio's Network Traversal Service.
  • CLIENT-5258 The SDK size is significantly larger than 2.x. A reduced size will be introduced during the beta period.
  • CLIENT-4998 Network handoff, and subsequent connection renegotiation is not supported.
  • CLIENT-2985 IPv6 is not supported.
  • CLIENT-4547 Insights is not published.
  • CLIENT-4672 CLIENT-4673 Error codes 20157 and 20151 report different message and explanation text than Voice 2.0 SDKs.
  • CLIENT-4537 PCMU is the only supported codec. We plan on adding support for Opus moving forward. #117

3.0.0-preview3

September 12, 2018

Bug Fixes

  • CLIENT-5101 The inject_credentials.sh which was accidentally included in the TwilioVoice.framework bundle has been removed.

Enhancements

  • This release is based on Chromium WebRTC 67.
  • Provide a stateless mechanism for processing push notifications related to call invites and call invite cancellations. The [TwilioVoice handleNotification:] no longer raises errors via the notificationError: method when processing invalid notifications, instead a BOOL value is returned when it is called. The boolean value is YES when the provided notification payload results in a TVOCallInvite or TVOCancelledCallInvite object. If [TwilioVoice handleNotification:] returns NO it means the data provided was not a Twilio Voice push notification. The TVOCallInvite has an accept() and a reject() method. While the TVOCancelledCallInvite simply provides the to, from, and callSid fields also available in the TVOCallInvite object. The callSid can be used to associate a TVOCallInvite with a TVOCancelledCallInvite.
  • notificationError: is removed from the TVONotificationDelegate protocol. cancelledCallInviteReceived: is added for the SDK to notify the application when a Call cancellation notification is received.

Processing push notifications in 2.X

- (void)pushRegistry:(PKPushRegistry *)registry
        didReceiveIncomingPushWithPayload:(PKPushPayload *)payload
             forType:(NSString *)type {
    [TwilioVoice handleNotification:payload.dictionaryPayload delegate:self];
}

#pragma mark - TVONotificationDelegate

- (void)callInviteReceived:(TVOCallInvite *)callInvite {
    if (callInvite.state == TVOCallInviteStatePending) {
        [self handleCallInviteReceived:callInvite];
    } else if (callInvite.state == TVOCallInviteStateCanceled) {
        [self handleCallInviteCanceled:callInvite];
    }
}

- (void)notificationError:(NSError *)error {
    NSLog(@"Failed processing notification payload: %@", error);
}

- (void)handleCallInviteReceived:(TVOCallInvite *)callInvite {
    // Call invite received
}

- (void)handleCallInviteCanceled:(TVOCallInvite *)callInvite {
    // Call invite canceled
}

Processing push notifications in 3.X

- (void)pushRegistry:(PKPushRegistry *)registry
        didReceiveIncomingPushWithPayload:(PKPushPayload *)payload
             forType:(NSString *)type {
    BOOL result = [TwilioVoice handleNotification:payload.dictionaryPayload delegate:self];
    if (!result) {
        NSLog(@"The processed data was not a Twilio push notification payload");
    }
}

#pragma mark - TVONotificationDelegate

- (void)callInviteReceived:(TVOCallInvite *)callInvite {
    // Call invite received
}

- (void)cancelledCallInviteReceived:(TVOCancelledCallInvite *)cancelledCallInvite {
    // Call invite cancelled
}

API Changes

  • Deprecated the TVOAudioOptions.levelControl and TVOAudioOptions.levelControlInitialPeakLevelDBFS properties as they are no longer supported in Chromium WebRTC 67.

Known Issues

  • CLIENT-5121 The apps using 3.0.0-preview3 may need to include NSCameraUsageDescription key and purpose string in it's Info.plist in order to submit the app to the App Store. The WebRTC used by the Twilio Voice SDK is using camera APIs. We are working on building the Voice SDK with the audio only variant of WebRTC where this workaround will not be required. #163
  • CLIENT-5059 Calls made to a client or PSTN number that have a long duration before answering may not get connected.
  • CLIENT-4943 Restrictive networks may fail unless ICE servers are provided via TVOConnectOptions or TVOAcceptOptions. ICE servers can be obtained from Twilio Network Travarsal Service.
  • CLIENT-4805 The SDK size is significantly larger than 2.x. A reduced size will be introduced during the beta period.
  • CLIENT-4998 Network handoff, and subsequent connection renegotiation is not supported.
  • CLIENT-2985 IPv6 is not supported.
  • CLIENT-4698 Params that are passed to your TwiML Application while making calls are not URL encoded
  • CLIENT-4547 Insights is not published
  • CLIENT-4672 CLIENT-4673 Error codes 20157 and 20151 report different message and explanation text than Voice 2.0 SDKs
  • CLIENT-4537 PCMU is the only supported codec. We plan on adding support for Opus moving forward. #117

3.0.0-preview2

August 28, 2018

Enhancements

  • Introduced a new callback method [TVOCallDelegate callDidStartRinging:]. This callback is emitted once before the [TVOCallDelegate callDidConnect:] callback when the callee is being alerted of a Call. The duration of the TVOCallStateRinging is determined by the answerOnBridge flag provided in the Dial verb of your TwiML application associated with this client. If the answerOnBridge flag is false, which is the default, the [TVOCallDelegate callDidConnect:] callback will be emitted immediately after [TVOCallDelegate callDidStartRinging:]. If the answerOnBridge flag is true this will cause the Call to emit the callDidConnect callback only until the call is answered. See answeronbridge for more details on how to use it with the Dial TwiML verb. If the twiML response contains a Say verb, then the call will emit the [TVOCallDelegate callDidConnect:] callback immediately after [TVOCallDelegate callDidStartRinging:] is raised, irrespective of the value of answerOnBridge being set to true or false.
  • Added a new Call state TVOCallStateRinging.
  • TwilioVoice.region is moved to TVOCallOptions.region.
  • Added a getStatsWithBlock: method to TVOCall that builds a TVOStatsReport with metrics for all the audio tracks in a Call.

Known Issues

  • CLIENT-5121 The apps using 3.0.0-preview2 may need to include NSCameraUsageDescription key and purpose string in it's Info.plist in order to submit the app to the App Store. The WebRTC used by the Twilio Voice SDK is using camera APIs. We are working on building the Voice SDK with the audio only variant of WebRTC where this workaround will not be required. #163
  • CLIENT-5059 Calls made to a client or PSTN number that have a long duration before answering may not get connected.
  • CLIENT-4943 Restrictive networks may fail unless ICE servers are provided via TVOConnectOptions or TVOAcceptOptions. ICE servers can be obtained from Twilio Network Travarsal Service.
  • CLIENT-4805 The SDK size is significantly larger than 2.x. A reduced size will be introduced during the beta period.
  • CLIENT-4998 Network handoff, and subsequent connection renegotiation is not supported.
  • CLIENT-2985 IPv6 is not supported.
  • CLIENT-4698 Params that are passed to your TwiML Application while making calls are not URL encoded
  • CLIENT-4547 Insights is not published
  • CLIENT-4672 CLIENT-4673 Error codes 20157 and 20151 report different message and explanation text than Voice 2.0 SDKs
  • CLIENT-4537 PCMU is the only supported codec. We plan on adding support for Opus moving forward. #117

3.0.0-preview1

August 10, 2018

This is our first WebRTC based release using Chromium WebRTC 57.

This SDK introduces audio device APIs. The Voice SDK uses TVODefaultAudioDevice by default. This release intruduces a new protocol, TVOAudioDevice. This protocol gives you the ability to replace TVODefaultAudioDevice. By implementing the TVOAudioDevice protocol, you can write your own audio capturer to feed audio samples to the Voice SDK and an audio renderer to receive the remote audio samples. For example, you could integrate with ReplayKit2 and capture application audio for broadcast or play music using AVAssetReader.

This SDK introduces TVOConnectOptions and TVOAcceptOptions to allow developers to make behaviorial changes associated with a Call.

This SDK allows multiple active Calls to be managed by the application.

Enhancements

  • Introduced TwilioVoice.audioDevice class property. You should set your audio device on TwilioVoice.audioDevice before performing any other actions with the SDK such as creating Tracks or connecting to a Call.
  • Added TVODefaultAudioDevice to render and capture audio. By default, the Voice SDK uses TVODefaultAudioDevice to capture and render audio.
  • Added the ability to provide your own audio capturing and rendering via the TVOAudioDevice protocol. As a part of this change we've also added TVOAudioFormat which describes audio that is being captured and rendered.
  • This release deprecates CallKitIntegration category from TwilioVoice in favor of a new property called TVODefaultAudioDevice.enabled. This property provides developers with a mechanism to enable or disable the activation of the audio device prior to connecting to a Call or to stop or start the audio device while you are already connected to a Call. A Call can now be connected without activating the audio device by setting TVODefaultAudioDevice.enabled to NO and can be enabled during the lifecycle of the Call by setting TVODefaultAudioDevice.enabled to YES. The default value is YES. This API change was made to ensure full compatibility with CallKit as well as supporting other use cases where developers may need to disable the audio device during a call.

Examples #1 - Changing the audio route from receiver to the speaker in a live call:

// The Voice SDK uses TVODefaultAudioDevice by default.

// ... connect to a Call. The `TVODefaultAudioDevice` is configured to route audio to the receiver by default.

TVODefaultAudioDevice *audioDevice = (TVODefaultAudioDevice *)TwilioVoice.audioDevice;

audioDevice.block =  ^ {
    // We will execute `kDefaultAVAudioSessionConfigurationBlock` first.
    kDefaultAVAudioSessionConfigurationBlock();

    if (![session overrideOutputAudioPort:AVAudioSessionPortOverrideSpeaker error:&error]) {
        NSLog(@"AVAudiosession overrideOutputAudioPort %@",error);
    }
};
audioDevice.block();

Example #2 - Connecting to a Call using the AVAudioSessionCategoryPlayback category:

id<TVOAudioDevice> audioDevice = [TVODefaultAudioDevice audioDeviceWithBlock:^ {

    // Execute the `kDefaultAVAudioSessionConfigurationBlock` first.
    kDefaultAVAudioSessionConfigurationBlock();

    // Overwrite the category to `playback`
    AVAudioSession *session = [AVAudioSession sharedInstance];
    NSError *error = nil;
    if (![session setCategory:AVAudioSessionCategoryPlayback
                         mode:AVAudioSessionModeVoiceChat
                      options:AVAudioSessionCategoryOptionAllowBluetooth
                        error:&error]) {
        NSLog(@"AVAudioSession setCategory:options:mode:error: %@",error);
    }
}];

TwilioVoice.audioDevice = audioDevice;

TVOCall *call = [TwilioVoice connectWithOptions:connectOptions delegate:self];
  • Migrated the API to make an outbound Call from [TwilioVoice call] to [TwilioVoice connectWithOptions:delegate:].
TVOConnectOptions *connectOptions = [TVOConnectOptions optionsWithAccessToken:self.accessToken
                                                                       block:^(TVOConnectOptionsBuilder *builder) {
   builder.params = twiMLParams;
   builder.uuid = [NSUUID UUID];
}];
TVOCall *call = [TwilioVoice connectWithOptions:connectOptions delegate:self];
  • Migrated the API to accept a TVOCallInvite using TVOAcceptOptions.
TVOAcceptOptions *options = [TVOAcceptOptions optionsWithCallInvite:self
   block:^(TVOAcceptOptionsBuilder *builder) {
   builder.uuid = weakSelf.callInvite.uuid;
}];
TVOCall *call = [callInvite acceptWithOptions:options delegate:strongSelf];
  • Added standalone log modules: TVOLogModuleCore, TVOLogModulePlatform, TVOLogModuleSignaling and TVOLogModuleWebRTC.
  • [TwilioVoice setModule:logLevel:] is now [TwilioVoice setLogLevel:module:].
  • [TwilioVoice logLevelForModule:] is added for retrieving log level for specific module.
  • [TwilioVoice version] is now [TwilioVoice getVersion] to avoid type conflict with NSObject.
  • Voice iOS SDK 3.0.0 supports iOS 10.0 and later versions.

Known Issues

  • CLIENT-5121 The apps using 3.0.0-preview1 may need to include NSCameraUsageDescription key and purpose string in it's Info.plist in order to submit the app to the App Store. The WebRTC used by the Twilio Voice SDK is using camera APIs. We are working on building the Voice SDK with the audio only variant of WebRTC where this workaround will not be required. #163
  • CLIENT-5059 Calls made to a client or PSTN number that have a long duration before answering may not get connected.
  • [CLIENT-4943] Restrictive networks may fail unless ICE servers are provided via TVOConnectOptions or TVOAcceptOptions. ICE servers can be obtained from Twilio Network Travarsal Service.
  • [CLIENT-4805] The SDK size is significantly larger than 2.x. A reduced size will be introduced during the beta period.
  • [CLIENT-4998] Network handoff, and subsequent connection renegotiation is not supported.
  • [CLIENT-2985] IPv6 is not supported.
  • [CLIENT-4698] Params that are passed to your TwiML Application while making calls are not URL encoded
  • [CLIENT-4547] Insights is not published
  • [CLIENT-4672] [CLIENT-4673] Error codes 20157 and 20151 report different message and explanation text than Voice 2.0 SDKs

2.X

For older changelog entries including 2.x, click here

Rate this page:

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 browsing the Twilio tag on Stack Overflow.