# Voice iOS SDK Changelog

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

> \[!WARNING]
>
> The Twilio Programmable Voice SDKs use [Semantic Versioning](https://www.semver.org/). 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](https://help.twilio.com/hc/en-us/articles/360046017694-Programmable-Voice-Mobile-SDK-1-x-End-of-Life-Notice) for further details.

> \[!WARNING]
>
> Cocoapods.org plans to turn the podspec repository trunk to read-only in December 2026. See [CocoaPods Trunk Read-only Plan](https://blog.cocoapods.org/CocoaPods-Specs-Repo/). Twilio will continue pushing new versions to Cocoapods.org, but we strongly recommend developers to switch to using Swift Package Manager to integrate the Twilio Voice iOS SDK.

## 6.13.6

February 03, 2026

* Programmable Voice iOS SDK 6.13.6 [\[XCFramework\]](https://github.com/twilio/twilio-voice-ios/releases/download/6.13.6/TwilioVoice.xcframework.zip) (checksum: 4e04fa2698e33a47d15293f4437b1416fccad29c6e168695295c090c661d8acb).
* Programmable Voice iOS SDK 6.13.6 [\[Static-XCFramework\]](https://github.com/twilio/twilio-voice-ios/releases/download/6.13.6/TwilioVoice-static.xcframework.zip) (checksum: cf318d7590fcd4dfbe52be5fc34cbc9da3f8661e0d9a93714c51a379fee1dc8e)

Bug Fixes

* Fixed an issue where the SDK was accessing AVAudioSession properties inside the route-change notification handler and caused resource competition that could result in main-thread unresponsiveness.

Size Impact

Dynamic:

| Architecture | Compressed Size | Uncompressed App Size |
| ------------ | --------------- | --------------------- |
| arm64        | 3.8 MB          | 8.4 MB                |

* The app size is calculated by importing the TwilioVoice SDK into a bare-bones app.

Static:

| Architecture | Compressed Size | Uncompressed App Size |
| ------------ | --------------- | --------------------- |
| arm64        | 4.5 MB          | 10.5 MB               |

* The app size is calculated by importing the TwilioVoice SDK into a bare-bones app.

## 6.13.5

November 20, 2025

* Programmable Voice iOS SDK 6.13.5 [\[XCFramework\]](https://github.com/twilio/twilio-voice-ios/releases/download/6.13.5/TwilioVoice.xcframework.zip) (checksum: 08fd9f33ea940864d390b7a338156b8c2daa69d8c5f200bc9e0ce8f8e54d45e6).
* Programmable Voice iOS SDK 6.13.5 [\[Static-XCFramework\]](https://github.com/twilio/twilio-voice-ios/releases/download/6.13.5/TwilioVoice-static.xcframework.zip) (checksum: a2f476e9935ab60fc2d314aae6c58dbd0f0ebaee85e258990e83e8c762bfa32b)

Enhancements

* The Voice iOS SDK is built with Xcode 16.4.0.

Bug Fixes

* Fixed a crash when the SDK receives the Call Invite cancellation event while the `TVOCallInvite` object from the `[TVONotificationDelegate callInviteReceived:]` callback has been released. Note that the application is responsible for keeping the `TVOCallInvite` object alive for the underlying signaling connection to finish its tasks and only release the object when the Call Invite has been accepted, rejected or when the Call Invite is canceled.

Size Impact

Dynamic:

| Architecture | Compressed Size | Uncompressed App Size |
| ------------ | --------------- | --------------------- |
| arm64        | 3.8 MB          | 8.4 MB                |

* The app size is calculated by importing the TwilioVoice SDK into a bare-bones app.

Static:

| Architecture | Compressed Size | Uncompressed App Size |
| ------------ | --------------- | --------------------- |
| arm64        | 4.5 MB          | 10.5 MB               |

* The app size is calculated by importing the TwilioVoice SDK into a bare-bones app.

## 6.13.4

October 8, 2025

* Programmable Voice iOS SDK 6.13.4 [\[XCFramework\]](https://github.com/twilio/twilio-voice-ios/releases/download/6.13.4/TwilioVoice.xcframework.zip) (checksum: b3a09755761109935806be8a988d647ebb729494bef23c0b4aa793f989b42af5).
* Programmable Voice iOS SDK 6.13.4 [\[Static-XCFramework\]](https://github.com/twilio/twilio-voice-ios/releases/download/6.13.4/TwilioVoice-static.xcframework.zip) (checksum: df03cf6ab7cb2b491691d3a2e981bb5ef0c752a7363117ea3e33e906693a18e6)

API Changes

* The `[TVOPreflightDelegate preflight:didCompleteWitReport:]` is now `[TVOPreflightDelegate preflight:didCompleteWithReport:]`. The Swift name remains unchanged.
* The `[TVOPreflightReport dictionaryReport]` now returns the value of `callQuality` in string literals, i.e. `Excellent`, `Great`, `Good`, `Fair` and `Degraded`.
* The `[TVOPreflightReport dictionaryReport]` now returns the value of `isTurnRequired` in true boolean values instead of `true` or `false` strings.
* The `[TVOPreflightReport dictionaryReport]` now returns an empty array if there is no value in the `warnings` or `warningsCleared` field.

Bug Fixes

* Fixed a crash when the SDK receives the Call Invite cancellation event.
* Fixed a crash when the SDK is publishing Voice Insights events with invalid dictionary entries.

Size Impact

Dynamic:

| Architecture | Compressed Size | Uncompressed App Size |
| ------------ | --------------- | --------------------- |
| arm64        | 3.8 MB          | 8.7 MB                |

* The app size is calculated by importing the TwilioVoice SDK into a bare-bones app.

Static:

| Architecture | Compressed Size | Uncompressed App Size |
| ------------ | --------------- | --------------------- |
| arm64        | 4.5 MB          | 10.5 MB               |

* The app size is calculated by importing the TwilioVoice SDK into a bare-bones app.

## 6.13.3

August 25, 2025

**Please note that Cocoapods.org plans to turn the podspec repository trunk to read-only in December 2026. See [CocoaPods Trunk Read-only Plan](https://blog.cocoapods.org/CocoaPods-Specs-Repo/). Twilio will continue pushing new versions to Cocoapods.org, but we strongly recommend developers to switch to using Swift Package Manager to integrate the Twilio Voice iOS SDK.**

* Programmable Voice iOS SDK 6.13.3 [\[XCFramework\]](https://github.com/twilio/twilio-voice-ios/releases/download/6.13.3/TwilioVoice.xcframework.zip) (checksum: d9b041dbebdb2aaa9e0d1a61503f076136118702e4dafd6e538b6e5ee6fe4382).
* Programmable Voice iOS SDK 6.13.3 [\[Static-XCFramework\]](https://github.com/twilio/twilio-voice-ios/releases/download/6.13.3/TwilioVoice-static.xcframework.zip) (checksum: ae8b9a0a24a7732bdc1cf1af0f781898b0c50d3e1ace362369e47a33f4e88b14)

API Changes

* The AVAudioSession option `AVAudioSessionCategoryOptionAllowBluetooth` in `TVODefaultAudioDevice.h` is deprecated and replaced with `AVAudioSessionCategoryOptionAllowBluetoothHFP` when building on Xcode 26.

Size Impact

Dynamic:

| Architecture | Compressed Size | Uncompressed App Size |
| ------------ | --------------- | --------------------- |
| arm64        | 3.8 MB          | 8.7 MB                |

* The app size is calculated by importing the TwilioVoice SDK into a bare-bones app.

Static:

| Architecture | Compressed Size | Uncompressed App Size |
| ------------ | --------------- | --------------------- |
| arm64        | 4.5 MB          | 10.5 MB               |

* The app size is calculated by importing the TwilioVoice SDK into a bare-bones app.

## 6.13.2

June 18, 2025

* Programmable Voice iOS SDK 6.13.2 [\[XCFramework\]](https://github.com/twilio/twilio-voice-ios/releases/download/6.13.2/TwilioVoice.xcframework.zip) (checksum: e04b4790ebe35b8e66291d503ed2570dd6181d85dd4ab1f60b3c8ec2e0a571b1).
* Programmable Voice iOS SDK 6.13.2 [\[Static-XCFramework\]](https://github.com/twilio/twilio-voice-ios/releases/download/6.13.2/TwilioVoice-static.xcframework.zip) (checksum: c25d14bd4b7c46c0d9f6caca2e80ad53cba95fd6f37d2043ccc97bd04cda5aa1)

Enhancements

* The SDK is now also available in the static XCFramework format. To add the static library to your iOS app, follow these steps:
  1. Extract `TwilioVoice.xcframework` from `TwilioVoice-static.xcframework.zip` and drag and drop it into your Xcode project.
  2. In **Frameworks, Libraries, and Embedded Content**, add `SystemConfiguration.framework`.
  3. Add `@import TwilioVoice;` to your source files.
* The minimum supported iOS deployment target for the Twilio Voice SDK is now set to iOS 12.0. This version was built with Xcode 15.3.0.

Size Impact

Dynamic:

| Architecture | Compressed Size | Uncompressed App Size |
| ------------ | --------------- | --------------------- |
| arm64        | 3.8 MB          | 8.7 MB                |

* The app size is calculated by importing the TwilioVoice SDK into a bare-bones app.

Static:

| Architecture | Compressed Size | Uncompressed App Size |
| ------------ | --------------- | --------------------- |
| arm64        | 4.5 MB          | 10.5 MB               |

* The app size is calculated by importing the TwilioVoice SDK into a bare-bones app.

## 6.13.1

May 12, 2025

* Programmable Voice iOS SDK 6.13.1 [\[XCFramework\]](https://github.com/twilio/twilio-voice-ios/releases/download/6.13.1/TwilioVoice.xcframework.zip) (checksum: c0216f0a35de40bb7bd8528afbfff5628c1fb0dbfd91333a37b61a348a7aa9d2).

Bug Fixes

* Fixed an issue where exception is raised when assigning audio device instance to the Voice SDK immediately after the previous call has ended.
* The Swift API name of the `TVOPreflightCallQuality` enum has been renamed as `PreflightReport.CallQuality` to match the namespace.

Size Impact

| Architecture | Compressed Size | Uncompressed Size |
| ------------ | --------------- | ----------------- |
| arm64        | 3.8 MB          | 8.5 MB            |

## 6.13.0

January 22, 2025

* Programmable Voice iOS SDK 6.13.0 [\[XCFramework\]](https://github.com/twilio/twilio-voice-ios/releases/download/6.13.0/TwilioVoice.xcframework.zip) (checksum: 2e296d64f51962b807a250d27aadf8ba2710218edd93f9b3bf2cb73cde4fbfdb).

Enhancements

* This release is based on Chromium WebRTC 124.
* The internal default audio device is now created and destroyed on the correct thread.

Size Impact

| Architecture | Compressed Size | Uncompressed Size |
| ------------ | --------------- | ----------------- |
| arm64        | 3.8 MB          | 8.5 MB            |

## 6.12.1

December 3, 2024

* Programmable Voice iOS SDK 6.12.1 [\[XCFramework\]](https://github.com/twilio/twilio-voice-ios/releases/download/6.12.1/TwilioVoice.xcframework.zip) (checksum: f74b41d69451461e4fe0a4bc48eeb6d2e469d0c13175e5abbee3a38926eb4acd).

Bug Fixes

* Fixed a bug where `callSid` is missing from the dictionary returned by `[TVOPreflightTest dictionaryReport]`.
* Fixed a bug where the signaling library was throwing an exception while initiating a call with per-app based VPN enabled.
* Fixed the `TVOPreflightCallQuality` enum Swift name alias typo.

Size Impact

| Architecture | Compressed Size | Uncompressed Size |
| ------------ | --------------- | ----------------- |
| arm64        | 3.4 MB          | 7.8 MB            |

## 6.12.0

October 21, 2024

* Programmable Voice iOS SDK 6.12.0 [\[XCFramework\]](https://github.com/twilio/twilio-voice-ios/releases/download/6.12.0/TwilioVoice.xcframework.zip) (checksum: fb8e743bba78df579814a5860bbea8cde9dd3cedd137df85f97be7cafb5adfc8).

API Changes

* New methods `[TwilioVoiceSDK runPreflightTestWithAccessToken:delegate:]` and `[TwilioVoiceSDK runPreflightTestWithOptions:delegate:]`
  to run a preflight test are added.
* A new class `TVOPreflightOptions` is added. Use `[TVOPreflightOptions optionsWithAccessToken:]` or the builder
  method `[TVOPreflightOptions optionsWithAccessToken:block:]` to create the options object as an argument when
  calling the `[TwilioVoiceSDK runPreflightTestWithOptions:delegate:]` method.
* A new class `TVOPreflightTest` is added. This object cannot be initialized directly. Instead a `TVOPreflightTest`
  object is returned when calling the `[TwilioVoiceSDK runPreflightTestWithAccessToken:delegate:]` and `[TwilioVoiceSDK runPreflightTestWithOptions:delegate:]`
  methods. Please note that the `stop()` method can be used to disconnect the preflight test but will result in the
  `[TVOPreflightDelegate preflight:didFailWithError:]` callback with the `TVOPreflightTestStatusFailed` state of the
  preflight test.
* A new protocol class `TVOPreflightDelegate` is added. Status updates of the preflight test will be raised via the
  delegate methods in this class.
* A new class `TVOPreflightReport` is added. A comprehensive report object will be returned in the `[TVOPreflightDelegate preflight:didCompleteWitReport:]`
  callback. The report can also be retrieved using the `TVOPreflightTest.preflightReport` property when the preflight test
  has completed.

An example of making a preflight test

```swift
class ViewController: UIViewController {
    var preflightTest: PreflightTest? = nil

    func performPreflight() {
        let preflightOptions = PreflightOptions(accessToken: accessToken, block: { builder in
            builder.preferredAudioCodecs = [OpusCodec()]
        })

        preflightTest = TwilioVoiceSDK.runPreflightTest(options: preflightOptions, delegate: self)
    }
}

extension ViewController: PreflightDelegate {
    func preflightDidComplete(preflightTest: PreflightTest, report: PreflightReport) {
        // Check the result in the report
    }

    func preflightDidFail(preflightTest: PreflightTest, error: any Error) {
        // Check the failure reason in the error
    }

    func preflightDidConnect(preflightTest: PreflightTest) {
        // preflight test has connected
    }
}
```

Bug Fixes

* This release uses a WebRTC patch that addresses a potential ICE gathering or network handover [issue](https://issues.webrtc.org/issues/359245764) on iOS 18.

Size Impact

| Architecture | Compressed Size | Uncompressed Size |
| ------------ | --------------- | ----------------- |
| arm64        | 3.4 MB          | 7.8 MB            |

## 6.11.3

September 10, 2024

* Programmable Voice iOS SDK 6.11.3 [\[XCFramework\]](https://github.com/twilio/twilio-voice-ios/releases/download/6.11.3/TwilioVoice.xcframework.zip) (checksum: 0d8bcd777590bb7cf441a37d8fedfd1ce5babb1885f94a1d9976de9acbcf1611).

Enhancements

* The SDK is now using reSIProcate 1.12.0 for the signaling connection.
* The SDK now supports Server Name Indication (SNI) during initial TLS handshake with Twilio infrastructure.

Known Issues

* The `TVOCallMessageBuilder.contentType` has no effect on the content type of the `TVOCallMessage` object. The content type always defaults to `application/json`.

Size Impact

| Architecture | Compressed Size | Uncompressed Size |
| ------------ | --------------- | ----------------- |
| arm64        | 3.3 MB          | 7.6 MB            |

## 6.11.2

August 26, 2024

* Programmable Voice iOS SDK 6.11.2 [\[XCFramework\]](https://github.com/twilio/twilio-voice-ios/releases/download/6.11.2/TwilioVoice.xcframework.zip) (checksum: 45a0a811379116d525336424b93a6671b3e8ed634ff48ae7fc7b307cec02b84f).

Enhancements

* The Call Message Events (Beta), originally released in 6.5.0, has been promoted to GA.
* The error code `TVOErrorCallMessageCallInUnexpectedStateError` will be raised when `[TVOCall sendMessage:]` is invoked when the Call has not reached the ringing state yet. [error 31211](/docs/api/errors/31211)
* Voice Insights publishing will fall back to sending uncompressed data if the compressed format is not supported.

API Changes

* The error code of `TVOErrorCallMessageEventPayloadSizeExceededError` has been changed to 31212. [error 31212](/docs/api/errors/31212)

Bug Fixes

* Fixed a bug where the SDK by default reports `custom` as the logger type to Voice Insights.

Known Issues

* The `TVOCallMessageBuilder.contentType` has no effect on the content type of the `TVOCallMessage` object. The content type always defaults to `application/json`.

Size Impact

| Architecture | Compressed Size | Uncompressed Size |
| ------------ | --------------- | ----------------- |
| arm64        | 3.3 MB          | 7.5 MB            |

## 6.11.1

June 4, 2024

* Programmable Voice iOS SDK 6.11.1 [\[XCFramework\]](https://github.com/twilio/twilio-voice-ios/releases/download/6.11.1/TwilioVoice.xcframework.zip) (checksum: 30026a8e37d339d6275e572871ec02e2a968f3f57201c90e9cdff5e6436f1e39).

Enhancements

* The Voice Insights data is now compressed before uploading to save network bandwidth.
* Added new error code `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](/docs/api/errors/31211)

Size Impact

| Architecture | Compressed Size | Uncompressed Size |
| ------------ | --------------- | ----------------- |
| arm64        | 3.3 MB          | 7.5 MB            |

## 6.11.0

May 15, 2024

* Programmable Voice iOS SDK 6.11.0 [\[XCFramework\]](https://github.com/twilio/twilio-voice-ios/releases/download/6.11.0/TwilioVoice.xcframework.zip) (checksum: c2befda6077f0c9ce6a3e2a098d75ed6d41f59e98e089beffba40fb2a1457393).

Enhancements

* The SDK XCFramework is now signed with Twilio's distribution signature.
* Added new [error code 13224](/docs/api/errors/13224) `TVOErrorInvalidPhoneNumberError` in `TVOError` that happens when a call is made to an invalid phone number.
* Added new [error code 31210](/docs/api/errors/31210) `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`.
* The Privacy Manifest is updated since the SDK does not collect API usage or call quality data for tracking purposes according to [Apple's documentation](https://developer.apple.com/app-store/user-privacy-and-data-use/).

API Changes

* The SDK no longer validates the value of `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`.
* The factory method `[TVOCallMessage messageWithContent:]` is deprecated in favor of the `[TVOCallMessage messageWithContent:messageType:block:]` method.
* A new warning type `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            |

## 6.10.4

April 17, 2024

* Programmable Voice iOS SDK 6.10.4 [\[XCFramework\]](https://github.com/twilio/twilio-voice-ios/releases/download/6.10.4/TwilioVoice.xcframework.zip) (checksum: 7f8d015360b86f516d5ef1662af6e0da8d40be817675a89da66646b0b804b19f).

Enhancements

* Increased sampling resolution of Voice Insights call quality metrics events.
* Added a missing API which is used internally by WebRTC to the SDK's privacy manifest.

Known Issues

* The SDK collects API usage and WebRTC call quality data and sends it back as [Twilio Voice Insights](/docs/voice/voice-insights) events for post-call quality analysis and debugging purposes. On iOS 17, Voice Insights data collection will be impacted if the application user does not allow tracking when prompted with iOS `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            |

## 6.10.3

March 26, 2024

* Programmable Voice iOS SDK 6.10.3 [\[XCFramework\]](https://github.com/twilio/twilio-voice-ios/releases/download/6.10.3/TwilioVoice.xcframework.zip) (checksum: 2d90b96aa9e6a465b0889a562fd021f0fa70eba44356da93b15146b950ec9f7a).

Bug Fixes

* Fixed an issue where `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            |

## 6.10.2

March 12, 2024

* Programmable Voice iOS SDK 6.10.2 [\[XCFramework\]](https://github.com/twilio/twilio-voice-ios/releases/download/6.10.2/TwilioVoice.xcframework.zip) (checksum: 11ec923fb78b3e3e1bf2e2d2581a1280e9a2cd0f91f59d3a118c4205a5b46478).

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.

  * Audio processing operations include noise suppression, high pass filtering, setting jitter buffer max size in packets, and setting jitter buffer minimum delay in milliseconds.
  * By default, `noiseSuppression` is set to `false`, `highpassFilter` is set
    to `true`, `audioJitterBufferMaxPackets` is set to `50` packets, and
    `audioJitterBufferMinDelayMs` is set to `0` milliseconds.
  * The default values can be modified and custom `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.

```swift

let audioOptions = AudioOptions() { builder in
    builder.audioJitterBufferMaxPackets = 200
    builder.audioJitterBufferMinDelayMs = 5
    builder.highpassFilter = true
}

let acceptOptions = TVOAcceptOptions(callInvite: callInvite) { builder in
    builder.uuid = callInvite.uuid
    builder.enableIceGatheringOnAnyAddressPorts = true
    builder.audioOptions = audioOptions;
}

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

Size Impact

| Architecture | Compressed Size | Uncompressed Size |
| ------------ | --------------- | ----------------- |
| arm64        | 3.3 MB          | 7.5 MB            |

## 6.10.1

February 12, 2024

* Programmable Voice iOS SDK 6.10.1 [\[XCFramework\]](https://github.com/twilio/twilio-voice-ios/releases/download/6.10.1/TwilioVoice.xcframework.zip) (checksum: a3e66546465c669645ff4cdc8db0498c22c0dad5f0c3bad3044d8952ff6fd212).

Enhancements

* The SDK now includes the privacy manifest in the XCFramework. The SDK collects analytic data such as API usage and WebRTC stats when the `TwilioVoiceSDK.insights` property is enabled.
* Added new Call Error, `TVOErrorInvalidCallerIDError` that happens when a call is attempted with an invalid caller id [error 13214](/docs/api/errors/13214#warning-13214).

API Changes

* The current set of `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:

```swift

// MARK: - TVOCallMessageDelegate
func messageSent(callSid: String, voiceEventSid: String) {
    NSLog("Call message sent. Voice Event SID: \(voiceEventSid)")
}

func messageFailed(callSid: String, voiceEventSid: String, error: Error) {
    NSLog("Failed to send call message. Voice Event SID: \(voiceEventSid). Error: \(error.localizedDescription)")
}

func messageReceived(callSid: String, message: CallMessage) {
    NSLog("Call message received: \(callMessage.content)")
}
```

Size Impact

| Architecture | Compressed Size | Uncompressed Size |
| ------------ | --------------- | ----------------- |
| arm64        | 3.3 MB          | 7.5 MB            |

## 6.10.0

November 30, 2023

* Programmable Voice iOS SDK 6.10.0 [\[XCFramework\]](https://github.com/twilio/twilio-voice-ios/releases/download/6.10.0/TwilioVoice.xcframework.zip) (checksum: 050218acf4548b346fdaef9e62a4be10d0a80c6ea58954a41022d1ba63dc148a).

Enhancements

* This release is based on Chromium WebRTC 112.

Size Impact for 6.10.0

| Architecture | Compressed Size | Uncompressed Size |
| ------------ | --------------- | ----------------- |
| arm64        | 3.2 MB          | 7.4 MB            |

## 6.9.2

November 9, 2023

* Programmable Voice iOS SDK 6.9.2 [\[XCFramework\]](https://github.com/twilio/twilio-voice-ios/releases/download/6.9.2/TwilioVoice.xcframework.zip) (checksum: 44527c3d6520df9991f503f8bb6a354b4a4cb18415f4e276951aba70419b729b).

Bug Fixes

* Fixed a crash when the background signaling thread is accessing the memory while the `TVOCall` object has been destroyed.

Size Impact for 6.9.2

| Architecture | Compressed Size | Uncompressed Size |
| ------------ | --------------- | ----------------- |
| arm64        | 3.3 MB          | 7.5 MB            |

## 6.9.1

October 02, 2023

* Programmable Voice iOS SDK 6.9.1 [\[XCFramework\]](https://github.com/twilio/twilio-voice-ios/releases/download/6.9.1/TwilioVoice.xcframework.zip) (checksum: 6a4f677228de99f676146c0ba62a0e88a219b0ed531c6a34032c9709fa13ebb3).

API Changes

* New `thread` property is added to the `TVOLogParameters` class to specify thread name or thread id in the log.

Bug Fixes

* Fixed a bug where the incoming call answer timeout value might not be applied.
* Fixed a crash when SDK is tearing down the incoming call ringing monitor.

Size Impact for 6.9.1

| Architecture | Compressed Size | Uncompressed Size |
| ------------ | --------------- | ----------------- |
| arm64        | 4.2 MB          | 12.6 MB           |

## 6.9.0

September 05, 2023

* Programmable Voice iOS SDK 6.9.0 [\[XCFramework\]](https://github.com/twilio/twilio-voice-ios/releases/download/6.9.0/TwilioVoice.xcframework.zip) (checksum: cbf301343afd5fafa80c3d7abeb4b0ddb933266dce36cf322644a620f989a277).

Enhancement

* In this release a new protocol `TVOLogger` is added. Users can implement this protocol to create their own custom logger.

API Changes

* New `TVODefaultLogger` class is added. Users can use it to send their app logs to standard output.
* A new `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.
* New `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.

```swift

class CustomLogger:NSObject {
    //.. Your custom logger definition
}

extension CustomLogger:Logger {
    func log(params logParameters: LogParameters!) {
        print("\(logParameters.logModule) - \(logParameters.logLevel) - \(logParameters.message)");
    }
}

let logger = CustomLogger()
TwilioVoiceSDK.logger = logger

```

Size Impact for 6.9.0

| Architecture | Compressed Size | Uncompressed Size |
| ------------ | --------------- | ----------------- |
| arm64        | 4.2 MB          | 12.6 MB           |

## 6.8.1

June 23, 2023

* Programmable Voice iOS SDK 6.8.1 [\[XCFramework\]](https://github.com/twilio/twilio-voice-ios/releases/download/6.8.1/TwilioVoice.xcframework.zip) (checksum: 67c1fea7aef9d9ed3e57f300eb05b682564011d1430c39cd77dc93fde5ad25a8).

API Changes

* The `TVOAudioDeviceFormatChanged` method is now marked as deprecated and will be removed in v7.0. Use `TVOAudioDeviceReinitialize` instead.

Bug Fixes

* Fixed a bug where the incoming call invite can only ring up to 3 minutes instead of the [maximum 10 minutes call timeout](/docs/voice/twiml/dial#timeout)). Note that on iOS 16 and later versions CallKit will dismiss the incoming call in one minute by raising the `CXProviderDelegate [provider:performEndCallAction:]` callback.

Size Impact for 6.8.1

| Architecture | Compressed Size | Uncompressed Size |
| ------------ | --------------- | ----------------- |
| arm64        | 4.1 MB          | 12.5 MB           |

## 6.8.0

June 13, 2023

* Programmable Voice iOS SDK 6.8.0 [\[XCFramework\]](https://github.com/twilio/twilio-voice-ios/releases/download/6.8.0/TwilioVoice.xcframework.zip) (checksum: 298ff9bae7eb434e911dd14a2d40c3582dc97133d3e3dbbe23f2088726301ddf).

Enhancements

* This release uses WebRTC M105.

Size Impact for 6.8.0

| Architecture | Compressed Size | Uncompressed Size |
| ------------ | --------------- | ----------------- |
| arm64        | 4.1 MB          | 12.5 MB           |

## 6.7.0

May 17, 2023

* Programmable Voice iOS SDK 6.7.0 [\[XCFramework\]](https://github.com/twilio/twilio-voice-ios/releases/download/6.7.0/TwilioVoice.xcframework.zip) (checksum: 97f1d2af07f308327f392fb347ce19e7a0711f1b8c8050b55c33afc78f8fbaef).

API Updates

* The SDK now supports sending and receiving user-defined messages via the `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`:

```swift
// Pass `CallMessageDelegate` in the `handleNotification()` method
TwilioVoiceSDK.handleNotification(payload.dictionaryPayload, delegate: self, delegateQueue: nil, callMessageDelegate: self)

// MARK: - NotificaitonDelegate
func callInviteReceived(callInvite: CallInvite) {
    let message = "{ \"foo\": \"bar\", \"marco\": \"polo\" }"
    let callMessage = CallMessage(content: message)

    // voiceEventSid can be used for tracking the message
    let voiceEventSid = callInvite.sendMessage(callMessage)
}

// MARK: - CallMessageDelegate
func callInviteDidSendMessage(callInvite: CallInvite, voiceEventSid: String) {
    NSLog("Call message sent. Voice Event SID: \(voiceEventSid)")
}

func callInviteDidFailToSendMessage(callInvite: CallInvite, voiceEventSid: String, error: Error) {
    NSLog("Failed to send call message. Voice Event SID: \(voiceEventSid). Error: \(error.localizedDescription)")
}

func callInviteDidReceiveMessage(callInvite: CallInvite, callMessage: CallMessage) {
    NSLog("Call message received: \(callMessage.content)")
}
```

* Bitcode support is disabled since App Store no longer accepts bitcode submission from Xcode 14. ([Release notes](https://developer.apple.com/documentation/xcode-release-notes/xcode-14-release-notes))

Size Impact for 6.7.0

| Architecture | Compressed Size | Uncompressed Size |
| ------------ | --------------- | ----------------- |
| arm64        | 3.9 MB          | 11.4 MB           |

## 6.5.2

May 12, 2023

* Programmable Voice iOS SDK 6.5.2 [\[XCFramework\]](https://github.com/twilio/twilio-voice-ios/releases/download/6.5.2/TwilioVoice.xcframework.zip) (checksum: a14e7c33c1f78dbe650264cdf5808e7a306bfaecadc2fbac4e1bc1214263765d).

API updates

* `TVODefaultAudioDevice` class now has a property `ignoresPreferredAttributeConfigurationErrors` to ignore errors during AVAudioSession setup. This is to mitigate the WebRTC issue reported [here](https://bugs.chromium.org/p/webrtc/issues/detail?id=10602)

Size Impact for 6.5.2

| Architecture | Compressed Size | Uncompressed Size |
| ------------ | --------------- | ----------------- |
| arm64        | 3.2 MB          | 7.1 MB            |

## 6.5.0

December 5, 2022

* Programmable Voice iOS SDK 6.5.0 [\[XCFramework\]](https://github.com/twilio/twilio-voice-ios/releases/download/6.5.0/TwilioVoice.xcframework.zip) (checksum: 6a0cd9726e992582cb2cb20b6e6721cbb371de19dc67edaef611d92398d4e269).

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](/docs/voice/sdks/call-message-events) for more details about this feature. Additionally, please see the following for more information on how to send and receive messages on the server.

  * [UserDefinedMessage](/docs/voice/api/userdefinedmessage-resource)
  * [UserDefinedMessageSubscription](/docs/voice/api/userdefinedmessagesubscription-resource)

  **NOTE:** This feature should not be used with [PII](/docs/glossary/what-is-personally-identifiable-information-pii).
* The `TVOCallMessage` class and the `TVOCallMessageBuilder` class are introduced to represent the call messages.

Example of sending a call message:

```swift
let call = TwilioVoiceSDK.connect(options: connectOptions, delegate: self)

// wait for call to be connected

let message = "{ \"foo\": \"bar\", \"marco\": \"polo\" }"
let callMessage = CallMessage(content: message)

// voiceEventSid can be used for tracking the message
let voiceEventSid = call.sendMessage(callMessage)

extension ViewController: CallMessageDelegate {
    func callDidSendMessage(call: Call, voiceEventSid: String) {
        NSLog("Call message sent. Voice Event SID: \(voiceEventSid)")
    }

    func callDidFailToSendMessage(call: Call, voiceEventSid: String, error: Error) {
        NSLog("Failed to send call message. Voice Event SID: \(voiceEventSid). Error: \(error.localizedDescription)")
    }
}
```

Example of handling incoming call messages:

```swift
extension ViewController: CallMessageDelegate {

    func callDidReceiveMessage(call: Call, message callMessage: CallMessage) {
        NSLog("Call message received. Message: \(callMessage.content)")
    }

}
```

Size Impact for 6.5.0

| Architecture | Compressed Size | Uncompressed Size |
| ------------ | --------------- | ----------------- |
| arm64        | 3.2 MB          | 7.1 MB            |

***

## 6.4.2

July 11, 2022

* Programmable Voice iOS SDK 6.4.2 [\[XCFramework\]](https://github.com/twilio/twilio-voice-ios/releases/download/6.4.2/TwilioVoice.xcframework.zip) (checksum: caebcfde5540e6aefeab61edb5d131c55565eb72b690fc50e8201836f0c21735).

API Updates

* The `writable` property of the `TVOIceCandidatePairStats` class has been renamed to `writeable`.
* New edge `umatilla` is now supported. Set the `TwilioVoiceSDK.edge` property before connecting or accepting the call.

Bug Fixes

* Fixed a symbol conflict (`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            |

***

## 6.4.1

May 26, 2022

* Programmable Voice iOS SDK 6.4.1 [\[XCFramework\]](https://github.com/twilio/twilio-voice-ios/releases/download/6.4.1/TwilioVoice.xcframework.zip) (checksum: 16080af560c584f574d00c04af408e340253f814b583b7920a718d66ed5ea6dd
  ).

Bug Fixes

* Fixed a crash when the home region specifier (`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            |

***

## 6.4.0

May 3, 2022

* Programmable Voice iOS SDK 6.4.0 [\[XCFramework\]](https://github.com/twilio/twilio-voice-ios/releases/download/6.4.0/TwilioVoice.xcframework.zip) (checksum: 5bb8ab2aa8f9f2e91d243e64c5e850cdc0c1365f4bfc64a37532b0688d118770).

API updates

* The Voice iOS SDK now supports Twilio Regional by providing the home region specifier in the access token header when calling the `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](https://www.twilio.com/blog/expanded-data-protection-options-eu-schrems-ii#ongoing-updates-q4) or head over to our [developer docs](/docs/global-infrastructure) to get started.

Example of specifying home region in the access token using the [Twilio Node.js](https://github.com/twilio/twilio-node) SDK:

```bash
const accessToken = new twilio.jwt.AccessToken(
    credentials.accountSid,
    credentials.apiKeySid,
    credentials.apiKeySecret, {
      identity,
      ttl,
      region: 'au1',
    },
  );

```

The decoded header of your access token should looks like this:

```bash
{
  "alg": "HS256",
  "typ": "JWT",
  "cty": "twilio-fpa;v=1",
  "twr": "au1"
}
```

Maintenance

* Updated API doc of `[TVOCall getStatsWithBlock:]`.

Known Issues

* Using the Voice iOS SDK side by side with the WebRTC library will result in `RTCNativeAudioSessionDelegateAdapter` symbol conflict during compile time.

Size Impact for 6.4.0

| Architecture | Compressed Size | Uncompressed Size |
| ------------ | --------------- | ----------------- |
| arm64        | 3.2 MB          | 7.0 MB            |

***

## 6.3.1

February 8, 2022

* Programmable Voice iOS SDK 6.3.1 [\[XCFramework\]](https://github.com/twilio/twilio-voice-ios/releases/download/6.3.1/TwilioVoice.xcframework.zip) (checksum: 08e5839eb77d8746baff8b132059f0babfb9e1ed860903553b7d9c02411442af
  ).

Enhancements

* The Voice SDK now validates full remote domain names while setting up the TLS connection.

Known Issues

* Using the Voice iOS SDK side by side with the WebRTC library will result in `RTCNativeAudioSessionDelegateAdapter` symbol conflict during compile time.

Size Impact for 6.3.1

| Architecture | Compressed Size | Uncompressed Size |
| ------------ | --------------- | ----------------- |
| arm64        | 3.2 MB          | 7.0 MB            |

***

## 6.3.0

May 17, 2021

Enhancements

* This release is based on Chromium WebRTC 88.
* The simulator `arm64` architecture on Apple Silicon Macs is now available.
* The SDK uses Unified Plan SDP semantics instead of Plan-B.

Known Issues

* Carthage is not currently a supported distribution mechanism for Twilio Voice. Carthage does not currently work with `.xcframeworks` as documented [here](https://github.com/Carthage/Carthage/issues/2890). Once Carthage supports binary `.xcframeworks`, Carthage distribution will be re-added.
* Using the Voice iOS SDK side by side with the WebRTC library will result in `RTCNativeAudioSessionDelegateAdapter` symbol conflict during compile time.

Size Impact for 6.3.0

| Architecture | Compressed Size | Uncompressed Size |
| ------------ | --------------- | ----------------- |
| arm64        | 3.2 MB          | 7.1 MB            |

***

## 5.5.2

March 29, 2021

* Programmable Voice iOS SDK 5.5.2 [\[Carthage\]](/docs/voice/sdks/ios#carthage), [\[Cocoapods\]](/docs/voice/sdks/ios#cocoapods), [\[Dynamic Framework\]](https://github.com/twilio/twilio-voice-ios/releases/download/5.5.2/TwilioVoice.framework.zip), [\[Static Library\]](https://github.com/twilio/twilio-voice-ios/releases/download/5.5.2/libTwilioVoice.zip), [\[docs\]](https://twilio.github.io/twilio-voice-ios/docs/5.5.2/).

Bug Fixes

* Fixed a potential crash in the core module where the logger could be accessed after being destroyed by another thread. [#419](https://github.com/twilio/voice-quickstart-ios/issues/419)
* Fixed a bug where caller might not receive the `[TVOCallDelegate call:didDisconnectiWithError:]` callback when callee hangs up.
* Fixed a bug where callee was not receiving the `[TVONotificationDelegate cancelledCallInviteReceived:error:]` callback when signaling connection error happens.

Known Issues

* Using the Voice iOS SDK side by side with the WebRTC library will result in `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           |

***

## 6.2.2

March 11, 2021

Bug Fixes

* Fixed the SDK version number in the `Info.plist` file of the framework.
* Fixed a potential crash in the core module where the logger could be accessed after being destroyed by another thread. [#419](https://github.com/twilio/voice-quickstart-ios/issues/419)

Known Issues

* The `TwilioVoice.xcframework` does not currently support the simulator on Apple Silicon `arm64` Macs.
* Carthage is not currently a supported distribution mechanism for Twilio Voice. Carthage does not currently work with `.xcframeworks` as documented [here](https://github.com/Carthage/Carthage/issues/2890). Once Carthage supports binary `.xcframeworks`, Carthage distribution will be re-added.
* Using the Voice iOS SDK side by side with the WebRTC library will result in `RTCNativeAudioSessionDelegateAdapter` symbol conflict during compile time.

Size Impact for 6.2.2

| Architecture | Compressed Size | Uncompressed Size |
| ------------ | --------------- | ----------------- |
| arm64        | 3.1 MB          | 7.0 MB            |

***

## 6.2.1

February 4, 2021

Bug Fixes

* Fixed platform version in podspecs.

Known Issues

* The `TwilioVoice.xcframework` does not currently support the simulator on Apple Silicon `arm64` Macs.
* Carthage is not currently a supported distribution mechanism for Twilio Voice. Carthage does not currently work with `.xcframeworks` as documented [here](https://github.com/Carthage/Carthage/issues/2890). Once Carthage supports binary `.xcframeworks`, Carthage distribution will be re-added.
* Using the Voice iOS SDK side by side with the WebRTC library will result in `RTCNativeAudioSessionDelegateAdapter` symbol conflict during compile time.

Size Impact for 6.2.1

| Architecture | Compressed Size | Uncompressed Size |
| ------------ | --------------- | ----------------- |
| arm64        | 3.1 MB          | 7.0 MB            |

***

## 6.2.0

February 1, 2021

Enhancements

* The Voice iOS SDK is built with Xcode 12.0.
* Twilio Voice is now delivered as an `.xcframework`. The `.xcframework` package includes the `.dSYM` and `.bcsymbolmap` files to allow developers to symbolicate crash reports.
* Twilio Voice is now distributed as a Swift Package.

Known Issues

* The `TwilioVoice.xcframework` does not currently support the simulator on Apple Silicon `arm64` Macs.
* Carthage is not currently a supported distribution mechanism for Twilio Voice. Carthage does not currently work with `.xcframeworks` as documented [here](https://github.com/Carthage/Carthage/issues/2890). Once Carthage supports binary `.xcframeworks`, Carthage distribution will be re-added.
* Using the Voice iOS SDK side by side with the WebRTC library will result in `RTCNativeAudioSessionDelegateAdapter` symbol conflict during compile time.

Size Impact for 6.2.0

| Architecture | Compressed Size | Uncompressed Size |
| ------------ | --------------- | ----------------- |
| arm64        | 3.1 MB          | 7.0 MB            |

***

## 6.1.0

January 7, 2021

* Programmable Voice iOS SDK 6.1.0 [\[Carthage\]](/docs/voice/sdks/ios#carthage), [\[Cocoapods\]](/docs/voice/sdks/ios#cocoapods), [\[Dynamic Framework\]](https://github.com/twilio/twilio-voice-ios/releases/download/6.1.0/TwilioVoice.framework.zip), [\[Static Library\]](https://github.com/twilio/twilio-voice-ios/releases/download/6.1.0/libTwilioVoice.zip), [\[docs\]](https://twilio.github.io/twilio-voice-ios/docs/6.1.0/).

Enhancements

* Private IP addresses are masked in Release mode for the SDK logs and the `ice-candidate` Insights event payload.
* Private IP addresses will not be masked in `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

* Fixed a bug where caller might not receive the `call:didDisconnectWithError:` callback when the callee hangs up.
* Fixed a bug where callee was not receiving the `cancelledCallInviteReceived:error:` callback when signaling connection error happens.
* The Voice SDK had the same `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

* Using the Voice iOS SDK side by side with the WebRTC library will result in `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           |

***

## 6.0.2

November 4, 2020

* Programmable Voice iOS SDK 6.0.2 [\[Carthage\]](/docs/voice/sdks/ios#carthage), [\[Cocoapods\]](/docs/voice/sdks/ios#cocoapods), [\[Dynamic Framework\]](https://github.com/twilio/twilio-voice-ios/releases/download/6.0.2/TwilioVoice.framework.zip), [\[Static Library\]](https://github.com/twilio/twilio-voice-ios/releases/download/6.0.2/libTwilioVoice.zip), [\[docs\]](https://twilio.github.io/twilio-voice-ios/docs/6.0.2/).

Bug fixes

* Fixed Swift compile time error for `AudioDeviceWorkerBlock`.

Known Issues

* Using the Voice iOS SDK side by side with the WebRTC library will result in `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           |

***

## 6.0.1

November 2, 2020

* Programmable Voice iOS SDK 6.0.1 [\[Carthage\]](/docs/voice/sdks/ios#carthage), [\[Cocoapods\]](/docs/voice/sdks/ios#cocoapods), [\[Dynamic Framework\]](https://github.com/twilio/twilio-voice-ios/releases/download/6.0.1/TwilioVoice.framework.zip), [\[Static Library\]](https://github.com/twilio/twilio-voice-ios/releases/download/6.0.1/libTwilioVoice.zip), [\[docs\]](https://twilio.github.io/twilio-voice-ios/docs/6.0.1/).

Bug fixes

* Fixed Swift compile time error for `AudioDeviceContext`.

Known Issues

* Using the Voice iOS SDK side by side with the WebRTC library will result in `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           |

***

## 6.0.0

September 15, 2020

* Programmable Voice iOS SDK 6.0.0 [\[Carthage\]](/docs/voice/sdks/ios#carthage), [\[Cocoapods\]](/docs/voice/sdks/ios#cocoapods), [\[Dynamic Framework\]](https://github.com/twilio/twilio-voice-ios/releases/download/6.0.0/TwilioVoice.framework.zip), [\[Static Library\]](https://github.com/twilio/twilio-voice-ios/releases/download/6.0.0/libTwilioVoice.zip), [\[docs\]](https://twilio.github.io/twilio-voice-ios/docs/6.0.0/).

API change

* The Voice SDK has been updated for better Swift interoperability.
  * The `TVO` prefix has been removed from all Twilio Voice types
  * Many of the delegate function declarations have been revamped for better clarity of their intent
  * Some of the class method declarations have been revamped for better clarity of their intent
* This release has improved API for CallKit integration. In order to use CallKit with SDK, you must set `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:]`.

```swift
    func provider(_ provider: CXProvider, didActivate audioSession: AVAudioSession) {
      audioDevice.isEnabled = true
    }

    func provider(_ provider: CXProvider, didDeactivate audioSession: AVAudioSession) {
      audioDevice.isEnabled = false
    }

    func providerDidReset(_ provider: CXProvider) {
      audioDevice.isEnabled = false
    }
```

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`.

* The `uuid` property of `TVOCall` is now optional.
* This release changes the underlying behavior of `[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.
* In this release, `[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.
* Defined new error code

| Error Codes | ErrorCode                            | Error Message                                         |
| ----------- | ------------------------------------ | ----------------------------------------------------- |
| 53407       | TVOMediaDtlsTransportFailedErrorCode | Media connection failed due to DTLS handshake failure |

* PeerConnection state is now reported to Insights

| 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       |

* Removed the deprecated property `TwilioVoice.region`. Use `TwilioVoice.edge` to control the connectivity with Twilio.
* The `[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

* This release is based on Chromium WebRTC 83.
* TwilioVoice.framework is now built with Xcode 11.4.1
* A new Insights event `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

* Added a security patch to prevent host candidate DNS attacks. See [Issue 11597](https://bugs.chromium.org/p/webrtc/issues/detail?id=11597) for details.

Bug fixes

* Fixed a crash when processing of empty stats reports or stats reports without remote audio tracks.

Known Issues

* Using the Voice iOS SDK side by side with the WebRTC library will result in `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           |

***

## 5.5.1

September 15, 2020

* Programmable Voice iOS SDK 5.5.1 [\[Carthage\]](/docs/voice/sdks/ios#carthage), [\[Cocoapods\]](/docs/voice/sdks/ios#cocoapods), [\[Dynamic Framework\]](https://github.com/twilio/twilio-voice-ios/releases/download/5.5.1/TwilioVoice.framework.zip), [\[Static Library\]](https://github.com/twilio/twilio-voice-ios/releases/download/5.5.1/libTwilioVoice.zip), [\[docs\]](https://twilio.github.io/twilio-voice-ios/docs/5.5.1/).

Bug Fixes

* Fixed the background task handling in `[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.
* Fixed a crash when processing of empty stats reports or stats reports without remote audio tracks.

Known Issues

* Using the Voice iOS SDK side by side with the WebRTC library will result in `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           |

***

## 5.5.0

July 9, 2020

* Programmable Voice iOS SDK 5.5.0 [\[Carthage\]](/docs/voice/sdks/ios#carthage), [\[Cocoapods\]](/docs/voice/sdks/ios#cocoapods), [\[Dynamic Framework\]](https://github.com/twilio/twilio-voice-ios/releases/download/5.5.0/TwilioVoice.framework.zip), [\[Static Library\]](https://github.com/twilio/twilio-voice-ios/releases/download/5.5.0/libTwilioVoice.zip), [\[docs\]](https://twilio.github.io/twilio-voice-ios/docs/5.5.0/).

API Change

* A `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](/docs/voice/trusted-calling-with-shakenstir).
* New property `callerInfo` in `TVOCallInvite` returns the `TVOCallerInfo` object to represent the information about the caller.

Known Issues

* Using the Voice iOS SDK side by side with the WebRTC library will result in `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           |

***

## 5.4.1

June 25, 2020

* Programmable Voice iOS SDK 5.4.1 [\[Carthage\]](/docs/voice/sdks/ios#carthage), [\[Cocoapods\]](/docs/voice/sdks/ios#cocoapods), [\[Dynamic Framework\]](https://github.com/twilio/twilio-voice-ios/releases/download/5.4.1/TwilioVoice.framework.zip), [\[Static Library\]](https://github.com/twilio/twilio-voice-ios/releases/download/5.4.1/libTwilioVoice.zip), [\[docs\]](https://twilio.github.io/twilio-voice-ios/docs/5.4.1/).

Bug Fixes

* Fixed a crash that could occur when destroying the `TVOCall` or `TVOCallInvite` object.

Known Issues

* Using the Voice iOS SDK side by side with the WebRTC library will result in `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           |

***

## 5.4.0

June 3, 2020

* Programmable Voice iOS SDK 5.4.0 [\[Carthage\]](/docs/voice/sdks/ios#carthage), [\[Cocoapods\]](/docs/voice/sdks/ios#cocoapods), [\[Dynamic Framework\]](https://github.com/twilio/twilio-voice-ios/releases/download/5.4.0/TwilioVoice.framework.zip), [\[Static Library\]](https://github.com/twilio/twilio-voice-ios/releases/download/5.4.0/libTwilioVoice.zip), [\[docs\]](https://twilio.github.io/twilio-voice-ios/docs/5.4.0/).

API Change

* This release includes support for the expansion of Twilio's Global Infrastructure via Edge Locations which allows customers to control their connectivity into and out of Twilio's platform. The Voice iOS SDK uses these Edges to connect to Twilio's infrastructure via the new property `TwilioVoice.edge`. This new property supersedes the now deprecated `TwilioVoice.region`. See the [new Edge names](/docs/voice/sdks/javascript/edges) and how they map to the old region names.

Here is an example

```swift
  // Connect using global low latency
  TwilioVoice.edge = "roaming"
```

* This release also adds the Mean Opinion Score (MOS) measurement `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](https://twilio.github.io/twilio-voice-ios/docs/latest/Classes/TVORemoteAudioTrackStats.html#//api/name/mos) for more information

Example

```swift
  call.getStatsWith { (reports) in
      for report in reports {
          let remoteAudioTracksStats = report.remoteAudioTrackStats
          let mosLabel = "\(remoteAudioTracksStats.mos)"
      }
  }
```

Enhancements

* Network degradation warnings were previously only logged to [Insights](/docs/voice/voice-insights/api/call/details-sdk-call-quality-events#error-and-warning-events). With this release, a new `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](https://twilio.github.io/twilio-voice-ios/docs/5.4.0/Protocols/TVOCallDelegate.html#//api/name/call:didReceiveQualityWarnings:previousWarnings:) and [callQualityWarnings](https://twilio.github.io/twilio-voice-ios/docs/5.4.0/Classes/TVOCall.html#//api/name/callQualityWarnings) for more information.
* The [Mean Opinion Score (MOS)](/docs/glossary/what-is-mean-opinion-score-mos) is now available in `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.
* By default ICE gathering is done on all interfaces except some VPN type interfaces. This makes it impossible to connect to Twilio in networks that require the use of VPN. In this release, the new Boolean property `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](https://twilio.github.io/twilio-voice-ios/docs/5.4.0/Classes/TVOCallOptions.html#//api/name/enableIceGatheringOnAnyAddressPorts) for more information.

Deprecations

* `TwilioVoice.region` is now deprecated. Use `TwilioVoice.edge` instead. See the [new Edge names](/docs/voice/sdks/javascript/edges) for possible values.

Bug Fixes

* Fixed a bug where the SDK was still raising the `[TVOCallDelegate callDidStartRinging:]` callback if `[TVOCall disconnect]` was called.
* Fixed a crash caused by a signaling race condition when user rejects a `TVOCallInvite`.

Other

* `armv7` builds are no longer available or supported.

Known Issues

* Using the Voice iOS SDK side by side with the WebRTC library will result in `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           |

***

## 5.3.1

April 9, 2020

* Programmable Voice iOS SDK 5.3.1 [\[Carthage\]](/docs/voice/sdks/ios#carthage), [\[Cocoapods\]](/docs/voice/sdks/ios#cocoapods), [\[Dynamic Framework\]](https://github.com/twilio/twilio-voice-ios/releases/download/5.3.1/TwilioVoice.framework.zip), [\[Static Library\]](https://github.com/twilio/twilio-voice-ios/releases/download/5.3.1/libTwilioVoice.zip), [\[docs\]](https://twilio.github.io/twilio-voice-ios/docs/5.3.1/).

Improvements

* Optimized `[TwilioVoice unregisterWithAccessToken:deviceTokenData:completion:]` by reducing the number of network requests.
* Added background handling support to `[TwilioVoice registerWithAccessToken:deviceTokenData:completion:]` and `[TwilioVoice unregisterWithAccessToken:deviceTokenData:completion:]`. They will now finish execution even when the app is backgrounded.

Known Issues

* Using the Voice iOS SDK side by side with the WebRTC library will result in `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           |

***

## 5.3.0

March 18, 2020

* Programmable Voice iOS SDK 5.3.0 [\[Carthage\]](/docs/voice/sdks/ios#carthage), [\[Cocoapods\]](/docs/voice/sdks/ios#cocoapods), [\[Dynamic Framework\]](https://github.com/twilio/twilio-voice-ios/releases/download/5.3.0/TwilioVoice.framework.zip), [\[Static Library\]](https://github.com/twilio/twilio-voice-ios/releases/download/5.3.0/libTwilioVoice.zip), [\[docs\]](https://twilio.github.io/twilio-voice-ios/docs/5.3.0/).

API Changes

* New methods to register and unregister for VoIP push notifications have been added that rely on `NSData` rather than `NSString`. The previous register and unregister methods have been deprecated in favor of these new methods.

```bash
// TwilioVoice.h

+ (void)registerWithAccessToken:(nonnull NSString *)accessToken
                deviceTokenData:(nonnull NSData *)deviceTokenData
                     completion:(nullable void(^)(NSError * __nullable error))completion
NS_SWIFT_NAME(register(withAccessToken\:deviceToken\:completion:));

+ (void)unregisterWithAccessToken:(nonnull NSString *)accessToken
                  deviceTokenData:(nonnull NSData *)deviceTokenData
                       completion:(nullable void(^)(NSError * __nullable error))completion
NS_SWIFT_NAME(unregister(withAccessToken\:deviceToken\:completion:));
```

Swift example

```swift
  func pushRegistry(_ registry: PKPushRegistry, didUpdate credentials: PKPushCredentials, for type: PKPushType) {
      TwilioVoice.register(withAccessToken: accessToken, deviceToken: credentials.token) { (error) in
          if let error = error {
              NSLog("An error occurred while registering: \(error.localizedDescription)")
          } else {
              NSLog("Successfully registered for VoIP push notifications.")
          }
      }
  }
```

Objective-C example

```objc
- (void)pushRegistry:(PKPushRegistry *)registry
didUpdatePushCredentials:(PKPushCredentials *)credentials
             forType:(NSString *)type {
    [TwilioVoice registerWithAccessToken:accessToken
                         deviceTokenData:credentials.token
                              completion:^(NSError *error) {
        if (error) {
            NSLog(@"An error occurred while registering: %@", [error localizedDescription]);
        } else {
            NSLog(@"Successfully registered for VoIP push notifications.");
        }
    }];
}
```

Bug Fixes

* Fixed Voice Insights data with valid `transport_id` value.

Known Issues

* Using the Voice iOS SDK side by side with the WebRTC library will result in `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           |

***

## 5.2.1

March 11, 2020

* Programmable Voice iOS SDK 5.2.1 [\[Carthage\]](/docs/voice/sdks/ios#carthage), [\[Cocoapods\]](/docs/voice/sdks/ios#cocoapods), [\[Dynamic Framework\]](https://github.com/twilio/twilio-voice-ios/releases/download/5.2.1/TwilioVoice.framework.zip), [\[Static Library\]](https://github.com/twilio/twilio-voice-ios/releases/download/5.2.1/libTwilioVoice.zip), [\[docs\]](https://twilio.github.io/twilio-voice-ios/docs/5.2.1/).

Bug Fixes

* Fixed duplicated symbol linker errors in the static library.

Known Issues

* Using the Voice iOS SDK side by side with the WebRTC library will result in `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           |

***

## 5.2.0

February 27, 2020

* Programmable Voice iOS SDK 5.2.0 [\[Carthage\]](/docs/voice/sdks/ios#carthage), [\[Cocoapods\]](/docs/voice/sdks/ios#cocoapods), [\[Dynamic Framework\]](https://github.com/twilio/twilio-voice-ios/releases/download/5.2.0/TwilioVoice.framework.zip), [\[Static Library\]](https://github.com/twilio/twilio-voice-ios/releases/download/5.2.0/libTwilioVoice.zip), [\[docs\]](https://twilio.github.io/twilio-voice-ios/docs/5.2.0/).

Enhancements

* Attempts to re-establish the media connection will be done preemptively if no media flow is detected for 3 seconds.
* An ongoing call will automatically switch to a more preferred network type if one becomes available. The following are the network types listed in preferred order: ETHERNET, LOOPBACK, WIFI, VPN, and CELLULAR. For example, if a WIFI network becomes available whilst in a call that is using CELLULAR data, the call will automatically switch to using the WIFI network.
* Proper data types are added to the Insights event payload.

Bug Fixes

* Fixed a crash when a canceled call invite is received but the `from` value is `nil`.

Things to Note

* Since media and signaling reconnect are two completely separate processes, it is likely that for a single network change event multiple `[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

* Using the Voice iOS SDK side by side with the WebRTC library will result in `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           |

***

## 5.1.2

February 24, 2020

* Programmable Voice iOS SDK 5.1.2 [\[Carthage\]](/docs/voice/sdks/ios#carthage), [\[Cocoapods\]](/docs/voice/sdks/ios#cocoapods), [\[Dynamic Framework\]](https://github.com/twilio/twilio-voice-ios/releases/download/5.1.2/TwilioVoice.framework.zip), [\[Static Library\]](https://github.com/twilio/twilio-voice-ios/releases/download/5.1.2/libTwilioVoice.zip), [\[docs\]](https://twilio.github.io/twilio-voice-ios/docs/5.1.2/).

Bug Fixes

* Fixed a crash when a canceled call invite is received and the `from` value is `nil`.

Known Issues

* Using the Voice iOS SDK side by side with the WebRTC library will result in `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           |

***

## 5.1.1

December 9, 2019

* Programmable Voice iOS SDK 5.1.1 [\[Carthage\]](/docs/voice/sdks/ios#carthage), [\[Cocoapods\]](/docs/voice/sdks/ios#cocoapods), [\[Dynamic Framework\]](https://github.com/twilio/twilio-voice-ios/releases/download/5.1.1/TwilioVoice.framework.zip), [\[Static Library\]](https://github.com/twilio/twilio-voice-ios/releases/download/5.1.1/libTwilioVoice.zip), [\[docs\]](https://twilio.github.io/twilio-voice-ios/docs/5.1.1/).

Enhancements

* Application name, bundle ID, version, build number, Xcode version and min/major SDK version are now published to Insights. This helps with isolating problems if an issue is encountered.

Known Issues

* Using the Voice iOS SDK side by side with the WebRTC library will result in `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           |

***

## 5.1.0

November 19, 2019

* Programmable Voice iOS SDK 5.1.0 [\[Carthage\]](/docs/voice/sdks/ios#carthage), [\[Cocoapods\]](/docs/voice/sdks/ios#cocoapods), [\[Dynamic Framework\]](https://github.com/twilio/twilio-voice-ios/releases/download/5.1.0/TwilioVoice.framework.zip), [\[Static Library\]](https://github.com/twilio/twilio-voice-ios/releases/download/5.1.0/libTwilioVoice.zip), [\[docs\]](https://twilio.github.io/twilio-voice-ios/docs/5.1.0/).

Enhancements

* Incoming call handling improvements. Previously, if we encountered network issues before an incoming call was answered or rejected, we disconnected the call. With this release, we will continue to try and establish a connection to Twilio for a maximum of 40 seconds before we disconnect the call.
* We added support for OpenSSL 1.1.x in the static library version of our SDK. To use this flavor of the SDK, please refer to the instructions included in the [Static Library](https://github.com/twilio/twilio-voice-ios/releases/download/5.1.0/libTwilioVoice.zip)
* We now publish the negotiated codec and its associated parameters to Insights.

| Event Group | Level | Event Name | Description                             |
| ----------- | ----- | ---------- | --------------------------------------- |
| settings    | INFO  | codec      | Raised when the codec has been selected |

Other Improvements

* Improved the way we perform DNS resolution. Previously, some DNS requests could indirectly block the main thread. This is no longer the case.
* `listening-error` event level was incorrectly reported as INFO instead of ERROR to `insights`.

Deprecated

* Removed support for the iOS i386 architecture (32-bit iOS Simulator)

Known Issues

* Using the Voice iOS SDK side by side with the WebRTC library will result in `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           |

***

## 5.0.0

September 19, 2019

* Programmable Voice iOS SDK 5.0.0 [\[Carthage\]](/docs/voice/sdks/ios#carthage), [\[Cocoapods\]](/docs/voice/sdks/ios#cocoapods), [\[Dynamic Framework\]](https://github.com/twilio/twilio-voice-ios/releases/download/5.0.0/TwilioVoice.framework.zip), [\[Static Library\]](https://github.com/twilio/twilio-voice-ios/releases/download/5.0.0/libTwilioVoice.zip), [\[docs\]](https://twilio.github.io/twilio-voice-ios/docs/5.0.0/).

#### iOS 13 & Xcode 11 Support

This release adds support for the new [PushKit push notification policy](https://developer.apple.com/documentation/pushkit/pkpushregistrydelegate/2875784-pushregistry) that iOS 13 and Xcode 11 introduced. To upgrade your application please follow the [migration guide](https://github.com/twilio/twilio-voice-ios/blob/Releases/iOS-13-Migration-Guide.md).

**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**

* Starting with 5.0.0, when `[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:
  * The call is prematurely disconnected by the caller.
  * The callee does not accept or reject the call in approximately 30 seconds.
  * The Voice SDK is unable to establish a connection to Twilio.
    You must retain the `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.
  * When a "call" notification is received, the Voice SDK will fire the `[TVONotificationDelegate callInviteReceived:]` callback synchronously.
  * When a "cancel" notification is received, the method will return `false`.
* `[TVONotificationDelegate cancelledCallInviteReceived:]` is now `[TVONotificationDelegate cancelledCallInviteReceived:error:]`
  * The `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.
* The property `enableInsights` has been renamed to `insights` and moved from `TVOCallOptions.h` to `TwilioVoice.h`.
* The property `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.
* Class method `[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

* Using the Voice iOS SDK side by side with the WebRTC library will result in `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           |

***

## 4.3.0

August 19, 2019

* Programmable Voice iOS SDK 4.3.0 [\[Carthage\]](/docs/voice/sdks/ios#carthage), [\[Cocoapods\]](/docs/voice/sdks/ios#cocoapods), [\[Dynamic Framework\]](https://github.com/twilio/twilio-voice-ios/releases/download/4.3.0/TwilioVoice.framework.zip), [\[Static Library\]](https://github.com/twilio/twilio-voice-ios/releases/download/4.3.0/libTwilioVoice.zip), [\[docs\]](https://twilio.github.io/twilio-voice-ios/docs/4.3.0/).

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:

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

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

```swift
// 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](https://twilio.github.io/twilio-voice-ios/docs/4.3.0/).

Known Issues

* Using the Voice iOS SDK side by side with the WebRTC library will result in `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           |

***

## 4.2.1

August 8, 2019

* Programmable Voice iOS SDK 4.2.1 [\[Carthage\]](/docs/voice/sdks/ios#carthage), [\[Cocoapods\]](/docs/voice/sdks/ios#cocoapods), [\[Dynamic Framework\]](https://github.com/twilio/twilio-voice-ios/releases/download/4.2.1/TwilioVoice.framework.zip), [\[Static Library\]](https://github.com/twilio/twilio-voice-ios/releases/download/4.2.1/libTwilioVoice.zip), [\[docs\]](https://twilio.github.io/twilio-voice-ios/docs/4.2.1/).

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](/docs/stun-turn).
* Using the Voice iOS SDK side by side with the WebRTC library will result in `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           |

***

## 4.2.0

August 7, 2019

* Programmable Voice iOS SDK 4.2.0 [\[Carthage\]](/docs/voice/sdks/ios#carthage), [\[Cocoapods\]](/docs/voice/sdks/ios#cocoapods), [\[Dynamic Framework\]](https://github.com/twilio/twilio-voice-ios/releases/download/4.2.0/TwilioVoice.framework.zip), [\[Static Library\]](https://github.com/twilio/twilio-voice-ios/releases/download/4.2.0/libTwilioVoice.zip), [\[docs\]](https://twilio.github.io/twilio-voice-ios/docs/4.2.0/).

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](https://twilio.github.io/twilio-voice-ios/docs/4.2.0/Classes/TVOCancelledCallInvite.html#//api/name/customParameters)

Pass custom parameters in TwiML

```xml
  <?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`:

```objc
  {
    "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](/docs/stun-turn).
* Using the Voice iOS SDK side by side with the WebRTC library will result in `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           |

***

## 4.1.0

July 15, 2019

* Programmable Voice iOS SDK 4.1.0 [\[Carthage\]](/docs/voice/sdks/ios#carthage), [\[Cocoapods\]](/docs/voice/sdks/ios#cocoapods), [\[Dynamic Framework\]](https://github.com/twilio/twilio-voice-ios/releases/download/4.1.0/TwilioVoice.framework.zip), [\[Static Library\]](https://github.com/twilio/twilio-voice-ios/releases/download/4.1.0/libTwilioVoice.zip), [\[docs\]](https://twilio.github.io/twilio-voice-ios/docs/4.1.0/).

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](https://tools.ietf.org/html/rfc7587#section-7.1) for information about Max Average Bitrate.

The main purpose of this API is to set a lower max average bitrate to minimize 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](https://twilio.github.io/twilio-voice-ios/docs/latest/Classes/TVOOpusCodec.html) 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:

```swift
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](https://www.twilio.com/en-us/voice/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](/docs/stun-turn).
* Using the Voice iOS SDK side by side with the WebRTC library will result in `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           |

## 4.0.0

June 28, 2019

* Programmable Voice iOS SDK 4.0.0 [\[Carthage\]](/docs/voice/sdks/ios#carthage), [\[Cocoapods\]](/docs/voice/sdks/ios#cocoapods), [\[Dynamic Framework\]](https://github.com/twilio/twilio-voice-ios/releases/download/4.0.0/TwilioVoice.framework.zip), [\[Static Library\]](https://github.com/twilio/twilio-voice-ios/releases/download/4.0.0/libTwilioVoice.zip), [\[docs\]](https://twilio.github.io/twilio-voice-ios/docs/4.0.0/).

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](https://github.com/twilio/voice-quickstart-swift/blob/master/Docs/migration-guide-3.x-4.x.md) for more information about migrating from 3.x.

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](/docs/stun-turn).
* Using the Voice iOS SDK side by side with the WebRTC library will result in `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           |

***

## 3.1.1

June 6, 2019

* Programmable Voice iOS SDK 3.1.1 [\[Carthage\]](/docs/voice/sdks/ios#carthage), [\[Cocoapods\]](/docs/voice/sdks/ios#cocoapods), [\[Dynamic Framework\]](https://media.twiliocdn.com/sdk/ios/voice/releases/3.1.1/twilio-voice-ios-3.1.1.tar.bz2), [\[Static Library\]](https://media.twiliocdn.com/sdk/ios/voice/releases/3.1.1/twilio-voice-ios-static-3.1.1.tar.bz2), [\[docs\]](https://media.twiliocdn.com/sdk/ios/voice/releases/3.1.1/docs/).

Bug Fixes

* CLIENT-6220 Fixed an issue where an `NSInvalidArgumentException` exception is raised while connecting a call. [#13](https://github.com/twilio/twilio-voice-ios/issues/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](/docs/stun-turn).
* Using the Voice iOS SDK side by side with the WebRTC library will result in `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           |

***

## 3.1.0

May 16, 2019

* Programmable Voice iOS SDK 3.1.0 [\[Carthage\]](/docs/voice/sdks/ios#carthage), [\[Cocoapods\]](/docs/voice/sdks/ios#cocoapods), [\[Dynamic Framework\]](https://media.twiliocdn.com/sdk/ios/voice/releases/3.1.0/twilio-voice-ios-3.1.0.tar.bz2), [\[Static Library\]](https://media.twiliocdn.com/sdk/ios/voice/releases/3.1.0/twilio-voice-ios-static-3.1.0.tar.bz2), [\[docs\]](https://media.twiliocdn.com/sdk/ios/voice/releases/3.1.0/docs/).

Enhancements

Improved error codes

We now surface more details about errors encountered during [\[TwilioVoice registerWithAccessToken:deviceToken:completion:\]](https://media.twiliocdn.com/sdk/ios/voice/releases/3.1.0/docs/Classes/TwilioVoice.html#//api/name/registerWithAccessToken:deviceToken:completion:), [\[TwilioVoice unregisterWithAccessToken:deviceToken:completion:\]](https://media.twiliocdn.com/sdk/ios/voice/releases/3.1.0/docs/Classes/TwilioVoice.html#//api/name/unregisterWithAccessToken:deviceToken:completion:), [\[TwilioVoice connectWithOptions:delegate:\]](https://media.twiliocdn.com/sdk/ios/voice/releases/3.1.0/docs/Classes/TwilioVoice.html#//api/name/connectWithAccessToken:delegate:), and [\[TVOCallInvite acceptWithOptions:delegate:\]](https://media.twiliocdn.com/sdk/ios/voice/releases/3.1.0/docs/Classes/TVOCallInvite.html#//api/name/acceptWithDelegate:). 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](https://media.twiliocdn.com/sdk/ios/voice/releases/3.1.0/docs/index.html)

The following is a summary of the new codes available for [\[TwilioVoice registerWithAccessToken:deviceToken:completion:\]](https://media.twiliocdn.com/sdk/ios/voice/releases/3.1.0/docs/Classes/TwilioVoice.html#//api/name/registerWithAccessToken:deviceToken:completion:), [\[TwilioVoice unregisterWithAccessToken:deviceToken:completion:\]](https://media.twiliocdn.com/sdk/ios/voice/releases/3.1.0/docs/Classes/TwilioVoice.html#//api/name/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](/docs/stun-turn).
* Using the Voice iOS SDK side by side with the WebRTC library will result in `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           |

***

## 3.0.0

April 25, 2019

* Programmable Voice iOS SDK 3.0.0 [\[Carthage\]](/docs/voice/sdks/ios#carthage), [\[Cocoapods\]](/docs/voice/sdks/ios#cocoapods), [\[Dynamic Framework\]](https://media.twiliocdn.com/sdk/ios/voice/releases/3.0.0/twilio-voice-ios-3.0.0.tar.bz2), [\[Static Library\]](https://media.twiliocdn.com/sdk/ios/voice/releases/3.0.0/twilio-voice-ios-static-3.0.0.tar.bz2), [\[docs\]](https://media.twiliocdn.com/sdk/ios/voice/releases/3.0.0/docs/).

We have promoted `3.0.0-beta13` to `3.0.0`. Reference our [migration guide](https://github.com/twilio/voice-quickstart-swift/blob/master/Docs/migration-guide-2.x-3.x.md) 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](/docs/stun-turn).
* Using the Voice iOS SDK side by side with the WebRTC library will result in `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           |

***

#### 3.0.0-beta13

April 18, 2019

* Programmable Voice iOS SDK 3.0.0-beta13 [\[Carthage\]](/docs/voice/sdks/ios#carthage), [\[Cocoapods\]](/docs/voice/sdks/ios#cocoapods), [\[Dynamic Framework\]](https://media.twiliocdn.com/sdk/ios/voice/releases/3.0.0-beta13/twilio-voice-ios-3.0.0-beta13.tar.bz2), [\[Static Library\]](https://media.twiliocdn.com/sdk/ios/voice/releases/3.0.0-beta13/twilio-voice-ios-static-3.0.0-beta13.tar.bz2), [\[docs\]](https://media.twiliocdn.com/sdk/ios/voice/releases/3.0.0-beta13/docs/).

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](/docs/stun-turn).
* Using the Voice iOS SDK side by side with the WebRTC library will result in `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           |

***

#### 3.0.0-beta12

April 17, 2019

* Programmable Voice iOS SDK 3.0.0-beta12 [\[Carthage\]](/docs/voice/sdks/ios#carthage), [\[Cocoapods\]](/docs/voice/sdks/ios#cocoapods), [\[Dynamic Framework\]](https://media.twiliocdn.com/sdk/ios/voice/releases/3.0.0-beta12/twilio-voice-ios-3.0.0-beta12.tar.bz2), [\[Static Library\]](https://media.twiliocdn.com/sdk/ios/voice/releases/3.0.0-beta12/twilio-voice-ios-static-3.0.0-beta12.tar.bz2), [\[docs\]](https://media.twiliocdn.com/sdk/ios/voice/releases/3.0.0-beta12/docs/).

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](/docs/stun-turn).
* Using the Voice iOS SDK side by side with the WebRTC library will result in `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           |

***

#### 3.0.0-beta11

April 4, 2019

* Programmable Voice iOS SDK 3.0.0-beta11 [\[Carthage\]](/docs/voice/sdks/ios#carthage), [\[Cocoapods\]](/docs/voice/sdks/ios#cocoapods), [\[Dynamic Framework\]](https://media.twiliocdn.com/sdk/ios/voice/releases/3.0.0-beta11/twilio-voice-ios-3.0.0-beta11.tar.bz2), [\[Static Library\]](https://media.twiliocdn.com/sdk/ios/voice/releases/3.0.0-beta11/twilio-voice-ios-static-3.0.0-beta11.tar.bz2), [\[docs\]](https://media.twiliocdn.com/sdk/ios/voice/releases/3.0.0-beta11/docs/).

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](/docs/stun-turn).
* Using the Voice iOS SDK side by side with the WebRTC library will result in `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           |

***

#### 3.0.0-beta10

April 2, 2019

* Programmable Voice iOS SDK 3.0.0-beta10 [\[Carthage\]](/docs/voice/sdks/ios#carthage), [\[Cocoapods\]](/docs/voice/sdks/ios#cocoapods), [\[Dynamic Framework\]](https://media.twiliocdn.com/sdk/ios/voice/releases/3.0.0-beta10/twilio-voice-ios-3.0.0-beta10.tar.bz2), [\[Static Library\]](https://media.twiliocdn.com/sdk/ios/voice/releases/3.0.0-beta10/twilio-voice-ios-static-3.0.0-beta10.tar.bz2), [\[docs\]](https://media.twiliocdn.com/sdk/ios/voice/releases/3.0.0-beta10/docs/).

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](/docs/stun-turn).
* Using the Voice iOS SDK side by side with the WebRTC library will result in `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           |

***

#### 3.0.0-beta9

March 27, 2019

* Programmable Voice iOS SDK 3.0.0-beta9 [\[Carthage\]](/docs/voice/sdks/ios#carthage), [\[Cocoapods\]](/docs/voice/sdks/ios#cocoapods), [\[Dynamic Framework\]](https://media.twiliocdn.com/sdk/ios/voice/releases/3.0.0-beta9/twilio-voice-ios-3.0.0-beta9.tar.bz2), [\[Static Library\]](https://media.twiliocdn.com/sdk/ios/voice/releases/3.0.0-beta9/twilio-voice-ios-static-3.0.0-beta9.tar.bz2), [\[docs\]](https://media.twiliocdn.com/sdk/ios/voice/releases/3.0.0-beta9/docs/).

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](/docs/stun-turn).
* CLIENT-5882 Call metrics insights becomes unavailable after a network handover during a call.
* Using the Voice iOS SDK side by side with the WebRTC library will result in `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           |

***

#### 3.0.0-beta8

March 20, 2019

* Programmable Voice iOS SDK 3.0.0-beta8 [\[Carthage\]](/docs/voice/sdks/ios#carthage), [\[Cocoapods\]](/docs/voice/sdks/ios#cocoapods), [\[Dynamic Framework\]](https://media.twiliocdn.com/sdk/ios/voice/releases/3.0.0-beta8/twilio-voice-ios-3.0.0-beta8.tar.bz2), [\[Static Library\]](https://media.twiliocdn.com/sdk/ios/voice/releases/3.0.0-beta8/twilio-voice-ios-static-3.0.0-beta8.tar.bz2), [\[docs\]](https://media.twiliocdn.com/sdk/ios/voice/releases/3.0.0-beta8/docs/).

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](/docs/stun-turn).
* 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.
* Using the Voice iOS SDK side by side with the WebRTC library will result in `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           |

***

#### 3.0.0-beta7

March 19, 2019

* Programmable Voice iOS SDK 3.0.0-beta7 [\[Carthage\]](/docs/voice/sdks/ios#carthage), [\[Cocoapods\]](/docs/voice/sdks/ios#cocoapods), [\[Dynamic Framework\]](https://media.twiliocdn.com/sdk/ios/voice/releases/3.0.0-beta7/twilio-voice-ios-3.0.0-beta7.tar.bz2), [\[Static Library\]](https://media.twiliocdn.com/sdk/ios/voice/releases/3.0.0-beta7/twilio-voice-ios-static-3.0.0-beta7.tar.bz2), [\[docs\]](https://media.twiliocdn.com/sdk/ios/voice/releases/3.0.0-beta7/docs/).

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](/docs/stun-turn).
* 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.
* Using the Voice iOS SDK side by side with the WebRTC library will result in `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           |

***

#### 3.0.0-beta6

March 14, 2019

* Programmable Voice iOS SDK 3.0.0-beta6 [\[Carthage\]](/docs/voice/sdks/ios#carthage), [\[Cocoapods\]](/docs/voice/sdks/ios#cocoapods), [\[Dynamic Framework\]](https://media.twiliocdn.com/sdk/ios/voice/releases/3.0.0-beta6/twilio-voice-ios-3.0.0-beta6.tar.bz2), [\[Static Library\]](https://media.twiliocdn.com/sdk/ios/voice/releases/3.0.0-beta6/twilio-voice-ios-static-3.0.0-beta6.tar.bz2), [\[docs\]](https://media.twiliocdn.com/sdk/ios/voice/releases/3.0.0-beta6/docs/).

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](/docs/stun-turn).
* 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.
* Using the Voice iOS SDK side by side with the WebRTC library will result in `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           |

***

#### 3.0.0-beta5

March 4, 2019

* Programmable Voice iOS SDK 3.0.0-beta5 [\[Carthage\]](/docs/voice/sdks/ios#carthage), [\[Cocoapods\]](/docs/voice/sdks/ios#cocoapods), [\[Dynamic Framework\]](https://media.twiliocdn.com/sdk/ios/voice/releases/3.0.0-beta5/twilio-voice-ios-3.0.0-beta5.tar.bz2), [\[Static Library\]](https://media.twiliocdn.com/sdk/ios/voice/releases/3.0.0-beta5/twilio-voice-ios-static-3.0.0-beta5.tar.bz2), [\[docs\]](https://media.twiliocdn.com/sdk/ios/voice/releases/3.0.0-beta5/docs/).

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](/docs/stun-turn).
* 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.
* Using the Voice iOS SDK side by side with the WebRTC library will result in `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           |

***

#### 3.0.0-beta4

February 14, 2019

* Programmable Voice iOS SDK 3.0.0-beta4 [\[Carthage\]](/docs/voice/sdks/ios#carthage), [\[Cocoapods\]](/docs/voice/sdks/ios#cocoapods), [\[Dynamic Framework\]](https://media.twiliocdn.com/sdk/ios/voice/releases/3.0.0-beta4/twilio-voice-ios-3.0.0-beta4.tar.bz2), [\[Static Library\]](https://media.twiliocdn.com/sdk/ios/voice/releases/3.0.0-beta4/twilio-voice-ios-static-3.0.0-beta4.tar.bz2), [\[docs\]](https://media.twiliocdn.com/sdk/ios/voice/releases/3.0.0-beta4/docs/).

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](/docs/stun-turn).
* 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.
* Using the Voice iOS SDK side by side with the WebRTC library will result in `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           |

***

#### 3.0.0-beta3

February 7, 2019

* Programmable Voice iOS SDK 3.0.0-beta3 [\[Carthage\]](/docs/voice/sdks/ios#carthage), [\[Cocoapods\]](/docs/voice/sdks/ios#cocoapods), [\[Dynamic Framework\]](https://media.twiliocdn.com/sdk/ios/voice/releases/3.0.0-beta3/twilio-voice-ios-3.0.0-beta3.tar.bz2), [\[Static Library\]](https://media.twiliocdn.com/sdk/ios/voice/releases/3.0.0-beta3/twilio-voice-ios-static-3.0.0-beta3.tar.bz2), [\[docs\]](https://media.twiliocdn.com/sdk/ios/voice/releases/3.0.0-beta3/docs/).

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](/docs/api/errors/51007) 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](/docs/stun-turn).
* 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.
* Using the Voice iOS SDK side by side with the WebRTC library will result in `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           |

***

#### 3.0.0-beta2

December 13, 2018

* Programmable Voice iOS SDK 3.0.0-beta2 [\[Carthage\]](/docs/voice/sdks/ios#carthage), [\[Cocoapods\]](/docs/voice/sdks/ios#cocoapods), [\[Dynamic Framework\]](https://media.twiliocdn.com/sdk/ios/voice/releases/3.0.0-beta2/twilio-voice-ios-3.0.0-beta2.tar.bz2), [\[Static Library\]](https://media.twiliocdn.com/sdk/ios/voice/releases/3.0.0-beta2/twilio-voice-ios-static-3.0.0-beta2.tar.bz2), [\[docs\]](https://media.twiliocdn.com/sdk/ios/voice/releases/3.0.0-beta2/docs/).

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](/docs/stun-turn).
* 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](https://github.com/twilio/voice-quickstart-objc/issues/117)
* Using the Voice iOS SDK side by side with the WebRTC library will result in `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           |

***

###### 3.0.0-beta1

November 26, 2018

* Programmable Voice iOS SDK 3.0.0-beta1 [\[Carthage\]](/docs/voice/sdks/ios#carthage), [\[Cocoapods\]](/docs/voice/sdks/ios#cocoapods), [\[Dynamic Framework\]](https://media.twiliocdn.com/sdk/ios/voice/releases/3.0.0-beta1/twilio-voice-ios-3.0.0-beta1.tar.bz2), [\[Static Library\]](https://media.twiliocdn.com/sdk/ios/voice/releases/3.0.0-beta1/twilio-voice-ios-static-3.0.0-beta1.tar.bz2), [\[docs\]](https://media.twiliocdn.com/sdk/ios/voice/releases/3.0.0-beta1/docs/).

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](/docs/stun-turn).
* 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](https://github.com/twilio/voice-quickstart-objc/issues/117)
* CLIENT-5398 Unmuting a call on hold causes audio to flow.
* Using the Voice iOS SDK side by side with the WebRTC library will result in `RTCNativeAudioSessionDelegateAdapter` symbol conflict during compile time.

***

#### 3.0.0-preview5

October 24, 2018

* Programmable Voice iOS SDK 3.0.0-preview5 [\[Carthage\]](/docs/voice/sdks/ios#carthage), [\[Cocoapods\]](/docs/voice/sdks/ios#cocoapods), [\[Dynamic Framework\]](https://media.twiliocdn.com/sdk/ios/voice/releases/3.0.0-preview5/twilio-voice-ios-3.0.0-preview5.tar.bz2), [\[Static Library\]](https://media.twiliocdn.com/sdk/ios/voice/releases/3.0.0-preview5/twilio-voice-ios-static-3.0.0-preview5.tar.bz2), [\[docs\]](https://media.twiliocdn.com/sdk/ios/voice/releases/3.0.0-preview5/docs/).

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](/docs/stun-turn).
* 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](https://github.com/twilio/voice-quickstart-objc/issues/117)
* Using the Voice iOS SDK side by side with the WebRTC library will result in `RTCNativeAudioSessionDelegateAdapter` symbol conflict during compile time.

***

#### 3.0.0-preview4

October 2, 2018

* Programmable Voice iOS SDK 3.0.0-preview4 [\[Carthage\]](/docs/voice/sdks/ios#carthage), [\[Cocoapods\]](/docs/voice/sdks/ios#cocoapods), [\[Dynamic Framework\]](https://media.twiliocdn.com/sdk/ios/voice/releases/3.0.0-preview4/twilio-voice-ios-3.0.0-preview4.tar.bz2), [\[Static Library\]](https://media.twiliocdn.com/sdk/ios/voice/releases/3.0.0-preview4/twilio-voice-ios-static-3.0.0-preview4.tar.bz2), [\[docs\]](https://media.twiliocdn.com/sdk/ios/voice/releases/3.0.0-preview4/docs/).

Enhancements

* Added `customParameters` property to `TVOCallInvite`.

Pass custom parameters in TwiML

```xml
  <?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`:

```objc
  {
    "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](https://github.com/twilio/voice-quickstart-swift/issues/163)
* 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](/docs/stun-turn).
* 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](https://github.com/twilio/voice-quickstart-objc/issues/117)
* Using the Voice iOS SDK side by side with the WebRTC library will result in `RTCNativeAudioSessionDelegateAdapter` symbol conflict during compile time.

***

#### 3.0.0-preview3

September 12, 2018

* Programmable Voice iOS SDK 3.0.0-preview3 [\[Carthage\]](/docs/voice/sdks/ios#carthage), [\[Cocoapods\]](/docs/voice/sdks/ios#cocoapods), [\[Dynamic Framework\]](https://media.twiliocdn.com/sdk/ios/voice/releases/3.0.0-preview3/twilio-voice-ios-3.0.0-preview3.tar.bz2), [\[Static Library\]](https://media.twiliocdn.com/sdk/ios/voice/releases/3.0.0-preview3/twilio-voice-ios-static-3.0.0-preview3.tar.bz2), [\[docs\]](https://media.twiliocdn.com/sdk/ios/voice/releases/3.0.0-preview3/docs/).

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` 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

```objc
- (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

```objc
- (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](https://github.com/twilio/voice-quickstart-swift/issues/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 Traversal Service](/docs/stun-turn).
* 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](https://github.com/twilio/voice-quickstart-objc/issues/117)
* Using the Voice iOS SDK side by side with the WebRTC library will result in `RTCNativeAudioSessionDelegateAdapter` symbol conflict during compile time.

***

#### 3.0.0-preview2

August 28, 2018

* Programmable Voice iOS SDK 3.0.0-preview2 [\[Carthage\]](/docs/voice/sdks/ios#carthage), [\[Cocoapods\]](/docs/voice/sdks/ios#cocoapods), [\[Dynamic Framework\]](https://media.twiliocdn.com/sdk/ios/voice/releases/3.0.0-preview2/twilio-voice-ios-3.0.0-preview2.tar.bz2), [\[Static Library\]](https://media.twiliocdn.com/sdk/ios/voice/releases/3.0.0-preview2/twilio-voice-ios-static-3.0.0-preview2.tar.bz2), [\[docs\]](https://media.twiliocdn.com/sdk/ios/voice/releases/3.0.0-preview2/docs/)

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](/docs/voice/twiml/dial#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](https://github.com/twilio/voice-quickstart-swift/issues/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 Traversal Service](/docs/stun-turn).
* 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](https://github.com/twilio/voice-quickstart-objc/issues/117)
* Using the Voice iOS SDK side by side with the WebRTC library will result in `RTCNativeAudioSessionDelegateAdapter` symbol conflict during compile time.

***

#### 3.0.0-preview1

August 10, 2018

* Programmable Voice iOS SDK 3.0.0-preview1 [\[Carthage\]](/docs/voice/sdks/ios#carthage), [\[Cocoapods\]](/docs/voice/sdks/ios#cocoapods), [\[Dynamic Framework\]](https://media.twiliocdn.com/sdk/ios/voice/releases/3.0.0-preview1/twilio-voice-ios-3.0.0-preview1.tar.bz2), [\[Static Library\]](https://media.twiliocdn.com/sdk/ios/voice/releases/3.0.0-preview1/twilio-voice-ios-static-3.0.0-preview1.tar.bz2), [\[docs\]](https://media.twiliocdn.com/sdk/ios/voice/releases/3.0.0-preview1/docs/)

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

* 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:

```objc

// 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:

```objc
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:]`.

```objc
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`.

```objc
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](https://github.com/twilio/voice-quickstart-swift/issues/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 Traversal Service](/docs/stun-turn).
* \[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
* Using the Voice iOS SDK side by side with the WebRTC library will result in `RTCNativeAudioSessionDelegateAdapter` symbol conflict during compile time.

## 2.X

For older changelog entries including 2.x, click [here](/docs/voice/sdks/ios/changelog)
