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

Migrating from 3.x to 4.x


(warning)

Warning

This documentation is for reference only. We are no longer onboarding new customers to Programmable Video. Existing customers can continue to use the product until December 5, 2026(link takes you to an external page).

We recommend migrating your application to the API provided by our preferred video partner, Zoom. We've prepared this migration guide(link takes you to an external page) to assist you in minimizing any service disruption.

This guide provides an introduction to the 3.x Programmable Video iOS SDK and a set of guidelines to migrate an application from 3.x to 4.x.


Programming Model

programming-model page anchor

The programming model has not changed from 3.x to 4.x. Refer to our 3.x migration guide for a refresher on the Video iOS SDK models.


Xcode and iOS Version Support

xcode-and-ios-version-support page anchor

Twilio Video 4.x is built with Xcode 12. The framework can be consumed with previous versions of Xcode. However, re-compiling Bitcode when exporting for Ad Hoc or Enterprise distribution requires the use of Xcode 12.x. Twilio Video 4.2.0 and newer supports a minimum version of iOS 9.0 at build time, and 11.0 at run time.


Twilio Video 4.x is now delivered as a .xcframework and now includes the .dSYM and .bcsymbolmaps to aid in symbolication of crash reports.


Swift Package Manager Support

swift-package-manager-support page anchor

Twilio Video 4.x is now distributed via Swift Package Manager. To consume Twilio Video 4.x using Swift Package Manager, add the https://github.com/twilio/twilio-video-ios repository as a Swift Package.


In-App Screen Capture Support

in-app-screen-capture-support page anchor

You can now share video of your app's screen to a room using TVIAppScreenSource. TwilioVideo uses ReplayKit internally for in-app screen capture. TVIAppScreenSource conforms to TVIVideoSource and uses RPScreenRecorder to capture video of your app's screen. Here is a brief example:


_10
if let source = AppScreenSource(), let track = LocalVideoTrack(source: source) {
_10
room.localParticipant?.publishVideoTrack(track)
_10
source.startCapture()
_10
}


Discontinous Transmission (DTX)

discontinous-transmission-dtx page anchor

Discontinuous transmission (DTX) is enabled by default for the Opus codec. Disabling DTX will result in higher bitrate for silent audio while using the Opus codec. The TVIOpusCodec class now has a new initializer [TVIOpusCodec initWithDtxEnabled:] and a property dtxEnabled.


Removal of Carthage Support

removal-of-carthage-support page anchor

Carthage does not currently work with .xcframeworks as documented here(link takes you to an external page). Once Carthage supports binary .xcframeworks, Carthage distribution will be re-added in a future release.


Removal of Deprecated Items

removal-of-deprecated-items page anchor

The deprecated TVIVideoView APIs have been removed:


_10
- VideoView.RenderingType
_10
- [VideoView initWithFrame:delegate:renderingType:renderingType]

The deprecated TVIIceOptions and TVIIceOptionsBuilder APIs have been removed:


_10
- TVIIceOptions.abortOnIceServersTimeout
_10
- TVIIceOptionsBuilder.abortOnIceServersTimeout
_10
- TVIIceOptions.iceServersTimeout
_10
- TVIIceOptionsBuilder.iceServersTimeout

The TVIRemoteParticipant.connected property has been replaced with TVIParticipant.state.


  • This release has improved API for CallKit integration. In order to use CallKit with the SDK, you must set ConnectOptions.uuid while connecting to a Room. When ConnectOptions.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:] .

Passing an uuid to make a Call with CallKit code snippets -


_10
let uuid = UUID()
_10
_10
let connectOptions = ConnectOptions(accessToken: accessToken) { builder in
_10
builder.uuid = uuid
_10
}
_10
_10
let room = TwilioVideoSDK.connect(options: connectOptions, delegate: self)

ProviderDelegate implementation code snippets -


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

Please note, if you are not using CallKit in your app, you must not set ConnectOptions.uuid while connecting to a Room. The Video SDK will enable the audio device for you when the uuid is nil.


Rate this page: