ZoomMeetingSdk.Maui.iOS
7.1.5.37604
dotnet add package ZoomMeetingSdk.Maui.iOS --version 7.1.5.37604
NuGet\Install-Package ZoomMeetingSdk.Maui.iOS -Version 7.1.5.37604
<PackageReference Include="ZoomMeetingSdk.Maui.iOS" Version="7.1.5.37604" />
<PackageVersion Include="ZoomMeetingSdk.Maui.iOS" Version="7.1.5.37604" />
<PackageReference Include="ZoomMeetingSdk.Maui.iOS" />
paket add ZoomMeetingSdk.Maui.iOS --version 7.1.5.37604
#r "nuget: ZoomMeetingSdk.Maui.iOS, 7.1.5.37604"
#:package ZoomMeetingSdk.Maui.iOS@7.1.5.37604
#addin nuget:?package=ZoomMeetingSdk.Maui.iOS&version=7.1.5.37604
#tool nuget:?package=ZoomMeetingSdk.Maui.iOS&version=7.1.5.37604
ZoomMeetingSdk.Maui.iOS
iOS binding for the Zoom Meeting SDK, for .NET MAUI.
<PackageReference Include="ZoomMeetingSdk.Maui.iOS" Version="7.1.5.37603" />
The package carries the managed binding, MobileRTC.xcframework and zoomcml.xcframework, and
MobileRTCResources.bundle — placed at the app bundle root, where the SDK looks for it.
What it takes to use
Referencing the package is nearly the whole integration. It sets MtouchLink=SdkOnly, adds Zoom's
resource bundle to your app, and diagnoses what it cannot set for you:
| Behaviour | Detail |
|---|---|
MtouchLink=SdkOnly |
Set for you. Trimming this assembly silently kills every delegate callback — see below. |
MobileRTCResources.bundle |
Added to your app bundle automatically as BundleResource items. |
ZOOMSDK020 |
Error if SupportedOSPlatformVersion < 15.0 (MobileRTC.framework declares MinimumOSVersion 15.0). |
ZOOMSDK021 |
Error on an x86_64 simulator RID. The SDK ships ios-arm64 and ios-arm64-simulator only. |
ZOOMSDK022 |
Warning if MtouchLink=Full without rooting this assembly in the trimmer. |
ZOOMSDK023/024/025 |
Warning if Info.plist lacks NSMicrophoneUsageDescription, NSCameraUsageDescription, or UIBackgroundModes. |
Everything defaulted is conditioned on the property being empty, so your project always wins.
The two things you must add yourself
Permission strings. iOS terminates the process the instant the microphone or camera is touched without a usage description. In a Zoom app that happens seconds into a join, and it presents as an SDK crash rather than a missing plist key:
<key>NSMicrophoneUsageDescription</key><string>…so you can be heard in a meeting.</string>
<key>NSCameraUsageDescription</key><string>…so you can be seen in a meeting.</string>
<key>UIBackgroundModes</key><array><string>audio</string></array>
Without the audio background mode, meeting audio stops when the app is backgrounded while the
meeting stays joined — which sounds like a network problem, not a missing capability.
App lifecycle relay. The SDK needs four AppDelegate events forwarded, exactly as Zoom's own
sample does. Skipping them mainly shows up as audio that never resumes after the app returns to the
foreground:
public override void OnResignActivation(UIApplication app) { base.OnResignActivation(app); MobileRtc.SharedRTC.AppWillResignActive(); }
public override void OnActivated(UIApplication app) { base.OnActivated(app); MobileRtc.SharedRTC.AppDidBecomeActive(); }
public override void DidEnterBackground(UIApplication app) { base.DidEnterBackground(app); MobileRtc.SharedRTC.AppDidEnterBackground(); }
public override void WillTerminate(UIApplication app) { MobileRtc.SharedRTC.AppWillTerminate(); base.WillTerminate(app); }
Guard them on "has initialize: succeeded" — the app is backgroundable long before your JWT arrives.
Three things that will cost you a day if you do not know them
Delegates are weak. MobileRTCAuthService.delegate and MobileRTCMeetingService.delegate are
weak properties: the SDK does not retain them. A delegate whose only reference is that property is
collected, and the callbacks then never arrive, with no error anywhere. Keep it alive yourself — a
field on something app-lifetime long.
Trimming removes the callbacks. The SDK reaches your delegate methods by Objective-C selector,
which the trimmer cannot see. A fully-linked build joins a meeting and then raises no delegate
callback at all. This package defaults MtouchLink to SdkOnly for that reason; if you need Full,
add <TrimmerRootAssembly Include="ZoomMeetingSdk.Maui.iOS" />.
A MAUI app has no root UINavigationController. Most of Zoom's documentation shows
setMobileRTCRootController:, which has nothing to take in a MAUI app. Use the scene instead, before
starting or joining:
foreach (var scene in UIApplication.SharedApplication.ConnectedScenes.ToArray<UIScene>())
if (scene is UIWindowScene && scene.ActivationState == UISceneActivationState.ForegroundActive)
MobileRtc.SharedRTC.SetMobileRTCPresentationScene(scene);
Joining a meeting
var context = new MobileRTCSDKInitContext { Domain = "zoom.us", EnableLog = true };
MobileRtc.SharedRTC.Initialize(context);
var auth = MobileRtc.SharedRTC.GetAuthService();
auth.WeakDelegate = this; // implements IMobileRTCAuthDelegate
auth.JwtToken = jwtFromYourServer; // never ship the SDK secret in the app
auth.SdkAuth(); // result arrives on onMobileRTCAuthReturn:
// …once OnMobileRTCAuthReturn reports Success:
var meetings = MobileRtc.SharedRTC.GetMeetingService();
meetings.WeakDelegate = this; // implements IMobileRTCMeetingServiceDelegate
var error = meetings.JoinMeetingWithJoinParam(new MobileRTCMeetingJoinParam
{
MeetingNumber = "4781839759", // bare digits, not Zoom's grouped display form
UserName = "Zoom Demo",
Password = passcode,
});
Initialize returning true means only that the context was usable, and JoinMeetingWithJoinParam
returning Success means only that the request was accepted. What actually happened arrives on
OnMobileRTCAuthReturn and OnMeetingStateChange / OnMeetingError.
Screen-capture protection (opt-in)
ZoomMeetingSdk.Maui.ZoomScreenProtection is in this package, as it is in the Android and Windows
ones — but iOS is weaker, and deliberately honest about it. iOS has no FLAG_SECURE equivalent, so
this detects capture rather than preventing it:
ZoomScreenProtection.Enable(); // blank the screen while being recorded
ZoomScreenProtection.Enable(blankWhileCaptured: false); // detect only, change nothing on screen
ZoomScreenProtection.ScreenCaptureStateChanged += (_, capturing) => { … };
ZoomScreenProtection.ScreenshotTaken += (_, _) => { … }; // after the fact; unpreventable
Screen recording, AirPlay mirroring and QuickTime capture are blanked. Still screenshots cannot be stopped by any app on iOS.
The API surface
The whole framework: all 76 headers, generated with Objective Sharpie and finished by hand — 188 classes, 25 protocols, 25 categories, 1,532 distinct selectors, and all 120 of the SDK's enums (758 members, every value checked against clang).
So breakout rooms, webinars and Q&A, polling, interpretation, live transcription, raw audio/video data, virtual background, annotation, remote control, whiteboard, the meeting settings and the custom in-meeting UI types are all bound and callable.
Three caveats about the edges of it:
- Thirteen classes are bound as
NSObject—MobileRTCSSharingSourceInfo,MobileRTCShareAction, the polling item types, the file-transfer types and a few others. Zoom ships headers for them but the framework does not export their Objective-C class symbols, so a binding that declares them cannot be linked at all. The objects still arrive at delegate callbacks; their typed accessors are unreachable from managed code until Zoom exports the classes. char *parameters and returns in the raw-data types areIntPtr. UseMarshalto read them.NSArraywith no element type in the header isNSObject[], and one nestedNSArray<NSArray<…>>(getDialInAllCountryCodes) is an untypedNSArray.
Only Zoom's own meeting UI path is exercised by the sample and verified end to end. The custom in-meeting UI is bound but untested.
Screen sharing
Not supported by this package. It needs a ReplayKit broadcast extension, an App Group shared between
app and extension, and MobileRTCScreenShare.xcframework linked into the extension — none of which
a NuGet package can create in your project. MobileRTCSDKInitContext.AppGroupId and
ReplaykitBundleIdentifier are bound, so the SDK side is ready when you build the extension.
Zoom's SDK binaries are redistributed under Zoom's own licence; the MIT grant in LICENSE.txt covers
only the code in this repository.
| Product | Versions Compatible and additional computed target framework versions. |
|---|---|
| .NET | net10.0-ios26.0 is compatible. |
-
net10.0-ios26.0
- No dependencies.
NuGet packages
This package is not used by any NuGet packages.
GitHub repositories
This package is not used by any popular GitHub repositories.
| Version | Downloads | Last Updated |
|---|---|---|
| 7.1.5.37604 | 108 | 8/20/2026 |