The Twilio Programmable Voice SDKs allow you to add voice-over-IP (VoIP) calling to your native iOS applications.
To make sure your app is ready for iOS 14, visit this page.
Apps using SDK versions 2.0.x, 3.x, and 4.x may fail to register for incoming calls when running on iOS 13. We recommend that you upgrade to SDK 5.0 or above. Refer to this advisory and this GitHub issue for more information. Check out our migration guides when planning your move to our latest SDK.
The Twilio Programmable Voice SDKs use Semantic Versioning. Twilio supports version N-1 for 12 months after the first GA release of version N. We recommend you upgrade to the latest version as soon as possible to avoid any breaking changes. Version 6.x is the latest iOS version.
Support for 4.x ceased on September 19, 2020. Please upgrade to the latest version
Support for 3.x ceased on June 28, 2020. Please upgrade to the latest version
Support for 2.x ceased on January 1, 2020. Please upgrade to the latest version
End-of-Life for 1.x will occur on March 23, 2021. A two-hour maintenance period is planned for 1.x at 9am Pacific Time on January 26, 2021. Please upgrade to the latest version. See this EoL notice for further details.
August 26, 2024
Enhancements
TVOErrorCallMessageCallInUnexpectedStateError
will be raised when
[TVOCall sendMessage:]
is invoked when the Call has not reached the ringing state yet.
error 31211
API Changes
TVOErrorCallMessageEventPayloadSizeExceededError
has been changed to 31212.
error 31212
Bug Fixes
custom
as the logger type to Voice Insights.
Size Impact
Architecture | Compressed Size | Uncompressed Size |
---|---|---|
arm64 | 3.3 MB | 7.5 MB |
June 4, 2024
Enhancements
TVOErrorCallMessageCallInUnexpectedStateError
in
TVOError
that happens
[TVOCallInvite sendMessage:]
is invoked when the Call Invite has not reached the ringing state yet.
[TVOCallMessageDelegate messageFailedForCallSid:voiceEventSid:error:]
callback will be invoked in this case with the above mentioned error code.
error 31211
Size Impact
Architecture | Compressed Size | Uncompressed Size |
---|---|---|
arm64 | 3.3 MB | 7.5 MB |
May 15, 2024
Enhancements
TVOErrorInvalidPhoneNumberError
in
TVOError
that happens when a call is made to an invalid phone number.
TVOErrorCallMessageTypeInvalidError
for invalid call message type when
sendMessage
API is invoked with a
TVOCallMessage
object where the
messageType
is
not
set to
user-defined-message
.
API Changes
TVOCallMessage.messageType
and treats it as a pass-through for both inbound and outbound call messages. To send a user-defined message with the
[TVOCall sendMessage:]
or the
[TVOCallInvite sendMessage:]
method, set the
messageType
to
user-defined-message
.
[TVOCallMessage messageWithContent:]
is deprecated in favor of the
[TVOCallMessage messageWithContent:messageType:block:]
method.
TVOCallQualityWarningConstantAudioOutputLevel
is added for
TVOCallQualityWarning
enum. This warning is raised
when
standard deviation
of audio output levels for the last 10 samples is less than or equals 1% of the maximum possible
audio output level of
32767
, i.e.
327.67
, and the call is not on
hold
by the local party. This warning is cleared when
standard deviation
of audio output levels for the last 10 samples is greater than 3% of the maximum possible audio output level, i.e.
983.01
. Please note, if the remote party mutes the audio track or places the call on
hold
, this warning will
still be raised.
Size Impact
Architecture | Compressed Size | Uncompressed Size |
---|---|---|
arm64 | 3.3 MB | 7.5 MB |
April 17, 2024
Enhancements
Known Issues
AppTrackingTransparency
framework authorization alert. iOS 16 and earlier versions will not be affected by the Privacy Manifest that ships with the SDK XCFramework.
Size Impact
Architecture | Compressed Size | Uncompressed Size |
---|---|---|
arm64 | 3.3 MB | 7.5 MB |
March 26, 2024
Bug Fixes
PrivacyInfo.xcprivacy
file was causing a warning during app store submission.
Size Impact
Architecture | Compressed Size | Uncompressed Size |
---|---|---|
arm64 | 3.3 MB | 7.5 MB |
March 12, 2024
API Changes
New TVOAudioOptions
and TVOAudioOptionsBuilder
APIs that enable audio processing operations to be performed on the local audio track/source has been added. You can use the TVOAudioOptionsBuilder
class to create an instance of TVOAudioOptions
. Please note that software Echo Cancellation and Automatic Gain Control for the microphone is not supported in iOS as WebRTC relies on OS provided capabilities.
noiseSuppression
is set to
false
,
highpassFilter
is set
to
true
,
audioJitterBufferMaxPackets
is set to
50
packets, and
audioJitterBufferMinDelayMs
is set to
0
milliseconds.
TVOAudioOptions
can be set as part of
TVOConnectOptions
when making outbound calls and/or as part of
TVOAcceptOptions
when receiving incoming calls.
Please see the example below. In this example, high pass filtering is enabled, audioJitterBufferMaxPackets
is set to 200
packets and audioJitterBufferMinDelayMs
is set to 5
milliseconds.
_14_14let audioOptions = AudioOptions() { builder in_14 builder.audioJitterBufferMaxPackets = 200_14 builder.audioJitterBufferMinDelayMs = 5_14 builder.highpassFilter = true_14}_14_14let acceptOptions = TVOAcceptOptions(callInvite: callInvite) { builder in_14 builder.uuid = callInvite.uuid_14 builder.enableIceGatheringOnAnyAddressPorts = true_14 builder.audioOptions = audioOptions;_14}_14_14let call = callInvite.accept(with: acceptOptions, delegate: self)
Size Impact
Architecture | Compressed Size | Uncompressed Size |
---|---|---|
arm64 | 3.3 MB | 7.5 MB |
February 12, 2024
Enhancements
TwilioVoiceSDK.insights
property is enabled.
TVOErrorInvalidCallerIDError
that happens when a call is attempted with an invalid caller id
error 13214
.
API Changes
TVOCallMessageDelegate
callback methods have been deprecated and will be removed in a future release in favor of the new callback methods. Please note that the new APIs work for both
TVOCallInvite
and
TVOCall
.
See examples as follows:
_13_13// MARK: - TVOCallMessageDelegate_13func messageSent(callSid: String, voiceEventSid: String) {_13 NSLog("Call message sent. Voice Event SID: \(voiceEventSid)")_13}_13_13func messageFailed(callSid: String, voiceEventSid: String, error: Error) {_13 NSLog("Failed to send call message. Voice Event SID: \(voiceEventSid). Error: \(error.localizedDescription)")_13}_13_13func messageReceived(callSid: String, message: CallMessage) {_13 NSLog("Call message received: \(callMessage.content)")_13}
Size Impact
Architecture | Compressed Size | Uncompressed Size |
---|---|---|
arm64 | 3.3 MB | 7.5 MB |
November 30, 2023
Enhancements
Size Impact for 6.10.0
Architecture | Compressed Size | Uncompressed Size |
---|---|---|
arm64 | 3.2 MB | 7.4 MB |
November 9, 2023
Bug Fixes
TVOCall
object has been destroyed.
Size Impact for 6.9.2
Architecture | Compressed Size | Uncompressed Size |
---|---|---|
arm64 | 3.3 MB | 7.5 MB |
October 02, 2023
API Changes
thread
property is added to the
TVOLogParameters
class to specify thread name or thread id in the log.
Bug Fixes
Size Impact for 6.9.1
Architecture | Compressed Size | Uncompressed Size |
---|---|---|
arm64 | 4.2 MB | 12.6 MB |
September 05, 2023
Enhancement
TVOLogger
is added. Users can implement this protocol to create their own custom logger.
API Changes
TVODefaultLogger
class is added. Users can use it to send their app logs to standard output.
logger
property of type
TVOLogger
is added to
TwilioVoiceSDK
. You can set this property to your custom logger instance. The SDK will return an
instance of
DefaultLogger
by default. If you intend to use SDK's logger utility to log your app logs, you can use
DefaultLogger
to do so.
TVOLogParameters
class is added to pass log statement related parameters to the user defined logger implementation.
TVOLogLevel
and
TVOLogModule
enums have been moved to the new
TVOLogParameters
header file.
_13_13class CustomLogger:NSObject {_13 //.. Your custom logger definition_13}_13_13extension CustomLogger:Logger {_13 func log(params logParameters: LogParameters!) {_13 print("\(logParameters.logModule) - \(logParameters.logLevel) - \(logParameters.message)");_13 }_13}_13_13let logger = CustomLogger()_13TwilioVoiceSDK.logger = logger
Size Impact for 6.9.0
Architecture | Compressed Size | Uncompressed Size |
---|---|---|
arm64 | 4.2 MB | 12.6 MB |
June 23, 2023
API Changes
TVOAudioDeviceFormatChanged
method is now marked as deprecated and will be removed in v7.0. Use
TVOAudioDeviceReinitialize
instead.
Bug Fixes
CXProviderDelegate [provider:performEndCallAction:]
callback.
Size Impact for 6.8.1
Architecture | Compressed Size | Uncompressed Size |
---|---|---|
arm64 | 4.1 MB | 12.5 MB |
June 13, 2023
Enhancements
Size Impact for 6.8.0
Architecture | Compressed Size | Uncompressed Size |
---|---|---|
arm64 | 4.1 MB | 12.5 MB |
May 17, 2023
API Updates
TVOCallInvite
before it
is answered or rejected. Sending user-defined messages while call is still ringing (before connected)
is also supported now.
Example of sending and receiving call messages via the TVOCallInvite
:
_24// Pass `CallMessageDelegate` in the `handleNotification()` method_24TwilioVoiceSDK.handleNotification(payload.dictionaryPayload, delegate: self, delegateQueue: nil, callMessageDelegate: self)_24_24// MARK: - NotificaitonDelegate_24func callInviteReceived(callInvite: CallInvite) {_24 let message = "{ \"foo\": \"bar\", \"marco\": \"polo\" }"_24 let callMessage = CallMessage(content: message)_24_24 // voiceEventSid can be used for tracking the message_24 let voiceEventSid = callInvite.sendMessage(callMessage)_24}_24_24// MARK: - CallMessageDelegate_24func callInviteDidSendMessage(callInvite: CallInvite, voiceEventSid: String) {_24 NSLog("Call message sent. Voice Event SID: \(voiceEventSid)")_24}_24_24func callInviteDidFailToSendMessage(callInvite: CallInvite, voiceEventSid: String, error: Error) {_24 NSLog("Failed to send call message. Voice Event SID: \(voiceEventSid). Error: \(error.localizedDescription)")_24}_24_24func callInviteDidReceiveMessage(callInvite: CallInvite, callMessage: CallMessage) {_24 NSLog("Call message received: \(callMessage.content)")_24}
Size Impact for 6.7.0
Architecture | Compressed Size | Uncompressed Size |
---|---|---|
arm64 | 3.9 MB | 11.4 MB |
May 12, 2023
API updates
TVODefaultAudioDevice
class now has a property
ignoresPreferredAttributeConfigurationErrors
to ignore errors during AVAudioSession setup. This is to mitigate the WebRTC issue reported
here
Size Impact for 6.5.2
Architecture | Compressed Size | Uncompressed Size |
---|---|---|
arm64 | 3.2 MB | 7.1 MB |
December 5, 2022
API updates
The SDK now supports sending and receiving in-call user-defined messages. Use the [TVOCall sendMessage:]
method to send
messages. Endpoints subscribed to the events of the call will be receiving the messages. The [TVOCallMessageDelegate call:didReceiveMessage:]
callback will be raised to the application when a message is received by the client.
Please visit this page for more details about this feature. Additionally, please see the following for more information on how to send and receive messages on the server.
NOTE: This feature should not be used with PII.
TVOCallMessage
class and the
TVOCallMessageBuilder
class are introduced to represent the call messages.
Example of sending a call message:
_19let call = TwilioVoiceSDK.connect(options: connectOptions, delegate: self)_19_19// wait for call to be connected_19_19let message = "{ \"foo\": \"bar\", \"marco\": \"polo\" }"_19let callMessage = CallMessage(content: message)_19_19// voiceEventSid can be used for tracking the message_19let voiceEventSid = call.sendMessage(callMessage)_19_19extension ViewController: CallMessageDelegate {_19 func callDidSendMessage(call: Call, voiceEventSid: String) {_19 NSLog("Call message sent. Voice Event SID: \(voiceEventSid)")_19 }_19_19 func callDidFailToSendMessage(call: Call, voiceEventSid: String, error: Error) {_19 NSLog("Failed to send call message. Voice Event SID: \(voiceEventSid). Error: \(error.localizedDescription)")_19 }_19}
Example of handling incoming call messages:
_10extension ViewController: CallMessageDelegate {_10_10 func callDidReceiveMessage(call: Call, message callMessage: CallMessage) {_10 NSLog("Call message received. Message: \(callMessage.content)")_10 }_10_10}
Size Impact for 6.5.0
Architecture | Compressed Size | Uncompressed Size |
---|---|---|
arm64 | 3.2 MB | 7.1 MB |
July 11, 2022
API Updates
writable
property of the
TVOIceCandidatePairStats
class has been renamed to
writeable
.
umatilla
is now supported. Set the
TwilioVoiceSDK.edge
property before connecting or accepting the call.
Bug Fixes
RTCNativeAudioSessionDelegateAdapter
) when using the SDK side by side with another WebRTC library.
Size Impact for 6.4.2
Architecture | Compressed Size | Uncompressed Size |
---|---|---|
arm64 | 3.2 MB | 7.0 MB |
May 26, 2022
Bug Fixes
twr
) in the access token is
null
.
Size Impact for 6.4.1
Architecture | Compressed Size | Uncompressed Size |
---|---|---|
arm64 | 3.2 MB | 7.0 MB |
May 3, 2022
API updates
TwilioVoiceSDK.register()
method, the
TwilioVoiceSDK.unregister()
method, and the
TwilioVoiceSDK.connect()
method.
Existing customers can now migrate their Voice use-cases to data centers in Ireland or Australia to establish data residency within the region. In addition, new customers may now select Ireland or Australia as their region of choice for Voice related use cases. There is no additional cost to use the new data centers in Ireland or Australia. To learn more about Regional Voice, check out our blog post or head over to our developer docs to get started.
Example of specifying home region in the access token using the Twilio Node.js helper library:
_10const accessToken = new twilio.jwt.AccessToken(_10 credentials.accountSid,_10 credentials.apiKeySid,_10 credentials.apiKeySecret, {_10 identity,_10 ttl,_10 region: 'au1',_10 },_10 );
The decoded header of your access token should looks like this:
_10{_10 "alg": "HS256",_10 "typ": "JWT",_10 "cty": "twilio-fpa;v=1",_10 "twr": "au1"_10}
Maintenance
[TVOCall getStatsWithBlock:]
.
Known Issues
RTCNativeAudioSessionDelegateAdapter
symbol conflict during compile time.
Size Impact for 6.4.0
Architecture | Compressed Size | Uncompressed Size |
---|---|---|
arm64 | 3.2 MB | 7.0 MB |
February 8, 2022
Enhancements
Known Issues
RTCNativeAudioSessionDelegateAdapter
symbol conflict during compile time.
Size Impact for 6.3.1
Architecture | Compressed Size | Uncompressed Size |
---|---|---|
arm64 | 3.2 MB | 7.0 MB |
May 17, 2021
Enhancements
arm64
architecture on Apple Silicon Macs is now available.
Known Issues
.xcframeworks
as documented
here
. Once Carthage supports binary
.xcframeworks
, Carthage distribution will be re-added.
RTCNativeAudioSessionDelegateAdapter
symbol conflict during compile time.
Size Impact for 6.3.0
Architecture | Compressed Size | Uncompressed Size |
---|---|---|
arm64 | 3.2 MB | 7.1 MB |
March 29, 2021
Bug Fixes
[TVOCallDelegate call:didDisconnectiWithError:]
callback when callee hangs up.
[TVONotificationDelegate cancelledCallInviteReceived:error:]
callback when signaling connection error happens.
Known Issues
RTCNativeAudioSessionDelegateAdapter
symbol conflict during compile time.
Size Impact for 5.5.2
Architecture | App Download Size | App Storage Size |
---|---|---|
Universal | 3.0 MB | 6.7 MB |
arm64 | 3.0 MB | 6.7 MB |
March 11, 2021
Bug Fixes
Info.plist
file of the framework.
Known Issues
TwilioVoice.xcframework
does not currently support the simulator on Apple Silicon
arm64
Macs.
.xcframeworks
as documented
here
. Once Carthage supports binary
.xcframeworks
, Carthage distribution will be re-added.
RTCNativeAudioSessionDelegateAdapter
symbol conflict during compile time.
Size Impact for 6.2.2
Architecture | Compressed Size | Uncompressed Size |
---|---|---|
arm64 | 3.1 MB | 7.0 MB |
February 4, 2021
Bug Fixes
Known Issues
TwilioVoice.xcframework
does not currently support the simulator on Apple Silicon
arm64
Macs.
.xcframeworks
as documented
here
. Once Carthage supports binary
.xcframeworks
, Carthage distribution will be re-added.
RTCNativeAudioSessionDelegateAdapter
symbol conflict during compile time.
Size Impact for 6.2.1
Architecture | Compressed Size | Uncompressed Size |
---|---|---|
arm64 | 3.1 MB | 7.0 MB |
February 1, 2021
Enhancements
.xcframework
. The
.xcframework
package includes the
.dSYM
and
.bcsymbolmap
files to allow developers to symbolicate crash reports.
Known Issues
TwilioVoice.xcframework
does not currently support the simulator on Apple Silicon
arm64
Macs.
.xcframeworks
as documented
here
. Once Carthage supports binary
.xcframeworks
, Carthage distribution will be re-added.
RTCNativeAudioSessionDelegateAdapter
symbol conflict during compile time.
Size Impact for 6.2.0
Architecture | Compressed Size | Uncompressed Size |
---|---|---|
arm64 | 3.1 MB | 7.0 MB |
January 7, 2021
Enhancements
ice-candidate
Insights event payload.
Debug
mode. The
selected-ice-candidate-pair
event will contain private IP address of the local active ICE candidate for debugging purpose in both Release and Debug modes.
Bug fixes
call:didDisconnectWithError:
callback when the callee hangs up.
cancelledCallInviteReceived:error:
callback when signaling connection error happens.
TwilioVoice
framework name and the class name. This was causing swift compile time errors when an app tries to access a TwilioVoice framework's class using the module name, e.g.
TwilioVoice.ConnectOptions
. Fixed this issues by renaming the
TwilioVoice
class name to
TwilioVoiceSDK
.
Known Issues
RTCNativeAudioSessionDelegateAdapter
symbol conflict during compile time.
Size impact for 6.1.0
Architecture | App Download Size | App Storage Size |
---|---|---|
Universal | 3.1 MB | 6.9 MB |
arm64 | 3.1 MB | 6.9 MB |
November 4, 2020
Bug fixes
AudioDeviceWorkerBlock
.
Known Issues
RTCNativeAudioSessionDelegateAdapter
symbol conflict during compile time.
Size impact for 6.0.2
Architecture | App Download Size | App Storage Size |
---|---|---|
Universal | 3.1 MB | 6.8 MB |
arm64 | 3.1 MB | 6.8 MB |
November 2, 2020
Bug fixes
AudioDeviceContext
.
Known Issues
RTCNativeAudioSessionDelegateAdapter
symbol conflict during compile time.
Size impact for 6.0.1
Architecture | App Download Size | App Storage Size |
---|---|---|
Universal | 3.1 MB | 6.8 MB |
arm64 | 3.1 MB | 6.8 MB |
September 15, 2020
API change
The Voice SDK has been updated for better Swift interoperability.
TVO
prefix has been removed from all Twilio Voice types
ConnectOptions.uuid
or
AcceptOptions.uuid
while making or answering a Call. When
ConnectOptions.uuid
or
AcceptOptions.uuid
is set, it is your responsibility to enable and disable the audio device. You should enable the audio device in
[CXProviderDelegate provider:didActivateAudioSession:]
, and disable the audio device in
[CXProviderDelegate provider:didDeactivateAudioSession:]
.
_11 func provider(_ provider: CXProvider, didActivate audioSession: AVAudioSession) {_11 audioDevice.isEnabled = true_11 }_11_11 func provider(_ provider: CXProvider, didDeactivate audioSession: AVAudioSession) {_11 audioDevice.isEnabled = false_11 }_11_11 func providerDidReset(_ provider: CXProvider) {_11 audioDevice.isEnabled = false_11 }
If you are not using CallKit in your app, you must not set ConnectOptions.uuid
or AcceptOptions.uuid
while making or answering a call. The Voice SDK will enable the audio device for you when the uuid
is nil
.
uuid
property of
TVOCall
is now optional.
[TVOCallDelegate callDidConnect:]
such that it is raised when both ICE connection state is connected and DTLS negotiation has completed. Previously
[TVOCallDelegate callDidConnect:]
was raised when the DTLS negotiation had completed.
[TVOCallDelegate callDidConnect:]
is raised when both the ICE connection state is connected and DTLS negotiation has completed. There is no change in behavior however the SDK can detect DTLS failures and raise
kTVOMediaDtlsTransportFailedErrorCode
if they occur.
Error Codes | ErrorCode | Error Message |
---|---|---|
53407 | TVOMediaDtlsTransportFailedErrorCode | Media connection failed due to DTLS handshake failure |
Event Group | Level | Event Name | Description |
---|---|---|---|
pc-connection-state | DEBUG | new | Raised when peer connection state is new |
pc-connection-state | DEBUG | connecting | Raised when peer connection state is connecting |
pc-connection-state | DEBUG | connected | Raised when peer connection state is connected |
pc-connection-state | DEBUG | disconnected | Raised when peer connection state is disconnected |
pc-connection-state | ERROR | failed | Raised when peer connection state is failed |
pc-connection-state | DEBUG | closed | Raised when peer connection state is closed |
TwilioVoice.region
. Use
TwilioVoice.edge
to control the connectivity with Twilio.
[TwilioVoice registerWithAccessToken:deviceTokenData:completion:]
and the
[TwilioVoice unregisterWithAccessToken:deviceTokenData:completion:]
have been renamed to replace the
[TwilioVoice registerWithAccessToken:deviceToken:completion:]
and the
[TwilioVoice unregisterWithAccessToken:deviceToken:completion:]
methods and now take the
NSData
type device token as parameter.
Enhancements
selected-ice-candidate-pair
is reported with the active local ICE candidate and remote ICE candidate.
Event Group | Level | Event Name | Description |
---|---|---|---|
ice-candidate | DEBUG | selected-ice-candidate-pair | Raised when the active local and remote ICE candidates of the peer connection are determined |
mos
calculation algorithm has been updated to make it monotonically decreasing with increasing
jitter
and
packets-lost-fraction
values over a range of
rtt
values. The final mos should always be in the range [1.0, 4.6].
Maintenance
Bug fixes
Known Issues
RTCNativeAudioSessionDelegateAdapter
symbol conflict during compile time.
Size impact for 6.0.0
Architecture | App Download Size | App Storage Size |
---|---|---|
Universal | 3.1 MB | 6.8 MB |
arm64 | 3.1 MB | 6.8 MB |
September 15, 2020
Bug Fixes
[TVOCall disconnect]
,
[TVOCallInvite reject]
,
[TwilioVoice registerWithAccessToken:deviceTokenData:completion:]
and
[TwilioVoice unregisterWithAccessToken:deviceTokenData:completion:]
. iOS should no longer report a background task risk of termination warning.
Known Issues
RTCNativeAudioSessionDelegateAdapter
symbol conflict during compile time.
Size Impact for 5.5.1
Architecture | App Download Size | App Storage Size |
---|---|---|
Universal | 2.9 MB | 6.7 MB |
arm64 | 2.9 MB | 6.7 MB |
July 9, 2020
API Change
TVOCallerInfo
class is introduced to represent information about the caller. Currently, this information is limited to
SHAKEN/STIR
status of incoming PSTN Calls, but may later be expanded to include
CNAM
, and other endpoint types. The
verified
property represents whether or not the caller's phone number has been verified by Twilio using
SHAKEN/STIR
validation. The value of this attribute is
true
if the caller has been validated at
'A'
level,
false
if the caller has been verified at any lower level or has failed validation. If
SHAKEN/STIR
information is unavailable for the caller or stir status value is
null
, the property will be
nil
. For details on how Twilio uses
SHAKEN/STIR
to make trusted calls and protect against unlawful spoofing, please visit
/docs/voice/trusted-calling-using-shakenstir
.
callerInfo
in
TVOCallInvite
returns the
TVOCallerInfo
object to represent the information about the caller.
Known Issues
RTCNativeAudioSessionDelegateAdapter
symbol conflict during compile time.
Size Impact for 5.5.0
Architecture | App Download Size | App Storage Size |
---|---|---|
Universal | 2.9 MB | 6.7 MB |
arm64 | 2.9 MB | 6.7 MB |
June 25, 2020
Bug Fixes
TVOCall
or
TVOCallInvite
object.
Known Issues
RTCNativeAudioSessionDelegateAdapter
symbol conflict during compile time.
Size Impact for 5.4.1
Architecture | App Download Size | App Storage Size |
---|---|---|
Universal | 2.9 MB | 6.7 MB |
arm64 | 2.9 MB | 6.7 MB |
June 3, 2020
API Change
TwilioVoice.edge
. This new property supersedes the now deprecated
TwilioVoice.region
. See the
new Edge names
and how they map to the old region names.
Here is an example
_10 // Connect using global low latency_10 TwilioVoice.edge = "roaming"
mos
to
TVORemoteAudioTrackStats
. Use
[TVOCall getStatsWithBlock:]
during a call to retrieve the score. The
mos
is computed once per second. Since the MOS is calculated from network performance measurements, it can be used to indicate the current network condition to the user to provide better usability. See
API Docs
for more information
Example
_10 call.getStatsWith { (reports) in_10 for report in reports {_10 let remoteAudioTracksStats = report.remoteAudioTrackStats_10 let mosLabel = "\(remoteAudioTracksStats.mos)"_10 }_10 }
Enhancements
TVOCallDelegate
method
call:didReceiveQualityWarnings:previousWarnings:
is also invoked when the SDK detects those degradations. Use these to relay network condition to the user to provide a better user experience. See the
delegate method
and
callQualityWarnings
for more information.
TVOStatsReport
. Use
[TVOCall getStatsWithBlock:]
during a Call to retrieve the score. Since the MOS is calculated from network performance measurements, it can be used to indicate the current network condition to the user to provide better usability.
enableIceGatheringOnAnyAddressPorts
in
TVOCallOptionsBuilder
allows the gathering of ICE candidates from all available interfaces. This should be used in those networks where the default does not work. See
enableIceGatheringOnAnyAddressPorts
for more information.
Deprecations
TwilioVoice.region
is now deprecated. Use
TwilioVoice.edge
instead. See the
new Edge names
for possible values.
Bug Fixes
[TVOCallDelegate callDidStartRinging:]
callback if
[TVOCall disconnect]
was called.
TVOCallInvite
.
Other
armv7
builds are no longer available or supported.
Known Issues
RTCNativeAudioSessionDelegateAdapter
symbol conflict during compile time.
Size Impact for 5.4.0
Architecture | App Download Size | App Storage Size |
---|---|---|
Universal | 2.9 MB | 7.0 MB |
arm64 | 2.8 MB | 6.9 MB |
April 9, 2020
Improvements
[TwilioVoice unregisterWithAccessToken:deviceTokenData:completion:]
by reducing the number of network requests.
[TwilioVoice registerWithAccessToken:deviceTokenData:completion:]
and
[TwilioVoice unregisterWithAccessToken:deviceTokenData:completion:]
. They will now finish execution even when the app is backgrounded.
Known Issues
RTCNativeAudioSessionDelegateAdapter
symbol conflict during compile time.
Size Impact for 5.3.1
Architecture | App Download Size | App Storage Size |
---|---|---|
Universal | 6.0 MB | 12.7 MB |
arm64 | 2.8 MB | 6.9 MB |
armv7 | 3.0 MB | 5.7 MB |
March 18, 2020
API Changes
NSData
rather than
NSString
. The previous register and unregister methods have been deprecated in favor of these new methods.
_11// TwilioVoice.h_11_11+ (void)registerWithAccessToken:(nonnull NSString *)accessToken_11 deviceTokenData:(nonnull NSData *)deviceTokenData_11 completion:(nullable void(^)(NSError * __nullable error))completion_11NS_SWIFT_NAME(register(withAccessToken\:deviceToken\:completion:));_11_11+ (void)unregisterWithAccessToken:(nonnull NSString *)accessToken_11 deviceTokenData:(nonnull NSData *)deviceTokenData_11 completion:(nullable void(^)(NSError * __nullable error))completion_11NS_SWIFT_NAME(unregister(withAccessToken\:deviceToken\:completion:));
Swift example
_10 func pushRegistry(_ registry: PKPushRegistry, didUpdate credentials: PKPushCredentials, for type: PKPushType) {_10 TwilioVoice.register(withAccessToken: accessToken, deviceToken: credentials.token) { (error) in_10 if let error = error {_10 NSLog("An error occurred while registering: \(error.localizedDescription)")_10 } else {_10 NSLog("Successfully registered for VoIP push notifications.")_10 }_10 }_10 }
Objective-C example
_13- (void)pushRegistry:(PKPushRegistry *)registry_13didUpdatePushCredentials:(PKPushCredentials *)credentials_13 forType:(NSString *)type {_13 [TwilioVoice registerWithAccessToken:accessToken_13 deviceTokenData:credentials.token_13 completion:^(NSError *error) {_13 if (error) {_13 NSLog(@"An error occurred while registering: %@", [error localizedDescription]);_13 } else {_13 NSLog(@"Successfully registered for VoIP push notifications.");_13 }_13 }];_13}
Bug Fixes
transport_id
value.
Known Issues
RTCNativeAudioSessionDelegateAdapter
symbol conflict during compile time.
Size Impact for 5.3.0
Architecture | App Download Size | App Storage Size |
---|---|---|
Universal | 6.0 MB | 12.7 MB |
arm64 | 2.8 MB | 6.9 MB |
armv7 | 3.0 MB | 5.7 MB |
March 11, 2020
Bug Fixes
Known Issues
RTCNativeAudioSessionDelegateAdapter
symbol conflict during compile time.
Size Impact for 5.2.1
Architecture | App Download Size | App Storage Size |
---|---|---|
Universal | 6.0 MB | 12.7 MB |
arm64 | 2.8 MB | 6.9 MB |
armv7 | 3.0 MB | 5.7 MB |
February 27, 2020
Enhancements
Bug Fixes
from
value is
nil
.
Things to Note
[TVOCallDelegate call:isReconnectingWithError:]
and
[TVOCallDelegate callDidReconnect:]
callbacks will be received in the order specified i.e a
[TVOCallDelegate call:isReconnectingWithError:]
callback will always be followed by a
[TVOCallDelegate callDidReconnect:]
callback.
Known Issues
RTCNativeAudioSessionDelegateAdapter
symbol conflict during compile time.
Size Impact for 5.2.0
Architecture | App Download Size | App Storage Size |
---|---|---|
Universal | 6.0 MB | 12.7 MB |
arm64 | 2.8 MB | 6.9 MB |
armv7 | 3.0 MB | 5.6 MB |
February 24, 2020
Bug Fixes
from
value is
nil
.
Known Issues
RTCNativeAudioSessionDelegateAdapter
symbol conflict during compile time.
Size Impact for 5.1.2
Architecture | App Download Size | App Storage Size |
---|---|---|
Universal | 6.0 MB | 12.6 MB |
arm64 | 2.8 MB | 6.8 MB |
armv7 | 3.0 MB | 5.6 MB |
December 9, 2019
Enhancements
Known Issues
RTCNativeAudioSessionDelegateAdapter
symbol conflict during compile time.
Size Impact for 5.1.1
Architecture | App Download Size | App Storage Size |
---|---|---|
Universal | 6.0 MB | 12.6 MB |
arm64 | 2.8 MB | 6.8 MB |
armv7 | 3.0 MB | 5.6 MB |
November 19, 2019
Enhancements
Event Group | Level | Event Name | Description |
---|---|---|---|
settings | INFO | codec | Raised when the codec has been selected |
Other Improvements
listening-error
event level was incorrectly reported as INFO instead of ERROR to
insights
.
Deprecated
Known Issues
RTCNativeAudioSessionDelegateAdapter
symbol conflict during compile time.
Size Impact for 5.1.0
Architecture | App Download Size | App Storage Size |
---|---|---|
Universal | 5.9 MB | 12.6 MB |
arm64 | 2.8 MB | 6.8 MB |
armv7 | 3.0 MB | 5.6 MB |
September 19, 2019
This release adds support for the new PushKit push notification policy that iOS 13 and Xcode 11 introduced. To upgrade your application please follow the migration guide.
Insights
To provide observability for incoming call cancellations the following Insights events have been added:
Event Group | Event Name | Level | Description |
---|---|---|---|
connection | listen | info | Reported when an attempt to listen for cancellations is made |
connection | listening | info | Reported when an attempt to listen for cancellations has succeeded |
connection | cancel | info | Reported when a cancellation has been reported |
connection | listening-error | error | Reported when an attempt to listen for a cancellation has failed |
registration | unsupported-cancel-message-error | error | Reported when a "cancel" push notification is processed by the SDK. This version of the SDK does not support "cancel" push notifications |
API Changes
[TwilioVoice registerWithAccessToken:deviceToken:completion:]
is called, the Voice SDK will only register for "call" push notifications and cancelled call invites will be determined internally by the SDK.
[TwilioVoice handleNotification:delegate:delegateQueue:]
no longer processes "cancel" push notification payloads and will return
false
if provided with a cancel notification.
A valid call push notification, when passed to [TwilioVoice handleNotification:delegate:delegateQueue:]
, will still result in a TVOCallInvite
being raised [TVONotificationDelegate callInviteReceived:]
. A TVOCancelledCallInvite
will be raised asynchronously via [TVONotificationDelegate cancelledCallInviteReceived:error:]
if any of the following events occur:
TVOCallInvite
to be notified of a cancellation via
[TVONotificationDelegate cancelledCallInviteReceived:error:]
.
A
TVOCancelledCallInvite
will not be raised if the invite is accepted or rejected.
[TwilioVoice handleNotification:delegate:]
is now [TwilioVoice handleNotification:delegate:delegateQueue:]
delegateQueue
: the dispatch queue where the
[TVONotificationDelegate cancelledCallInviteReceived:error:]
callback is received. If
nil
is passed, the dispatch main queue will be used.
[TVONotificationDelegate callInviteReceived:]
callback synchronously.
false
.
[TVONotificationDelegate cancelledCallInviteReceived:]
is now [TVONotificationDelegate cancelledCallInviteReceived:error:]
error
indicates that the call was canceled as a result of an error. The
error.code
will be set to
TVOErrorCallCancelledError
if a caller cancels the call before the called party could answer the call.
enableInsights
has been renamed to
insights
and moved from
TVOCallOptions.h
to
TwilioVoice.h
.
region
has moved from
TVOCallOptions.h
to
TwilioVoice.h
. If you are specifying a region via the
TwilioVoice.h
region property you must now do so before
[TwilioVoice connectWithAccessToken:delegate:]
or
[TwilioVoice handleNotification:delegate:delegateQueue:]
is called.
[TVOCallInvite isValid:]
is added to
TVOCallInvite
for apps to validate whether the notification payload is a valid call notification sent by Twilio. A valid notification payload will result in a
TVOCallInvite
being returned via the
[TVONotificationDelegate callInviteReceived:]
callback when passed to
[TwilioVoice handleNotification:delegate:delegateQueue:]
.
Known Issues
RTCNativeAudioSessionDelegateAdapter
symbol conflict during compile time.
Size Impact for 5.0.0
Architecture | App Download Size | App Storage Size |
---|---|---|
Universal | 5.9 MB | 12.6 MB |
arm64 | 2.8 MB | 6.8 MB |
armv7 | 3.0 MB | 5.6 MB |
August 19, 2019
Enhancements
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:
_10// Configure DSCP with `TVOConnectOptions`_10let connectOptions = TVOConnectOptions(accessToken: accessToken) { (builder) in_10 builder.enableDscp = true_10}_10_10let call = TwilioVoice.connect(with: connectOptions, delegate: callDelegate)
_10// Configure DSCP with `TVOAcceptOptions`_10let acceptOptions = TVOAcceptOptions(accessToken: accessToken) { (builder) in_10 builder.enableDscp = true_10}_10_10let call = callInvite.accept(with: acceptOptions, delegate: callDelegate)
For more information, refer to the docs.
Known Issues
RTCNativeAudioSessionDelegateAdapter
symbol conflict during compile time.
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 |
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
TVOConnectOptions
or
TVOAcceptOptions
. ICE servers can be obtained from Twilio's
Network Traversal Service
.
RTCNativeAudioSessionDelegateAdapter
symbol conflict during compile time.
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 |
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
_10 <?xml version="1.0" encoding="UTF-8"?>_10 <Response>_10 <Dial callerId="client:alice">_10 <Client>_10 <Identity>bob</Identity>_10 <Parameter name="caller_first_name" value="alice" />_10 <Parameter name="caller_last_name" value="smith" />_10 </Client>_10 </Dial>_10 </Response>
cancelledCallInvite.customParameters
:
_10 {_10 "caller_first_name" = "alice";_10 "caller_last_name" = "smith";_10 }
Known Issues
TVOConnectOptions
or
TVOAcceptOptions
. ICE servers can be obtained from Twilio's
Network Traversal Service
.
RTCNativeAudioSessionDelegateAdapter
symbol conflict during compile time.
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 |
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 section 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.
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:
_10let connectOptions = TVOConnectOptions(accessToken: accessToken) { (builder) in_10 builder.params = params_10 builder.preferredAudioCodecs = [TVOOpusCodec(maxAverageBitrate: 16000)]_10}_10_10let call = TwilioVoice.connect(with: connectOptions, delegate: callDelegate)
Other Enhancements
ice-candidate
events to Insights. These events are raised when
OnIceCandidate
is called on the
PeerConnection
.
Known Issues
TVOConnectOptions
or
TVOAcceptOptions
. ICE servers can be obtained from Twilio's
Network Traversal Service
.
RTCNativeAudioSessionDelegateAdapter
symbol conflict during compile time.
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 |
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 Wi-Fi network and the Wi-Fi 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
Please refer to our migration guide for more information about migrating from 3.x.
Known Issues
TVOConnectOptions
or
TVOAcceptOptions
. ICE servers can be obtained from Twilio's
Network Traversal Service
.
RTCNativeAudioSessionDelegateAdapter
symbol conflict during compile time.
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 |
June 6, 2019
Bug Fixes
NSInvalidArgumentException
exception is raised while connecting a call.
#13
Known Issues
TVOConnectOptions
or
TVOAcceptOptions
. ICE servers can be obtained from Twilio's
Network Traversal Service
.
RTCNativeAudioSessionDelegateAdapter
symbol conflict during compile time.
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 |
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
TVOConnectOptions
or
TVOAcceptOptions
. ICE servers can be obtained from Twilio's
Network Traversal Service
.
RTCNativeAudioSessionDelegateAdapter
symbol conflict during compile time.
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 |
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
TVOConnectOptions
or
TVOAcceptOptions
. ICE servers can be obtained from Twilio's
Network Traversal Service
.
RTCNativeAudioSessionDelegateAdapter
symbol conflict during compile time.
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 |
April 18, 2019
Bug Fixes
Known Issues
TVOConnectOptions
or
TVOAcceptOptions
. ICE servers can be obtained from Twilio's
Network Traversal Service
.
RTCNativeAudioSessionDelegateAdapter
symbol conflict during compile time.
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 |
April 17, 2019
Enhancements
TVOErrorConnectionTimeoutError
,
TVOErrorSignalingConnectionError
,
TVOErrorSignalingConnectionTimeoutError
,
TVOErrorSignalingIncomingMessageInvalidError
,
TVOErrorSignalingOutgoingMessageInvalidError
,
TVOErrorConfigurationAcquireFailedError
and
TVOErrorConfigurationAcquireTurnFailedError
from
TVOError.h
.
Bug Fixes
kDefaultAVAudioSessionConfigurationBlock
to
kTVODefaultAVAudioSessionConfigurationBlock
so that
TwilioVoice.framework
and
TwilioVideo.framework
may be used in the same application.
packets_lost_fraction
to Insights instead of integer.
Known Issues
TVOConnectOptions
or
TVOAcceptOptions
. ICE servers can be obtained from Twilio's
Network Traversal Service
.
RTCNativeAudioSessionDelegateAdapter
symbol conflict during compile time.
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 |
April 4, 2019
Enhancements
Bug Fixes
Known Issues
TVOConnectOptions
or
TVOAcceptOptions
. ICE servers can be obtained from Twilio's
Network Traversal Service
.
RTCNativeAudioSessionDelegateAdapter
symbol conflict during compile time.
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 |
April 2, 2019
Bug Fixes
TVOCallStateConnected
state.
Known Issues
TVOConnectOptions
or
TVOAcceptOptions
. ICE servers can be obtained from Twilio's
Network Traversal Service
.
RTCNativeAudioSessionDelegateAdapter
symbol conflict during compile time.
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 |
March 27, 2019
Enhancements
[TVOCallInvite acceptWithDelegate:]
and
[TVOCallInvite acceptWithOptions:delegate:]
.
TVOCall
.
API Changes
[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
call:didFailToConnectWithError:
callback. Previously these scenarios erroneously raised
call:didDisconnectWithError:
.
call:didFailToConnectWithError:
callback. Previously this scenario erroneously raised
call:didDisconnectWithError:
.
packets_lost_fraction
value reported to Insights is correctly computed and within the expect range of 0 to 100.
TVOConnectOptions.enableInsights
property was set to false.
Known Issues
TVOConnectOptions
or
TVOAcceptOptions
. ICE servers can be obtained from Twilio's
Network Traversal Service
.
RTCNativeAudioSessionDelegateAdapter
symbol conflict during compile time.
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 |
March 20, 2019
Bug Fixes
TwilioVoice.framework
that could cause code signing issue when uploading apps to iTunes Connect.
Known Issues
TVOConnectOptions
or
TVOAcceptOptions
. ICE servers can be obtained from Twilio's
Network Traversal Service
.
packets_lost_fraction
value reported to Insights is incorrectly computed and within the expect range of 0 to 100.
TVOConnectOptions.enableInsights
property was set to false.
RTCNativeAudioSessionDelegateAdapter
symbol conflict during compile time.
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 |
March 19, 2019
API Changes
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
Known Issues
3.0.0-beta7
may have code signing issue when uploading to iTunes Connect due to some development scripts included in
TwilioVoice.framework
.
TVOConnectOptions
or
TVOAcceptOptions
. ICE servers can be obtained from Twilio's
Network Traversal Service
.
packets_lost_fraction
value reported to Insights is incorrectly computed and within the expect range of 0 to 100.
TVOConnectOptions.enableInsights
property was set to false.
RTCNativeAudioSessionDelegateAdapter
symbol conflict during compile time.
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 |
March 14, 2019
Enhancements
Known Issues
3.0.0-beta6
may have code signing issue when uploading to iTunes Connect due to some development scripts included in
TwilioVoice.framework
.
TVOConnectOptions
or
TVOAcceptOptions
. ICE servers can be obtained from Twilio's
Network Traversal Service
.
packets_lost_fraction
value reported to Insights is incorrectly computed and within the expect range of 0 to 100.
TVOConnectOptions.enableInsights
property was set to false.
RTCNativeAudioSessionDelegateAdapter
symbol conflict during compile time.
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 |
March 4, 2019
Enhancements
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
libTwilioVoice.a
is now properly linked with dependencies.
Known Issues
3.0.0-beta5
may have code signing issue when uploading to iTunes Connect due to some development scripts included in
TwilioVoice.framework
.
TVOConnectOptions
or
TVOAcceptOptions
. ICE servers can be obtained from Twilio's
Network Traversal Service
.
packets_lost_fraction
value reported to Insights is incorrectly computed and within the expect range of 0 to 100.
TVOConnectOptions.enableInsights
property was set to false.
RTCNativeAudioSessionDelegateAdapter
symbol conflict during compile time.
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 |
February 14, 2019
API Changes
TVOCallFeedbackScoreNoScore
is replaced with
TVOCallFeedbackScoreNotReported
.
Known Issues
TVOConnectOptions
or
TVOAcceptOptions
. ICE servers can be obtained from Twilio's
Network Traversal Service
.
packets_lost_fraction
value reported to Insights is incorrectly computed and within the expect range of 0 to 100.
TVOConnectOptions.enableInsights
property was set to false.
RTCNativeAudioSessionDelegateAdapter
symbol conflict during compile time.
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 |
February 7, 2019
Enhancements
TVOCallOptions.enableInsights
.
TVOErrorTokenAuthenticationRejected (51007)
. This
error
is raised when attempting to perform registration or unregistration with a token that is invalid.
[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.
Bug Fixes
Known Issues
TVOConnectOptions
or
TVOAcceptOptions
. ICE servers can be obtained from Twilio's
Network Traversal Service
.
packets_lost_fraction
value reported to Insights is incorrectly computed and within the expect range of 0 to 100.
TVOConnectOptions.enableInsights
property was set to false.
RTCNativeAudioSessionDelegateAdapter
symbol conflict during compile time.
Size Report
Architecture | App Download Size | App Storage Size |
---|---|---|
Universal | 3.1 MB | 7.3 MB |
arm64 | 3.1 MB | 7.3 MB |
December 13, 2018
Enhancements
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.
31008
. This error is raised when a
TVOCallInvite
is accepted after the Call has ended.
Bug Fixes
Known Issues
TVOConnectOptions
or
TVOAcceptOptions
. ICE servers can be obtained from Twilio's
Network Traversal Service
.
RTCNativeAudioSessionDelegateAdapter
symbol conflict during compile time.
Size Report
Architecture | App Download Size | App Storage Size |
---|---|---|
Universal | 3.1 MB | 7.2 MB |
arm64 | 3.1 MB | 7.2 MB |
November 26, 2018
Enhancements
Known Issues
TVOConnectOptions
or
TVOAcceptOptions
. ICE servers can be obtained from Twilio's
Network Traversal Service
.
RTCNativeAudioSessionDelegateAdapter
symbol conflict during compile time.
October 24, 2018
Bug Fixes
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.
Known Issues
TVOConnectOptions
or
TVOAcceptOptions
. ICE servers can be obtained from Twilio's
Network Traversal Service
.
RTCNativeAudioSessionDelegateAdapter
symbol conflict during compile time.
October 2, 2018
Enhancements
customParameters
property to
TVOCallInvite
.
Pass custom parameters in TwiML
_10 <?xml version="1.0" encoding="UTF-8"?>_10 <Response>_10 <Dial callerId="client:alice">_10 <Client>_10 <Identity>bob</Identity>_10 <Parameter name="caller_first_name" value="alice" />_10 <Parameter name="caller_last_name" value="smith" />_10 </Client>_10 </Dial>_10 </Response>
callInvite.customParameters
:
_10 {_10 "caller_first_name" = "alice";_10 "caller_last_name" = "smith";_10 }
Bug Fixes
TVOAudioDevice
is created.
NSCameraUsageDescription
key in app's Info.plist to consume the Voice SDK in an app and upload it to the App Store.
#164
AVAudioSession
interruptions.
TVOAVAudioSessionConfigurationBlock
now configures
AVAudioSession.preferredIOBufferDuration
to 20 milliseconds by default, to match changes in WebRTC.
Known Issues
answerOnBridge
is set to true.
TVOConnectOptions
or
TVOAcceptOptions
. ICE servers can be obtained from Twilio's
Network Traversal Service
.
RTCNativeAudioSessionDelegateAdapter
symbol conflict during compile time.
September 12, 2018
Bug Fixes
inject_credentials.sh
which was accidentally included in the
TwilioVoice.framework
bundle has been removed.
Enhancements
[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
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
_27- (void)pushRegistry:(PKPushRegistry *)registry_27 didReceiveIncomingPushWithPayload:(PKPushPayload *)payload_27 forType:(NSString *)type {_27 [TwilioVoice handleNotification:payload.dictionaryPayload delegate:self];_27}_27_27# pragma mark - TVONotificationDelegate_27_27- (void)callInviteReceived:(TVOCallInvite *)callInvite {_27 if (callInvite.state == TVOCallInviteStatePending) {_27 [self handleCallInviteReceived:callInvite];_27 } else if (callInvite.state == TVOCallInviteStateCanceled) {_27 [self handleCallInviteCanceled:callInvite];_27 }_27}_27_27- (void)notificationError:(NSError *)error {_27 NSLog(@"Failed processing notification payload: %@", error);_27}_27_27- (void)handleCallInviteReceived:(TVOCallInvite *)callInvite {_27 // Call invite received_27}_27_27- (void)handleCallInviteCanceled:(TVOCallInvite *)callInvite {_27 // Call invite canceled_27}
Processing push notifications in 3.X
_18- (void)pushRegistry:(PKPushRegistry *)registry_18 didReceiveIncomingPushWithPayload:(PKPushPayload *)payload_18 forType:(NSString *)type {_18 BOOL result = [TwilioVoice handleNotification:payload.dictionaryPayload delegate:self];_18 if (!result) {_18 NSLog(@"The processed data was not a Twilio push notification payload");_18 }_18}_18_18# pragma mark - TVONotificationDelegate_18_18- (void)callInviteReceived:(TVOCallInvite *)callInvite {_18 // Call invite received_18}_18_18- (void)cancelledCallInviteReceived:(TVOCancelledCallInvite *)cancelledCallInvite {_18 // Call invite cancelled_18}
API Changes
TVOAudioOptions.levelControl
and
TVOAudioOptions.levelControlInitialPeakLevelDBFS
properties as they are no longer supported in Chromium WebRTC 67.
Known Issues
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
TVOConnectOptions
or
TVOAcceptOptions
. ICE servers can be obtained from
Twilio Network Traversal Service
.
RTCNativeAudioSessionDelegateAdapter
symbol conflict during compile time.
August 28, 2018
Enhancements
[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
.
TVOCallStateRinging
.
TwilioVoice.region
is moved to
TVOCallOptions.region
.
getStatsWithBlock:
method to
TVOCall
that builds a
TVOStatsReport
with metrics for all the audio tracks in a Call.
Known Issues
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
TVOConnectOptions
or
TVOAcceptOptions
. ICE servers can be obtained from
Twilio Network Traversal Service
.
RTCNativeAudioSessionDelegateAdapter
symbol conflict during compile time.
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 introduces 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 behavioral changes associated with a Call.
This SDK allows multiple active Calls to be managed by the application.
Enhancements
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.
TVODefaultAudioDevice
to render and capture audio. By default, the Voice SDK uses
TVODefaultAudioDevice
to capture and render audio.
TVOAudioDevice
protocol. As a part of this change we've also added
TVOAudioFormat
which describes audio that is being captured and rendered.
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:
_16_16// The Voice SDK uses TVODefaultAudioDevice by default._16_16// ... connect to a Call. The `TVODefaultAudioDevice` is configured to route audio to the receiver by default._16_16TVODefaultAudioDevice *audioDevice = (TVODefaultAudioDevice *)TwilioVoice.audioDevice;_16_16audioDevice.block = ^ {_16 // We will execute `kDefaultAVAudioSessionConfigurationBlock` first._16 kDefaultAVAudioSessionConfigurationBlock();_16_16 if (![session overrideOutputAudioPort:AVAudioSessionPortOverrideSpeaker error:&error]) {_16 NSLog(@"AVAudiosession overrideOutputAudioPort %@",error);_16 }_16};_16audioDevice.block();
Example #2 - Connecting to a Call using the AVAudioSessionCategoryPlayback
category:
_19id<TVOAudioDevice> audioDevice = [TVODefaultAudioDevice audioDeviceWithBlock:^ {_19_19 // Execute the `kDefaultAVAudioSessionConfigurationBlock` first._19 kDefaultAVAudioSessionConfigurationBlock();_19_19 // Overwrite the category to `playback`_19 AVAudioSession *session = [AVAudioSession sharedInstance];_19 NSError *error = nil;_19 if (![session setCategory:AVAudioSessionCategoryPlayback_19 mode:AVAudioSessionModeVoiceChat_19 options:AVAudioSessionCategoryOptionAllowBluetooth_19 error:&error]) {_19 NSLog(@"AVAudioSession setCategory:options:mode:error: %@",error);_19 }_19}];_19_19TwilioVoice.audioDevice = audioDevice;_19_19TVOCall *call = [TwilioVoice connectWithOptions:connectOptions delegate:self];
[TwilioVoice call]
to
[TwilioVoice connectWithOptions:delegate:]
.
_10TVOConnectOptions *connectOptions = [TVOConnectOptions optionsWithAccessToken:self.accessToken_10 block:^(TVOConnectOptionsBuilder *builder) {_10 builder.params = twiMLParams;_10 builder.uuid = [NSUUID UUID];_10}];_10TVOCall *call = [TwilioVoice connectWithOptions:connectOptions delegate:self];
TVOCallInvite
using
TVOAcceptOptions
.
_10TVOAcceptOptions *options = [TVOAcceptOptions optionsWithCallInvite:self_10 block:^(TVOAcceptOptionsBuilder *builder) {_10 builder.uuid = weakSelf.callInvite.uuid;_10}];_10TVOCall *call = [callInvite acceptWithOptions:options delegate:strongSelf];
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
.
Known Issues
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
TVOConnectOptions
or
TVOAcceptOptions
. ICE servers can be obtained from
Twilio Network Traversal Service
.
RTCNativeAudioSessionDelegateAdapter
symbol conflict during compile time.
For older changelog entries including 2.x, click here