@cometchat/skills 4.3.0 → 4.4.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/bin/install.js +27 -0
- package/package.json +14 -1
- package/skills/cometchat/SKILL.md +233 -69
- package/skills/cometchat/references/asking-questions.md +48 -0
- package/skills/cometchat-a11y/SKILL.md +3 -2
- package/skills/cometchat-android-v5/SKILL.md +2 -1
- package/skills/cometchat-android-v5-calls/SKILL.md +36 -22
- package/skills/cometchat-android-v5-calls/references/README.md +1 -1
- package/skills/cometchat-android-v5-calls/references/add-calls-to-existing-chat.md +7 -5
- package/skills/cometchat-android-v5-calls/references/audio-controls.md +4 -4
- package/skills/cometchat-android-v5-calls/references/call-layouts.md +33 -25
- package/skills/cometchat-android-v5-calls/references/call-session.md +2 -2
- package/skills/cometchat-android-v5-calls/references/custom-ui.md +5 -5
- package/skills/cometchat-android-v5-calls/references/event-listeners.md +2 -2
- package/skills/cometchat-android-v5-calls/references/idle-timeout.md +20 -14
- package/skills/cometchat-android-v5-calls/references/in-call-chat.md +1 -1
- package/skills/cometchat-android-v5-calls/references/migration-v4-to-v5.md +43 -27
- package/skills/cometchat-android-v5-calls/references/participant-management.md +3 -3
- package/skills/cometchat-android-v5-calls/references/raise-hand.md +25 -19
- package/skills/cometchat-android-v5-calls/references/recording.md +2 -2
- package/skills/cometchat-android-v5-calls/references/ringing-integration.md +1 -1
- package/skills/cometchat-android-v5-calls/references/screen-sharing.md +5 -9
- package/skills/cometchat-android-v5-calls/references/session-settings.md +3 -3
- package/skills/cometchat-android-v5-calls/references/setup.md +1 -1
- package/skills/cometchat-android-v5-calls/references/share-invite.md +9 -4
- package/skills/cometchat-android-v5-calls/references/video-controls.md +4 -4
- package/skills/cometchat-android-v5-calls/references/voip-calling.md +2 -2
- package/skills/cometchat-android-v5-components/SKILL.md +4 -3
- package/skills/cometchat-android-v5-core/SKILL.md +5 -3
- package/skills/cometchat-android-v5-customization/SKILL.md +171 -7
- package/skills/cometchat-android-v5-extensions/SKILL.md +7 -4
- package/skills/cometchat-android-v5-features/SKILL.md +5 -4
- package/skills/cometchat-android-v5-placement/SKILL.md +2 -1
- package/skills/cometchat-android-v5-production/SKILL.md +2 -1
- package/skills/cometchat-android-v5-push/SKILL.md +2 -3
- package/skills/cometchat-android-v5-testing/SKILL.md +2 -1
- package/skills/cometchat-android-v5-theming/SKILL.md +2 -1
- package/skills/cometchat-android-v5-troubleshooting/SKILL.md +3 -2
- package/skills/cometchat-android-v6/SKILL.md +2 -1
- package/skills/cometchat-android-v6-builder-settings/SKILL.md +11 -7
- package/skills/cometchat-android-v6-calls/SKILL.md +79 -18
- package/skills/cometchat-android-v6-calls/references/advanced-features.md +87 -0
- package/skills/cometchat-android-v6-calls/references/call-layouts.md +24 -15
- package/skills/cometchat-android-v6-calls/references/call-session.md +2 -2
- package/skills/cometchat-android-v6-calls/references/device-management.md +17 -16
- package/skills/cometchat-android-v6-calls/references/idle-timeout.md +7 -4
- package/skills/cometchat-android-v6-calls/references/in-call-chat.md +13 -8
- package/skills/cometchat-android-v6-calls/references/raise-hand.md +6 -4
- package/skills/cometchat-android-v6-compose-components/SKILL.md +52 -29
- package/skills/cometchat-android-v6-compose-customization/SKILL.md +156 -1
- package/skills/cometchat-android-v6-compose-placement/SKILL.md +129 -40
- package/skills/cometchat-android-v6-compose-theming/SKILL.md +27 -1
- package/skills/cometchat-android-v6-core/SKILL.md +208 -28
- package/skills/cometchat-android-v6-events/SKILL.md +4 -1
- package/skills/cometchat-android-v6-extensions/SKILL.md +2 -1
- package/skills/cometchat-android-v6-features/SKILL.md +26 -2
- package/skills/cometchat-android-v6-kotlin-components/SKILL.md +31 -1
- package/skills/cometchat-android-v6-kotlin-customization/SKILL.md +172 -1
- package/skills/cometchat-android-v6-kotlin-placement/SKILL.md +20 -5
- package/skills/cometchat-android-v6-kotlin-theming/SKILL.md +36 -5
- package/skills/cometchat-android-v6-migration/SKILL.md +44 -42
- package/skills/cometchat-android-v6-production/SKILL.md +6 -3
- package/skills/cometchat-android-v6-push/SKILL.md +43 -2
- package/skills/cometchat-android-v6-testing/SKILL.md +11 -8
- package/skills/cometchat-android-v6-troubleshooting/SKILL.md +26 -5
- package/skills/cometchat-angular-calls/SKILL.md +256 -389
- package/skills/cometchat-angular-calls/references/add-calls-to-existing-chat.md +3 -2
- package/skills/cometchat-angular-calls/references/call-layouts.md +29 -12
- package/skills/cometchat-angular-calls/references/call-session.md +2 -2
- package/skills/cometchat-angular-calls/references/custom-ui.md +18 -10
- package/skills/cometchat-angular-calls/references/device-management.md +53 -34
- package/skills/cometchat-angular-calls/references/group-calls.md +45 -24
- package/skills/cometchat-angular-calls/references/idle-timeout.md +31 -15
- package/skills/cometchat-angular-calls/references/ngzone-and-async-callbacks.md +7 -6
- package/skills/cometchat-angular-calls/references/raise-hand.md +9 -4
- package/skills/cometchat-angular-calls/references/recording-screen-share.md +32 -39
- package/skills/cometchat-angular-calls/references/ringing-integration.md +3 -1
- package/skills/cometchat-angular-calls/references/share-invite.md +11 -5
- package/skills/cometchat-angular-calls/references/virtual-background.md +29 -0
- package/skills/cometchat-angular-components/SKILL.md +149 -620
- package/skills/cometchat-angular-core/SKILL.md +232 -312
- package/skills/cometchat-angular-customization/SKILL.md +415 -223
- package/skills/cometchat-angular-features/SKILL.md +216 -334
- package/skills/cometchat-angular-patterns/SKILL.md +168 -359
- package/skills/cometchat-angular-placement/SKILL.md +189 -560
- package/skills/cometchat-angular-production/SKILL.md +241 -92
- package/skills/cometchat-angular-push/SKILL.md +280 -294
- package/skills/cometchat-angular-testing/SKILL.md +430 -158
- package/skills/cometchat-angular-theming/SKILL.md +190 -265
- package/skills/cometchat-angular-troubleshooting/SKILL.md +192 -157
- package/skills/cometchat-astro-patterns/SKILL.md +2 -1
- package/skills/cometchat-calls/SKILL.md +25 -19
- package/skills/cometchat-calls/references/use-case-broadcast.md +15 -10
- package/skills/cometchat-calls/references/use-case-marketplace.md +2 -3
- package/skills/cometchat-calls/references/use-case-support.md +3 -4
- package/skills/cometchat-calls/references/use-case-team.md +23 -12
- package/skills/cometchat-calls/references/use-case-telehealth.md +3 -4
- package/skills/cometchat-components/SKILL.md +163 -25
- package/skills/cometchat-core/SKILL.md +255 -19
- package/skills/cometchat-customization/SKILL.md +50 -25
- package/skills/cometchat-features/SKILL.md +313 -34
- package/skills/cometchat-flutter-v5/SKILL.md +10 -4
- package/skills/cometchat-flutter-v5-calls/SKILL.md +188 -158
- package/skills/cometchat-flutter-v5-calls/references/add-calls-to-existing-chat.md +48 -24
- package/skills/cometchat-flutter-v5-calls/references/call-layouts.md +20 -15
- package/skills/cometchat-flutter-v5-calls/references/call-session.md +100 -145
- package/skills/cometchat-flutter-v5-calls/references/device-management.md +12 -8
- package/skills/cometchat-flutter-v5-calls/references/group-calls.md +30 -36
- package/skills/cometchat-flutter-v5-calls/references/idle-timeout.md +15 -13
- package/skills/cometchat-flutter-v5-calls/references/in-call-chat.md +12 -9
- package/skills/cometchat-flutter-v5-calls/references/migration-v4-to-v5.md +115 -65
- package/skills/cometchat-flutter-v5-calls/references/raise-hand.md +41 -30
- package/skills/cometchat-flutter-v5-calls/references/ringing-integration.md +17 -14
- package/skills/cometchat-flutter-v5-calls/references/share-invite.md +8 -2
- package/skills/cometchat-flutter-v5-conversations/SKILL.md +2 -1
- package/skills/cometchat-flutter-v5-core/SKILL.md +5 -4
- package/skills/cometchat-flutter-v5-customization/SKILL.md +136 -5
- package/skills/cometchat-flutter-v5-events/SKILL.md +2 -1
- package/skills/cometchat-flutter-v5-messages/SKILL.md +2 -1
- package/skills/cometchat-flutter-v5-production/SKILL.md +15 -6
- package/skills/cometchat-flutter-v5-push/SKILL.md +2 -1
- package/skills/cometchat-flutter-v5-testing/SKILL.md +17 -6
- package/skills/cometchat-flutter-v5-theming/SKILL.md +2 -1
- package/skills/cometchat-flutter-v5-troubleshooting/SKILL.md +7 -6
- package/skills/cometchat-flutter-v5-users-groups/SKILL.md +3 -2
- package/skills/cometchat-flutter-v6/SKILL.md +17 -16
- package/skills/cometchat-flutter-v6-calls/SKILL.md +72 -57
- package/skills/cometchat-flutter-v6-calls/references/add-calls-to-existing-chat.md +5 -3
- package/skills/cometchat-flutter-v6-calls/references/advanced-features.md +89 -0
- package/skills/cometchat-flutter-v6-calls/references/call-layouts.md +15 -12
- package/skills/cometchat-flutter-v6-calls/references/call-session.md +2 -2
- package/skills/cometchat-flutter-v6-calls/references/device-management.md +9 -3
- package/skills/cometchat-flutter-v6-calls/references/group-calls.md +10 -10
- package/skills/cometchat-flutter-v6-calls/references/idle-timeout.md +15 -7
- package/skills/cometchat-flutter-v6-calls/references/in-call-chat.md +6 -3
- package/skills/cometchat-flutter-v6-calls/references/raise-hand.md +23 -16
- package/skills/cometchat-flutter-v6-components/SKILL.md +32 -11
- package/skills/cometchat-flutter-v6-conversations/SKILL.md +39 -11
- package/skills/cometchat-flutter-v6-core/SKILL.md +182 -21
- package/skills/cometchat-flutter-v6-customization/SKILL.md +97 -25
- package/skills/cometchat-flutter-v6-events/SKILL.md +3 -2
- package/skills/cometchat-flutter-v6-features/SKILL.md +15 -6
- package/skills/cometchat-flutter-v6-messages/SKILL.md +111 -60
- package/skills/cometchat-flutter-v6-migration/SKILL.md +18 -25
- package/skills/cometchat-flutter-v6-placement/SKILL.md +79 -50
- package/skills/cometchat-flutter-v6-production/SKILL.md +13 -12
- package/skills/cometchat-flutter-v6-push/SKILL.md +41 -19
- package/skills/cometchat-flutter-v6-testing/SKILL.md +4 -4
- package/skills/cometchat-flutter-v6-theming/SKILL.md +38 -5
- package/skills/cometchat-flutter-v6-troubleshooting/SKILL.md +182 -17
- package/skills/cometchat-flutter-v6-users-groups/SKILL.md +12 -4
- package/skills/cometchat-i18n/SKILL.md +139 -78
- package/skills/cometchat-ios/SKILL.md +4 -2
- package/skills/cometchat-ios-calls/SKILL.md +225 -95
- package/skills/cometchat-ios-calls/references/add-calls-to-existing-chat.md +11 -9
- package/skills/cometchat-ios-calls/references/audio-modes-and-controls.md +45 -0
- package/skills/cometchat-ios-calls/references/avaudiosession-routing.md +6 -7
- package/skills/cometchat-ios-calls/references/call-layouts.md +31 -91
- package/skills/cometchat-ios-calls/references/call-session.md +51 -54
- package/skills/cometchat-ios-calls/references/callkit-and-pushkit.md +33 -29
- package/skills/cometchat-ios-calls/references/custom-ui.md +38 -38
- package/skills/cometchat-ios-calls/references/group-calls.md +33 -70
- package/skills/cometchat-ios-calls/references/idle-timeout.md +24 -25
- package/skills/cometchat-ios-calls/references/in-call-chat.md +19 -23
- package/skills/cometchat-ios-calls/references/migration-v4-to-v5.md +128 -70
- package/skills/cometchat-ios-calls/references/picture-in-picture.md +20 -20
- package/skills/cometchat-ios-calls/references/raise-hand.md +14 -227
- package/skills/cometchat-ios-calls/references/recording-screen-share.md +35 -122
- package/skills/cometchat-ios-calls/references/ringing-integration.md +17 -16
- package/skills/cometchat-ios-calls/references/share-invite.md +8 -12
- package/skills/cometchat-ios-calls/references/swiftui-uikit-hosting.md +4 -4
- package/skills/cometchat-ios-components/SKILL.md +200 -12
- package/skills/cometchat-ios-core/SKILL.md +173 -45
- package/skills/cometchat-ios-customization/SKILL.md +276 -110
- package/skills/cometchat-ios-features/SKILL.md +64 -36
- package/skills/cometchat-ios-placement/SKILL.md +15 -12
- package/skills/cometchat-ios-production/SKILL.md +12 -4
- package/skills/cometchat-ios-push/SKILL.md +53 -19
- package/skills/cometchat-ios-testing/SKILL.md +14 -9
- package/skills/cometchat-ios-theming/SKILL.md +39 -3
- package/skills/cometchat-ios-troubleshooting/SKILL.md +41 -21
- package/skills/cometchat-native-bare-patterns/SKILL.md +34 -17
- package/skills/cometchat-native-calls/SKILL.md +28 -16
- package/skills/cometchat-native-calls/references/add-calls-to-existing-chat.md +2 -2
- package/skills/cometchat-native-calls/references/call-layouts.md +15 -14
- package/skills/cometchat-native-calls/references/call-session.md +2 -2
- package/skills/cometchat-native-calls/references/custom-ui.md +12 -8
- package/skills/cometchat-native-calls/references/device-management.md +53 -30
- package/skills/cometchat-native-calls/references/group-calls.md +35 -30
- package/skills/cometchat-native-calls/references/idle-timeout.md +6 -6
- package/skills/cometchat-native-calls/references/in-call-chat.md +10 -8
- package/skills/cometchat-native-calls/references/migration-v4-to-v5.md +2 -2
- package/skills/cometchat-native-calls/references/raise-hand.md +15 -13
- package/skills/cometchat-native-calls/references/recording-screen-share.md +49 -170
- package/skills/cometchat-native-calls/references/share-invite.md +7 -5
- package/skills/cometchat-native-calls/references/voip-push-end-to-end.md +4 -2
- package/skills/cometchat-native-components/SKILL.md +84 -52
- package/skills/cometchat-native-core/SKILL.md +101 -32
- package/skills/cometchat-native-customization/SKILL.md +150 -28
- package/skills/cometchat-native-expo-patterns/SKILL.md +57 -26
- package/skills/cometchat-native-features/SKILL.md +23 -16
- package/skills/cometchat-native-placement/SKILL.md +19 -10
- package/skills/cometchat-native-production/SKILL.md +9 -3
- package/skills/cometchat-native-push/SKILL.md +2 -1
- package/skills/cometchat-native-testing/SKILL.md +1 -2
- package/skills/cometchat-native-theming/SKILL.md +54 -29
- package/skills/cometchat-native-troubleshooting/SKILL.md +9 -3
- package/skills/cometchat-nextjs-patterns/SKILL.md +20 -6
- package/skills/cometchat-placement/SKILL.md +42 -3
- package/skills/cometchat-production/SKILL.md +12 -5
- package/skills/cometchat-react-calls/SKILL.md +220 -10
- package/skills/cometchat-react-calls/references/add-calls-to-existing-chat.md +4 -3
- package/skills/cometchat-react-calls/references/call-layouts.md +5 -6
- package/skills/cometchat-react-calls/references/call-session.md +1 -1
- package/skills/cometchat-react-calls/references/custom-ui.md +61 -15
- package/skills/cometchat-react-calls/references/device-management.md +55 -51
- package/skills/cometchat-react-calls/references/group-calls.md +18 -23
- package/skills/cometchat-react-calls/references/idle-timeout.md +25 -12
- package/skills/cometchat-react-calls/references/in-call-chat.md +7 -7
- package/skills/cometchat-react-calls/references/migration-v4-to-v5.md +9 -11
- package/skills/cometchat-react-calls/references/raise-hand.md +14 -14
- package/skills/cometchat-react-calls/references/recording-screen-share.md +39 -38
- package/skills/cometchat-react-calls/references/ringing-integration.md +2 -2
- package/skills/cometchat-react-calls/references/share-invite.md +4 -5
- package/skills/cometchat-react-calls/references/testing-calls-on-web.md +20 -2
- package/skills/cometchat-react-calls/references/virtual-background.md +32 -0
- package/skills/cometchat-react-patterns/SKILL.md +44 -4
- package/skills/cometchat-react-push/SKILL.md +258 -72
- package/skills/cometchat-react-router-patterns/SKILL.md +10 -4
- package/skills/cometchat-react-testing/SKILL.md +14 -5
- package/skills/cometchat-theming/SKILL.md +181 -18
- package/skills/cometchat-troubleshooting/SKILL.md +40 -20
|
@@ -3,13 +3,14 @@ name: cometchat-ios-core
|
|
|
3
3
|
description: "Shared rules for CometChat iOS UI Kit v5. Always loaded alongside placement skills. Read this first."
|
|
4
4
|
license: "MIT"
|
|
5
5
|
compatibility: "iOS 13+; Swift 5.0+; CometChatUIKitSwift ^5; CometChatSDK ^4"
|
|
6
|
-
allowed-tools: "shell, file-read, file-search, file-list"
|
|
7
6
|
metadata:
|
|
8
7
|
author: "CometChat"
|
|
9
8
|
version: "3.0.0"
|
|
10
9
|
tags: "chat cometchat ios swift core rules initialization patterns"
|
|
11
10
|
---
|
|
12
11
|
|
|
12
|
+
> **Ground truth:** `CometChatUIKitSwift ~> 5` + `CometChatSDK ~> 4` (+ `CometChatCallsSDK ~> 5`) — the installed Pods / SPM `.swiftinterface` + `docs/ui-kit/ios`. **Official docs:** https://www.cometchat.com/docs/ui-kit/ios/overview · **Docs MCP:** `claude mcp add --transport http cometchat-docs https://www.cometchat.com/docs/mcp` (or fetch the URL directly without MCP). Verify Swift symbols/labels against the `.swiftinterface` before relying on them.
|
|
13
|
+
|
|
13
14
|
## Purpose
|
|
14
15
|
|
|
15
16
|
This is the foundational skill for every CometChat iOS UI Kit v5 integration. It teaches HOW CometChat works on iOS — initialization, login, the manager pattern, and anti-patterns — so you can write project-appropriate code instead of relying on templates.
|
|
@@ -134,7 +135,7 @@ https://github.com/cometchat/chat-sdk-ios
|
|
|
134
135
|
|
|
135
136
|
**CometChat Calls SDK (for voice/video calls):**
|
|
136
137
|
```
|
|
137
|
-
https://github.com/cometchat/
|
|
138
|
+
https://github.com/cometchat/calls-sdk-ios
|
|
138
139
|
```
|
|
139
140
|
|
|
140
141
|
Or add to `Package.swift`:
|
|
@@ -142,7 +143,7 @@ Or add to `Package.swift`:
|
|
|
142
143
|
dependencies: [
|
|
143
144
|
.package(url: "https://github.com/cometchat/cometchat-uikit-ios", from: "5.0.0"),
|
|
144
145
|
// Optional: Add calls SDK for voice/video
|
|
145
|
-
// .package(url: "https://github.com/cometchat/
|
|
146
|
+
// .package(url: "https://github.com/cometchat/calls-sdk-ios", from: "5.0.0") // requires iOS 16+
|
|
146
147
|
]
|
|
147
148
|
```
|
|
148
149
|
|
|
@@ -152,7 +153,7 @@ dependencies: [
|
|
|
152
153
|
|---------|------------|-------------|
|
|
153
154
|
| UI Kit | https://github.com/cometchat/cometchat-uikit-ios | Ready-to-use UI components |
|
|
154
155
|
| Chat SDK | https://github.com/cometchat/chat-sdk-ios | Core messaging SDK |
|
|
155
|
-
| Calls SDK | https://github.com/cometchat/
|
|
156
|
+
| Calls SDK | https://github.com/cometchat/calls-sdk-ios | Voice & video calling |
|
|
156
157
|
| Sample App | https://github.com/cometchat/cometchat-sample-app-ios | Sample implementation |
|
|
157
158
|
|
|
158
159
|
---
|
|
@@ -161,7 +162,62 @@ dependencies: [
|
|
|
161
162
|
|
|
162
163
|
CometChat must be initialized exactly once before any UI component is used. Initialization is asynchronous and must complete fully before mounting any `CometChat*` view controller.
|
|
163
164
|
|
|
164
|
-
###
|
|
165
|
+
### File-based init with `cometchat-settings.json` (recommended)
|
|
166
|
+
|
|
167
|
+
> **Version requirement (ENG-35866 — Skills Telemetry).** `CometChatUIKit.initFromSettings(completion:)` reads a bundled `cometchat-settings.json` and lets the SDK self-report `integrationSource = "ai-agent"` to `/user_sessions`. It ships GA in **`CometChatUIKitSwift >= 5.1.15`** (public CocoaPods + SPM; pulls `CometChatSDK 4.1.x`). The `~> 5.1` Pod range / `from: "5.0.0"` SPM range below already resolve it. On an older UI Kit (`< 5.1.15`) the method does not exist — use the **`UIKitSettings` builder fallback** below.
|
|
168
|
+
|
|
169
|
+
Unlike the web/RN kits, the iOS `initFromSettings` takes **no settings argument** — it reads the file straight from the app bundle, so the file must be added to the target's **Copy Bundle Resources**.
|
|
170
|
+
|
|
171
|
+
**Step 1 — create `cometchat-settings.json`** and add it to the app target (`File → Add Files…`, *and* confirm it appears under *Build Phases → Copy Bundle Resources*). Fill `appId` / `region` / `credentials.authKey`; leave the rest at the defaults:
|
|
172
|
+
|
|
173
|
+
```json
|
|
174
|
+
{
|
|
175
|
+
"appId": "APP_ID_HERE",
|
|
176
|
+
"region": "us",
|
|
177
|
+
"credentials": {
|
|
178
|
+
"authKey": "AUTH_KEY_HERE"
|
|
179
|
+
},
|
|
180
|
+
"chatSDK": {
|
|
181
|
+
"presenceSubscription": {
|
|
182
|
+
"type": "ALL_USERS",
|
|
183
|
+
"roles": []
|
|
184
|
+
},
|
|
185
|
+
"autoEstablishSocketConnection": true,
|
|
186
|
+
"adminHost": null,
|
|
187
|
+
"clientHost": null
|
|
188
|
+
},
|
|
189
|
+
"callsSDK": {
|
|
190
|
+
"host": null,
|
|
191
|
+
"adminHost": null,
|
|
192
|
+
"clientHost": null,
|
|
193
|
+
"callsHost": null
|
|
194
|
+
},
|
|
195
|
+
"uiKit": {
|
|
196
|
+
"subscribePresenceForAllUsers": true
|
|
197
|
+
}
|
|
198
|
+
}
|
|
199
|
+
```
|
|
200
|
+
|
|
201
|
+
**Step 2 — init (no builder, no args — the SDK reads the bundled file):**
|
|
202
|
+
|
|
203
|
+
```swift
|
|
204
|
+
// initFromSettings ships GA in CometChatUIKitSwift >= 5.1.15 (ENG-35866)
|
|
205
|
+
import CometChatUIKitSwift
|
|
206
|
+
|
|
207
|
+
CometChatUIKit.initFromSettings { success, error in
|
|
208
|
+
if let error = error {
|
|
209
|
+
print("CometChat init failed: \(error.errorCode) — \(error.errorDescription)")
|
|
210
|
+
return
|
|
211
|
+
}
|
|
212
|
+
print("CometChat initialized")
|
|
213
|
+
// then: CometChatUIKit.login(uid:) — see §3
|
|
214
|
+
}
|
|
215
|
+
```
|
|
216
|
+
|
|
217
|
+
- If init throws `cometchat-settings.json not found`, the file isn't in **Copy Bundle Resources** — add it there (adding it to the project navigator alone is not enough).
|
|
218
|
+
- **Do NOT gitignore `cometchat-settings.json`.** The dev-mode `authKey` ships in the app bundle either way; production uses server-minted auth tokens.
|
|
219
|
+
|
|
220
|
+
### UIKitSettings Builder (fallback — UI Kit before file-based init)
|
|
165
221
|
|
|
166
222
|
```swift
|
|
167
223
|
import CometChatUIKitSwift
|
|
@@ -224,6 +280,8 @@ final class CometChatManager {
|
|
|
224
280
|
|
|
225
281
|
### Init in AppDelegate (UIKit apps)
|
|
226
282
|
|
|
283
|
+
> **Scene-based app (the modern Xcode default — has a `SceneDelegate.swift`)?** Init in `scene(_:willConnectTo:)` instead — that's the canonical pattern the reference app uses (see "Init code — SceneDelegate (canonical)" below). The `didFinishLaunchingWithOptions` example here is correct for the **SDK init call itself** (it needs no window), but scene-based apps that load settings + apply theme + set the root view controller in one pass should do all of it in `scene(_:willConnectTo:)`, where the window/scene exists. Use this AppDelegate form only for apps with no SceneDelegate.
|
|
284
|
+
|
|
227
285
|
```swift
|
|
228
286
|
import UIKit
|
|
229
287
|
import CometChatUIKitSwift
|
|
@@ -365,7 +423,8 @@ CometChat uses `CometChatException` for errors. **Important:** Use `errorDescrip
|
|
|
365
423
|
// CometChatException has these properties:
|
|
366
424
|
error.errorCode // String - error code like "ERR_UID_NOT_FOUND"
|
|
367
425
|
error.errorDescription // String - human-readable description
|
|
368
|
-
|
|
426
|
+
// NOTE: CometChatException exposes ONLY errorCode + errorDescription.
|
|
427
|
+
// There is no `details` property — don't reference one.
|
|
369
428
|
```
|
|
370
429
|
|
|
371
430
|
### Correct Error Handling
|
|
@@ -679,11 +738,16 @@ CometChatConversations.style.titleColor = .label
|
|
|
679
738
|
// Message list style
|
|
680
739
|
CometChatMessageList.style.backgroundColor = .systemBackground
|
|
681
740
|
|
|
682
|
-
// Avatar style — cornerRadius is a
|
|
683
|
-
//
|
|
684
|
-
//
|
|
741
|
+
// Avatar style — cornerRadius is a CometChatCornerStyle. Its only value-
|
|
742
|
+
// taking init is the labeled designated init (the bare
|
|
743
|
+
// `CometChatCornerStyle(cornerRadius:)` belongs to the sibling
|
|
744
|
+
// CometChatCorner struct and will NOT compile here). Pass a value larger
|
|
745
|
+
// than half the avatar dimension for a circular look.
|
|
685
746
|
CometChatAvatar.style.backgroundColor = .systemGray5
|
|
686
|
-
CometChatAvatar.style.cornerRadius = CometChatCornerStyle(
|
|
747
|
+
CometChatAvatar.style.cornerRadius = CometChatCornerStyle(
|
|
748
|
+
topLeft: true, topRight: true, bottomLeft: true, bottomRight: true,
|
|
749
|
+
cornerRadius: 100
|
|
750
|
+
)
|
|
687
751
|
```
|
|
688
752
|
|
|
689
753
|
### Dark Mode Support
|
|
@@ -816,7 +880,7 @@ This automatically includes:
|
|
|
816
880
|
For voice/video calls, add:
|
|
817
881
|
|
|
818
882
|
```ruby
|
|
819
|
-
pod 'CometChatCallsSDK', '~>
|
|
883
|
+
pod 'CometChatCallsSDK', '~> 5.0' # requires iOS 16+ deployment target
|
|
820
884
|
```
|
|
821
885
|
|
|
822
886
|
The UI Kit automatically detects and enables calling features when the Calls SDK is present.
|
|
@@ -827,7 +891,9 @@ When the dispatcher's Step 3.1 sets `customize=visual` and the platform resolves
|
|
|
827
891
|
|
|
828
892
|
- `MessagesVC.swift` — verbatim view controller composing header + list + composer
|
|
829
893
|
- `ThreadedMessagesVC.swift` — verbatim helper VC (imported by MessagesVC)
|
|
830
|
-
- `cometchat-builder-settings.json` — **envelope-shape JSON** `{ builderId,
|
|
894
|
+
- `cometchat-builder-settings.json` — **envelope-shape JSON** `{ builderId, settings: {...} }` (the iOS canonical has no top-level `name`; `CometChatBuilderSettings.loadFromJSON()` reads only `settings.*`) (no sentinel — JSON forbids `//` comments)
|
|
895
|
+
|
|
896
|
+
> ℹ️ **Version-history note (ENG-35337) — RESOLVED end-to-end; `pod 'CometChatBuilder'` (1.1.2) builds AND launches.** A freshly-exported iOS builder ZIP was built end-to-end (`pod 'CometChatBuilder'` unversioned → resolves 1.1.2, with CometChatUIKitSwift 5.1.13 / CometChatSDK 4.1.3 / CometChatCallsSDK 5.0.0) → **`BUILD SUCCEEDED`**, then **installed + launched clean on a physical iPhone** (verified 2026-06-17 — the earlier sim-only `EXCLUDED_ARCHS` quirk was an environment issue, not a project defect). The current `ThreadedMessagesVC.swift` no longer reads `CometChatBuilderSettings.shared.layout.compactMessageComposer` (grep-confirmed absent), so the older compile failure is gone — do NOT pin `> 1.1.2` (a `1.1.3` may not exist; pinning it would break `pod install`). **Only if** you have an OLDER export whose `ThreadedMessagesVC.swift` still references `.layout.compactMessageComposer` and you hit `"value of type 'Layout' has no member 'compactMessageComposer'"`, re-export from the dashboard (preferred) or pin a newer `CometChatBuilder` if one is published.
|
|
831
897
|
|
|
832
898
|
### 1. Run `cometchat builder export`
|
|
833
899
|
|
|
@@ -845,62 +911,121 @@ Resync = re-run the same command with `--force`. See `cometchat-core` §11.6 for
|
|
|
845
911
|
|
|
846
912
|
| Path | Content |
|
|
847
913
|
|---|---|
|
|
848
|
-
| `CometChat/CometChatApp.swift` | SwiftUI wrapper that mounts `CometChatConversations` + pushes `MessagesVC` on tap. Feature flags read from `CometChatBuilderSettings.shared`. Skills emits this — not from the ZIP. |
|
|
914
|
+
| `CometChat/CometChatApp.swift` | **Optional, SwiftUI-host only.** Skills-authored convenience wrapper that mounts `CometChatConversations` + pushes `MessagesVC` on tap. Feature flags read from `CometChatBuilderSettings.shared`. Skills emits this — not from the ZIP. The canonical (reference-app) entry is the UIKit SceneDelegate → `FrameworkManager` → `HomeScreenViewController` path, not this wrapper. |
|
|
849
915
|
|
|
850
916
|
### Files patched
|
|
851
917
|
|
|
852
918
|
| Path | Patch |
|
|
853
919
|
|---|---|
|
|
854
|
-
| `Podfile` | Add `pod 'CometChatBuilder'` (the canonical pod surfacing `CometChatBuilderSettings.shared` + `loadFromJSON()`). Add `pod 'CometChatUIKitSwift', '~> 5.1'` if not already declared. SPM equivalent:
|
|
855
|
-
| `
|
|
920
|
+
| `Podfile` | Add `pod 'CometChatBuilder', '> 1.1.2'` (the canonical pod surfacing `CometChatBuilderSettings.shared` + `loadFromJSON()`; **pin `> 1.1.2`** — ≤1.1.2 lacks `Layout.compactMessageComposer` and fails to compile, see the build-breaker caveat above). Add `pod 'CometChatUIKitSwift', '~> 5.1'` if not already declared. SPM equivalent: `.package(url: "https://github.com/cometchat/cometchat-builder-ios", from: "1.1.3")` |
|
|
921
|
+
| `SceneDelegate.swift` (UIKit — canonical) / `App.swift` (SwiftUI — alternative) | Add `CometChatBuilderSettings.loadFromJSON()` + theme application + `CometChatUIKit.init(uiKitSettings:)`. **For scene-based apps (the reference app and any project with a `SceneDelegate`), init in `scene(_:willConnectTo:)` — NOT in `AppDelegate.didFinishLaunchingWithOptions`** (that runs before the scene/window exists). See init code below |
|
|
856
922
|
| App target | Toggle `cometchat-builder-settings.json` for **target membership** in Xcode (else `loadFromJSON()` silently returns defaults) |
|
|
857
|
-
| Entry view — `
|
|
923
|
+
| Entry view — root `UIViewController` (UIKit) / `ContentView.swift` (SwiftUI) | Mount the chat surface per Step 3c placement (modal sheet, push-navigation destination, tab item, or embedded view) |
|
|
858
924
|
| `Info.plist` | `NSMicrophoneUsageDescription` + `NSCameraUsageDescription` if `CometChatBuilderSettings.shared.callFeatures` has any enabled feature |
|
|
859
925
|
|
|
860
|
-
### Init code —
|
|
926
|
+
### Init code — SceneDelegate (canonical)
|
|
927
|
+
|
|
928
|
+
The reference app (`CometChatBuilderSwift`) is **pure UIKit, scene-based**: `@main AppDelegate` does nothing but vend the scene configuration, and `SceneDelegate.scene(_:willConnectTo:)` calls into a `FrameworkManager.initialize(with:completion:)` helper that loads settings → applies theme → inits the kit. Mirror that — do **not** init in `AppDelegate.didFinishLaunchingWithOptions` for a scene-based app (the window/scene doesn't exist yet there).
|
|
861
929
|
|
|
862
930
|
```swift
|
|
863
|
-
//
|
|
931
|
+
// SceneDelegate.swift
|
|
932
|
+
import UIKit
|
|
864
933
|
import CometChatBuilder
|
|
934
|
+
|
|
935
|
+
class SceneDelegate: UIResponder, UIWindowSceneDelegate {
|
|
936
|
+
var window: UIWindow?
|
|
937
|
+
|
|
938
|
+
func scene(_ scene: UIScene,
|
|
939
|
+
willConnectTo session: UISceneSession,
|
|
940
|
+
options connectionOptions: UIScene.ConnectionOptions) {
|
|
941
|
+
guard (scene as? UIWindowScene) != nil else { return }
|
|
942
|
+
FrameworkManager.initialize(with: scene) {
|
|
943
|
+
print("Framework initialized ✅")
|
|
944
|
+
}
|
|
945
|
+
}
|
|
946
|
+
}
|
|
947
|
+
```
|
|
948
|
+
|
|
949
|
+
```swift
|
|
950
|
+
// FrameworkManager.swift — load settings → applyTheme → init kit
|
|
951
|
+
import UIKit
|
|
865
952
|
import CometChatUIKitSwift
|
|
953
|
+
import CometChatSDK
|
|
954
|
+
import CometChatBuilder
|
|
866
955
|
|
|
867
|
-
|
|
868
|
-
|
|
956
|
+
enum FrameworkManager {
|
|
957
|
+
static func initialize(with scene: UIScene, completion: @escaping () -> Void) {
|
|
958
|
+
// 1. Load builder settings from bundled JSON
|
|
959
|
+
CometChatBuilderSettings.loadFromJSON()
|
|
869
960
|
|
|
870
|
-
// 2. Apply builder theme tokens to the kit's global theme
|
|
871
|
-
|
|
872
|
-
lightModeColor: UIColor(hex: CometChatBuilderSettings.shared.style.color.brandColor),
|
|
873
|
-
darkModeColor: UIColor(hex: CometChatBuilderSettings.shared.style.color.brandColor)
|
|
874
|
-
)
|
|
875
|
-
CometChatTheme.textColorPrimary = UIColor.dynamicColor(
|
|
876
|
-
lightModeColor: UIColor(hex: CometChatBuilderSettings.shared.style.color.primaryTextLight),
|
|
877
|
-
darkModeColor: UIColor(hex: CometChatBuilderSettings.shared.style.color.primaryTextDark)
|
|
878
|
-
)
|
|
879
|
-
CometChatTheme.textColorSecondary = UIColor.dynamicColor(
|
|
880
|
-
lightModeColor: UIColor(hex: CometChatBuilderSettings.shared.style.color.secondaryTextLight),
|
|
881
|
-
darkModeColor: UIColor(hex: CometChatBuilderSettings.shared.style.color.secondaryTextDark)
|
|
882
|
-
)
|
|
883
|
-
CometChatTypography.customFontFamilyName = CometChatBuilderSettings.shared.style.typography.font
|
|
961
|
+
// 2. Apply builder theme tokens to the kit's global theme
|
|
962
|
+
applyTheme()
|
|
884
963
|
|
|
885
|
-
// 3. Standard UI Kit init (this file's §2 — credentials from Secrets.swift)
|
|
886
|
-
|
|
887
|
-
|
|
888
|
-
)
|
|
964
|
+
// 3. Standard UI Kit init (this file's §2 — credentials from Secrets.swift)
|
|
965
|
+
let settings = UIKitSettings()
|
|
966
|
+
.set(appID: Secrets.appID)
|
|
967
|
+
.set(authKey: Secrets.authKey)
|
|
968
|
+
.set(region: Secrets.region)
|
|
969
|
+
.subscribePresenceForAllUsers()
|
|
970
|
+
.build()
|
|
971
|
+
CometChatUIKit.init(uiKitSettings: settings) { _ in
|
|
972
|
+
// set the root view controller on `scene` here, then:
|
|
973
|
+
completion()
|
|
974
|
+
}
|
|
975
|
+
}
|
|
976
|
+
|
|
977
|
+
static func applyTheme() {
|
|
978
|
+
let color = CometChatBuilderSettings.shared.style.color
|
|
979
|
+
CometChatTheme.primaryColor = UIColor.dynamicColor(
|
|
980
|
+
lightModeColor: UIColor(hex: color.brandColor),
|
|
981
|
+
darkModeColor: UIColor(hex: color.brandColor)
|
|
982
|
+
)
|
|
983
|
+
CometChatTheme.textColorPrimary = UIColor.dynamicColor(
|
|
984
|
+
lightModeColor: UIColor(hex: color.primaryTextLight),
|
|
985
|
+
darkModeColor: UIColor(hex: color.primaryTextDark)
|
|
986
|
+
)
|
|
987
|
+
CometChatTheme.textColorSecondary = UIColor.dynamicColor(
|
|
988
|
+
lightModeColor: UIColor(hex: color.secondaryTextLight),
|
|
989
|
+
darkModeColor: UIColor(hex: color.secondaryTextDark)
|
|
990
|
+
)
|
|
991
|
+
// ⚠️ Map the builder's raw font label to a registered PostScript name
|
|
992
|
+
// BEFORE handing it to setFont — passing the raw value (e.g. "Roboto")
|
|
993
|
+
// does NOT resolve to a real font and silently falls back to the system font.
|
|
994
|
+
let rawFont = CometChatBuilderSettings.shared.style.typography.font
|
|
995
|
+
CometChatTypography.setFont(name: fontName(rawFont) ?? "")
|
|
996
|
+
}
|
|
997
|
+
|
|
998
|
+
/// Resolves a builder font label to its registered PostScript name.
|
|
999
|
+
/// (Verbatim from the reference app's FrameworkManager.fontName.)
|
|
1000
|
+
static func fontName(_ name: String) -> String? {
|
|
1001
|
+
switch name.lowercased() {
|
|
1002
|
+
case "times new roman": return "TimesNewRomanPSMT"
|
|
1003
|
+
case "arial": return "ArialMT"
|
|
1004
|
+
case "roboto": return "Roboto-Regular"
|
|
1005
|
+
case "inter": return "Inter-Regular"
|
|
1006
|
+
default: return "\(name.capitalized)-Regular"
|
|
1007
|
+
}
|
|
1008
|
+
}
|
|
1009
|
+
}
|
|
889
1010
|
```
|
|
890
1011
|
|
|
1012
|
+
> **Font trap (D4).** `style.typography.font` in the builder JSON is a human label like `"Roboto"` or `"Arial"` — **not** a PostScript font name. Passing it straight to `CometChatTypography.setFont(name:)` (e.g. `setFont(name: settings.style.typography.font)`) silently fails to load the font. Always route it through the `fontName(_:)` lookup above (or otherwise resolve to a registered PostScript name, and register any custom `.ttf`/`.otf` in `Info.plist` under `UIAppFonts`).
|
|
1013
|
+
|
|
891
1014
|
`loadFromJSON()` reads `cometchat-builder-settings.json` from the main bundle. If the file isn't a target member (Xcode → file inspector → Target Membership), `CometChatBuilderSettings.shared` silently falls back to defaults — this is the #1 integration bug. Sanity-check by printing `CometChatBuilderSettings.shared.style.color.brandColor` after `loadFromJSON()`.
|
|
892
1015
|
|
|
893
|
-
### The wrapper template
|
|
1016
|
+
### The wrapper template (SwiftUI convenience — optional)
|
|
1017
|
+
|
|
1018
|
+
`CometChatApp.swift` below is a **skills-authored convenience wrapper** for teams who want to mount the chat surface inside a SwiftUI hierarchy. It is **not** the canonical entry point — the reference app is pure UIKit and routes from `SceneDelegate` → `FrameworkManager` → `HomeScreenViewController` (a `UITabBarController`). For UIKit projects, prefer the SceneDelegate path above and mount `CometChatConversations()` / `HomeScreenViewController` directly; use this SwiftUI wrapper only when the host app is SwiftUI.
|
|
894
1019
|
|
|
895
1020
|
```swift
|
|
896
|
-
// CometChat/CometChatApp.swift
|
|
1021
|
+
// CometChat/CometChatApp.swift — skills-authored SwiftUI convenience wrapper (NOT the canonical app)
|
|
897
1022
|
import SwiftUI
|
|
898
1023
|
import UIKit
|
|
899
1024
|
import CometChatBuilder
|
|
900
1025
|
import CometChatUIKitSwift
|
|
901
1026
|
import CometChatSDK
|
|
902
1027
|
|
|
903
|
-
///
|
|
1028
|
+
/// SwiftUI convenience wrapper around the chat surface (skills-authored, not from the ZIP).
|
|
904
1029
|
/// Master/detail SwiftUI host: `CometChatConversations` at root, `MessagesVC` pushed on tap.
|
|
905
1030
|
/// Feature visibility flags are read from `CometChatBuilderSettings.shared`.
|
|
906
1031
|
public struct CometChatApp: View {
|
|
@@ -920,8 +1045,11 @@ private struct ConversationsContainer: UIViewControllerRepresentable {
|
|
|
920
1045
|
let nav = UINavigationController(rootViewController: conversationsVC)
|
|
921
1046
|
conversationsVC.set(onItemClick: { [weak nav] conversation, _ in
|
|
922
1047
|
let vc = MessagesVC()
|
|
923
|
-
|
|
924
|
-
|
|
1048
|
+
// Qualify with CometChatSDK. — this file imports SwiftUI, which also
|
|
1049
|
+
// exports a `Group` type, so a bare `Group` is "ambiguous for type lookup"
|
|
1050
|
+
// and won't compile. (User is unambiguous but qualified here for parity.)
|
|
1051
|
+
if let user = conversation.conversationWith as? CometChatSDK.User { vc.user = user }
|
|
1052
|
+
else if let group = conversation.conversationWith as? CometChatSDK.Group { vc.group = group }
|
|
925
1053
|
nav?.pushViewController(vc, animated: true)
|
|
926
1054
|
})
|
|
927
1055
|
return nav
|
|
@@ -948,9 +1076,9 @@ private extension UIColor {
|
|
|
948
1076
|
|
|
949
1077
|
`MessagesVC.swift` is **copied verbatim** from `CometChatBuilderSwift/BuilderApp/View Controllers/CometChat Components/MessagesVC.swift` (inside the Ios Visual Builder ZIP at https://preview.cometchat.com/downloads/cometchat-builder-ios.zip). It composes header + list + composer in a `UIViewController` and wires reaction / thread / typing per `CometChatBuilderSettings.shared.chatFeatures.*`. Do not hand-roll this — the canonical file is the reference.
|
|
950
1078
|
|
|
951
|
-
`Secrets.swift` is the credentials enum (`enum Secrets { static let appID = "..."; static let region = "..."; static let authKey = "..." }`) populated by Step 2c provision. Added to `.gitignore`.
|
|
1079
|
+
`Secrets.swift` is the credentials enum (`enum Secrets { static let appID = "..."; static let region = "..."; static let authKey = "..." }`) populated by Step 2c provision. Added to `.gitignore`. (Note: this is the convention for integrating into the user's OWN app. The dashboard-exported **reference builder app** instead ships `AppConstants.swift` — a `public class AppConstants` with mutable `APP_ID`/`AUTH_KEY`/`REGION` statics persisted to `UserDefaults` + a `ChangeAppCredentialsVC` for runtime entry; verified 2026-06-14 against a real exported ZIP. If you're editing the exported app directly, set creds in `AppConstants.swift`.)
|
|
952
1080
|
|
|
953
|
-
**
|
|
1081
|
+
**UIKit (canonical) vs SwiftUI hosts.** The reference app is **pure UIKit**: `FrameworkManager.setRootViewController(...)` (called from the init `completion:` above) sets either `UINavigationController(rootViewController: HomeScreenViewController())` or a `SplitViewController` on iPad — see `CometChatBuilderSwift/BuilderApp/SceneDelegate.swift` + `FrameworkManager.swift` + `View Controllers/HomeScreenViewController.swift` (inside the Ios Visual Builder ZIP at https://preview.cometchat.com/downloads/cometchat-builder-ios.zip). The `CometChatApp` SwiftUI wrapper above is the alternative for SwiftUI-hosted apps; it wraps the same `CometChatConversations` surface in a `UIViewControllerRepresentable`.
|
|
954
1082
|
|
|
955
1083
|
### Calls + builder
|
|
956
1084
|
|