See how the Sinch In-app Voice and Video SDK for iOS is evolving and find out about new features and bug fixes.
- Bugfix: users who did not start the Sinch client for a long time (> 1 year) might end up relying on cached registration data which are expired, preventing authentication on the Sinch backend.
- Reduced SDK disk footprint.
- Added support for iOS Simulator on Apple Silicon.
- Removed SinchCalling and SinchVideo sample apps, which relied on unsupported "Active connection" functionality.
- Update WebRTC to M96.
Feature: The SDK is available as both a static library and a dynamic library; note that if you switch from using the dynamic to the static version of the SDK, you may have to:
change the "Embed" field for
Sinch.frameworkin the target dependency from "Embed & Sign" to "Do not embed," or you may not be able to install the app on devices (see https://stackoverflow.com/q/68931476 for example of error logs).
- add "-ObjC" to your app's "Other Linker Flags" (Build settings -> All -> Other Linker Flags) if you experience runtime errors such as "selector not recognized"; see https://developer.apple.com/library/archive/qa/qa1490/_index.html for further details.
- change the "Embed" field for
- Update SDK dependencies (Frameworks/Libraries); refer to the sample apps for the complete list of dependencies.
- Bugfix: SinchVideoController.setLocalVideoFrameCallback(callback:) returned frame from remote video instead.
- Bugfix: SinchVideoFrameCallback protocol now provides @escaping completion handler, to allow asynchronous video frame processing.
- Bugfix: HTTP requests to Sinch backend API were failing on iOS 11, due to unsupported NSURLRequestNetworkServiceType values.
- Bugfix: distributing an app (for example AppStore distribution) that consumes Sinch.xcframework caused a crash if Bitcode was enabled.
- Bugfix: incorrect HTTP timeout caused dropping of the signaling channel on calls longer than ~90s; media streams would still be valid in affected calls, but hanging up on one peer would not end the call for the other peer.
- Bugfix: discard second SDP Answer
- Bugfix: SinchCallClient.videoCallToUser(withId:, usingHeaders:) initiated an audio-only call instead of a video call.
- Fix the crash when peer connection delegate wasn't cleaned before destruction
- Update API doc to mention thread safety
- Use perfect negotiation after first call setup
- Removed iOS10/armv7 support
Removed use of NSException to signal recoverable failure, to prevent problems due to Objective-C exceptions being unrecoverable in Swift see
- added NSError out-parameter to + [Sinch clientWithApplicationKey:environmentHost:userId:cli:] , which doesn't @throw anymore
- added NSError out-parameter to + [Sinch clientWithApplicationKey:environmentHost:userId] , which doesn't @throw anymore
- added NSError out-parameter to - [SINClient setPushNotificationName:] , which doesn't @throw anymore
- - [SINCallClient callXXX] methods don't @throw anymore; if they're invoked with the wrong parameters, or with SINCallClient in invalid -state, they will return a SINCall object that will signal the failure to the delegate via - [SINCallDelegate callDidEnd:] as soon as -*possible
- - [SINCall sendDTMF:] doesn't @throw anymore; in case of invalid key parameter, it will return NO
- added NSError out-parameter to - [SINAudioController startPlayingSoundFile:] , which doesn't @throw anymore Note that NSExceptions are still used to signal non-recoverable failures (see - [SINClient enableManagedPushNotifications] , - [SINClient registerPushNotificationsDeviceToken:type:apsEnvironment:] ).
- Introduced - [SINAudioController customAudioSessionCategoryOptions:] , which allows specification of custom AVAudioSessionCategoryOptions to be set during calls.
- + [Sinch version] renamed to + [Sinch versionString] , to avoid overriding + [NSObject version] with different return type.
- Improved error domain granularity of SINCallDetails.error
- Removed support for Remote Push type. VoIP push is now the only Push type supported.
- Removed SINPushTypeRemote, SINPushTypeKey
- Removed [SINManagedPush application:didRegisterForRemoteNotificationsWithDeviceToken:]
- Removed [SINManagedPush application:didReceiveRemoteNotification:]
- Renamed SINRemoteNotificationKey to SINPushNotificationKey
- Renamed [SINClient relayRemotePushNotification:] to [SINClient relayPushNotification:]
- Fix bug in AVAudioSession handling, which caused interference with other apps' audio after call end if speakers were enabled under certain conditions. Now the AVAudioSession is properly deactivated at call end.
- Remove SINAPSEnvironmentAutomatic from public API. Use SINAPSEnvironmentDevelopment or SINAPSEnvironmentProduction directly.
- Fix bug that led to reset of AVAudioSessionCategoryOptions when enabling/disabling speakers, or at call start.
- If AudioSessionCategory is already 'PlayAndRecord' at call start, it will now remain unchanged instead of being set to 'Playback'.
- Audio session category options and audio session mode are restored to their original values after call end.
- Audio session category is not set to 'PlayAndRecord' at client startup anymore. Audio session category is now set to 'Playback' at the beginning of incoming/outgoing call, then to 'PlayAndRecord' once the media stream(s) are established and eventually restored to the original category when the call ends.
- Support specifying/modifying call headers via ICE callback response.
- Sinch environment host changed to ocra.api.sinch.com
- Remove support for legacy push data (- [SINClient registerPushNotificationData:] )
- Removed SINErrorDomainCapability, SINErrorDomainOther. Added SINErrorDomain (generic)
- Removed deprecated - [SINClient stop] (and - [SINClientDelegate clientDidStop:] ). Use - [SINClient terminateGracefully] instead.
- Removed deprecated "Active Connection" functionality. Push Notifications should be used instead.
- Removed sample app SinchVideoFilter
- Configuring iOS Data Protection moved to + [Sinch setDataProtectionType:] (global)
- Remove - [SINManagedPush setDesiredPushTypeAutomatically] (use - [SINManagedPush setDesiredPushType:] instead)
- SINManagedPush changed from protocol to class.
- Removed class SINPushHelper. Method queryPushNotificationPayload: moved to class SINManagedPush.
- Remove - [SINCallClientDelegate willReceiveIncomingCall:] callback. Callback functionalities for incoming calls are now condensed into - [SINCallClientDelegate didReceiveIncomingCall:] , which is now invoked exactly once per incoming call before the call is established, and should also be used to handle CallKit in incoming calls.
- Unify SINLocalVideoFrameCallback and SINRemoteVideoFrameCallback into same protocol type, SINVideoFrameCallback.