Zoom Plugin SDK for macOS
Use Swift or Objective-C to control Zoom Workplace from a separate native macOS application.
Start Here
- Read Lifecycle and Integration.
- Use Package and API Map to locate the authoritative header and sample for a feature.
- Use Capabilities to check whether the official client can do the requested operation.
- Implement the smallest auth and IPC connection baseline.
- Add start/join and meeting-state handling.
- Add one feature toolkit at a time.
- Use Common Issues when callbacks, linking, permissions, or client compatibility fail.
Baseline Requirements
- A Zoom Marketplace General app with Plugin SDK enabled.
- A user OAuth access token containing
plugin_sdk:read:connection_meta.
- Zoom Workplace
7.0.2 or later according to the public setup documentation.
- Xcode
16.1 or later.
- The complete signed dependency set from the package's
PSDKLibs/ folder.
Package review baseline: zoom-plugin-sdk-macos-universal-7.1.0.595.
Minimal Lifecycle
Retain the listener for the full initialized lifetime:
import Cocoa
import ZoomToolSuite
final class PluginListener: NSObject, ZoomToolSuiteEventListenerProtocol {
func onAuthResult(_ result: ZoomToolSuiteAuthResult) {
// Continue only after .success.
}
func onIPCConnectStatusChanged(
_ status: ZoomToolSuiteIPCConnectStatus,
errorMessage: String?
) {
// Enable controls only after .connected.
}
func onMeetingStatusChanged(_ status: ZoomToolSuiteMeetingStatus) {
// Enable meeting toolkits only after .inMeeting.
}
}
final class PluginController {
private let listener = PluginListener()
func initialize(accessToken: String) {
let context = ZoomToolSuiteAuthContext()
context.accessToken = accessToken
context.domain = "https://zoom.us"
ZoomToolSuiteAPI.initSDK(context, listener: listener)
}
func shutdown() {
ZoomToolSuiteAPI.uninitSDK()
}
}
Start or Join
let join = ZoomToolSuiteJoinMeetingParam()
join.displayName = "Display Name"
join.meetingNumber = 1234567890
join.password = ""
let submitted = ZoomToolSuiteAPI.PreMeeting.Launch.joinMeeting(param: join) { result in
guard result.error_code == .success else {
return
}
}
submitted means the SDK accepted the call for processing. The completion result and subsequent meeting-status callbacks determine the actual outcome.
Implementation Guardrails
- Wait for auth success and
.connected IPC status before calling pre-meeting APIs.
- Wait for
.inMeeting before calling meeting feature APIs.
- Use the relevant
ZoomToolSuiteMeetingInstance for default meeting, green room, or breakout-room contexts.
- Check host/co-host role and feature capability before privileged operations.
- Keep UI updates on the AppKit main thread if callbacks arrive on another thread.
- Do not embed client secrets in a distributed macOS app. Use PKCE/public-client behavior or a backend token exchange appropriate to the Marketplace app configuration.
- Re-sign packaged frameworks and libraries with the application's signing identity.
Feature Routing
| Task |
API family |
| Start/join, settings window, URL navigation |
ZoomToolSuiteAPI.PreMeeting.Launch |
| Status, properties, leave/end, statistics |
ZoomToolSuiteAPI.Meeting.MeetingAPI |
| Roster, roles, permissions, host controls |
ZoomToolSuiteAPI.Meeting.Participants |
| Mute, unmute, mute on entry |
ZoomToolSuiteAPI.Meeting.Audio |
| Camera, pin, spotlight, avatar |
ZoomToolSuiteAPI.Meeting.Video |
| Share application, monitor, camera, file, audio, frame, whiteboard |
ZoomToolSuiteAPI.Meeting.Share |
| Recording, waiting room, chat/UI, captions, Q&A, webinar |
Matching ZoomToolSuiteAPI.Meeting.* namespace |
| Device selection and audio/video processing settings |
ZoomToolSuiteAPI.Setting.Audio and .Video |
Sources
1---2name: zoom-plugin-sdk-macos3description: Zoom Plugin SDK for native macOS companion applications using Swift or Objective-C to control an installed Zoom Workplace client over IPC. Use for Xcode integration, OAuth initialization, start/join flows, participant controls, audio/video settings, app or monitor sharing, recording, captions, and supported meeting UI operations on macOS.4---56# Zoom Plugin SDK for macOS78Use Swift or Objective-C to control Zoom Workplace from a separate native macOS application.910## Start Here11121. Read [Lifecycle and Integration](references/lifecycle-and-integration.md).132. Use [Package and API Map](references/package-and-api-map.md) to locate the authoritative header and sample for a feature.143. Use [Capabilities](capabilities.md) to check whether the official client can do the requested operation.154. Implement the smallest auth and IPC connection baseline.165. Add start/join and meeting-state handling.176. Add one feature toolkit at a time.187. Use [Common Issues](troubleshooting/common-issues.md) when callbacks, linking, permissions, or client compatibility fail.1920## Baseline Requirements2122- A Zoom Marketplace General app with Plugin SDK enabled.23- A user OAuth access token containing `plugin_sdk:read:connection_meta`.24- Zoom Workplace `7.0.2` or later according to the public setup documentation.25- Xcode `16.1` or later.26- The complete signed dependency set from the package's `PSDKLibs/` folder.2728Package review baseline: `zoom-plugin-sdk-macos-universal-7.1.0.595`.2930## Minimal Lifecycle3132Retain the listener for the full initialized lifetime:3334```swift35import Cocoa36import ZoomToolSuite3738final class PluginListener: NSObject, ZoomToolSuiteEventListenerProtocol {39 func onAuthResult(_ result: ZoomToolSuiteAuthResult) {40 // Continue only after .success.41 }4243 func onIPCConnectStatusChanged(44 _ status: ZoomToolSuiteIPCConnectStatus,45 errorMessage: String?46 ) {47 // Enable controls only after .connected.48 }4950 func onMeetingStatusChanged(_ status: ZoomToolSuiteMeetingStatus) {51 // Enable meeting toolkits only after .inMeeting.52 }53}5455final class PluginController {56 private let listener = PluginListener()5758 func initialize(accessToken: String) {59 let context = ZoomToolSuiteAuthContext()60 context.accessToken = accessToken61 context.domain = "https://zoom.us"62 ZoomToolSuiteAPI.initSDK(context, listener: listener)63 }6465 func shutdown() {66 ZoomToolSuiteAPI.uninitSDK()67 }68}69```7071## Start or Join7273```swift74let join = ZoomToolSuiteJoinMeetingParam()75join.displayName = "Display Name"76join.meetingNumber = 123456789077join.password = ""7879let submitted = ZoomToolSuiteAPI.PreMeeting.Launch.joinMeeting(param: join) { result in80 guard result.error_code == .success else {81 return82 }83}84```8586`submitted` means the SDK accepted the call for processing. The completion result and subsequent meeting-status callbacks determine the actual outcome.8788## Implementation Guardrails8990- Wait for auth success and `.connected` IPC status before calling pre-meeting APIs.91- Wait for `.inMeeting` before calling meeting feature APIs.92- Use the relevant `ZoomToolSuiteMeetingInstance` for default meeting, green room, or breakout-room contexts.93- Check host/co-host role and feature capability before privileged operations.94- Keep UI updates on the AppKit main thread if callbacks arrive on another thread.95- Do not embed client secrets in a distributed macOS app. Use PKCE/public-client behavior or a backend token exchange appropriate to the Marketplace app configuration.96- Re-sign packaged frameworks and libraries with the application's signing identity.9798## Feature Routing99100| Task | API family |101|---|---|102| Start/join, settings window, URL navigation | `ZoomToolSuiteAPI.PreMeeting.Launch` |103| Status, properties, leave/end, statistics | `ZoomToolSuiteAPI.Meeting.MeetingAPI` |104| Roster, roles, permissions, host controls | `ZoomToolSuiteAPI.Meeting.Participants` |105| Mute, unmute, mute on entry | `ZoomToolSuiteAPI.Meeting.Audio` |106| Camera, pin, spotlight, avatar | `ZoomToolSuiteAPI.Meeting.Video` |107| Share application, monitor, camera, file, audio, frame, whiteboard | `ZoomToolSuiteAPI.Meeting.Share` |108| Recording, waiting room, chat/UI, captions, Q&A, webinar | Matching `ZoomToolSuiteAPI.Meeting.*` namespace |109| Device selection and audio/video processing settings | `ZoomToolSuiteAPI.Setting.Audio` and `.Video` |110111## Sources112113- [Official macOS docs](https://developers.zoom.us/docs/plugin-sdk/macos/)114- [Parent Plugin SDK skill](../SKILL.md)115- [Native Zoom Workplace Companion use case](../../general/use-cases/native-zoom-workplace-companion.md)