@cometchat/skills 4.4.2 → 5.0.1
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/.claude-plugin/marketplace.json +55 -0
- package/.claude-plugin/plugin.json +14 -0
- package/CHANGELOG.md +44 -0
- package/LICENSE +21 -0
- package/MIGRATING.md +187 -0
- package/README.md +52 -156
- package/RULES.md +125 -0
- package/bin/cometchat-skills.mjs +1280 -0
- package/bin/legacy-skills.json +95 -0
- package/catalogs/android-v6.json +1646 -0
- package/catalogs/flutter-v6.json +651 -0
- package/catalogs/ios-v5.json +1383 -0
- package/catalogs/rn-calls-v5.json +134 -0
- package/catalogs/rn-calls-v5.symbols.txt +58 -0
- package/catalogs/rn-sdk-v4.json +672 -0
- package/catalogs/rn-v5.json +449 -0
- package/catalogs/rn-v5.symbols.txt +216 -0
- package/catalogs/sdk-android-v5.json +514 -0
- package/contracts.android-calls-v5.json +122 -0
- package/contracts.android-v6.json +135 -0
- package/contracts.angular-v5.json +694 -0
- package/contracts.flutter-calls-v5.json +77 -0
- package/contracts.flutter-v6.json +126 -0
- package/contracts.ios-calls-v5.json +67 -0
- package/contracts.ios-v5.json +436 -0
- package/contracts.json +82 -0
- package/contracts.rn-calls-v5.json +77 -0
- package/contracts.rn-v5.json +727 -0
- package/contracts.sdk-android-v5.json +15 -0
- package/contracts.web-calls-v5.json +45 -0
- package/features.android-calls-v5.json +246 -0
- package/features.android-v6.json +65 -0
- package/features.angular-v5.json +521 -0
- package/features.flutter-calls-v5.json +286 -0
- package/features.flutter-v6.json +484 -0
- package/features.ios-calls-v5.json +236 -0
- package/features.ios-v5.json +573 -0
- package/features.json +61 -0
- package/features.rn-calls-v5.json +187 -0
- package/features.rn-v5.json +614 -0
- package/features.sdk-android-v5.json +40 -0
- package/features.sdk-jsv4.json +24 -0
- package/features.web-calls-v5.json +108 -0
- package/package.json +156 -74
- package/peers.yaml +355 -0
- package/registry/README.md +31 -0
- package/registry/android-calls-v5.json +94 -0
- package/registry/android-v6.json +177 -0
- package/registry/angular-v5.json +154 -0
- package/registry/flutter-calls-v5.json +94 -0
- package/registry/flutter-v6.json +159 -0
- package/registry/ios-calls-v5.json +99 -0
- package/registry/ios-v5.json +152 -0
- package/registry/rn-calls-v5.json +99 -0
- package/registry/rn-v5.json +169 -0
- package/registry/sdk-android-v5.json +93 -0
- package/registry/sdk-jsv4.json +93 -0
- package/registry/web-calls-v5.json +94 -0
- package/registry/web-v7.json +154 -0
- package/skills/cometchat/SKILL.md +47 -2096
- package/skills/cometchat-a11y/SKILL.md +44 -472
- package/skills/cometchat-analytics/SKILL.md +61 -0
- package/skills/cometchat-android-v5-calls-sdk/SKILL.md +206 -0
- package/skills/cometchat-android-v5-calls-sdk/references/build-truth.md +63 -0
- package/skills/cometchat-android-v5-calls-sdk/references/docs-map.md +119 -0
- package/skills/cometchat-android-v5-calls-sdk/references/method-map.md +53 -0
- package/skills/cometchat-android-v5-calls-sdk/references/pitfalls.md +72 -0
- package/skills/cometchat-android-v5-calls-sdk/references/ringing.md +92 -0
- package/skills/cometchat-android-v5-calls-sdk/references/user-switch.md +90 -0
- package/skills/cometchat-android-v5-sdk/SKILL.md +127 -0
- package/skills/cometchat-android-v5-sdk/references/app-surface.md +88 -0
- package/skills/cometchat-android-v5-sdk/references/docs-map.md +91 -0
- package/skills/cometchat-android-v6-builder-settings/SKILL.md +51 -137
- package/skills/cometchat-android-v6-calls/SKILL.md +128 -413
- package/skills/cometchat-android-v6-compose-components/SKILL.md +84 -194
- package/skills/cometchat-android-v6-compose-customization/SKILL.md +66 -411
- package/skills/cometchat-android-v6-compose-placement/SKILL.md +154 -237
- package/skills/cometchat-android-v6-core/SKILL.md +236 -672
- package/skills/cometchat-android-v6-core/references/anti-patterns.md +31 -0
- package/skills/cometchat-android-v6-core/references/component-props.md +168 -0
- package/skills/cometchat-android-v6-core/references/docs-map.md +153 -0
- package/skills/cometchat-android-v6-core/references/layout.md +112 -0
- package/skills/cometchat-android-v6-core/references/lifecycle.md +75 -0
- package/skills/cometchat-android-v6-core/references/setup-credentials.md +105 -0
- package/skills/cometchat-android-v6-core/references/troubleshooting.md +36 -0
- package/skills/cometchat-android-v6-events/SKILL.md +46 -184
- package/skills/cometchat-android-v6-extensions/SKILL.md +39 -179
- package/skills/cometchat-android-v6-features/SKILL.md +74 -143
- package/skills/cometchat-android-v6-kotlin-components/SKILL.md +75 -193
- package/skills/cometchat-android-v6-kotlin-customization/SKILL.md +67 -419
- package/skills/cometchat-android-v6-kotlin-placement/SKILL.md +77 -223
- package/skills/cometchat-android-v6-migration/SKILL.md +67 -378
- package/skills/cometchat-android-v6-production/SKILL.md +41 -179
- package/skills/cometchat-android-v6-push/SKILL.md +39 -289
- package/skills/cometchat-android-v6-testing/SKILL.md +50 -265
- package/skills/cometchat-android-v6-troubleshooting/SKILL.md +70 -254
- package/skills/cometchat-angular-v5-calls/SKILL.md +193 -0
- package/skills/cometchat-angular-v5-components/SKILL.md +131 -0
- package/skills/cometchat-angular-v5-components/references/catalog.md +111 -0
- package/skills/cometchat-angular-v5-components/references/host-composed.md +46 -0
- package/skills/cometchat-angular-v5-core/SKILL.md +300 -0
- package/skills/cometchat-angular-v5-core/references/anti-patterns.md +49 -0
- package/skills/cometchat-angular-v5-core/references/component-props.md +55 -0
- package/skills/cometchat-angular-v5-core/references/dependencies.md +66 -0
- package/skills/cometchat-angular-v5-core/references/docs-map.md +132 -0
- package/skills/cometchat-angular-v5-core/references/layout.md +64 -0
- package/skills/cometchat-angular-v5-core/references/lifecycle.md +202 -0
- package/skills/cometchat-angular-v5-core/references/setup-credentials.md +137 -0
- package/skills/cometchat-angular-v5-core/references/theming.md +70 -0
- package/skills/cometchat-angular-v5-core/references/troubleshooting.md +27 -0
- package/skills/cometchat-angular-v5-customization/SKILL.md +94 -0
- package/skills/cometchat-angular-v5-features/SKILL.md +107 -0
- package/skills/cometchat-angular-v5-features/references/custom-messages.md +133 -0
- package/skills/cometchat-angular-v5-features/references/formatters.md +28 -0
- package/skills/cometchat-angular-v5-features/references/host-composed-extensions.md +85 -0
- package/skills/cometchat-angular-v5-migration/SKILL.md +40 -0
- package/skills/cometchat-angular-v5-migration/references/migration-guide.md +165 -0
- package/skills/cometchat-angular-v5-patterns/SKILL.md +107 -0
- package/skills/cometchat-angular-v5-placement/SKILL.md +133 -0
- package/skills/cometchat-angular-v5-placement/references/combined-app.md +174 -0
- package/skills/cometchat-angular-v5-placement/references/core-surface.md +199 -0
- package/skills/cometchat-angular-v5-production/SKILL.md +102 -0
- package/skills/cometchat-angular-v5-push/SKILL.md +61 -0
- package/skills/cometchat-angular-v5-testing/SKILL.md +112 -0
- package/skills/cometchat-angular-v5-troubleshooting/SKILL.md +96 -0
- package/skills/cometchat-audit/SKILL.md +61 -0
- package/skills/cometchat-compliance/SKILL.md +63 -0
- package/skills/cometchat-flutter-v5-sdk/SKILL.md +188 -0
- package/skills/cometchat-flutter-v5-sdk/references/doc-corrections.md +55 -0
- package/skills/cometchat-flutter-v5-sdk/references/docs-map.md +211 -0
- package/skills/cometchat-flutter-v5-sdk/references/platform-notes.md +48 -0
- package/skills/cometchat-flutter-v5-sdk/references/transcription.md +87 -0
- package/skills/cometchat-flutter-v6-calls/SKILL.md +75 -389
- package/skills/cometchat-flutter-v6-components/SKILL.md +88 -361
- package/skills/cometchat-flutter-v6-core/SKILL.md +154 -593
- package/skills/cometchat-flutter-v6-core/references/anti-patterns.md +55 -0
- package/skills/cometchat-flutter-v6-core/references/docs-map.md +143 -0
- package/skills/cometchat-flutter-v6-core/references/layout.md +45 -0
- package/skills/cometchat-flutter-v6-core/references/lifecycle.md +87 -0
- package/skills/cometchat-flutter-v6-core/references/setup-credentials.md +84 -0
- package/skills/cometchat-flutter-v6-core/references/troubleshooting.md +26 -0
- package/skills/cometchat-flutter-v6-customization/SKILL.md +70 -712
- package/skills/cometchat-flutter-v6-events/SKILL.md +79 -174
- package/skills/cometchat-flutter-v6-features/SKILL.md +55 -394
- package/skills/cometchat-flutter-v6-migration/SKILL.md +68 -367
- package/skills/cometchat-flutter-v6-migration/references/migration-guide.md +132 -0
- package/skills/cometchat-flutter-v6-patterns/SKILL.md +61 -0
- package/skills/cometchat-flutter-v6-placement/SKILL.md +94 -381
- package/skills/cometchat-flutter-v6-production/SKILL.md +59 -615
- package/skills/cometchat-flutter-v6-push/SKILL.md +46 -455
- package/skills/cometchat-flutter-v6-testing/SKILL.md +68 -299
- package/skills/cometchat-flutter-v6-troubleshooting/SKILL.md +54 -878
- package/skills/cometchat-i18n/SKILL.md +35 -404
- package/skills/cometchat-ios-calls/SKILL.md +112 -563
- package/skills/cometchat-ios-components/SKILL.md +44 -834
- package/skills/cometchat-ios-core/SKILL.md +182 -1068
- package/skills/cometchat-ios-core/references/anti-patterns.md +113 -0
- package/skills/cometchat-ios-core/references/docs-map.md +124 -0
- package/skills/cometchat-ios-core/references/install.md +23 -0
- package/skills/cometchat-ios-core/references/layout.md +219 -0
- package/skills/cometchat-ios-core/references/setup-credentials.md +197 -0
- package/skills/cometchat-ios-core/references/swiftui.md +91 -0
- package/skills/cometchat-ios-core/references/troubleshooting.md +100 -0
- package/skills/cometchat-ios-customization/SKILL.md +33 -968
- package/skills/cometchat-ios-features/SKILL.md +29 -738
- package/skills/cometchat-ios-migration/SKILL.md +39 -0
- package/skills/cometchat-ios-placement/SKILL.md +51 -729
- package/skills/cometchat-ios-production/SKILL.md +67 -723
- package/skills/cometchat-ios-push/SKILL.md +24 -602
- package/skills/cometchat-ios-testing/SKILL.md +36 -355
- package/skills/cometchat-ios-troubleshooting/SKILL.md +31 -989
- package/skills/cometchat-ios-v5-sdk/SKILL.md +161 -0
- package/skills/cometchat-ios-v5-sdk/references/docs-map.md +326 -0
- package/skills/cometchat-js-v5-sdk/SKILL.md +95 -0
- package/skills/cometchat-js-v5-sdk/references/docs-map.md +114 -0
- package/skills/cometchat-migrate-from-getstream/SKILL.md +65 -0
- package/skills/cometchat-migrate-from-getstream/references/concept-map.md +98 -0
- package/skills/cometchat-migrate-from-getstream/references/data-migration.md +74 -0
- package/skills/cometchat-migrate-from-getstream/references/feature-map.md +108 -0
- package/skills/cometchat-migrate-from-getstream/references/inventory.md +82 -0
- package/skills/cometchat-migrate-from-getstream/references/native-build.md +9 -0
- package/skills/cometchat-migrate-from-getstream/references/report-template.md +59 -0
- package/skills/cometchat-migrate-from-sendbird/SKILL.md +64 -0
- package/skills/cometchat-migrate-from-sendbird/references/concept-map.md +99 -0
- package/skills/cometchat-migrate-from-sendbird/references/data-migration.md +74 -0
- package/skills/cometchat-migrate-from-sendbird/references/feature-map.md +104 -0
- package/skills/cometchat-migrate-from-sendbird/references/inventory.md +86 -0
- package/skills/cometchat-migrate-from-sendbird/references/native-build.md +10 -0
- package/skills/cometchat-migrate-from-sendbird/references/report-template.md +59 -0
- package/skills/cometchat-migrate-from-twilio/SKILL.md +52 -0
- package/skills/cometchat-migrate-from-twilio/references/concept-map.md +49 -0
- package/skills/cometchat-migrate-from-twilio/references/data-migration.md +50 -0
- package/skills/cometchat-migrate-from-twilio/references/feature-map.md +27 -0
- package/skills/cometchat-migrate-from-twilio/references/inventory.md +53 -0
- package/skills/cometchat-migrate-from-twilio/references/report-template.md +52 -0
- package/skills/cometchat-moderation/SKILL.md +58 -0
- package/skills/cometchat-onboarding/SKILL.md +92 -0
- package/skills/cometchat-onboarding/references/archetypes.md +51 -0
- package/skills/cometchat-onboarding/references/calling-first.md +77 -0
- package/skills/cometchat-onboarding/references/not-in-this-pack.md +8 -0
- package/skills/cometchat-onboarding/references/plan-artifact.md +133 -0
- package/skills/cometchat-onboarding/references/platforms.md +105 -0
- package/skills/cometchat-react-native-bare-patterns/SKILL.md +120 -0
- package/skills/cometchat-react-native-calls/SKILL.md +200 -0
- package/skills/cometchat-react-native-components/SKILL.md +142 -0
- package/skills/cometchat-react-native-core/SKILL.md +335 -0
- package/skills/cometchat-react-native-core/references/anti-patterns.md +79 -0
- package/skills/cometchat-react-native-core/references/component-props.md +105 -0
- package/skills/cometchat-react-native-core/references/dependencies.md +62 -0
- package/skills/cometchat-react-native-core/references/docs-map.md +127 -0
- package/skills/cometchat-react-native-core/references/layout.md +61 -0
- package/skills/cometchat-react-native-core/references/lifecycle.md +64 -0
- package/skills/cometchat-react-native-core/references/setup-credentials.md +39 -0
- package/skills/cometchat-react-native-customization/SKILL.md +198 -0
- package/skills/cometchat-react-native-expo-patterns/SKILL.md +116 -0
- package/skills/cometchat-react-native-features/SKILL.md +122 -0
- package/skills/cometchat-react-native-migration/SKILL.md +103 -0
- package/skills/cometchat-react-native-placement/SKILL.md +158 -0
- package/skills/cometchat-react-native-production/SKILL.md +79 -0
- package/skills/cometchat-react-native-push/SKILL.md +88 -0
- package/skills/cometchat-react-native-sdk/SKILL.md +133 -0
- package/skills/cometchat-react-native-sdk/references/method-map.md +239 -0
- package/skills/cometchat-react-native-sdk/references/page-map.md +96 -0
- package/skills/cometchat-react-native-testing/SKILL.md +94 -0
- package/skills/cometchat-react-native-troubleshooting/SKILL.md +174 -0
- package/skills/cometchat-react-native-v5-sdk/SKILL.md +150 -0
- package/skills/cometchat-react-native-v5-sdk/references/docs-map.md +127 -0
- package/skills/cometchat-react-native-v5-sdk/references/ringing-voip.md +369 -0
- package/skills/cometchat-react-v7-calls/SKILL.md +75 -0
- package/skills/cometchat-react-v7-components/SKILL.md +72 -0
- package/skills/cometchat-react-v7-core/SKILL.md +101 -0
- package/skills/cometchat-react-v7-core/references/anti-patterns.md +19 -0
- package/skills/cometchat-react-v7-core/references/component-props.md +82 -0
- package/skills/cometchat-react-v7-core/references/dependencies.md +23 -0
- package/skills/cometchat-react-v7-core/references/docs-map.md +117 -0
- package/skills/cometchat-react-v7-core/references/layout.md +150 -0
- package/skills/cometchat-react-v7-core/references/lifecycle.md +74 -0
- package/skills/cometchat-react-v7-core/references/setup-credentials.md +58 -0
- package/skills/cometchat-react-v7-core/references/ssr.md +11 -0
- package/skills/cometchat-react-v7-core/references/theming.md +52 -0
- package/skills/cometchat-react-v7-customization/SKILL.md +84 -0
- package/skills/cometchat-react-v7-features/SKILL.md +92 -0
- package/skills/cometchat-react-v7-migration/SKILL.md +39 -0
- package/skills/cometchat-react-v7-migration/references/migration-guide.md +119 -0
- package/skills/cometchat-react-v7-patterns/SKILL.md +43 -0
- package/skills/cometchat-react-v7-placement/SKILL.md +106 -0
- package/skills/cometchat-react-v7-placement/references/recipes.md +354 -0
- package/skills/cometchat-react-v7-production/SKILL.md +84 -0
- package/skills/cometchat-react-v7-push/SKILL.md +53 -0
- package/skills/cometchat-react-v7-testing/SKILL.md +60 -0
- package/skills/cometchat-react-v7-troubleshooting/SKILL.md +47 -0
- package/skills/cometchat-security/SKILL.md +80 -0
- package/skills/cometchat-self-host/SKILL.md +56 -0
- package/test-suite/README.md +70 -0
- package/test-suite/catalogs/android-calls-v5.json +830 -0
- package/test-suite/catalogs/android-calls-v5.symbols.txt +499 -0
- package/test-suite/catalogs/android-v6.json +1646 -0
- package/test-suite/catalogs/android-v6.symbols.txt +298 -0
- package/test-suite/catalogs/angular-v5.json +7587 -0
- package/test-suite/catalogs/flutter-calls-v5.json +196 -0
- package/test-suite/catalogs/flutter-calls-v5.symbols.txt +59 -0
- package/test-suite/catalogs/flutter-v6.json +651 -0
- package/test-suite/catalogs/ios-calls-v5.json +158 -0
- package/test-suite/catalogs/ios-calls-v5.symbols.txt +70 -0
- package/test-suite/catalogs/ios-v5.json +1383 -0
- package/test-suite/catalogs/ios-v5.symbols.txt +699 -0
- package/test-suite/catalogs/rn-calls-v5.json +134 -0
- package/test-suite/catalogs/rn-sdk-v4.json +672 -0
- package/test-suite/catalogs/rn-v5.json +449 -0
- package/test-suite/catalogs/sdk-android-v5.json +514 -0
- package/test-suite/catalogs/sdk-android-v5.symbols.txt +254 -0
- package/test-suite/catalogs/sdk-jsv4.json +800 -0
- package/test-suite/catalogs/web-calls-v5.json +195 -0
- package/test-suite/catalogs/web-v7.json +1243 -0
- package/test-suite/scripts/build-registry.mjs +113 -0
- package/test-suite/scripts/catalog-refresh-dart.mjs +151 -0
- package/test-suite/scripts/catalog-refresh.mjs +100 -0
- package/test-suite/scripts/lint-skills.mjs +932 -0
- package/test-suite/scripts/measure-tokens.mjs +169 -0
- package/test-suite/scripts/typecheck-fences-dart.mjs +437 -0
- package/test-suite/scripts/typecheck-fences-kotlin.mjs +269 -0
- package/test-suite/scripts/typecheck-fences.mjs +206 -0
- package/test-suite/scripts/verify-catalog.mjs +242 -0
- package/test-suite/scripts/verify-contract-fences.mjs +94 -0
- package/test-suite/scripts/verify-detection.mjs +178 -0
- package/test-suite/scripts/verify-docs-base.mjs +91 -0
- package/test-suite/scripts/verify-family-agnostic.mjs +134 -0
- package/test-suite/scripts/verify-golden-path.mjs +138 -0
- package/test-suite/scripts/verify-oracle-components.mjs +133 -0
- package/test-suite/scripts/verify-template-bindings.mjs +148 -0
- package/test-suite/typecheck/angular-v5/package.json +21 -0
- package/test-suite/typecheck/angular-v5/tsconfig.json +21 -0
- package/test-suite/typecheck/flutter-v6/analysis_options.yaml +25 -0
- package/test-suite/typecheck/flutter-v6/pubspec.yaml +21 -0
- package/test-suite/typecheck/web-v7/package.json +18 -0
- package/test-suite/typecheck/web-v7/tsconfig.json +19 -0
- package/bin/install.js +0 -1003
- package/skills/.claude-plugin/marketplace.json +0 -86
- package/skills/cometchat/references/asking-questions.md +0 -48
- package/skills/cometchat-android-v5/SKILL.md +0 -121
- package/skills/cometchat-android-v5-calls/SKILL.md +0 -429
- package/skills/cometchat-android-v5-calls/references/README.md +0 -53
- package/skills/cometchat-android-v5-calls/references/add-calls-to-existing-chat.md +0 -197
- package/skills/cometchat-android-v5-calls/references/audio-controls.md +0 -91
- package/skills/cometchat-android-v5-calls/references/background-handling.md +0 -168
- package/skills/cometchat-android-v5-calls/references/call-layouts.md +0 -131
- package/skills/cometchat-android-v5-calls/references/call-logs.md +0 -113
- package/skills/cometchat-android-v5-calls/references/call-session.md +0 -274
- package/skills/cometchat-android-v5-calls/references/custom-ui.md +0 -150
- package/skills/cometchat-android-v5-calls/references/event-listeners.md +0 -123
- package/skills/cometchat-android-v5-calls/references/group-calls.md +0 -205
- package/skills/cometchat-android-v5-calls/references/idle-timeout.md +0 -117
- package/skills/cometchat-android-v5-calls/references/in-call-chat.md +0 -134
- package/skills/cometchat-android-v5-calls/references/join-session.md +0 -120
- package/skills/cometchat-android-v5-calls/references/migration-v4-to-v5.md +0 -222
- package/skills/cometchat-android-v5-calls/references/participant-management.md +0 -110
- package/skills/cometchat-android-v5-calls/references/picture-in-picture.md +0 -106
- package/skills/cometchat-android-v5-calls/references/raise-hand.md +0 -248
- package/skills/cometchat-android-v5-calls/references/recording.md +0 -101
- package/skills/cometchat-android-v5-calls/references/ringing-integration.md +0 -152
- package/skills/cometchat-android-v5-calls/references/screen-sharing.md +0 -78
- package/skills/cometchat-android-v5-calls/references/server-fcm-voip.md +0 -215
- package/skills/cometchat-android-v5-calls/references/session-settings.md +0 -121
- package/skills/cometchat-android-v5-calls/references/setup.md +0 -137
- package/skills/cometchat-android-v5-calls/references/share-invite.md +0 -156
- package/skills/cometchat-android-v5-calls/references/video-controls.md +0 -87
- package/skills/cometchat-android-v5-calls/references/voip-calling.md +0 -526
- package/skills/cometchat-android-v5-components/SKILL.md +0 -431
- package/skills/cometchat-android-v5-core/SKILL.md +0 -486
- package/skills/cometchat-android-v5-customization/SKILL.md +0 -469
- package/skills/cometchat-android-v5-extensions/SKILL.md +0 -127
- package/skills/cometchat-android-v5-features/SKILL.md +0 -131
- package/skills/cometchat-android-v5-placement/SKILL.md +0 -277
- package/skills/cometchat-android-v5-production/SKILL.md +0 -95
- package/skills/cometchat-android-v5-push/SKILL.md +0 -619
- package/skills/cometchat-android-v5-testing/SKILL.md +0 -188
- package/skills/cometchat-android-v5-theming/SKILL.md +0 -167
- package/skills/cometchat-android-v5-troubleshooting/SKILL.md +0 -74
- package/skills/cometchat-android-v6/SKILL.md +0 -108
- package/skills/cometchat-android-v6-calls/references/add-calls-to-existing-chat.md +0 -97
- package/skills/cometchat-android-v6-calls/references/advanced-features.md +0 -87
- package/skills/cometchat-android-v6-calls/references/call-layouts.md +0 -100
- package/skills/cometchat-android-v6-calls/references/call-session.md +0 -163
- package/skills/cometchat-android-v6-calls/references/device-management.md +0 -172
- package/skills/cometchat-android-v6-calls/references/group-calls.md +0 -191
- package/skills/cometchat-android-v6-calls/references/idle-timeout.md +0 -110
- package/skills/cometchat-android-v6-calls/references/in-call-chat.md +0 -141
- package/skills/cometchat-android-v6-calls/references/raise-hand.md +0 -188
- package/skills/cometchat-android-v6-calls/references/ringing-integration.md +0 -176
- package/skills/cometchat-android-v6-calls/references/server-fcm-voip.md +0 -127
- package/skills/cometchat-android-v6-calls/references/share-invite.md +0 -105
- package/skills/cometchat-android-v6-compose-theming/SKILL.md +0 -250
- package/skills/cometchat-android-v6-kotlin-theming/SKILL.md +0 -233
- package/skills/cometchat-angular-calls/SKILL.md +0 -380
- package/skills/cometchat-angular-calls/references/add-calls-to-existing-chat.md +0 -96
- package/skills/cometchat-angular-calls/references/call-layouts.md +0 -123
- package/skills/cometchat-angular-calls/references/call-session.md +0 -167
- package/skills/cometchat-angular-calls/references/custom-ui.md +0 -239
- package/skills/cometchat-angular-calls/references/device-management.md +0 -154
- package/skills/cometchat-angular-calls/references/group-calls.md +0 -433
- package/skills/cometchat-angular-calls/references/idle-timeout.md +0 -161
- package/skills/cometchat-angular-calls/references/in-call-chat.md +0 -148
- package/skills/cometchat-angular-calls/references/lazy-loading-pitfalls.md +0 -205
- package/skills/cometchat-angular-calls/references/migration-v4-to-v5.md +0 -53
- package/skills/cometchat-angular-calls/references/ngzone-and-async-callbacks.md +0 -184
- package/skills/cometchat-angular-calls/references/picture-in-picture.md +0 -285
- package/skills/cometchat-angular-calls/references/raise-hand.md +0 -172
- package/skills/cometchat-angular-calls/references/recording-screen-share.md +0 -260
- package/skills/cometchat-angular-calls/references/ringing-integration.md +0 -133
- package/skills/cometchat-angular-calls/references/server-web-push-vapid.md +0 -100
- package/skills/cometchat-angular-calls/references/share-invite.md +0 -122
- package/skills/cometchat-angular-calls/references/virtual-background.md +0 -29
- package/skills/cometchat-angular-components/SKILL.md +0 -235
- package/skills/cometchat-angular-core/SKILL.md +0 -386
- package/skills/cometchat-angular-customization/SKILL.md +0 -616
- package/skills/cometchat-angular-features/SKILL.md +0 -329
- package/skills/cometchat-angular-patterns/SKILL.md +0 -256
- package/skills/cometchat-angular-placement/SKILL.md +0 -314
- package/skills/cometchat-angular-production/SKILL.md +0 -564
- package/skills/cometchat-angular-push/SKILL.md +0 -389
- package/skills/cometchat-angular-testing/SKILL.md +0 -605
- package/skills/cometchat-angular-theming/SKILL.md +0 -290
- package/skills/cometchat-angular-troubleshooting/SKILL.md +0 -364
- package/skills/cometchat-astro-patterns/SKILL.md +0 -708
- package/skills/cometchat-calls/SKILL.md +0 -364
- package/skills/cometchat-calls/references/use-case-broadcast.md +0 -199
- package/skills/cometchat-calls/references/use-case-marketplace.md +0 -157
- package/skills/cometchat-calls/references/use-case-support.md +0 -189
- package/skills/cometchat-calls/references/use-case-team.md +0 -180
- package/skills/cometchat-calls/references/use-case-telehealth.md +0 -153
- package/skills/cometchat-components/SKILL.md +0 -1142
- package/skills/cometchat-core/SKILL.md +0 -1048
- package/skills/cometchat-customization/SKILL.md +0 -580
- package/skills/cometchat-customization/references/component-catalog.md +0 -236
- package/skills/cometchat-features/SKILL.md +0 -861
- package/skills/cometchat-flutter-v5/SKILL.md +0 -173
- package/skills/cometchat-flutter-v5-calls/SKILL.md +0 -455
- package/skills/cometchat-flutter-v5-calls/references/add-calls-to-existing-chat.md +0 -193
- package/skills/cometchat-flutter-v5-calls/references/call-layouts.md +0 -103
- package/skills/cometchat-flutter-v5-calls/references/call-session.md +0 -285
- package/skills/cometchat-flutter-v5-calls/references/device-management.md +0 -124
- package/skills/cometchat-flutter-v5-calls/references/group-calls.md +0 -181
- package/skills/cometchat-flutter-v5-calls/references/idle-timeout.md +0 -99
- package/skills/cometchat-flutter-v5-calls/references/in-call-chat.md +0 -135
- package/skills/cometchat-flutter-v5-calls/references/migration-v4-to-v5.md +0 -210
- package/skills/cometchat-flutter-v5-calls/references/raise-hand.md +0 -255
- package/skills/cometchat-flutter-v5-calls/references/ringing-integration.md +0 -196
- package/skills/cometchat-flutter-v5-calls/references/server-push-bridge.md +0 -101
- package/skills/cometchat-flutter-v5-calls/references/share-invite.md +0 -148
- package/skills/cometchat-flutter-v5-conversations/SKILL.md +0 -118
- package/skills/cometchat-flutter-v5-core/SKILL.md +0 -239
- package/skills/cometchat-flutter-v5-customization/SKILL.md +0 -358
- package/skills/cometchat-flutter-v5-events/SKILL.md +0 -156
- package/skills/cometchat-flutter-v5-messages/SKILL.md +0 -259
- package/skills/cometchat-flutter-v5-production/SKILL.md +0 -216
- package/skills/cometchat-flutter-v5-push/SKILL.md +0 -285
- package/skills/cometchat-flutter-v5-testing/SKILL.md +0 -401
- package/skills/cometchat-flutter-v5-theming/SKILL.md +0 -161
- package/skills/cometchat-flutter-v5-troubleshooting/SKILL.md +0 -130
- package/skills/cometchat-flutter-v5-users-groups/SKILL.md +0 -152
- package/skills/cometchat-flutter-v6/SKILL.md +0 -446
- package/skills/cometchat-flutter-v6-calls/references/add-calls-to-existing-chat.md +0 -136
- package/skills/cometchat-flutter-v6-calls/references/advanced-features.md +0 -89
- package/skills/cometchat-flutter-v6-calls/references/call-layouts.md +0 -105
- package/skills/cometchat-flutter-v6-calls/references/call-session.md +0 -229
- package/skills/cometchat-flutter-v6-calls/references/device-management.md +0 -105
- package/skills/cometchat-flutter-v6-calls/references/group-calls.md +0 -190
- package/skills/cometchat-flutter-v6-calls/references/idle-timeout.md +0 -88
- package/skills/cometchat-flutter-v6-calls/references/in-call-chat.md +0 -125
- package/skills/cometchat-flutter-v6-calls/references/raise-hand.md +0 -275
- package/skills/cometchat-flutter-v6-calls/references/ringing-integration.md +0 -171
- package/skills/cometchat-flutter-v6-calls/references/server-push-bridge.md +0 -93
- package/skills/cometchat-flutter-v6-calls/references/share-invite.md +0 -102
- package/skills/cometchat-flutter-v6-conversations/SKILL.md +0 -238
- package/skills/cometchat-flutter-v6-messages/SKILL.md +0 -384
- package/skills/cometchat-flutter-v6-theming/SKILL.md +0 -293
- package/skills/cometchat-flutter-v6-users-groups/SKILL.md +0 -224
- package/skills/cometchat-ios/SKILL.md +0 -325
- package/skills/cometchat-ios-calls/references/add-calls-to-existing-chat.md +0 -181
- package/skills/cometchat-ios-calls/references/audio-modes-and-controls.md +0 -45
- package/skills/cometchat-ios-calls/references/avaudiosession-routing.md +0 -188
- package/skills/cometchat-ios-calls/references/call-layouts.md +0 -76
- package/skills/cometchat-ios-calls/references/call-session.md +0 -218
- package/skills/cometchat-ios-calls/references/callkit-and-pushkit.md +0 -357
- package/skills/cometchat-ios-calls/references/custom-ui.md +0 -322
- package/skills/cometchat-ios-calls/references/device-management.md +0 -171
- package/skills/cometchat-ios-calls/references/group-calls.md +0 -359
- package/skills/cometchat-ios-calls/references/idle-timeout.md +0 -184
- package/skills/cometchat-ios-calls/references/in-call-chat.md +0 -179
- package/skills/cometchat-ios-calls/references/migration-v4-to-v5.md +0 -196
- package/skills/cometchat-ios-calls/references/picture-in-picture.md +0 -246
- package/skills/cometchat-ios-calls/references/raise-hand.md +0 -26
- package/skills/cometchat-ios-calls/references/recording-screen-share.md +0 -252
- package/skills/cometchat-ios-calls/references/ringing-integration.md +0 -143
- package/skills/cometchat-ios-calls/references/server-apns-pushkit.md +0 -267
- package/skills/cometchat-ios-calls/references/share-invite.md +0 -148
- package/skills/cometchat-ios-calls/references/swiftui-uikit-hosting.md +0 -246
- package/skills/cometchat-ios-calls/references/voip-cert-setup.md +0 -166
- package/skills/cometchat-ios-theming/SKILL.md +0 -667
- package/skills/cometchat-native-bare-patterns/SKILL.md +0 -550
- package/skills/cometchat-native-calls/SKILL.md +0 -671
- package/skills/cometchat-native-calls/references/add-calls-to-existing-chat.md +0 -203
- package/skills/cometchat-native-calls/references/call-layouts.md +0 -125
- package/skills/cometchat-native-calls/references/call-session.md +0 -182
- package/skills/cometchat-native-calls/references/custom-ui.md +0 -254
- package/skills/cometchat-native-calls/references/device-management.md +0 -158
- package/skills/cometchat-native-calls/references/expo-vs-bare.md +0 -179
- package/skills/cometchat-native-calls/references/group-calls.md +0 -296
- package/skills/cometchat-native-calls/references/idle-timeout.md +0 -128
- package/skills/cometchat-native-calls/references/in-call-chat.md +0 -145
- package/skills/cometchat-native-calls/references/migration-v4-to-v5.md +0 -72
- package/skills/cometchat-native-calls/references/picture-in-picture.md +0 -276
- package/skills/cometchat-native-calls/references/raise-hand.md +0 -205
- package/skills/cometchat-native-calls/references/recording-screen-share.md +0 -169
- package/skills/cometchat-native-calls/references/ringing-integration.md +0 -118
- package/skills/cometchat-native-calls/references/server-push-bridge.md +0 -135
- package/skills/cometchat-native-calls/references/server-push-payloads.md +0 -193
- package/skills/cometchat-native-calls/references/share-invite.md +0 -146
- package/skills/cometchat-native-calls/references/voip-push-end-to-end.md +0 -319
- package/skills/cometchat-native-components/SKILL.md +0 -628
- package/skills/cometchat-native-core/SKILL.md +0 -679
- package/skills/cometchat-native-customization/SKILL.md +0 -716
- package/skills/cometchat-native-expo-patterns/SKILL.md +0 -552
- package/skills/cometchat-native-features/SKILL.md +0 -638
- package/skills/cometchat-native-placement/SKILL.md +0 -509
- package/skills/cometchat-native-production/SKILL.md +0 -700
- package/skills/cometchat-native-push/SKILL.md +0 -594
- package/skills/cometchat-native-testing/SKILL.md +0 -582
- package/skills/cometchat-native-theming/SKILL.md +0 -681
- package/skills/cometchat-native-troubleshooting/SKILL.md +0 -501
- package/skills/cometchat-nextjs-patterns/SKILL.md +0 -899
- package/skills/cometchat-placement/SKILL.md +0 -1360
- package/skills/cometchat-production/SKILL.md +0 -1027
- package/skills/cometchat-react-calls/SKILL.md +0 -752
- package/skills/cometchat-react-calls/references/add-calls-to-existing-chat.md +0 -146
- package/skills/cometchat-react-calls/references/call-layouts.md +0 -160
- package/skills/cometchat-react-calls/references/call-session.md +0 -235
- package/skills/cometchat-react-calls/references/custom-ui.md +0 -247
- package/skills/cometchat-react-calls/references/device-management.md +0 -210
- package/skills/cometchat-react-calls/references/group-calls.md +0 -257
- package/skills/cometchat-react-calls/references/idle-timeout.md +0 -188
- package/skills/cometchat-react-calls/references/in-call-chat.md +0 -212
- package/skills/cometchat-react-calls/references/migration-v4-to-v5.md +0 -170
- package/skills/cometchat-react-calls/references/picture-in-picture.md +0 -245
- package/skills/cometchat-react-calls/references/raise-hand.md +0 -238
- package/skills/cometchat-react-calls/references/recording-screen-share.md +0 -144
- package/skills/cometchat-react-calls/references/ringing-integration.md +0 -255
- package/skills/cometchat-react-calls/references/server-web-push-vapid.md +0 -241
- package/skills/cometchat-react-calls/references/share-invite.md +0 -175
- package/skills/cometchat-react-calls/references/testing-calls-on-web.md +0 -216
- package/skills/cometchat-react-calls/references/virtual-background.md +0 -32
- package/skills/cometchat-react-calls/references/voip-and-web-push.md +0 -165
- package/skills/cometchat-react-patterns/SKILL.md +0 -628
- package/skills/cometchat-react-push/SKILL.md +0 -634
- package/skills/cometchat-react-router-patterns/SKILL.md +0 -758
- package/skills/cometchat-react-testing/SKILL.md +0 -413
- package/skills/cometchat-theming/SKILL.md +0 -498
- package/skills/cometchat-troubleshooting/SKILL.md +0 -294
|
@@ -1,738 +1,82 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: cometchat-ios-production
|
|
3
|
-
description: "
|
|
3
|
+
description: "Ship a CometChat iOS (Swift) integration safely — server-minted auth tokens instead of the Auth Key, keeping secrets out of the app binary, and a pre-launch checklist. Triggers: 'is my cometchat ios production ready', 'auth token instead of auth key swift', 'secure cometchat ios', 'going live checklist ios', 'harden cometchat swift before launch'."
|
|
4
4
|
license: "MIT"
|
|
5
|
-
compatibility: "CometChatUIKitSwift
|
|
5
|
+
compatibility: "CometChatUIKitSwift 5.1.22 + CometChatSDK 4.1.7 (exact); Xcode 16+; iOS 15.1+; SPM only"
|
|
6
6
|
metadata:
|
|
7
7
|
author: "CometChat"
|
|
8
|
-
version: "
|
|
9
|
-
tags: "
|
|
8
|
+
version: "1.0.0"
|
|
9
|
+
tags: "cometchat ios swift production security auth-token hardening appstore"
|
|
10
10
|
---
|
|
11
11
|
|
|
12
|
-
> **Ground truth:** `CometChatUIKitSwift
|
|
12
|
+
> **Ground truth:** `CometChatUIKitSwift` 5.1.22 + `CometChatSDK` 4.1.7 (symbols verified vs `catalogs/ios-v5.json`). The login/auth-token API is FETCHED via `cometchat-ios-core/references/docs-map.md`; the REST auth-token endpoint is `{DOCS_BASE}/rest-api/auth-tokens`. **The iOS UI Kit docs have no single production-hardening page** — this checklist is the pack's own guidance from `RULES.md` §4 + `cometchat-ios-core/references/setup-credentials.md`, labelled as such. Tracked DOCS GAP.
|
|
13
13
|
|
|
14
|
-
##
|
|
14
|
+
## Companion skills (read first)
|
|
15
|
+
- `cometchat-ios-core` — `references/setup-credentials.md` (the `Secrets.xcconfig` → Info.plist → `Bundle.main` flow) and `references/swiftui.md` (the init→login launch hook) this hardens.
|
|
16
|
+
- `cometchat-security` — the enterprise auth model this client-side hardening plugs into: wiring your IdP / SSO into the token flow (your IdP → your server → mint the CometChat auth token; CometChat is **not** an IdP), token expiry/refresh + re-login, RBAC roles + group (SBAC) scopes, and Auth Key vs auth token vs REST API Key. Load it for a security review or any SSO question.
|
|
15
17
|
|
|
16
|
-
|
|
18
|
+
## Use this skill when
|
|
19
|
+
Moving off the development setup: TestFlight/App Store submission, a security review, or "is this safe to ship."
|
|
17
20
|
|
|
18
|
-
|
|
21
|
+
## The one thing that matters
|
|
22
|
+
**Never embed the Auth Key in the app binary.**
|
|
19
23
|
|
|
20
|
-
|
|
24
|
+
The Auth Key can mint a session for **any user in your app**. Anything baked into the app — an `xcconfig` value promoted into `Info.plist`, a string constant — is recoverable from the shipped `.ipa` (`strings`, class-dump). Treat it as public.
|
|
21
25
|
|
|
22
|
-
|
|
26
|
+
| | Development | Production |
|
|
27
|
+
| --- | --- | --- |
|
|
28
|
+
| Login | `CometChatUIKit.login(uid:...)` | `CometChatUIKit.login(authToken:...)` |
|
|
29
|
+
| Auth Key | in `Secrets.xcconfig` | **not in the build** |
|
|
30
|
+
| Token source | n/a | your backend, per authenticated user |
|
|
31
|
+
| REST API Key | never in the app | server only |
|
|
23
32
|
|
|
24
|
-
|
|
33
|
+
## The production login flow
|
|
34
|
+
1. Your app authenticates the user (your own auth / sign-in with Apple / your backend).
|
|
35
|
+
2. Your **server** mints a CometChat auth token for that user's UID via the REST API using the **REST API Key** (`{DOCS_BASE}/rest-api/auth-tokens`).
|
|
36
|
+
3. The server returns the token to the app over an authenticated HTTPS request.
|
|
37
|
+
4. The app calls `login(authToken:)`.
|
|
25
38
|
|
|
26
39
|
```swift
|
|
27
|
-
//
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
### Your Server Endpoint
|
|
72
|
-
|
|
73
|
-
Create an endpoint that:
|
|
74
|
-
1. Authenticates the user (your existing auth system)
|
|
75
|
-
2. Calls CometChat API to generate an auth token
|
|
76
|
-
3. Returns the token to the iOS app
|
|
77
|
-
|
|
78
|
-
**Example (Node.js/Express):**
|
|
79
|
-
|
|
80
|
-
```javascript
|
|
81
|
-
const express = require('express');
|
|
82
|
-
const axios = require('axios');
|
|
83
|
-
|
|
84
|
-
const app = express();
|
|
85
|
-
|
|
86
|
-
const COMETCHAT_APP_ID = process.env.COMETCHAT_APP_ID;
|
|
87
|
-
const COMETCHAT_API_KEY = process.env.COMETCHAT_API_KEY; // REST API Key
|
|
88
|
-
const COMETCHAT_REGION = process.env.COMETCHAT_REGION;
|
|
89
|
-
|
|
90
|
-
app.post('/api/cometchat/token', async (req, res) => {
|
|
91
|
-
try {
|
|
92
|
-
// 1. Verify the user is authenticated (your auth system)
|
|
93
|
-
const userId = req.user.id; // From your auth middleware
|
|
94
|
-
|
|
95
|
-
if (!userId) {
|
|
96
|
-
return res.status(401).json({ error: 'Unauthorized' });
|
|
97
|
-
}
|
|
98
|
-
|
|
99
|
-
// 2. Generate CometChat auth token
|
|
100
|
-
const response = await axios.post(
|
|
101
|
-
`https://${COMETCHAT_APP_ID}.api-${COMETCHAT_REGION}.cometchat.io/v3/users/${userId}/auth_tokens`,
|
|
102
|
-
{},
|
|
103
|
-
{
|
|
104
|
-
headers: {
|
|
105
|
-
'apiKey': COMETCHAT_API_KEY,
|
|
106
|
-
'Content-Type': 'application/json'
|
|
107
|
-
}
|
|
108
|
-
}
|
|
109
|
-
);
|
|
110
|
-
|
|
111
|
-
// 3. Return the token
|
|
112
|
-
res.json({
|
|
113
|
-
authToken: response.data.data.authToken
|
|
114
|
-
});
|
|
115
|
-
|
|
116
|
-
} catch (error) {
|
|
117
|
-
console.error('CometChat token error:', error.response?.data || error.message);
|
|
118
|
-
res.status(500).json({ error: 'Failed to generate token' });
|
|
119
|
-
}
|
|
120
|
-
});
|
|
121
|
-
```
|
|
122
|
-
|
|
123
|
-
**Example (Python/Flask):**
|
|
124
|
-
|
|
125
|
-
```python
|
|
126
|
-
from flask import Flask, jsonify, request
|
|
127
|
-
import requests
|
|
128
|
-
import os
|
|
129
|
-
|
|
130
|
-
app = Flask(__name__)
|
|
131
|
-
|
|
132
|
-
COMETCHAT_APP_ID = os.environ.get('COMETCHAT_APP_ID')
|
|
133
|
-
COMETCHAT_API_KEY = os.environ.get('COMETCHAT_API_KEY')
|
|
134
|
-
COMETCHAT_REGION = os.environ.get('COMETCHAT_REGION')
|
|
135
|
-
|
|
136
|
-
@app.route('/api/cometchat/token', methods=['POST'])
|
|
137
|
-
def get_cometchat_token():
|
|
138
|
-
# 1. Verify user is authenticated (your auth system)
|
|
139
|
-
user_id = request.user.id # From your auth middleware
|
|
140
|
-
|
|
141
|
-
if not user_id:
|
|
142
|
-
return jsonify({'error': 'Unauthorized'}), 401
|
|
143
|
-
|
|
144
|
-
# 2. Generate CometChat auth token
|
|
145
|
-
url = f'https://{COMETCHAT_APP_ID}.api-{COMETCHAT_REGION}.cometchat.io/v3/users/{user_id}/auth_tokens'
|
|
146
|
-
|
|
147
|
-
headers = {
|
|
148
|
-
'apiKey': COMETCHAT_API_KEY,
|
|
149
|
-
'Content-Type': 'application/json'
|
|
150
|
-
}
|
|
151
|
-
|
|
152
|
-
response = requests.post(url, headers=headers)
|
|
153
|
-
|
|
154
|
-
if response.status_code == 200:
|
|
155
|
-
data = response.json()
|
|
156
|
-
return jsonify({'authToken': data['data']['authToken']})
|
|
157
|
-
else:
|
|
158
|
-
return jsonify({'error': 'Failed to generate token'}), 500
|
|
159
|
-
```
|
|
160
|
-
|
|
161
|
-
### CometChat REST API Reference
|
|
162
|
-
|
|
163
|
-
**Create Auth Token:**
|
|
164
|
-
```
|
|
165
|
-
POST https://{appId}.api-{region}.cometchat.io/v3/users/{uid}/auth_tokens
|
|
166
|
-
|
|
167
|
-
Headers:
|
|
168
|
-
apiKey: YOUR_REST_API_KEY
|
|
169
|
-
Content-Type: application/json
|
|
170
|
-
|
|
171
|
-
Response:
|
|
172
|
-
{
|
|
173
|
-
"data": {
|
|
174
|
-
"uid": "user-123",
|
|
175
|
-
"authToken": "user-123_abc123xyz..."
|
|
176
|
-
}
|
|
177
|
-
}
|
|
178
|
-
```
|
|
179
|
-
|
|
180
|
-
**Create User (if needed):**
|
|
181
|
-
```
|
|
182
|
-
POST https://{appId}.api-{region}.cometchat.io/v3/users
|
|
183
|
-
|
|
184
|
-
Headers:
|
|
185
|
-
apiKey: YOUR_REST_API_KEY
|
|
186
|
-
Content-Type: application/json
|
|
187
|
-
|
|
188
|
-
Body:
|
|
189
|
-
{
|
|
190
|
-
"uid": "user-123",
|
|
191
|
-
"name": "John Doe",
|
|
192
|
-
"avatar": "https://example.com/avatar.jpg"
|
|
193
|
-
}
|
|
194
|
-
```
|
|
195
|
-
|
|
196
|
-
---
|
|
197
|
-
|
|
198
|
-
## 3. iOS Implementation
|
|
199
|
-
|
|
200
|
-
### CometChatManager for Production
|
|
201
|
-
|
|
202
|
-
```swift
|
|
203
|
-
import Foundation
|
|
204
|
-
import CometChatUIKitSwift
|
|
205
|
-
import CometChatSDK
|
|
206
|
-
|
|
207
|
-
final class CometChatManager {
|
|
208
|
-
|
|
209
|
-
static let shared = CometChatManager()
|
|
210
|
-
|
|
211
|
-
private(set) var isInitialized = false
|
|
212
|
-
private(set) var currentUser: User?
|
|
213
|
-
|
|
214
|
-
private init() {}
|
|
215
|
-
|
|
216
|
-
// MARK: - Initialization (No Auth Key needed)
|
|
217
|
-
|
|
218
|
-
func initialize(completion: @escaping (Result<Bool, Error>) -> Void) {
|
|
219
|
-
guard !isInitialized else {
|
|
220
|
-
completion(.success(true))
|
|
221
|
-
return
|
|
222
|
-
}
|
|
223
|
-
|
|
224
|
-
// Note: No authKey in production!
|
|
225
|
-
let uiKitSettings = UIKitSettings()
|
|
226
|
-
.set(appID: AppConfig.cometChatAppID)
|
|
227
|
-
.set(region: AppConfig.cometChatRegion)
|
|
228
|
-
.subscribePresenceForAllUsers()
|
|
229
|
-
.build()
|
|
230
|
-
|
|
231
|
-
CometChatUIKit(uiKitSettings: uiKitSettings) { [weak self] result in
|
|
232
|
-
DispatchQueue.main.async {
|
|
233
|
-
switch result {
|
|
234
|
-
case .success(let success):
|
|
235
|
-
self?.isInitialized = success
|
|
236
|
-
self?.currentUser = CometChatUIKit.getLoggedInUser()
|
|
237
|
-
completion(.success(success))
|
|
238
|
-
case .failure(let error):
|
|
239
|
-
completion(.failure(error))
|
|
240
|
-
}
|
|
241
|
-
}
|
|
242
|
-
}
|
|
243
|
-
}
|
|
244
|
-
|
|
245
|
-
// MARK: - Production Login
|
|
246
|
-
|
|
247
|
-
func login(completion: @escaping (Result<User, Error>) -> Void) {
|
|
248
|
-
guard isInitialized else {
|
|
249
|
-
completion(.failure(CometChatError.notInitialized))
|
|
250
|
-
return
|
|
251
|
-
}
|
|
252
|
-
|
|
253
|
-
// Check for existing session
|
|
254
|
-
if let user = CometChatUIKit.getLoggedInUser() {
|
|
255
|
-
currentUser = user
|
|
256
|
-
completion(.success(user))
|
|
257
|
-
return
|
|
258
|
-
}
|
|
259
|
-
|
|
260
|
-
// Fetch auth token from your server
|
|
261
|
-
fetchAuthToken { [weak self] result in
|
|
262
|
-
switch result {
|
|
263
|
-
case .success(let authToken):
|
|
264
|
-
self?.loginWithToken(authToken, completion: completion)
|
|
265
|
-
case .failure(let error):
|
|
266
|
-
completion(.failure(error))
|
|
267
|
-
}
|
|
268
|
-
}
|
|
269
|
-
}
|
|
270
|
-
|
|
271
|
-
private func fetchAuthToken(completion: @escaping (Result<String, Error>) -> Void) {
|
|
272
|
-
guard let url = URL(string: "\(AppConfig.apiBaseURL)/api/cometchat/token") else {
|
|
273
|
-
completion(.failure(CometChatError.invalidURL))
|
|
274
|
-
return
|
|
275
|
-
}
|
|
276
|
-
|
|
277
|
-
var request = URLRequest(url: url)
|
|
278
|
-
request.httpMethod = "POST"
|
|
279
|
-
request.setValue("application/json", forHTTPHeaderField: "Content-Type")
|
|
280
|
-
|
|
281
|
-
// Add your auth header (e.g., JWT token)
|
|
282
|
-
if let authToken = AuthManager.shared.accessToken {
|
|
283
|
-
request.setValue("Bearer \(authToken)", forHTTPHeaderField: "Authorization")
|
|
284
|
-
}
|
|
285
|
-
|
|
286
|
-
URLSession.shared.dataTask(with: request) { data, response, error in
|
|
287
|
-
if let error = error {
|
|
288
|
-
completion(.failure(error))
|
|
289
|
-
return
|
|
290
|
-
}
|
|
291
|
-
|
|
292
|
-
guard let data = data else {
|
|
293
|
-
completion(.failure(CometChatError.noData))
|
|
294
|
-
return
|
|
295
|
-
}
|
|
296
|
-
|
|
297
|
-
do {
|
|
298
|
-
let json = try JSONSerialization.jsonObject(with: data) as? [String: Any]
|
|
299
|
-
if let authToken = json?["authToken"] as? String {
|
|
300
|
-
completion(.success(authToken))
|
|
301
|
-
} else {
|
|
302
|
-
completion(.failure(CometChatError.invalidResponse))
|
|
303
|
-
}
|
|
304
|
-
} catch {
|
|
305
|
-
completion(.failure(error))
|
|
306
|
-
}
|
|
307
|
-
}.resume()
|
|
308
|
-
}
|
|
309
|
-
|
|
310
|
-
private func loginWithToken(_ authToken: String, completion: @escaping (Result<User, Error>) -> Void) {
|
|
311
|
-
CometChatUIKit.login(authToken: authToken) { [weak self] result in
|
|
312
|
-
DispatchQueue.main.async {
|
|
313
|
-
switch result {
|
|
314
|
-
case .success(let user):
|
|
315
|
-
self?.currentUser = user
|
|
316
|
-
completion(.success(user))
|
|
317
|
-
case .onError(let error):
|
|
318
|
-
// CometChatException does NOT conform to Swift's Error, so it
|
|
319
|
-
// can't go straight into Result<_, Error> — bridge it.
|
|
320
|
-
completion(.failure(CometChatError.sdk(error)))
|
|
321
|
-
}
|
|
322
|
-
}
|
|
323
|
-
}
|
|
324
|
-
}
|
|
325
|
-
|
|
326
|
-
// MARK: - Logout
|
|
327
|
-
|
|
328
|
-
func logout(completion: @escaping (Result<Void, Error>) -> Void) {
|
|
329
|
-
guard let user = currentUser else {
|
|
330
|
-
completion(.success(()))
|
|
331
|
-
return
|
|
332
|
-
}
|
|
333
|
-
|
|
334
|
-
CometChatUIKit.logout(user: user) { [weak self] result in
|
|
335
|
-
DispatchQueue.main.async {
|
|
336
|
-
switch result {
|
|
337
|
-
case .success:
|
|
338
|
-
self?.currentUser = nil
|
|
339
|
-
completion(.success(()))
|
|
340
|
-
case .onError(let error):
|
|
341
|
-
// CometChatException does NOT conform to Swift's Error, so it
|
|
342
|
-
// can't go straight into Result<_, Error> — bridge it.
|
|
343
|
-
completion(.failure(CometChatError.sdk(error)))
|
|
344
|
-
}
|
|
345
|
-
}
|
|
346
|
-
}
|
|
347
|
-
}
|
|
348
|
-
}
|
|
349
|
-
|
|
350
|
-
// MARK: - Errors
|
|
351
|
-
|
|
352
|
-
enum CometChatError: LocalizedError {
|
|
353
|
-
case notInitialized
|
|
354
|
-
case invalidURL
|
|
355
|
-
case noData
|
|
356
|
-
case invalidResponse
|
|
357
|
-
case sdk(CometChatException) // bridges a CometChatException into Swift's Error
|
|
358
|
-
|
|
359
|
-
var errorDescription: String? {
|
|
360
|
-
switch self {
|
|
361
|
-
case .notInitialized:
|
|
362
|
-
return "CometChat is not initialized"
|
|
363
|
-
case .invalidURL:
|
|
364
|
-
return "Invalid API URL"
|
|
365
|
-
case .noData:
|
|
366
|
-
return "No data received from server"
|
|
367
|
-
case .invalidResponse:
|
|
368
|
-
return "Invalid response from server"
|
|
369
|
-
case .sdk(let exception):
|
|
370
|
-
return exception.errorDescription
|
|
371
|
-
}
|
|
372
|
-
}
|
|
373
|
-
}
|
|
374
|
-
```
|
|
375
|
-
|
|
376
|
-
### App Configuration
|
|
377
|
-
|
|
378
|
-
```swift
|
|
379
|
-
// AppConfig.swift
|
|
380
|
-
import Foundation
|
|
381
|
-
|
|
382
|
-
struct AppConfig {
|
|
383
|
-
|
|
384
|
-
// CometChat
|
|
385
|
-
static let cometChatAppID: String = {
|
|
386
|
-
guard let appID = Bundle.main.object(forInfoDictionaryKey: "CometChatAppID") as? String else {
|
|
387
|
-
fatalError("CometChatAppID not found in Info.plist")
|
|
388
|
-
}
|
|
389
|
-
return appID
|
|
390
|
-
}()
|
|
391
|
-
|
|
392
|
-
static let cometChatRegion: String = {
|
|
393
|
-
guard let region = Bundle.main.object(forInfoDictionaryKey: "CometChatRegion") as? String else {
|
|
394
|
-
fatalError("CometChatRegion not found in Info.plist")
|
|
395
|
-
}
|
|
396
|
-
return region
|
|
397
|
-
}()
|
|
398
|
-
|
|
399
|
-
// Your API
|
|
400
|
-
static let apiBaseURL: String = {
|
|
401
|
-
#if DEBUG
|
|
402
|
-
return "https://api-staging.yourapp.com"
|
|
403
|
-
#else
|
|
404
|
-
return "https://api.yourapp.com"
|
|
405
|
-
#endif
|
|
406
|
-
}()
|
|
407
|
-
}
|
|
408
|
-
```
|
|
409
|
-
|
|
410
|
-
### Info.plist Configuration
|
|
411
|
-
|
|
412
|
-
```xml
|
|
413
|
-
<key>CometChatAppID</key>
|
|
414
|
-
<string>$(COMETCHAT_APP_ID)</string>
|
|
415
|
-
<key>CometChatRegion</key>
|
|
416
|
-
<string>$(COMETCHAT_REGION)</string>
|
|
417
|
-
```
|
|
418
|
-
|
|
419
|
-
### xcconfig Files
|
|
420
|
-
|
|
421
|
-
**Debug.xcconfig:**
|
|
422
|
-
```
|
|
423
|
-
COMETCHAT_APP_ID = your_app_id
|
|
424
|
-
COMETCHAT_REGION = us
|
|
425
|
-
```
|
|
426
|
-
|
|
427
|
-
**Release.xcconfig:**
|
|
428
|
-
```
|
|
429
|
-
COMETCHAT_APP_ID = your_app_id
|
|
430
|
-
COMETCHAT_REGION = us
|
|
431
|
-
```
|
|
432
|
-
|
|
433
|
-
---
|
|
434
|
-
|
|
435
|
-
## 4. User Provisioning
|
|
436
|
-
|
|
437
|
-
### Create Users on Your Server
|
|
438
|
-
|
|
439
|
-
When a user signs up in your app, create them in CometChat:
|
|
440
|
-
|
|
441
|
-
```javascript
|
|
442
|
-
// On your server - user registration endpoint
|
|
443
|
-
app.post('/api/register', async (req, res) => {
|
|
444
|
-
const { email, password, name } = req.body;
|
|
445
|
-
|
|
446
|
-
// 1. Create user in your database
|
|
447
|
-
const user = await createUserInDatabase({ email, password, name });
|
|
448
|
-
|
|
449
|
-
// 2. Create user in CometChat
|
|
450
|
-
await axios.post(
|
|
451
|
-
`https://${COMETCHAT_APP_ID}.api-${COMETCHAT_REGION}.cometchat.io/v3/users`,
|
|
452
|
-
{
|
|
453
|
-
uid: user.id,
|
|
454
|
-
name: user.name,
|
|
455
|
-
avatar: user.avatarUrl
|
|
456
|
-
},
|
|
457
|
-
{
|
|
458
|
-
headers: {
|
|
459
|
-
'apiKey': COMETCHAT_API_KEY,
|
|
460
|
-
'Content-Type': 'application/json'
|
|
461
|
-
}
|
|
462
|
-
}
|
|
463
|
-
);
|
|
464
|
-
|
|
465
|
-
res.json({ success: true, userId: user.id });
|
|
466
|
-
});
|
|
467
|
-
```
|
|
468
|
-
|
|
469
|
-
### Update User Profile
|
|
470
|
-
|
|
471
|
-
When user updates their profile:
|
|
472
|
-
|
|
473
|
-
```javascript
|
|
474
|
-
app.put('/api/profile', async (req, res) => {
|
|
475
|
-
const { name, avatar } = req.body;
|
|
476
|
-
const userId = req.user.id;
|
|
477
|
-
|
|
478
|
-
// 1. Update in your database
|
|
479
|
-
await updateUserInDatabase(userId, { name, avatar });
|
|
480
|
-
|
|
481
|
-
// 2. Update in CometChat
|
|
482
|
-
await axios.put(
|
|
483
|
-
`https://${COMETCHAT_APP_ID}.api-${COMETCHAT_REGION}.cometchat.io/v3/users/${userId}`,
|
|
484
|
-
{ name, avatar },
|
|
485
|
-
{
|
|
486
|
-
headers: {
|
|
487
|
-
'apiKey': COMETCHAT_API_KEY,
|
|
488
|
-
'Content-Type': 'application/json'
|
|
489
|
-
}
|
|
490
|
-
}
|
|
491
|
-
);
|
|
492
|
-
|
|
493
|
-
res.json({ success: true });
|
|
494
|
-
});
|
|
495
|
-
```
|
|
496
|
-
|
|
497
|
-
---
|
|
498
|
-
|
|
499
|
-
## 5. Security Best Practices
|
|
500
|
-
|
|
501
|
-
### Never Expose API Keys
|
|
502
|
-
|
|
503
|
-
❌ **Wrong:**
|
|
504
|
-
```swift
|
|
505
|
-
// Never do this!
|
|
506
|
-
let apiKey = "abc123xyz" // Hardcoded in app
|
|
507
|
-
```
|
|
508
|
-
|
|
509
|
-
✅ **Correct:**
|
|
510
|
-
```swift
|
|
511
|
-
// API keys stay on your server
|
|
512
|
-
// iOS app only receives short-lived auth tokens
|
|
513
|
-
```
|
|
514
|
-
|
|
515
|
-
### Validate User Identity
|
|
516
|
-
|
|
517
|
-
Always verify user identity on your server before generating tokens:
|
|
518
|
-
|
|
519
|
-
```javascript
|
|
520
|
-
app.post('/api/cometchat/token', authenticateMiddleware, async (req, res) => {
|
|
521
|
-
// authenticateMiddleware verifies the user's JWT/session
|
|
522
|
-
const userId = req.user.id; // Verified user ID
|
|
523
|
-
|
|
524
|
-
// Generate token only for verified users
|
|
525
|
-
// ...
|
|
526
|
-
});
|
|
527
|
-
```
|
|
528
|
-
|
|
529
|
-
### Use HTTPS
|
|
530
|
-
|
|
531
|
-
Always use HTTPS for API communication:
|
|
532
|
-
|
|
533
|
-
```swift
|
|
534
|
-
// ✅ Correct
|
|
535
|
-
let url = URL(string: "https://api.yourapp.com/api/cometchat/token")
|
|
536
|
-
|
|
537
|
-
// ❌ Wrong
|
|
538
|
-
let url = URL(string: "http://api.yourapp.com/api/cometchat/token")
|
|
539
|
-
```
|
|
540
|
-
|
|
541
|
-
### Token Expiration
|
|
542
|
-
|
|
543
|
-
Auth tokens have a default expiration. Handle token refresh:
|
|
544
|
-
|
|
545
|
-
```swift
|
|
546
|
-
func handleTokenExpired() {
|
|
547
|
-
// Clear current session
|
|
548
|
-
CometChatManager.shared.logout { _ in
|
|
549
|
-
// Re-login to get new token
|
|
550
|
-
CometChatManager.shared.login { result in
|
|
551
|
-
switch result {
|
|
552
|
-
case .success:
|
|
553
|
-
print("Re-authenticated successfully")
|
|
554
|
-
case .failure(let error):
|
|
555
|
-
print("Re-authentication failed: \(error)")
|
|
556
|
-
// Navigate to login screen
|
|
557
|
-
}
|
|
558
|
-
}
|
|
559
|
-
}
|
|
560
|
-
}
|
|
561
|
-
```
|
|
562
|
-
|
|
563
|
-
### App Transport Security
|
|
564
|
-
|
|
565
|
-
Ensure ATS is properly configured in `Info.plist`:
|
|
566
|
-
|
|
567
|
-
```xml
|
|
568
|
-
<key>NSAppTransportSecurity</key>
|
|
569
|
-
<dict>
|
|
570
|
-
<key>NSAllowsArbitraryLoads</key>
|
|
571
|
-
<false/>
|
|
572
|
-
</dict>
|
|
573
|
-
```
|
|
574
|
-
|
|
575
|
-
---
|
|
576
|
-
|
|
577
|
-
## 6. Error Handling
|
|
578
|
-
|
|
579
|
-
### Handle Authentication Errors
|
|
580
|
-
|
|
581
|
-
```swift
|
|
582
|
-
func handleCometChatError(_ error: Error) {
|
|
583
|
-
if let cometChatError = error as? CometChatException {
|
|
584
|
-
switch cometChatError.errorCode {
|
|
585
|
-
case "ERR_UID_NOT_FOUND":
|
|
586
|
-
// User doesn't exist in CometChat
|
|
587
|
-
// Create user on your server, then retry
|
|
588
|
-
createUserAndRetry()
|
|
589
|
-
|
|
590
|
-
case "AUTH_ERR_AUTH_TOKEN_NOT_FOUND":
|
|
591
|
-
// Invalid or expired token
|
|
592
|
-
refreshTokenAndRetry()
|
|
593
|
-
|
|
594
|
-
case "ERR_NOT_LOGGED_IN":
|
|
595
|
-
// User not logged in
|
|
596
|
-
navigateToLogin()
|
|
597
|
-
|
|
598
|
-
default:
|
|
599
|
-
showError(cometChatError.errorDescription ?? "Unknown error")
|
|
600
|
-
}
|
|
601
|
-
}
|
|
602
|
-
}
|
|
603
|
-
```
|
|
604
|
-
|
|
605
|
-
### Retry Logic
|
|
606
|
-
|
|
607
|
-
```swift
|
|
608
|
-
func loginWithRetry(maxAttempts: Int = 3, completion: @escaping (Result<User, Error>) -> Void) {
|
|
609
|
-
var attempts = 0
|
|
610
|
-
|
|
611
|
-
func attempt() {
|
|
612
|
-
attempts += 1
|
|
613
|
-
|
|
614
|
-
CometChatManager.shared.login { result in
|
|
615
|
-
switch result {
|
|
616
|
-
case .success(let user):
|
|
617
|
-
completion(.success(user))
|
|
618
|
-
case .failure(let error):
|
|
619
|
-
if attempts < maxAttempts {
|
|
620
|
-
// Wait and retry
|
|
621
|
-
DispatchQueue.main.asyncAfter(deadline: .now() + 2) {
|
|
622
|
-
attempt()
|
|
623
|
-
}
|
|
624
|
-
} else {
|
|
625
|
-
completion(.failure(error))
|
|
626
|
-
}
|
|
627
|
-
}
|
|
628
|
-
}
|
|
629
|
-
}
|
|
630
|
-
|
|
631
|
-
attempt()
|
|
632
|
-
}
|
|
633
|
-
```
|
|
634
|
-
|
|
635
|
-
---
|
|
636
|
-
|
|
637
|
-
## 7. Deployment Checklist
|
|
638
|
-
|
|
639
|
-
### Before Submitting to App Store
|
|
640
|
-
|
|
641
|
-
- [ ] **Remove Auth Key from code** — Use server-side tokens only
|
|
642
|
-
- [ ] **Configure production API URL** — Point to production server
|
|
643
|
-
- [ ] **Test with production CometChat app** — Create separate prod app in dashboard
|
|
644
|
-
- [ ] **Enable required extensions** — Polls, stickers, AI features in dashboard
|
|
645
|
-
- [ ] **Configure push notifications** — Upload APNs certificate to dashboard
|
|
646
|
-
- [ ] **Test on real devices** — Calls and push don't work on simulator
|
|
647
|
-
- [ ] **Review Info.plist permissions** — Camera, microphone, notifications
|
|
648
|
-
- [ ] **Test logout flow** — Ensure clean session termination
|
|
649
|
-
- [ ] **Test offline behavior** — App should handle network issues gracefully
|
|
650
|
-
- [ ] **Review error messages** — User-friendly error handling
|
|
651
|
-
|
|
652
|
-
### CometChat Dashboard Configuration
|
|
653
|
-
|
|
654
|
-
- [ ] **Create production app** — Separate from development
|
|
655
|
-
- [ ] **Configure webhooks** — If using server-side events
|
|
656
|
-
- [ ] **Set up push notifications** — APNs certificate uploaded
|
|
657
|
-
- [ ] **Enable required extensions** — Only what you need
|
|
658
|
-
- [ ] **Configure AI features** — If using AI capabilities
|
|
659
|
-
- [ ] **Review rate limits** — Understand your plan limits
|
|
660
|
-
- [ ] **Set up monitoring** — Enable analytics and logging
|
|
661
|
-
|
|
662
|
-
### Server Configuration
|
|
663
|
-
|
|
664
|
-
- [ ] **Secure API keys** — Store in environment variables
|
|
665
|
-
- [ ] **Implement rate limiting** — Prevent abuse
|
|
666
|
-
- [ ] **Add request validation** — Validate all inputs
|
|
667
|
-
- [ ] **Set up logging** — Monitor token generation
|
|
668
|
-
- [ ] **Configure CORS** — If using web clients too
|
|
669
|
-
- [ ] **Test error scenarios** — Handle CometChat API failures
|
|
670
|
-
|
|
671
|
-
---
|
|
672
|
-
|
|
673
|
-
## 8. Monitoring and Analytics
|
|
674
|
-
|
|
675
|
-
### Track CometChat Events
|
|
676
|
-
|
|
677
|
-
```swift
|
|
678
|
-
// Listen for connection state
|
|
679
|
-
CometChat.addConnectionListener("connection-listener", self)
|
|
680
|
-
|
|
681
|
-
extension YourClass: CometChatConnectionDelegate {
|
|
682
|
-
func connected() {
|
|
683
|
-
Analytics.track("cometchat_connected")
|
|
684
|
-
}
|
|
685
|
-
|
|
686
|
-
func connecting() {
|
|
687
|
-
Analytics.track("cometchat_connecting")
|
|
688
|
-
}
|
|
689
|
-
|
|
690
|
-
func disconnected() {
|
|
691
|
-
Analytics.track("cometchat_disconnected")
|
|
692
|
-
}
|
|
693
|
-
}
|
|
694
|
-
```
|
|
695
|
-
|
|
696
|
-
### Track Message Events
|
|
697
|
-
|
|
698
|
-
```swift
|
|
699
|
-
class AnalyticsListener: CometChatMessageEventListener {
|
|
700
|
-
|
|
701
|
-
func ccMessageSent(message: BaseMessage, status: MessageStatus) {
|
|
702
|
-
if status == .success {
|
|
703
|
-
Analytics.track("message_sent", properties: [
|
|
704
|
-
"type": message.messageType.rawValue,
|
|
705
|
-
"receiver_type": message.receiverType.rawValue
|
|
706
|
-
])
|
|
707
|
-
}
|
|
708
|
-
}
|
|
709
|
-
}
|
|
710
|
-
|
|
711
|
-
CometChatMessageEvents.addListener("analytics", AnalyticsListener())
|
|
712
|
-
```
|
|
713
|
-
|
|
714
|
-
---
|
|
715
|
-
|
|
716
|
-
## 9. Common Production Issues
|
|
717
|
-
|
|
718
|
-
| Issue | Cause | Solution |
|
|
719
|
-
|---|---|---|
|
|
720
|
-
| "User not found" | User not created in CometChat | Create user via REST API before login |
|
|
721
|
-
| "Invalid auth token" | Token expired or malformed | Generate new token from server |
|
|
722
|
-
| "Rate limit exceeded" | Too many API calls | Implement caching and rate limiting |
|
|
723
|
-
| Push not working | Certificate mismatch | Verify APNs cert matches environment |
|
|
724
|
-
| Calls failing | Missing SDK or permissions | Add CometChatCallsSDK and permissions |
|
|
725
|
-
|
|
726
|
-
---
|
|
727
|
-
|
|
728
|
-
## Summary
|
|
729
|
-
|
|
730
|
-
**Development → Production Migration:**
|
|
731
|
-
|
|
732
|
-
1. Remove Auth Key from iOS app
|
|
733
|
-
2. Create server endpoint for token generation
|
|
734
|
-
3. Update iOS app to fetch tokens from your server
|
|
735
|
-
4. Create users in CometChat when they register
|
|
736
|
-
5. Test thoroughly before release
|
|
737
|
-
6. Monitor and handle errors gracefully
|
|
738
|
-
|
|
40
|
+
// UID comes from the SERVER session, never from the client
|
|
41
|
+
let authToken = try await fetchCometChatToken() // your authenticated endpoint
|
|
42
|
+
CometChatUIKit.login(authToken: authToken) { result in /* handle success/failure */ }
|
|
43
|
+
```
|
|
44
|
+
`init` must resolve first (`initFromSettings`), then login — calling login before init resolves fails silently (`cometchat-ios-core`).
|
|
45
|
+
|
|
46
|
+
## Keep secrets out of the build
|
|
47
|
+
Development reads the Auth Key from a gitignored `Secrets.xcconfig` promoted into `Info.plist`. For production, ship **App ID + Region only** (not secrets — they identify the app) and log in with a token; leave the Auth-Key value empty in the release configuration.
|
|
48
|
+
```bash
|
|
49
|
+
# after an archive/build, confirm the key is not in the app binary
|
|
50
|
+
strings "$APP_BUNDLE/YourApp" | grep -q "<your-auth-key>" && echo "LEAK" || echo "clean"
|
|
51
|
+
```
|
|
52
|
+
Also verify `Secrets.xcconfig` is in `.gitignore` (only a committed placeholder), and that it is not bundled as a resource.
|
|
53
|
+
|
|
54
|
+
## Also before launch
|
|
55
|
+
- **Users are created server-side** as part of signup — not from the app with the Auth Key.
|
|
56
|
+
- **Log out properly**: `CometChatUIKit.logout()`, then clear derived state and unregister VoIP/APNs push tokens (`cometchat-ios-push`).
|
|
57
|
+
- **Pin exact versions** — the kit is a prebuilt binary compiled against one Chat SDK version; a drifting `CometChatSDK` breaks it (`cometchat-ios-core` Install).
|
|
58
|
+
- **App Transport Security**: keep HTTPS; do not add broad `NSAllowsArbitraryLoads` exceptions.
|
|
59
|
+
- **Calls need permissions**: `NSCameraUsageDescription` + `NSMicrophoneUsageDescription` with real strings, or App Review rejects; VoIP push needs the entitlement.
|
|
60
|
+
- **Region must match** the dashboard app.
|
|
61
|
+
- **Enable dashboard extensions/AI on the PRODUCTION app**, not just dev.
|
|
62
|
+
|
|
63
|
+
## Pre-launch checklist
|
|
64
|
+
- [ ] Auth Key not in the app binary (`strings`-verified)
|
|
65
|
+
- [ ] `login(authToken:)` in production; UID from the server session
|
|
66
|
+
- [ ] REST API Key server-side only
|
|
67
|
+
- [ ] `Secrets.xcconfig` gitignored; only a placeholder committed
|
|
68
|
+
- [ ] Exact kit/SDK/Calls versions pinned
|
|
69
|
+
- [ ] Camera/mic usage strings + VoIP entitlement present (if calling)
|
|
70
|
+
- [ ] Logout clears session, state and push tokens
|
|
71
|
+
- [ ] Dashboard extensions/AI enabled for the production app
|
|
72
|
+
- [ ] Tested against the production app's credentials
|
|
73
|
+
|
|
74
|
+
## Common pitfalls
|
|
75
|
+
1. **Auth Key recoverable from the `.ipa`** — the critical one.
|
|
76
|
+
2. **Token endpoint trusting a client-supplied UID** — impersonation.
|
|
77
|
+
3. **Login before init resolves** — silent no-render (order invariant).
|
|
78
|
+
4. **Missing usage-description strings** — App Review rejection for calling apps.
|
|
79
|
+
5. **Dashboard configured on the dev app only** — features silently missing in production.
|
|
80
|
+
|
|
81
|
+
## Verify it works
|
|
82
|
+
Archived build's binary contains no Auth Key (`strings`) · login works via token · a tampered UID is rejected by the server · logout fully clears · calls request permission and connect · features enabled on the production app.
|