Swiftui Expert Skill
AFK-surf/OpenBridge
Write, review, or improve SwiftUI code following best practices for state management, view composition, performance, modern APIs, Swift concurrency, and iOS 26+ Liquid Glass adoption.
Add voice & video calling to any iOS app FROM SCRATCH with the headless CometChat Calls SDK v5 (CometChatCallsSDK, via Swift Package Manager) — no UI Kit.
$ npx skills add cometchat/cometchat-skills --skill cometchat-ios-v5-sdk -a claude-codeProject install by default; add -g for ~/.claude/skills/.
$ gh skill install cometchat/cometchat-skills cometchat-ios-v5-sdk --agent claude-codeProject scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).
$ git clone --depth 1 https://github.com/cometchat/cometchat-skills.git skills-src && mkdir -p .claude/skills && cp -r skills-src/skills/cometchat-ios-v5-sdk .claude/skills/cometchat-ios-v5-sdk && rm -rf skills-srcUse ~/.claude/skills/ instead of .claude/skills for a personal install. The folder must contain SKILL.md.
Claude Code skills documentation · loads skills from .claude/skills/
Install the "cometchat-ios-v5-sdk" agent skill from https://github.com/cometchat/cometchat-skills/tree/main/skills/cometchat-ios-v5-sdk into .claude/skills/cometchat-ios-v5-sdk/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "cometchat-ios-v5-sdk", then confirm the skill loads.Claude Code copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$skill-installer install https://github.com/cometchat/cometchat-skills/tree/main/skills/cometchat-ios-v5-sdkType this inside Codex. $skill-installer <name> installs a curated skill from openai/skills. The installer writes to $CODEX_HOME/skills (default ~/.codex/skills). Restart Codex if the skill does not show up.
$ npx skills add cometchat/cometchat-skills --skill cometchat-ios-v5-sdk -a codexProject install goes to .agents/skills/; add -g for ~/.codex/skills/.
$ gh skill install cometchat/cometchat-skills cometchat-ios-v5-sdk --agent codexProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/cometchat/cometchat-skills.git skills-src && mkdir -p .agents/skills && cp -r skills-src/skills/cometchat-ios-v5-sdk .agents/skills/cometchat-ios-v5-sdk && rm -rf skills-srcUse ~/.agents/skills/ instead of .agents/skills for a personal install.
Codex skills documentation · loads skills from .agents/skills/
Install the "cometchat-ios-v5-sdk" agent skill from https://github.com/cometchat/cometchat-skills/tree/main/skills/cometchat-ios-v5-sdk into .agents/skills/cometchat-ios-v5-sdk/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "cometchat-ios-v5-sdk", then confirm the skill loads.Codex copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add cometchat/cometchat-skills --skill cometchat-ios-v5-sdk -a cursorProject install goes to .agents/skills/; add -g for ~/.cursor/skills/.
$ gh skill install cometchat/cometchat-skills cometchat-ios-v5-sdk --agent cursorProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/cometchat/cometchat-skills.git skills-src && mkdir -p .cursor/skills && cp -r skills-src/skills/cometchat-ios-v5-sdk .cursor/skills/cometchat-ios-v5-sdk && rm -rf skills-srcUse ~/.cursor/skills/ instead of .cursor/skills for a personal install.
Cursor skills documentation · loads skills from .cursor/skills/, .agents/skills/, .claude/skills/, .codex/skills/
Install the "cometchat-ios-v5-sdk" agent skill from https://github.com/cometchat/cometchat-skills/tree/main/skills/cometchat-ios-v5-sdk into .cursor/skills/cometchat-ios-v5-sdk/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "cometchat-ios-v5-sdk", then confirm the skill loads.Cursor copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gemini skills install https://github.com/cometchat/cometchat-skills.git --path skills/cometchat-ios-v5-sdk--scope user (default) or --scope workspace; --path is the subfolder of the repo that holds the skill; --consent skips the security confirmation prompt.
$ npx skills add cometchat/cometchat-skills --skill cometchat-ios-v5-sdk -a gemini-cliProject install goes to .agents/skills/; add -g for ~/.gemini/skills/.
$ gh skill install cometchat/cometchat-skills cometchat-ios-v5-sdk --agent gemini-cliProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/cometchat/cometchat-skills.git skills-src && mkdir -p .gemini/skills && cp -r skills-src/skills/cometchat-ios-v5-sdk .gemini/skills/cometchat-ios-v5-sdk && rm -rf skills-srcUse ~/.gemini/skills/ instead of .gemini/skills for a personal install, then run /skills reload.
Gemini CLI skills documentation · loads skills from .gemini/skills/, .agents/skills/
Install the "cometchat-ios-v5-sdk" agent skill from https://github.com/cometchat/cometchat-skills/tree/main/skills/cometchat-ios-v5-sdk into .gemini/skills/cometchat-ios-v5-sdk/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "cometchat-ios-v5-sdk", then confirm the skill loads.Gemini CLI copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gh skill install cometchat/cometchat-skills cometchat-ios-v5-sdkInstalls for Copilot at project scope by default; add --scope user for a personal install. Preview a skill first with gh skill preview. Needs GitHub CLI 2.90.0 or later (public preview).
$ npx skills add cometchat/cometchat-skills --skill cometchat-ios-v5-sdk -a github-copilotProject install goes to .agents/skills/; add -g for ~/.copilot/skills/.
$ git clone --depth 1 https://github.com/cometchat/cometchat-skills.git skills-src && mkdir -p .github/skills && cp -r skills-src/skills/cometchat-ios-v5-sdk .github/skills/cometchat-ios-v5-sdk && rm -rf skills-srcUse ~/.copilot/skills/ instead of .github/skills for a personal install. Commit .github/skills so cloud agent and code review can use it.
GitHub Copilot skills documentation · loads skills from .github/skills/, .claude/skills/, .agents/skills/
Install the "cometchat-ios-v5-sdk" agent skill from https://github.com/cometchat/cometchat-skills/tree/main/skills/cometchat-ios-v5-sdk into .github/skills/cometchat-ios-v5-sdk/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "cometchat-ios-v5-sdk", then confirm the skill loads.GitHub Copilot copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add cometchat/cometchat-skills --skill cometchat-ios-v5-sdk -a opencodeOpenCode documents no install command of its own. Project install goes to .agents/skills/; add -g for ~/.config/opencode/skills/.
$ gh skill install cometchat/cometchat-skills cometchat-ios-v5-sdk --agent opencodeProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/cometchat/cometchat-skills.git skills-src && mkdir -p .opencode/skills && cp -r skills-src/skills/cometchat-ios-v5-sdk .opencode/skills/cometchat-ios-v5-sdk && rm -rf skills-srcUse ~/.config/opencode/skills/ instead of .opencode/skills for a personal install.
OpenCode skills documentation · loads skills from .opencode/skills/, .claude/skills/, .agents/skills/
Install the "cometchat-ios-v5-sdk" agent skill from https://github.com/cometchat/cometchat-skills/tree/main/skills/cometchat-ios-v5-sdk into .opencode/skills/cometchat-ios-v5-sdk/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "cometchat-ios-v5-sdk", then confirm the skill loads.OpenCode copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
cometchat-ios-v5-sdkAdd voice & video calling to any iOS app FROM SCRATCH with the headless CometChat Calls SDK v5 (CometChatCallsSDK, via Swift Package Manager) — no UI Kit.
Cometchat iOS V5 SDK is an agent skill from cometchat/cometchat-skills. Add voice & video calling to any iOS app FROM SCRATCH with the headless CometChat Calls SDK v5 (CometChatCallsSDK, via Swift Package Manager) — no UI Kit. init→login→generateToken→joinSession into a UIView, CallSession listeners, in-call actions (mute/video/layout/record/transcribe/PiP), meet-style session rooms AND 1:1 ringing (Chat SDK signaling + Calls SDK media). Triggers: 'add calling from scratch ios', 'standalone video call swift', 'headless calls sdk ios', 'build my own call screen ios', 'meeting room…
Its SKILL.md is about 5.2k tokens, which your agent loads only when the skill is triggered. The skill folder holds 2 other files, including reference files (for example `references/docs-map.md`). Compatibility notes: iOS 15.1+ (the Calls SDK package floor; the docs' Podfile sample says 16.0 — that is the SAMPLE APP's target, not the package minimum). CometChatCallsSDK ~…
It sits in Mobile, covering iOS development, Design systems and Transcription. It works with iOS, CometChat and Swift. The repository describes itself as: Add CometChat chat & messaging and voice & video calls to any React, Next.js, React Native, Angular, Android, iOS, or Flutter project through your AI coding agent. Works with… The licence is MIT.
2 steps, taken from the first numbered list in SKILL.md.
Read from SKILL.md and the folder at commit 911b108. It shows what the files ask for, not the result of running them.
Pre-approves nothing: there is no allowed-tools line, so your agent's usual permission prompts apply.
From allowed-tools in the SKILL.md frontmatter.
Shell commands in SKILL.md call:
npxnodeFrom the folder's file list and the shell code blocks in SKILL.md.
Hosts in commands or code, which the agent is likely to contact:
github.comFrom URLs in SKILL.md, links to its own repository left out.
Names no API keys, tokens, secrets or passwords.
From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.
iOS 15.1+ (the Calls SDK package floor; the docs' Podfile sample says 16.0 — that is the SAMPLE APP's target, not the package minimum). CometChatCallsSDK ~> 5.0 (verified against 5.0.4). 1:1 ringing also needs CometChatSDK v4 (verified against 4.1.7 — the version this pack compiles against; the live getting-started page pins a newer 4.1.9, so re-check the docs before overriding) for signaling. Swift/UIKit; the call surface is a UIView, so SwiftUI hosts it via UIViewRepresentable.
From compatibility in the SKILL.md frontmatter.
Cometchat iOS V5 SDK loads about 5.2k tokens when it runs, and up to ~12k if it reads all its reference files. Until then it costs about 152 tokens; SKILL.md has 2,046 words of instructions outside code blocks.
Estimates: characters ÷ 4, the usual rule of thumb; real counts depend on the model's tokenizer. Scripts and assets cost tokens only if the agent reads them.
The automated check found no risky patterns in SKILL.md.
Automated static check — not a guarantee. Review scripts before installing. It scans the text of SKILL.md for risky patterns (piping downloads into a shell, reading credential files, hidden Unicode, destructive commands); files beside SKILL.md are not scanned.
The full file from cometchat/cometchat-skills at commit 911b108, republished under its MIT licence (© cometchat). 2,046 words, ~5,245 tokens.
.claude/skills/cometchat-ios-v5-sdk/SKILL.md (or your agent's skills folder). This skill also uses 1 other file; get the full folder from GitHub.Ground truth:
CometChatCallsSDKv5 + catalogios-calls-v5.json(the closed symbol list — every type below is in it). Official docs:/calls/ios/**= v5 · Docs MCP. Fetch exactSessionSettingsfields, event names and signatures from the docs (references/docs-map.md) — never memory. ⚠️ Twelve doc pages contain symbols that DO NOT COMPILE — see "Doc corrections" below; prefer THIS skill's names over the page's. APPEND to the user's app — additive wiring only.
-core sibling, never depends on the iOS UI Kit. 1:1 ringing additionally drives the Chat SDK (CometChatSDK v4) for signaling.cometchat-ios-core + cometchat-ios-calls — not this skill."add calling from scratch / without the UI Kit", "standalone voice/video on iOS", "build my own call screen", "headless calls SDK", "meeting-room join by session id", "one-on-one ringing".
Ask whichever the request has not already settled, then WAIT. Never infer from silence — each answer means a different SDK set and a different screen.
cometchat-ios-calls. Build your own → continue here.CometChatSDK v4 for signaling (signatures: references/docs-map.md § "1:1 RINGING"), plus CometChatPushNotifications to ring while the app is backgrounded/closed.Only EXPLICIT wording settles a question — "from scratch"/"my own call screen" → 1, "ringing"/"call a user" → 2. "Add calling to my iOS app" settles NEITHER — ask both.
Swift Package Manager only — never CocoaPods, even if a Podfile exists (same rule as cometchat-ios-core: CocoaPods distribution is winding down; a Podfile is a detection signal, not an instruction). In Xcode: File → Add Package Dependencies, URL:
https://github.com/cometchat/calls-sdk-ios⚠️ The docs print github.com/cometchat/cometchat-calls-sdk-ios — that repo 404s. Use the URL above. The package vends ONE product, CometChatCallsSDK, which bundles WebRTC as a second binary target — do not add WebRTC separately.
1:1 ringing additionally needs the Chat SDK (CometChatSDK v4) for signaling — add it as a second SPM package: URL https://github.com/cometchat/chat-sdk-ios (product CometChatSDK, verified against 4.1.7). Without it the import CometChatSDK on the ringing path does not resolve. (Meet-style / room-only does NOT need it.)
Info.plist — REQUIRED or the call dies on first permission prompt: NSCameraUsageDescription + NSMicrophoneUsageDescription. For calls that survive backgrounding, add Background Modes → Audio, AirPlay and Picture in Picture (+ Voice over IP if you use VoIP push).
Credentials: App ID · Region · Auth Key (dev only). Load the CLI on demand — npx @cometchat/skills-cli@3 auth login → provision use --app-id <id> --json (@3 pins the CLI major that matches the v5 skills). Already have App ID / Region / Auth Key? Just paste them. Mint auth tokens server-side for production; never ship the Auth Key.
Init (once, must succeed) → CometChatCalls.login(...) → then generateToken / joinSession / listeners. Nothing joins before init+login resolve.
CometChatCalls.initFromSettings(onSuccess:onError:) — the ai-agent / telemetry-attributed path (persists integrationSource="ai-agent"). It takes no settings argument: it reads a physical cometchat-settings.json from Bundle.main (root appId + region; optional callsSDK → host/adminHost/clientHost/callsHost). The file MUST be in the target's Copy Bundle Resources or init fails SETTINGS_FILE_NOT_FOUND. It is intentionally undocumented (ai-agent-only) — the settings shape is baked in references/docs-map.md.CallAppSettingsBuilder().set(appID:).set(region:).build() → CometChatCalls(callsAppSettings:onSuccess:onError:). ⚠️ Use set(appID:)/set(region:) — the setAppId/setRegion/setHost spellings the docs use are deprecated in 5.0.4.initFromSettings re-attributes the app to "manual" and the ai-agent telemetry is lost.CometChatCalls.initFromSettings · CometChatCalls(callsAppSettings:) · CallAppSettingsBuilder · CometChatCalls.login (UID+authKey / UID+apiKey / authToken) · logout · getLoggedInUser → CallsUserCometChatCalls.generateToken · CometChatCalls.joinSession · CometChatCalls.sessionSettingsBuilder · SessionSettingsBuilder → SessionSettingsBuilder.SessionSettings (NESTED — that is the type joinSession(callSetting:) takes)generateToken(sessionID:) → joinSession(callToken:callSetting:container:), or joinSession(sessionID:callSetting:container:) directly.CallSession.shared, for CUSTOM controls ONLY (the default surface already renders them; see pitfall #1): leaveSession · muteAudio/unmuteAudio · pauseVideo/resumeVideo · setLayout · setAudioMode · switchCamera · raiseHand/lowerHand · startRecording/stopRecording · startTranscription/stopTranscription · startStreaming/stopStreaming · pinParticipant/unpinParticipant · muteParticipant · pauseParticipantVideo · enablePictureInPictureLayout/disablePictureInPictureLayout · isCallSessionActiveCallSession.shared, remove on teardown): SessionStatusListener · MediaEventsListener · ParticipantEventListener · LayoutListener · ButtonClickListener · clearAllListenersCallLogsBuilder → CallLogsRequest → CallLog (+ CallUser/CallGroup/CallEntity/CallStatus/CallCategory/CallDirection)AudioMode (.speaker/.earpiece/.bluetooth/.headphones) · SessionType (.video/.voice) · LayoutType (.tile/.spotlight/.sidebar) · CameraFacing (.FRONT/.REAR — UPPERCASE, the ONE Calls-SDK enum that breaks the lowercase convention; .front/.rear fail to compile, and the docs' .BACK does NOT exist — see Doc corrections)This map is a curated highlight, NOT the full surface — the AUTHORITATIVE closed list is the
ios-calls-v5.jsoncatalog (60 symbols). A symbol is real iff it's in the catalog — confirm THERE, then fetch its exact signature from the docs page inreferences/docs-map.md.
Register listeners on CallSession.shared BEFORE joining; remove each one (or clearAllListeners()) on teardown, and call CallSession.shared.leaveSession() when the screen goes away. For ringing also CometChat.removeCallListener(<id>). Never leak.
The listener contract (all five, verified in the 5.0.4 interface):
@objc and EVERY member is optional. Implement ONLY the callbacks you need — do NOT stub the rest. A name that is NOT in the protocol also compiles, then silently never fires — copy callback names from the events page / references/docs-map.md, never by analogy.@objc, the conforming type MUST be a class inheriting NSObject.CallSession.shared — the names are NOT in the catalog (it is types-only), so use these:| Protocol | Register / remove |
|---|---|
SessionStatusListener | addSessionStatusListener(_:) / removeSessionStatusListener(_:) |
MediaEventsListener | addMediaEventsListener(_:) / removeMediaEventsListener(_:) |
ParticipantEventListener | addParticipantEventListener(_:) / removeParticipantEventListener(_:) |
LayoutListener | addLayoutListener(_:) / removeLayoutListener(_:) |
ButtonClickListener | addButtonClickListener(_:) / removeButtonClickListener(_:) |
ButtonClickListener callbacks fire BEFORE the SDK's own action, and do NOT suppress it. Reacting to onLeaveSessionButtonClicked must NOT also call leaveSession() — the SDK is already leaving; doing both double-leaves.Participant has EXACTLY 12 fields, all Optional: uid · name · avatar · mid · state · isJoined · joinedAt · leftAt · deviceID · totalAudioMinutes · totalVideoMinutes · totalDurationInMinutes. Identity is uid (String? — unwrap before passing to muteParticipant(participantId:)), never name.Participant fields that DO NOT EXIST — pid, isPinned, isAudioMuted, isVideoPaused, isPresenting, raisedHandTimestamp. Copying any of them fails to compile. pid → use uid; the five state flags have no field at all — track that state yourself from the ParticipantEventListener callbacks (onParticipantAudioMuted/Unmuted, onParticipantHandRaised/Lowered, onParticipantStarted/StoppedScreenShare).// Fetch every signature/field from references/docs-map.md. This is the ORDER, which is the part that bites.
import UIKit
import CometChatCallsSDK
1. CometChatCalls.initFromSettings(onSuccess:onError:) // ai-agent default; reads bundled cometchat-settings.json
2. CometChatCalls.login(UID:authKey:onSuccess:onError:) // or login(authToken:) in production
3. let settings = CometChatCalls.sessionSettingsBuilder.setSessionType(.video).build() // NOT .setType — see Doc corrections
4. CallSession.shared.addSessionStatusListener(self) // register BEFORE joining
5. CometChatCalls.joinSession(sessionID:callSetting:container:onSuccess:onError:) // container = a UIView with REAL bounds
// or: generateToken(sessionID:) -> joinSession(callToken:callSetting:container:)
6. // NO control buttons needed — the joined surface ALREADY renders mute/video/leave.
7. // teardown -> CallSession.shared.clearAllListeners(); CallSession.shared.leaveSession()The container MUST have real bounds — a zero-frame view renders invisibly. In SwiftUI wrap it with UIViewRepresentable.
CometChatPushNotifications)Ringing a user whose app is backgrounded or terminated is NOT the Calls SDK's job. It is
CometChatPushNotifications 1.0.0 — a different package. Do not hand-roll it.
https://github.com/cometchat/push-notifications-sdk-ios @ 1.0.0 (product
CometChatPushNotificationsSwift). Its Package.swift declares NO dependencies, yet the binary
imports CometChatSDK + CometChatCallsSDK — the app must ALSO have both packages above
(chat-sdk-ios + calls-sdk-ios) or the build fails. import CometChatPushNotificationsSwift — the
module name differs from the class name; importing CometChatPushNotifications does not compile.CometChat.init: CometChatPushNotifications.shared.initialize(config: .init(providerId:)) then set .delegateAppDelegate: forward registerDeviceToken(_:) (+ handleRegistrationFailure(_:))CometChatPushNotificationsDelegate — every method is optional; the ones that matter are presentCallScreen(for:sessionId:) and onCallCleanupComplete()PKPushRegistryDelegate or a CXProviderDelegate. The SDK owns both. Writing
either is the #1 mistake here — it fights the SDK for the same callbacks.CometChatPushNotifications.shared.notifyCallsSDKReady() from the login
success — NOT init success. It only lifts the buffer; it does not check that anyone is logged in,
so releasing at init hands presentCallScreen an unauthenticated session and the joinSession
after it fails on auth. (A 3s safety timeout fires the buffered call anyway, so a slow login can
still present early — do not assume a live session in the call screen.)presentCallScreen fires — present UI and join; do not accept again.ForegroundCallPresentation = .callKit (default) · .inApp (CometChatIncomingCallView, styled
via CometChatIncomingCallStyle) · .none (present your own).Callback shapes differ PER API and
?.on a non-optional does not compile —login/logouthand you a NON-optionalCometChatCallException;initFromSettings/generateToken/joinSessionhand you an Optional. Exact table +isCallSessionActive()arity:references/docs-map.md.
| The docs write | It does not compile — use |
|---|---|
AudioModeType (events, session-settings, recording) | AudioMode — AudioModeType exists in neither the interface nor the binary |
CometChat.CallStatus (ringing) | CometChat.callStatus — lowercase c; Swift is case-sensitive |
.setType(.video) (ringing, session-settings, join-session, idle-timeout, migration-guide) | .setSessionType(.video) — SessionSettingsBuilder has no setType in any spelling |
SPM URL …/cometchat-calls-sdk-ios (setup) | https://github.com/cometchat/calls-sdk-ios — documented URL 404s |
region is "us or eu" (setup) | also in — the SDK only checks the string is non-empty; in is a live region |
.setAppId() / .setRegion() (setup) | .set(appID:) / .set(region:) — the setX spellings are deprecated in 5.0.4 |
call.callInitiator?.name (ringing) | (call.callInitiator as? User)?.name — callInitiator/callReceiver are AppEntity?; only User has name |
CallType / CallTypeVideo as the session type (5 pages) | SessionType / SessionType.video — CallType has zero occurrences in CometChatCallsSDK. It is a Chat SDK type (CometChat.CallType), valid ONLY on the ringing path. Never pass it to SessionSettingsBuilder |
SessionType.audio for audio-only | .voice — .audio and .audioVideo are @available(*, deprecated) in 5.0.4 |
| The Objective-C tabs (setup, session-settings, ringing, voip-calling) | Do not copy them — deprecated setters, too few opening brackets, and enum constants wrongly CometChat-prefixed. Exact names: references/docs-map.md |
participant.pid / .isPinned / .isAudioMuted / .isVideoPaused / .isPresenting / .raisedHandTimestamp (actions, participant-management, custom-participant-list — 23×) | None of these exist on Participant. pid → uid; the five flags have no field — derive them from the participant events. Two review emits failed swiftc on exactly this |
CallSession.shared.setAudioMode / setLayout taking an enum | They take a String — "SPEAKER"/"EARPIECE"/"BLUETOOTH"/"HEADPHONES", "TILE"/"SPOTLIGHT"/"SIDEBAR". Only the builder forms take AudioMode / LayoutType. Same method name, two different parameter types |
docs show only login(UID:apiKey:) / login(authToken:) | login(UID:authKey:) also exists in 5.0.4 — the docs are incomplete, the skill's recipe is correct |
| — (unstated anywhere) | Chat-SDK enum casing is INCONSISTENT — CometChat.CallType/.ReceiverType Capitalised, CometChat.callStatus lowercase. Analogy fails to compile; check each. |
Docs PR cometchat/docs#489 merged 2026-09-08 and the live /calls/ios/** pages now carry these fixes — re-verified against the live pages. The one exception is CameraFacing.BACK: it is still live on both session-settings and events (.BACK, not .REAR) — #489 did not touch it (separate docs fix owed). Keep every correction above as defensive guidance. Detail + per-symbol live status: references/docs-map.md.
CallSession.shared actions are for CUSTOM controls ONLY — reach for them just when the user EXPLICITLY asks to replace the defaults, and hide the built-ins first (hide*Button list in references/docs-map.md). To merely REACT to the leave button, implement ButtonClickListener.onLeaveSessionButtonClicked — never a second button.CallSession.shared.leaveSession() ends YOUR media; CometChat.endCall(sessionID:) tells the peer and completes the call log. Do only the first and the other side still thinks the call is live.joinSession mounts into your UIView; give it real size.var window: UIWindow? on your AppDelegate, even in a scene-based app. The SDK reads UIApplication.delegate.window; without it the app aborts (unrecognized selector) right after the camera permission is granted. Detail: references/docs-map.md.NSCameraUsageDescription/NSMicrophoneUsageDescription means iOS kills the app at the first permission request.cometchat-settings.json not bundled — initFromSettings fails SETTINGS_FILE_NOT_FOUND; the file must be in Copy Bundle Resources.initFromSettings silently re-attributes telemetry to "manual".onParticipantStarted/StoppedScreenShare are real — no start/stop action (web has one), and local capture needs a Broadcast Upload Extension. Do not emit one. (The docs' onScreenShareStarted/Stopped do not exist — see docs-map.)Participant carries no mute/pin/hand/share flag, and (verified live on two clients) the participant events deliver nothing: onParticipantJoined/Left never fire and onParticipantListChanged arrives EMPTY. You can never obtain a peer uid, so muteParticipant/pinParticipant/pauseParticipantVideo have no argument. Do NOT emit them or a custom roster — the built-in participant panel is already on screen. Detail: references/docs-map.md.SessionSettings fields and action params are FETCHED from docs, never guessed.CometChatCallsSDK symbol emitted appears in ios-calls-v5.json (node test-suite/scripts/verify-catalog.mjs --family ios-calls-v5).CometChatCallsSDK (5.0.4) with swiftc -typecheck.© cometchat, MIT. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file
SKILL.md and 1 other file (references) in skills/cometchat-ios-v5-sdk of cometchat/cometchat-skills.
Open the folder on GitHubat commit 911b108
Cometchat iOS V5 SDK next to the 5 skills that share the most tags, products or categories with it. Stars are the repository's; “used in” counts other GitHub owners with a copy.
| Skill | Stars | Used in | Tokens | Auto-check | Licence | Repo updated |
|---|---|---|---|---|---|---|
| Cometchat iOS V5 SDK this skillcometchat/cometchat-skills | 129 | — | ~5.2k | Automated safety check: Pass | MIT | |
| Swiftui Expert SkillAFK-surf/OpenBridge | 430 | 2 repos | ~3.9k | Automated safety check: Pass | MIT | |
| Inspector MCPipedro/Inspector | 170 | — | ~3.4k | Automated safety check: Pass | MIT | |
| Swiftui AnimationAstraFoundry/KumoApp | 290 | — | ~4.1k | Automated safety check: Pass | AGPL-3.0 | |
| Mlkit Released-date/google-mlkit-swiftpm | 148 | — | ~1.7k | Automated safety check: Pass | Apache-2.0 | |
| Audit Build Warningsbitwarden/ios | 694 | — | ~1.9k | Automated safety check: Pass | GPL-3.0 |
AFK-surf/OpenBridge
Write, review, or improve SwiftUI code following best practices for state management, view composition, performance, modern APIs, Swift concurrency, and iOS 26+ Liquid Glass adoption.
ipedro/Inspector
A skill your agent uses when an agent needs to inspect a live iOS app through the Inspector MCP bridge, register or troubleshoot InspectorMCPServer for a consumer Xcode project, or query, resolve…
AstraFoundry/KumoApp
Implement, review, or improve SwiftUI animations and transitions.
d-date/google-mlkit-swiftpm
A skill your agent uses when triaging incoming issues or PRs for google-mlkit-swiftpm, or when cutting a release.
bitwarden/ios
Build the Bitwarden iOS app, capture all compiler and lint warnings, categorize them into Swift 6 concurrency vs actionable, and interactively fix the actionable ones.
microsoft/SwiftStreamingMarkdown
Record and validate swift-snapshot-testing snapshots in the SwiftStreamingMarkdown package: regenerate reference PNGs, run snapshot tests, and diff failed snapshots.
cometchat/cometchat-skills
Adds voice and video calling to an Android app in Kotlin with the headless CometChat Calls SDK v5, covering meeting-style rooms, 1:1 ringing calls, call logs and recording.
cometchat/cometchat-skills
Builds chat on Android with your own UI against the headless CometChat Chat SDK v5, covering install, Jetifier conflicts, credentials and init-before-login ordering.
cometchat/cometchat-skills
Picks and customizes CometChat's Angular UI Kit components by their verified component list, exact input and output event names, and the surfaces that have no kit component at all.
cometchat/cometchat-skills
Enables or builds CometChat features such as polls, reactions, smart replies and pinned messages in an Angular app, first classifying how much client code each one needs.
cometchat/cometchat-skills
Decides where CometChat chat UI goes in an Angular app: a dedicated route, a dashboard panel, a support widget or the full multi-pane app, with thread and search panels.
cometchat/cometchat-skills
Add voice & video calling to any web app FROM SCRATCH with the headless CometChat Calls SDK v5 (@cometchat/calls-sdk-javascript@5) — no prebuilt UI Kit.
Categories
Add voice & video calling to any iOS app FROM SCRATCH with the headless CometChat Calls SDK v5 (CometChatCallsSDK, via Swift Package Manager) — no UI Kit. Cometchat iOS V5 SDK is an agent skill from cometchat/cometchat-skills. Add voice & video calling to any iOS app FROM SCRATCH with the headless CometChat Calls SDK v5 (CometChatCallsSDK, via Swift Package Manager) — no UI Kit.
Cometchat iOS V5 SDK fits situations like: tasks that involve iOS development; tasks that involve Design systems; tasks that involve Transcription.
Run `npx skills add cometchat/cometchat-skills --skill cometchat-ios-v5-sdk -a claude-code`. Or copy the skill folder (skills/cometchat-ios-v5-sdk in cometchat/cometchat-skills) into .claude/skills/cometchat-ios-v5-sdk in your project. Claude Code loads it when a task matches its description.
Run `npx skills add cometchat/cometchat-skills --skill cometchat-ios-v5-sdk -a codex`. Or copy the skill folder (skills/cometchat-ios-v5-sdk in cometchat/cometchat-skills) into .agents/skills/cometchat-ios-v5-sdk in your project. Codex loads it when a task matches its description.
Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add cometchat/cometchat-skills --skill cometchat-ios-v5-sdk -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/cometchat-ios-v5-sdk, .gemini/skills/cometchat-ios-v5-sdk, .github/skills/cometchat-ios-v5-sdk and .opencode/skills/cometchat-ios-v5-sdk in your project.
Going by SKILL.md and its folder, Cometchat iOS V5 SDK needs the command-line tools its instructions call (npx and node). Our summary lists: Node.js. Compatibility (from SKILL.md): iOS 15.1+ (the Calls SDK package floor; the docs' Podfile sample says 16.0 — that is the SAMPLE APP's target, not the package minimum). CometChatCallsSDK ~> 5.0 (verified against 5.0.4). 1:1 ringing also needs CometChatSDK v4 (verified against 4.1.7 — the version this pack compiles against; the live getting-started page pins a newer 4.1.9, so re-check the docs before overriding) for signaling. Swift/UIKit; the call surface is a UIView, so SwiftUI hosts it via UIViewRepresentable..
SKILL.md names 1 domain. In commands or code: github.com; the agent is likely to contact it when it follows the instructions. This is read from the text; nothing was executed.
Our automated static check of SKILL.md found no risky patterns, such as piping downloads into a shell, reading credential files or hidden Unicode. It is not a guarantee. Review the folder before installing.
Cometchat iOS V5 SDK is published under the MIT licence (declared in SKILL.md). It allows redistribution, so the full SKILL.md is shown on this page.
About 5.2k tokens (SKILL.md is roughly 21k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full. Its references folder adds about 7.1k tokens, read only when the agent opens those files.
Skills that share tags, products or a category with Cometchat iOS V5 SDK: Swiftui Expert Skill (AFK-surf/OpenBridge, 430 stars), Inspector MCP (ipedro/Inspector, 170 stars), Swiftui Animation (AstraFoundry/KumoApp, 290 stars) and Mlkit Release (d-date/google-mlkit-swiftpm, 148 stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.
cometchat (a GitHub organization) maintains it in cometchat/cometchat-skills, which has 129 GitHub stars. The repository holds 97 skills in this directory. The repository was last updated on October 5, 2026.
Source: cometchat/cometchat-skills on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.