{"id":21319511,"url":"https://github.com/zoom/videosdk-ui-toolkit-ios-sample","last_synced_at":"2026-02-09T22:03:05.641Z","repository":{"id":183625944,"uuid":"665978800","full_name":"zoom/videosdk-ui-toolkit-ios-sample","owner":"zoom","description":"Use the Zoom Video SDK UI Toolkit in iOS","archived":false,"fork":false,"pushed_at":"2025-02-04T04:01:32.000Z","size":241737,"stargazers_count":1,"open_issues_count":2,"forks_count":1,"subscribers_count":7,"default_branch":"main","last_synced_at":"2025-06-12T23:03:29.050Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"","language":"Objective-C","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/zoom.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null}},"created_at":"2023-07-13T12:31:35.000Z","updated_at":"2025-02-18T05:40:13.000Z","dependencies_parsed_at":"2025-03-15T22:38:22.826Z","dependency_job_id":null,"html_url":"https://github.com/zoom/videosdk-ui-toolkit-ios-sample","commit_stats":null,"previous_names":["zoom/videosdk-ui-toolkit-ios-sample"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/zoom/videosdk-ui-toolkit-ios-sample","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/zoom%2Fvideosdk-ui-toolkit-ios-sample","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/zoom%2Fvideosdk-ui-toolkit-ios-sample/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/zoom%2Fvideosdk-ui-toolkit-ios-sample/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/zoom%2Fvideosdk-ui-toolkit-ios-sample/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/zoom","download_url":"https://codeload.github.com/zoom/videosdk-ui-toolkit-ios-sample/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/zoom%2Fvideosdk-ui-toolkit-ios-sample/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":29283032,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-02-09T21:57:15.303Z","status":"ssl_error","status_checked_at":"2026-02-09T21:57:11.537Z","response_time":56,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.6:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2024-11-21T19:42:30.679Z","updated_at":"2026-02-09T22:03:05.629Z","avatar_url":"https://github.com/zoom.png","language":"Objective-C","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Zoom Video SDK UI toolkit Sample Project \n\nThe [Zoom Video SDK UI toolkit](https://developers.zoom.us/docs/video-sdk/ios/ui-toolkit/) is a prebuilt video chat user interface powered by the Zoom Video SDK.\n\nThe UI toolkit enables you to instantly start using a core set of Video SDK features in your app, including:\n- Feature configuration\n- Join and leave sessions\n- Video on or off\n- Front or back camera\n- Mute and unmute\n- Session chat (group and private)\n- Active speaker and gallery view\n- Participant management (with host and manager role)\n- Virtual background\n- Portrait and landscape support\n- Screen share (full-screen)\n- Cloud Recording (Additional license required)\n- Live Streaming Support\n- CRC Info and Invite (Additional license required)\n\nThese features are available in both the default and components UI.\n\nThe use of this UI Took Kit is subject to the [Video SDK terms of service](https://www.zoom.com/en/trust/video-sdk-terms/). Copyright 2024 Zoom Video Communications, Inc. All rights reserved.\n\n## Authorize\n\nLearn how to use your credentials to [authenticate](https://developers.zoom.us/docs/video-sdk/auth/#generate-a-video-sdk-jwt) so you can connect.\n\nSee the [Video SDK Auth Endpoint Sample](https://github.com/zoom/videosdk-sample-signature-node.js) for a sample app that shows how to quickly, easily, and securely generate a Video SDK JWT.\n\n## Installation, Build \u0026 Launch\n\nCurrently, the sample app consists of 4 dynamic xcframeworks ZoomVideoSDK.xcframework, ZoomVideoSDKUIKit.xcframework, zoomcml.xcframework and CptShare.xcframework which are added with \"Embed \u0026 Sign\" and can be located directly under the ZoomVideoSDKUIToolkitSample. In addition, the app also consist of screen sharing (broadcasting the device screen) feature under its own target ScreenShare using ReplayKit and ZoomVideoSDKScreenShare.xcframework with \"Do Not Embed\". For screen sharing to work, app group ID is required.\n\nBuild and run the sample app by navigating ViewController.swift and key in the following placeholders. If your session requires a password, you can make use of the password parameter.\n\n```Swift\nlet jwt = \u003c#JWT#\u003e\nlet sessionName = \u003c#Session Name#\u003e\nlet username = \u003c#Username#\u003e\nlet isDefaultView = true // true for Default UI and false for Component UI\n\n// let password = \u003c#Password#\u003e // For session that requires password to join.\n// let appGroupID = \u003c#App Group ID#\u003e // For screen sharing of device.\n// let recordingConsentMessage = \"You are currently being recorded and must either accept or deny to continue. If you choose to deny, you will be forced to leave the session.\" // For customized consent message that will be shown during the start of cloud recording.\n// let liveStreamingConsentMessage = \"You are currently being live streamed and must either accept or deny to continue. If you choose to deny, you will be forced to leave the session.\" // For customized consent message that will be shown during the start of live streaming.\n```\n\n\u003cbr\u003e\n\nThe variables above are used to set up a connection with the Video SDK. If your session requires a password, you must use the **SessionContext** class that comes with a sessionPassword parameter.\n\n```Swift\n// If your session requires a password, you will need to add it under the sessionPassword parameter under SessionContext.\n// let vc = UIToolkitVC(sessionContext: SessionContext(jwt: jwt, sessionName: sessionName, sessionPassword: password, username: username))\n\n/*\n Under the InitParams, all parameters are optional:\n 1. If your session allows screen sharing, you will need to add the App Group ID parameter,\n 2. By default the UI Toolkits comes with all available features (with some features require additional license). If you will like to only use some of these features, you will need to add the features you want under the features parameter.\n 3. If your session allows and can perform cloud recording, you can add in a customized consent message.\n 4. If your session allows and can perform live streaming, you can add in a customized consent message.\n */\n// let vc = UIToolkitVC(sessionContext: SessionContext(jwt: jwt, sessionName: sessionName, username: username), initParams: InitParams(appGroupId: appGroupID, features: [.Audio, .Chat], recordingConsentMessage: recordingConsentMessage, liveStreamConsentMessage: liveStreamingConsentMessage))\n\nlet vc = UIToolkitVC(sessionContext: SessionContext(jwt: jwt, sessionName: sessionName, username: username))\n\n/* Default UI */\nif isDefaultView {\n    vc.delegate = self\n    vc.modalPresentationStyle = .fullScreen\n    present(vc, animated: true)\n}\n/* Component UI */\nelse {\n    UIToolkitComponentManager.shared().setup(with: SessionContext(jwt: jwt, sessionName: sessionName, username: username))\n    UIToolkitComponentManager.shared().setupDelegate(with: self)\n    UIToolkitComponentManager.shared().startJoinSession()\n}\n```\n\n\u003cbr\u003e\n\nThere is a delegate class **UIToolkitDelegate** which consists of essential callbacks such as error, view is loaded, and dismissed.\n\n```Swift\nextension ViewController: UIToolkitDelegate {\n    func onError(_ errorType: UIToolkitError) {\n        print(\"Sample VC onError Callback: \\(errorType.rawValue) -\u003e \\(errorType.description)\")\n    }\n    \n    /*\n     Default UI\n     */\n    func onViewLoaded() {\n        print(\"Sample VC onViewLoaded\")\n    }\n    \n    func onViewDismissed() {\n        print(\"Sample VC onViewDismissed\")\n    }\n    \n    /*\n     Component UI\n     */\n    func startJoinSessionSuccessed() {\n        print(\"Sample VC Start/Join Session Successfully\")\n        performSegue(withIdentifier: \"goCustomVC\", sender: nil)\n    }\n    \n    func leaveSession(reason: ZoomVideoSDKSessionLeaveReason) {\n        print(\"Sample VC Left Session, reason: \\(reason)\")\n    }\n}\n```\n\n## Integration\n\nYou can integrate the UI toolkit frameworks manually or via the Swift Package Manager or Cocoapod.\n\n### Manual\n\nYou can integrate the Zoom Video SDK UI toolkit into your project by adding the 2 essential dynamic xcframeworks: ZoomVideoSDK.xcframework and ZoomVideoSDKUIKit.xcframework found in the sample app. Be sure to select the \"Embed \u0026 Sign\" option for these frameworks in Xcode under your project 'General' tab. \n\nIf you are interested in having the Virtual Background feature, you will need to include the zoomcml.xcframework in with \"Embed \u0026 Sign\". \n\nAs for Screen Sharing, you will need to include the CptShare.xcframework in your main target with \"Embed \u0026 Sign\" while the Broadcast Target to include in ZoomVideoSDKScreenShare.xcframework with \"Do not Embed\". For more details, refer to our [Video SDK Screen Sharing doc](https://developers.zoom.us/docs/video-sdk/ios/share/#broadcast-the-device-screen).\n\n### Swift Package Manager and Cocoapod\n\nYou can also add the framework using the Swift Package Manager (SPM) or Cocoapod using our GitHub link: https://github.com/zoom/videosdk-ui-toolkit-ios. \n\nFor SPM, there are 2 branches available:\n- main: SPM with all features\n- essential: SPM with all features except for Virtual Background and Screen Share.\n\nFor Cocoapod:\n\n```\n    // All features\n    pod 'ZoomVSDKUIToolkitiOS/ZoomVideoSDK'\n    pod 'ZoomVSDKUIToolkitiOS/ZoomVideoSDKUIToolkit'\n    pod 'ZoomVSDKUIToolkitiOS/CptShare'\n    pod 'ZoomVSDKUIToolkitiOS/zoomcml'\n    \n    // Essential features without Virtual Background and Screen Share\n    pod 'ZoomVSDKUIToolkitiOS/ZoomVideoSDK'\n    pod 'ZoomVSDKUIToolkitiOS/ZoomVideoSDKUIToolkitEssential'\n```\n\n## Need help?\n\nIf you're looking for help, try [Developer Support](https://devsupport.zoom.us/hc/en-us) or our [Developer Forum](https://devforum.zoom.us/). Priority support is also available with [Premier Developer Support](https://explore.zoom.us/docs/en-us/developer-support-plans.html) plans.\n\n---\n\nCopyright 2024 Zoom Video Communications, Inc. All rights reserved.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fzoom%2Fvideosdk-ui-toolkit-ios-sample","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fzoom%2Fvideosdk-ui-toolkit-ios-sample","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fzoom%2Fvideosdk-ui-toolkit-ios-sample/lists"}