Release Notes - IOS SDK

See how the Sinch In-app Voice and Video SDK for iOS is evolving and find out about new features and bug fixes.


  • Bugfix: removed accidental recursive call to a property setter, that lead to the app being killed during a call when in background because of too high CPU consumption.


  • Bugfix: fixed crashes due to race conditions when accessing SQLite.
  • Bugfix: potential mitigation for crash occurring in -[SINCallClientImpl processPushNotificationPayload_wq:] .


  • Bugfix: fixed deadlock condition in internal component (REBBackgroundAwareTimer).
  • Bugfix: fixed issue causing potential signalling problems during ongoing call.
  • Bugfix: fixed issue with caller being stuck during call initiation phase.
  • Bugfix: fixed NSInvalidArgumentException in SINClientsObserver.


  • Bugfix: improved internal caching logic.


  • Feature: improved internal reporting of call quality data.


  • Bugfix: fixed crash due to mishandling of HTTP responses received after Sinch client termination.


  • Bugfix: the download size reduction achieved in 5.19.19 destroyed debug symbols definition, and is now reverted. Linker warnings similar to "/private/tmp/tmp.mvxNwcA5SZ/./0/*.o unable to open object file: No such file or directory" should be gone now.


  • Bugfix: fixed deadlock condition in internal component (REBHTTPService).
  • Feature: the SDK is now thread safe, and all API methods can be invoked from any thread; UIView extensions make exceptions, as they always have to be invoked from the main queue.
  • Feature: introduced SinchRTC.setCallbackQueue(queue:) / SinchRTC.getCallbackQueue() methods, that allow getting/setting the queue where the delegate methods of SinchClientDelegate, SinchCallClientDelegate, SinchCallDelegate, SinchAudioControllerDelegate are executed. Note that SinchManagedPushDelegate methods will still be invoked on any thread, and handling of an incoming VoIP push (i.e., reporting an incoming call to CallKit) can't be dispatched on other queues, as it must be performed synchronously. The recommendation is to set the desired callback queue before instantiating any Sinch component.


  • Bugfix: fixed crash that occurred when conflicting versions of SQLite were used by the SDK and other components of the customer's app.


  • The download size of the "static library" version of the SDK is now significantly smaller.
  • Bugfix: made the SDK more robust with respect to failures in AVAudioSession activation.



  • Bugfix: fixed crashes that could occur in case of prolonged connectivity loss during a call or during Sinch client deallocation.
  • Feature: improved caching of instance data; clients should expect to have requiresRegistrationCredentials callback being executed less often.
  • Feature: implemented automatic hang-up when a call is lingering in failed state for too long.


  • Feature: debug symbols are now included in the dynamic libraries version of the SDK as dSYM files.
  • Bugfix: added some missing debug symbols to the static libraries version of the SDK.


  • Bugfix: fixed several unsafe usages of raw pointers that were causing sporadic SDK crashes.


  • Bugfix: fixed unsafe usage of weak references that led to sporadic SDK crashes.
  • Bugfix: adapt sample apps to work around iOS16 beta CallKit possible bug: requesting a CXCallController transaction to e.g. start a CallKit call would not trigger the corresponding CXProviderDelegate callbacks (e.g. -[CXProviderDelegate.provider(_:perform:)] ), and call won't be initiated. The workaround consists in implementing -[CXProviderDelegate.provider(_:execute:)] and perform all actions included in the transaction from there.
  • Bugfix: SinchAudioController delegate methods were not being invoked in Swift SDK.


  • Feature: debug symbols are now included in the static libraries version of the SDK.
  • Bugfix: in the Swift SDK, some type of malformed input (for example malformed headers) provided when starting a new outbound call via one of the* functions returned a SinchCall object rather than an error.
  • Bugfix: -[SINAudioController startPlayingSoundFile:loop:error:] can now handle paths with whitespaces.


  • Feature: added audio route logging.


  • 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:
  • 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 . In particular:
    • 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
  • 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.

** NEW SDK for In-app Voice & Video Platform

We'd love to hear from you!
Rate this content:
Still have a question?
Ask the community.