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
                    
This command is intended to be used within the Package Manager Console in Visual Studio, as it uses the NuGet module's version of Install-Package.
<PackageReference Include="ZoomMeetingSdk.Maui.iOS" Version="7.1.5.37604" />
                    
For projects that support PackageReference, copy this XML node into the project file to reference the package.
<PackageVersion Include="ZoomMeetingSdk.Maui.iOS" Version="7.1.5.37604" />
                    
Directory.Packages.props
<PackageReference Include="ZoomMeetingSdk.Maui.iOS" />
                    
Project file
For projects that support Central Package Management (CPM), copy this XML node into the solution Directory.Packages.props file to version the package.
paket add ZoomMeetingSdk.Maui.iOS --version 7.1.5.37604
                    
#r "nuget: ZoomMeetingSdk.Maui.iOS, 7.1.5.37604"
                    
#r directive can be used in F# Interactive and Polyglot Notebooks. Copy this into the interactive tool or source code of the script to reference the package.
#:package ZoomMeetingSdk.Maui.iOS@7.1.5.37604
                    
#:package directive can be used in C# file-based apps starting in .NET 10 preview 4. Copy this into a .cs file before any lines of code to reference the package.
#addin nuget:?package=ZoomMeetingSdk.Maui.iOS&version=7.1.5.37604
                    
Install as a Cake Addin
#tool nuget:?package=ZoomMeetingSdk.Maui.iOS&version=7.1.5.37604
                    
Install as a Cake Tool

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 NSObjectMobileRTCSSharingSourceInfo, 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 are IntPtr. Use Marshal to read them.
  • NSArray with no element type in the header is NSObject[], and one nested NSArray<NSArray<…>> (getDialInAllCountryCodes) is an untyped NSArray.

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 Compatible and additional computed target framework versions.
.NET net10.0-ios26.0 is compatible. 
Compatible target framework(s)
Included target framework(s) (in package)
Learn more about Target Frameworks and .NET Standard.
  • 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