The guide explains how to prepare your Twilio Video apps for compatibility with iOS 13 and iPadOS 13.
We recommend that you use the latest patch releases of our SDKs. At this time, we have verified our 2.10.2, and 3.0.1 SDKs for compatibility with iOS 13.2 and iPadOS 13.2.
We are tracking several issues related to both the Video SDK itself and the example code.
- Catalyst Support
Twilio Video does not support Catalyst applications at this time. If you are interested in this feature please let us know in #49.
- TVICameraSource - Background task completion errors
When TVICameraSource
starts capturing it begins a background task to ensure that the video pipeline is flushed in the case of an interruption. In iOS 13.0, ending background tasks might send spurious logs to the console:
2019-09-03 13:44:15.345 VideoCallKitQuickStart[983:48546] Video track created
// After backgrounding the application
2019-09-03 13:44:21.979 VideoCallKitQuickStart[983:48546] Can't end BackgroundTask: no background task exists with identifier 3 (0x3), or it may have already been ended. Break in UIApplicationEndBackgroundTaskError() to debug.
Status: This issue is reproducible on iOS 13.2. We have given feedback to Apple, and hope that this issue can be resolved during the iOS 13 release cycle.
- TVICameraSource, TVICameraCapturer - Distorted video after being interrupted by an AVCaptureSession
See issue #53.
Resolution: Update Twilio Video to 3.0.1, or 2.10.2.
- TVIVideoView - OpenGL ES crashes on iOS Simulator
The SDK will crash when rendering decoded H.264 video, or any other frames in the TVIPixelFormatYUV420BiPlanarVideoRange
or TVIPixelFormatYUV420BiPlanarFullRange
formats when using Xcode 11.0 and an iOS 13.0 simulator.
Resolution: Update Twilio Video to 3.0.1, or 2.10.2 to fix the crash.
- TVIVideoView - Metal on the iOS Simulator
At the moment, Twilio Video does not support Metal on the iOS 13 or iPadOS 13 simulators.
Status: Now that macOS Catalina is released we will investigate Metal support further.
- UIScene & UIApplication Lifecycle
iOS 13 introduces new UIScene APIs to manage multiple instances of your app's UI, and handle UI lifecycle events. Twilio Video 2.x has several classes that register for UIApplication notifications and continue to do so on iOS 13:
- TVIVideoView: To render with the GPU only while the application is active.
- TVICameraSource: To apply orientation tags to video frames.
- TVICameraCapturer: To apply orientation tags to video frames (2.x).
- TVIRoom: For connection management (2.x).
Status: If you are using the UIScene APIs, then you should update Twilio Video to 3.0.1+ for the best compatibility.
If you do not use UIScene, then the UIApplication notifications needed by Video classes are still fired as of iOS 13.2:
- UIApplicationDidBecomeActiveNotification
- UIApplicationWillChangeStatusBarOrientationNotification
- UIApplicationWillEnterForegroundNotification
- UIApplicationWillResignActiveNotification
The following .plist manifest was used for evaluation of a single scene application:
<key>UIApplicationSceneManifest</key>
<dict>
<key>UIApplicationSupportsMultipleScenes</key>
<false/>
<key>UISceneConfigurations</key>
<dict>
<key>UIWindowSceneSessionRoleApplication</key>
<array>
<dict>
<key>UISceneConfigurationName</key>
<string>Default Configuration</string>
<key>UISceneDelegateClassName</key>
<string>YourApp.SceneDelegate</string>
<key>UISceneStoryboardFile</key>
<string>Main</string>
</dict>
</array>
</dict>
</dict>
- SwiftUI
Status: We are still evaluating SwiftUI on iOS 13. Integrators should note that TVIVideoView
does not specify an intrinsicContentSize
.
- CallKit
Starting a TVIDefaultAudioDevice
might fail when the Participant’s device reports an incoming call to CallKit while backgrounded in iOS 12.4 or 13.1.
Status: This issue should be resolved in iOS 13.2. We will retest with the latest release to confirm.
- ReplayKit
The ReplayKit Framework received some significant enhancements in iOS 13, resolving problems with delayed application audio and the reliability of RPScreenRecorder
. However, there is also a serious bug in iOS 13.0 (fixed in 13.1) that can cause a crash when using RPSystemBroadcastPickerView.
If you use a broadcast extension (com.apple.broadcast-services-upload
) on iOS 13.0 there is also a memory leak that will result in a crash when the microphone is enabled. This crash is resolved in iOS 13.1 as well.
If you use ExampleReplayKitAudioCapturer
to capture application audio samples, then you may experience distortion on iOS 13.0 due to changes in the audio format used by ReplayKit.
Resolution: Refer to the updated example app (master, 2.x) for iOS 13 support. Consider disabling RPBroadcastSystemPickerView
on iOS 13.0 using a runtime check and encouraging customers to upgrade to a newer OS.
- Swift Naming Conflicts
When compiling the 3.0 examples, the Objective-C class TVIAudioCodec
conflicts with the AudioCodec
type definition from AudioToolbox.framework when compiled with Xcode 11.
Resolution: The examples were updated to eliminate the conflict. If you are experiencing conflicts with the Swift translation of Twilio Video classes, then refer to the classes using their fully qualified name:
// Both frameworks define the Swift name AudioCodec
import AudioToolbox
import TwilioVideo
// Specify the Twilio class by its full name
var audioCodec: TwilioVideo.AudioCodec?
If you have questions about iOS 13 get in touch with us on the linked issues or file a new issue in the twilio-video-ios or video-quickstart-ios repositories.