Releases: sbokatuk/OpenTok.Net.iOS
Release list
2.34.1.2
OpenTok.Net.iOS 2.34.1.2
Adds a second package and closes the last gap in the binding's coverage of the 2.34.1 headers. The
native SDK is unchanged at OTXCFramework 2.34.1.
New: OpenTok.Net.Transformers.iOS
Background blur, background replacement and audio noise suppression.
dotnet add package OpenTok.Net.Transformers.iOSOTVideoTransformer and OTAudioTransformer have been in OpenTok.Net.iOS all along — but the
implementations live in a separate native library Vonage ships as its own pod
(VonageClientSDKVideoTransformers → OpenTokTransformers.xcframework), which nothing shipped.
Constructing a transformer therefore compiled, linked, and then failed at runtime with
0x0A000006 — OTC_MEDIA_TRANSFORMER_OPENTOK_TRANSFORMERS_LIBRARY_NOT_LOADED
This package carries that framework. It has no managed API of its own and does not depend on the
binding — add it alongside, if you want the feature, for about 68 MB. See
src/OpenTok.Transformers.md for why it is separate, and why
it is the only project here with NoBindingEmbedding set (OpenTok.xcframework is a static
archive; this one is a dynamic framework).
The three TensorFlow Lite models it carries — selfie_segmentation.tflite, ns_model_1.tflite,
ns_model_2.tflite — are the ones that used to sit inside OpenTok.framework itself, which is why
the core package's payload roughly halved at SDK 2.3x.
Added: OTAudioSessionManager — CallKit
The only type in the 2.34.1 headers that was not bound. It is the protocol an app uses to hand
AVAudioSession control to CallKit:
var manager = OTAudioDeviceManager.CurrentAudioSessionManager;
manager?.EnableCallingServicesMode();
// ...then from CXProviderDelegate:
manager?.PreconfigureAudioSessionForCall(null);
manager?.AudioSessionDidActivate(session);
manager?.AudioSessionDidDeactivate(session);Reached through the new OTAudioDeviceManager.CurrentAudioSessionManager. The SDK's own default
audio device implements it, so CallKit integration no longer requires writing a custom
OTAudioDevice.
Without this, an app that lets both CallKit and the SDK manage the audio session gets the two
fighting: audio that does not start on answer, or that stops when a second call arrives.
Fixed: the device-tests project targeted iOS 13.0
Left behind by the 2.34.1 bump, which raised the binding itself to 15.0. Corrected to match.
CI: Release builds now verify native linking
Two new jobs, on pull requests only — a release re-runs nothing, because the tagged commit already
passed them on its own PR:
device-linkbuilds the sample in Release forios-arm64. Every other job here builds
Debug, which leaves the managed linker off and AOT unused, so none of them can notice a linker
that removed a type reachable only through the Objective-C runtime — which every[Model]
delegate subclass is. It also links the device slice, which nothing else does: the simulator
legs stay green through a package whose device slice was empty or built for the wrong minimum OS.
This is the shape of failure that let the previously published2.27.1.701ship without
Network,AccelerateandCoreFoundationin its framework list.transformers-linklinks the device tests against the transformers package and asserts
OpenTokTransformers.frameworkis inside the.appbundle. A dynamic framework that is
linked but not copied produces an app that launches and dies on first use with a dyld error.
Full changelog: v2.34.1.1...v2.34.1.2
Package
Bound against OTXCFramework 2.34.1 (CocoaPods trunk).
| Package | NuGet |
|---|---|
OpenTok.Net.iOS |
2.34.1.2 |
2.34.1.1
OpenTok.Net.iOS 2.34.1.1
Moves the vendored SDK from OTXCFramework 2.27.1 to 2.34.1, bringing this package level with
OpenTok.Net.Android, which already binds
opentok-android-sdk 2.34.1. The two platforms of one product had drifted seven minor releases
apart.
This release is breaking in three ways, each described below.
Breaking: minimum iOS is now 15.0
OTXCFramework 2.34.1's podspec declares "platforms": {"ios": "15.0"}, up from 13.0. That is the
SDK's floor, not a choice made here. An app targeting iOS 13 or 14 cannot take this package — stay
on 2.27.1.701.
Breaking: OTVideoViewScaleBehavior members are renamed
The members were called t and ll — an Objective Sharpie prefix-stripping artifact, not names
anyone could reasonably have chosen. They are now Fit and Fill, matching
OTVideoViewScaleBehaviorFit and OTVideoViewScaleBehaviorFill in OTVideoKit.h. The numeric
values are unchanged (Fit is 0, Fill is 1), so only source needs updating.
Note that Fit being 0 does not make it the default: the SDK documents and sets Fill.
Breaking: delegate callbacks are typed OTPublisherKit / OTSubscriberKit
OTPublisherKitDelegate and OTSubscriberKitDelegate previously declared their callbacks over the
concrete OTPublisher and OTSubscriber. The headers declare the Kit base types, and the
difference is real rather than cosmetic: a screen-share publisher is constructed as a bare
OTPublisherKit, and a subscriber driving a custom OTVideoRender as a bare OTSubscriberKit, so
a delegate typed over the subclass could not receive either.
Consequently OTSubscriberKit is now bound as its own type rather than folded into OTSubscriber,
and OTSession.Subscribe/Unsubscribe take OTSubscriberKit. An existing OTSubscriber still
satisfies them.
Override signatures need updating:
-public override void DidFailWithError(OTPublisher publisher, OTError error)
+public override void DidFailWithError(OTPublisherKit publisher, OTError error)
-public override void DidConnectToStream(OTSubscriber subscriber)
+public override void DidConnectToStream(OTSubscriberKit subscriber)Fixed: missing enum members
OTPublisherVideoEventReason was missing None, QualityDegradationBandwidth,
QualityDegradationCPU, QualityDegradationOther, CodecChange and ResolutionChange;
OTSubscriberVideoEventReason was missing None, CodecChange, ResolutionChange and
VideoInterruption. The SDK sends all of these, so a callback carrying one arrived as an enum value
with no name.
Several error codes were also missing: SessionUnableToForceDisconnect (1520),
SessionUnableToSendSignal (1550), EncryptionUnsupportedCodec (6005),
OTSubscriberPeerConnectionNotConnected (1606) and DecryptionUnsupportedCodec (6006).
Fixed: constructors that could not work
OTSession, OTPublisherKit and OTSubscriberKit all declare - init NS_UNAVAILABLE, but the
binding emitted a parameterless constructor for each anyway. new OTSession() compiled and then
trapped at runtime. They now carry [DisableDefaultCtor], so the call no longer compiles.
Added: the 2.34 API surface
OTVideoCodecPreferencewithOTVideoCodecType, andOTPublisherKitSettings.VideoCodecPreferenceOTVideoBitratePresetandOTPublisherKit.MaxVideoBitrate/VideoBitratePresetOTDegradationPreferenceandOTPublisherKit.DegradationPreferenceOTPublisher.CameraTorchandCameraZoomFactorOTPublisherKitSettings.SenderStatsTrackandAllowAudioCaptureWhileMutedOTSubscriberKit.CaptionsTranslationLanguageOTSession.ForceDisconnect,OTSessionCapabilities.CanForceDisconnectOTSessionSettings.SinglePeerConnectionandSessionMigration,
OTSessionICEConfig.FilterOutLanCandidates- Media-link statistics:
OTTransportStats,OTSenderStats,OTPublisherKitMediaLinkStats,
OTSubscriberKitMediaLinkStats,OTPublisherKitVideoLayerStats, withOTNetworkReason,
OTNetworkConditionandOTNetworkDegradationSource, and the newvideoQualityChanged:,
networkConditionChanged:andmediaLinkStatsUpdated:callbacks on both network-stats delegates OTAudioTransformer.initWithName:properties:
OTSubscriberKit.GetRtcStatsReport gained an out OTError overload; the no-argument form is
deprecated by the SDK and is marked [Obsolete] here.
Package size
The payload roughly halved — ~25 MB compressed, from ~52 MB. The ML video transformers, and the
TensorFlow Lite model that made the framework so large, moved out of OpenTok.framework into a
separate OpenTokTransformers library this package does not bind. The package now carries
PrivacyInfo.xcprivacy and VonageWebRTC_Privacy.bundle instead, both required for App Store
review.
Version numbering
The revision restarts at 1. It sat at 702 because the predecessor monorepo published up to
2.27.1.701 under this package ID and NuGet resolves the highest version regardless of publisher;
moving the SDK to 2.34.1 lifts the first three components clear of everything published, so
2.34.1.1 already sorts above them all.
Package
Bound against OTXCFramework 2.34.1 (CocoaPods trunk).
| Package | NuGet |
|---|---|
OpenTok.Net.iOS |
2.34.1.1 |