@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
|
@@ -0,0 +1,161 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: cometchat-ios-v5-sdk
|
|
3
|
+
description: "Add voice & video calling to any iOS app FROM SCRATCH with the headless CometChat Calls SDK v5 (`CometChatCallsSDK`, via Swift Package Manager) — no UI Kit. init→login→generateToken→joinSession into a UIView, CallSession listeners, in-call actions (mute/video/layout/record/transcribe/PiP), meet-style session rooms AND 1:1 ringing (Chat SDK signaling + Calls SDK media). Triggers: 'add calling from scratch ios', 'standalone video call swift', 'headless calls sdk ios', 'build my own call screen ios', 'meeting room join by session id ios', 'one-on-one ringing call without uikit ios'."
|
|
4
|
+
license: "MIT"
|
|
5
|
+
compatibility: "iOS 15.1+ (the Calls SDK package floor; the docs' Podfile sample says 16.0 — that is the SAMPLE APP's target, not the package minimum). CometChatCallsSDK ~> 5.0 (verified against 5.0.4). 1:1 ringing also needs CometChatSDK v4 (verified against 4.1.7 — the version this pack compiles against; the live getting-started page pins a newer 4.1.9, so re-check the docs before overriding) for signaling. Swift/UIKit; the call surface is a UIView, so SwiftUI hosts it via UIViewRepresentable."
|
|
6
|
+
metadata:
|
|
7
|
+
author: "CometChat"
|
|
8
|
+
version: "1.0.0"
|
|
9
|
+
tags: "cometchat calls sdk v5 headless voice video webrtc swift ios calling standalone"
|
|
10
|
+
---
|
|
11
|
+
|
|
12
|
+
> **Ground truth:** `CometChatCallsSDK` v5 + catalog `ios-calls-v5.json` (the closed symbol list — every type below is in it). Official docs: `/calls/ios/**` = **v5** · Docs MCP. Fetch exact `SessionSettings` fields, event names and signatures from the docs (`references/docs-map.md`) — never memory. **⚠️ Twelve doc pages contain symbols that DO NOT COMPILE — see "Doc corrections" below; prefer THIS skill's names over the page's.** **APPEND to the user's app — additive wiring only.**
|
|
13
|
+
|
|
14
|
+
## Companion skills (read first)
|
|
15
|
+
- **Standalone/headless entry** — owns its own package (the Calls SDK), no `-core` sibling, never depends on the iOS UI Kit. **1:1 ringing** additionally drives the **Chat SDK** (`CometChatSDK` v4) for signaling.
|
|
16
|
+
- **App wants chat too, or the prebuilt call UI?** `cometchat-ios-core` + `cometchat-ios-calls` — not this skill.
|
|
17
|
+
|
|
18
|
+
## Use this skill when
|
|
19
|
+
"add calling from scratch / without the UI Kit", "standalone voice/video on iOS", "build my own call screen", "headless calls SDK", "meeting-room join by session id", "one-on-one ringing".
|
|
20
|
+
|
|
21
|
+
## ASK FIRST (BAKED) — two choices, and NOTHING upstream asks them
|
|
22
|
+
Ask whichever the request has not already settled, then **WAIT**. Never infer from silence — each answer means a different SDK set and a different screen.
|
|
23
|
+
1. **Prebuilt call UI, or build your own?** Prebuilt (drop-in, themeable) → **STOP, route to `cometchat-ios-calls`.** Build your own → continue here.
|
|
24
|
+
2. **Meet-style room, or 1:1 ringing?** *Room* — everyone joining the same session id lands in one call; Calls SDK only. *Ringing* — you call a specific user and their device rings; adds `CometChatSDK` v4 for signaling (signatures: `references/docs-map.md` § "1:1 RINGING"), plus `CometChatPushNotifications` to ring while the app is backgrounded/closed.
|
|
25
|
+
|
|
26
|
+
Only EXPLICIT wording settles a question — "from scratch"/"my own call screen" → 1, "ringing"/"call a user" → 2. **"Add calling to my iOS app" settles NEITHER — ask both.**
|
|
27
|
+
|
|
28
|
+
## Prerequisites & install
|
|
29
|
+
**Swift Package Manager only — never CocoaPods**, even if a `Podfile` exists (same rule as `cometchat-ios-core`: CocoaPods distribution is winding down; a Podfile is a detection signal, not an instruction). In Xcode: *File → Add Package Dependencies*, URL:
|
|
30
|
+
```
|
|
31
|
+
https://github.com/cometchat/calls-sdk-ios
|
|
32
|
+
```
|
|
33
|
+
⚠️ **The docs print `github.com/cometchat/cometchat-calls-sdk-ios` — that repo 404s.** Use the URL above. The package vends ONE product, `CometChatCallsSDK`, which bundles **WebRTC** as a second binary target — do not add WebRTC separately.
|
|
34
|
+
|
|
35
|
+
**1:1 ringing additionally needs the Chat SDK** (`CometChatSDK` v4) for signaling — add it as a second SPM package: URL `https://github.com/cometchat/chat-sdk-ios` (product `CometChatSDK`, verified against 4.1.7). Without it the `import CometChatSDK` on the ringing path does not resolve. (Meet-style / room-only does NOT need it.)
|
|
36
|
+
|
|
37
|
+
**Info.plist — REQUIRED or the call dies on first permission prompt:** `NSCameraUsageDescription` + `NSMicrophoneUsageDescription`. For calls that survive backgrounding, add **Background Modes** → *Audio, AirPlay and Picture in Picture* (+ *Voice over IP* if you use VoIP push).
|
|
38
|
+
|
|
39
|
+
**Credentials:** App ID · Region · Auth Key (dev only). Load the CLI on demand — `npx @cometchat/skills-cli@3 auth login` → `provision use --app-id <id> --json` (`@3` pins the CLI major that matches the v5 skills). Already have App ID / Region / Auth Key? Just paste them. Mint **auth tokens server-side** for production; never ship the Auth Key.
|
|
40
|
+
|
|
41
|
+
## Init & login ordering (BAKED — invariant)
|
|
42
|
+
Init (once, must succeed) → `CometChatCalls.login(...)` → then `generateToken` / `joinSession` / listeners. Nothing joins before init+login resolve.
|
|
43
|
+
- **DEFAULT to `CometChatCalls.initFromSettings(onSuccess:onError:)`** — the ai-agent / telemetry-attributed path (persists `integrationSource="ai-agent"`). It takes **no settings argument**: it reads a **physical `cometchat-settings.json` from `Bundle.main`** (root `appId` + `region`; optional `callsSDK` → `host`/`adminHost`/`clientHost`/`callsHost`). The file **MUST be in the target's Copy Bundle Resources** or init fails `SETTINGS_FILE_NOT_FOUND`. It is intentionally undocumented (ai-agent-only) — the settings shape is baked in `references/docs-map.md`.
|
|
44
|
+
- **Fallback (public-doc path):** `CallAppSettingsBuilder().set(appID:).set(region:).build()` → `CometChatCalls(callsAppSettings:onSuccess:onError:)`. ⚠️ Use `set(appID:)`/`set(region:)` — the `setAppId`/`setRegion`/`setHost` spellings the docs use are **deprecated** in 5.0.4.
|
|
45
|
+
- ⚠️ **Never do both.** A direct builder init AFTER `initFromSettings` re-attributes the app to `"manual"` and the ai-agent telemetry is lost.
|
|
46
|
+
|
|
47
|
+
## SDK method map (BAKED closed list — from the catalog; signatures → FETCH from docs)
|
|
48
|
+
- **Lifecycle:** `CometChatCalls.initFromSettings` · `CometChatCalls(callsAppSettings:)` · `CallAppSettingsBuilder` · `CometChatCalls.login` (UID+authKey / UID+apiKey / authToken) · `logout` · `getLoggedInUser` → `CallsUser`
|
|
49
|
+
- **Session:** `CometChatCalls.generateToken` · `CometChatCalls.joinSession` · `CometChatCalls.sessionSettingsBuilder` · `SessionSettingsBuilder` → `SessionSettingsBuilder.SessionSettings` (NESTED — that is the type `joinSession(callSetting:)` takes)
|
|
50
|
+
- **⚠️ TWO join paths, both real in 5.0.4** — pick one: `generateToken(sessionID:)` → `joinSession(callToken:callSetting:container:)`, **or** `joinSession(sessionID:callSetting:container:)` directly.
|
|
51
|
+
- **In-call actions — on `CallSession.shared`, for CUSTOM controls ONLY** (the default surface already renders them; see pitfall #1): `leaveSession` · `muteAudio`/`unmuteAudio` · `pauseVideo`/`resumeVideo` · `setLayout` · `setAudioMode` · `switchCamera` · `raiseHand`/`lowerHand` · `startRecording`/`stopRecording` · `startTranscription`/`stopTranscription` · `startStreaming`/`stopStreaming` · `pinParticipant`/`unpinParticipant` · `muteParticipant` · `pauseParticipantVideo` · `enablePictureInPictureLayout`/`disablePictureInPictureLayout` · `isCallSessionActive`
|
|
52
|
+
- **Listeners (add on `CallSession.shared`, remove on teardown):** `SessionStatusListener` · `MediaEventsListener` · `ParticipantEventListener` · `LayoutListener` · `ButtonClickListener` · `clearAllListeners`
|
|
53
|
+
- **Call logs:** `CallLogsBuilder` → `CallLogsRequest` → `CallLog` (+ `CallUser`/`CallGroup`/`CallEntity`/`CallStatus`/`CallCategory`/`CallDirection`)
|
|
54
|
+
- **Enums:** `AudioMode` (`.speaker`/`.earpiece`/`.bluetooth`/`.headphones`) · `SessionType` (`.video`/`.voice`) · `LayoutType` (`.tile`/`.spotlight`/`.sidebar`) · **`CameraFacing` (`.FRONT`/`.REAR` — UPPERCASE, the ONE Calls-SDK enum that breaks the lowercase convention; `.front`/`.rear` fail to compile, and the docs' `.BACK` does NOT exist — see Doc corrections)**
|
|
55
|
+
> This map is a **curated highlight, NOT the full surface** — the AUTHORITATIVE closed list is the **`ios-calls-v5.json` catalog** (60 symbols). A symbol is real **iff it's in the catalog** — confirm THERE, then fetch its exact signature from the docs page in `references/docs-map.md`.
|
|
56
|
+
|
|
57
|
+
## Listener lifecycle (BAKED)
|
|
58
|
+
Register listeners on `CallSession.shared` **BEFORE** joining; remove each one (or `clearAllListeners()`) on teardown, and call `CallSession.shared.leaveSession()` when the screen goes away. For ringing also `CometChat.removeCallListener(<id>)`. Never leak.
|
|
59
|
+
|
|
60
|
+
**The listener contract (all five, verified in the 5.0.4 interface):**
|
|
61
|
+
- Every listener protocol is `@objc` and **EVERY member is `optional`.** Implement ONLY the callbacks you need — do NOT stub the rest. **A name that is NOT in the protocol also compiles, then silently never fires** — copy callback names from the events page / `references/docs-map.md`, never by analogy.
|
|
62
|
+
- Because they are `@objc`, the conforming type MUST be a class inheriting **`NSObject`**.
|
|
63
|
+
- Exact add/remove pairs on `CallSession.shared` — the names are NOT in the catalog (it is types-only), so use these:
|
|
64
|
+
|
|
65
|
+
| Protocol | Register / remove |
|
|
66
|
+
|---|---|
|
|
67
|
+
| `SessionStatusListener` | `addSessionStatusListener(_:)` / `removeSessionStatusListener(_:)` |
|
|
68
|
+
| `MediaEventsListener` | `addMediaEventsListener(_:)` / `removeMediaEventsListener(_:)` |
|
|
69
|
+
| `ParticipantEventListener` | `addParticipantEventListener(_:)` / `removeParticipantEventListener(_:)` |
|
|
70
|
+
| `LayoutListener` | `addLayoutListener(_:)` / `removeLayoutListener(_:)` |
|
|
71
|
+
| `ButtonClickListener` | `addButtonClickListener(_:)` / `removeButtonClickListener(_:)` |
|
|
72
|
+
|
|
73
|
+
- **`ButtonClickListener` callbacks fire BEFORE the SDK's own action, and do NOT suppress it.** Reacting to `onLeaveSessionButtonClicked` must NOT also call `leaveSession()` — the SDK is already leaving; doing both double-leaves.
|
|
74
|
+
- **`Participant` has EXACTLY 12 fields, all Optional:** `uid` · `name` · `avatar` · `mid` · `state` · `isJoined` · `joinedAt` · `leftAt` · `deviceID` · `totalAudioMinutes` · `totalVideoMinutes` · `totalDurationInMinutes`. Identity is **`uid`** (`String?` — unwrap before passing to `muteParticipant(participantId:)`), never `name`.
|
|
75
|
+
- **⚠️ The docs use SIX `Participant` fields that DO NOT EXIST** — `pid`, `isPinned`, `isAudioMuted`, `isVideoPaused`, `isPresenting`, `raisedHandTimestamp`. Copying any of them fails to compile. `pid` → use `uid`; the five state flags have **no field at all** — track that state yourself from the `ParticipantEventListener` callbacks (`onParticipantAudioMuted`/`Unmuted`, `onParticipantHandRaised`/`Lowered`, `onParticipantStarted`/`StoppedScreenShare`).
|
|
76
|
+
|
|
77
|
+
## Least-code recipe (meet-style — ORDER, not signatures)
|
|
78
|
+
```swift
|
|
79
|
+
// Fetch every signature/field from references/docs-map.md. This is the ORDER, which is the part that bites.
|
|
80
|
+
import UIKit
|
|
81
|
+
import CometChatCallsSDK
|
|
82
|
+
|
|
83
|
+
1. CometChatCalls.initFromSettings(onSuccess:onError:) // ai-agent default; reads bundled cometchat-settings.json
|
|
84
|
+
2. CometChatCalls.login(UID:authKey:onSuccess:onError:) // or login(authToken:) in production
|
|
85
|
+
3. let settings = CometChatCalls.sessionSettingsBuilder.setSessionType(.video).build() // NOT .setType — see Doc corrections
|
|
86
|
+
4. CallSession.shared.addSessionStatusListener(self) // register BEFORE joining
|
|
87
|
+
5. CometChatCalls.joinSession(sessionID:callSetting:container:onSuccess:onError:) // container = a UIView with REAL bounds
|
|
88
|
+
// or: generateToken(sessionID:) -> joinSession(callToken:callSetting:container:)
|
|
89
|
+
6. // NO control buttons needed — the joined surface ALREADY renders mute/video/leave.
|
|
90
|
+
7. // teardown -> CallSession.shared.clearAllListeners(); CallSession.shared.leaveSession()
|
|
91
|
+
```
|
|
92
|
+
The `container` MUST have real bounds — a zero-frame view renders invisibly. In SwiftUI wrap it with `UIViewRepresentable`.
|
|
93
|
+
|
|
94
|
+
## VoIP call notifications (SEPARATE package — `CometChatPushNotifications`)
|
|
95
|
+
Ringing a user whose app is **backgrounded or terminated** is NOT the Calls SDK's job. It is
|
|
96
|
+
`CometChatPushNotifications` **1.0.0** — a different package. Do not hand-roll it.
|
|
97
|
+
|
|
98
|
+
- **Install:** SPM `https://github.com/cometchat/push-notifications-sdk-ios` @ `1.0.0` (product
|
|
99
|
+
`CometChatPushNotificationsSwift`). **Its `Package.swift` declares NO dependencies, yet the binary
|
|
100
|
+
imports `CometChatSDK` + `CometChatCallsSDK`** — the app must ALSO have both packages above
|
|
101
|
+
(`chat-sdk-ios` + `calls-sdk-ios`) or the build fails. **`import CometChatPushNotificationsSwift`** — the
|
|
102
|
+
module name differs from the class name; importing `CometChatPushNotifications` does not compile.
|
|
103
|
+
- **Three steps, nothing more:**
|
|
104
|
+
1. after `CometChat.init`: `CometChatPushNotifications.shared.initialize(config: .init(providerId:))` then set `.delegate`
|
|
105
|
+
2. in `AppDelegate`: forward `registerDeviceToken(_:)` (+ `handleRegistrationFailure(_:)`)
|
|
106
|
+
3. implement `CometChatPushNotificationsDelegate` — **every method is optional**; the ones that matter are `presentCallScreen(for:sessionId:)` and `onCallCleanupComplete()`
|
|
107
|
+
- **NEVER emit a `PKPushRegistryDelegate` or a `CXProviderDelegate`.** The SDK owns both. Writing
|
|
108
|
+
either is the #1 mistake here — it fights the SDK for the same callbacks.
|
|
109
|
+
- **Cold start:** call `CometChatPushNotifications.shared.notifyCallsSDKReady()` from the **login**
|
|
110
|
+
success — NOT init success. It only lifts the buffer; it does not check that anyone is logged in,
|
|
111
|
+
so releasing at init hands `presentCallScreen` an unauthenticated session and the `joinSession`
|
|
112
|
+
after it fails on auth. (A 3s safety timeout fires the buffered call anyway, so a slow login can
|
|
113
|
+
still present early — do not assume a live session in the call screen.)
|
|
114
|
+
- **The call is ALREADY accepted** when `presentCallScreen` fires — present UI and join; do not accept again.
|
|
115
|
+
- **Prerequisites (state them, they are not code):** an **APNs VoIP provider** in the dashboard,
|
|
116
|
+
the Push Notifications + Background Modes (Voice over IP, Remote notifications) capabilities, and
|
|
117
|
+
a **PHYSICAL DEVICE** — VoIP pushes are never delivered to the Simulator.
|
|
118
|
+
- `ForegroundCallPresentation` = `.callKit` (default) · `.inApp` (`CometChatIncomingCallView`, styled
|
|
119
|
+
via `CometChatIncomingCallStyle`) · `.none` (present your own).
|
|
120
|
+
|
|
121
|
+
> **Callback shapes differ PER API and `?.` on a non-optional does not compile** — `login`/`logout`
|
|
122
|
+
> hand you a NON-optional `CometChatCallException`; `initFromSettings`/`generateToken`/`joinSession`
|
|
123
|
+
> hand you an Optional. Exact table + `isCallSessionActive()` arity: `references/docs-map.md`.
|
|
124
|
+
|
|
125
|
+
## Doc corrections (VERIFIED against CometChatCallsSDK 5.0.4 — prefer these over the page)
|
|
126
|
+
| The docs write | It does not compile — use |
|
|
127
|
+
|---|---|
|
|
128
|
+
| `AudioModeType` (events, session-settings, recording) | **`AudioMode`** — `AudioModeType` exists in neither the interface nor the binary |
|
|
129
|
+
| `CometChat.CallStatus` (ringing) | **`CometChat.callStatus`** — lowercase `c`; Swift is case-sensitive |
|
|
130
|
+
| `.setType(.video)` (ringing, session-settings, join-session, idle-timeout, migration-guide) | **`.setSessionType(.video)`** — `SessionSettingsBuilder` has no `setType` in any spelling |
|
|
131
|
+
| SPM URL `…/cometchat-calls-sdk-ios` (setup) | **`https://github.com/cometchat/calls-sdk-ios`** — documented URL 404s |
|
|
132
|
+
| `region` is "`us` or `eu`" (setup) | **also `in`** — the SDK only checks the string is non-empty; `in` is a live region |
|
|
133
|
+
| `.setAppId()` / `.setRegion()` (setup) | **`.set(appID:)` / `.set(region:)`** — the `setX` spellings are deprecated in 5.0.4 |
|
|
134
|
+
| `call.callInitiator?.name` (ringing) | **`(call.callInitiator as? User)?.name`** — `callInitiator`/`callReceiver` are `AppEntity?`; only `User` has `name` |
|
|
135
|
+
| `CallType` / `CallTypeVideo` as the session type (5 pages) | **`SessionType` / `SessionType.video`** — `CallType` has **zero** occurrences in `CometChatCallsSDK`. It is a **Chat SDK** type (`CometChat.CallType`), valid ONLY on the ringing path. Never pass it to `SessionSettingsBuilder` |
|
|
136
|
+
| `SessionType.audio` for audio-only | **`.voice`** — `.audio` and `.audioVideo` are `@available(*, deprecated)` in 5.0.4 |
|
|
137
|
+
| The **Objective-C** tabs (setup, session-settings, ringing, voip-calling) | **Do not copy them** — deprecated setters, too few opening brackets, and enum constants wrongly `CometChat`-prefixed. Exact names: `references/docs-map.md` |
|
|
138
|
+
| `participant.pid` / `.isPinned` / `.isAudioMuted` / `.isVideoPaused` / `.isPresenting` / `.raisedHandTimestamp` (actions, participant-management, custom-participant-list — 23×) | **None of these exist on `Participant`.** `pid` → **`uid`**; the five flags have no field — derive them from the participant events. Two review emits failed `swiftc` on exactly this |
|
|
139
|
+
| `CallSession.shared.setAudioMode` / `setLayout` taking an enum | **They take a `String`** — `"SPEAKER"`/`"EARPIECE"`/`"BLUETOOTH"`/`"HEADPHONES"`, `"TILE"`/`"SPOTLIGHT"`/`"SIDEBAR"`. Only the **builder** forms take `AudioMode` / `LayoutType`. Same method name, two different parameter types |
|
|
140
|
+
| docs show only `login(UID:apiKey:)` / `login(authToken:)` | **`login(UID:authKey:)` also exists** in 5.0.4 — the docs are incomplete, the skill's recipe is correct |
|
|
141
|
+
| — (unstated anywhere) | **Chat-SDK enum casing is INCONSISTENT** — `CometChat.CallType`/`.ReceiverType` Capitalised, `CometChat.callStatus` lowercase. Analogy fails to compile; check each. |
|
|
142
|
+
|
|
143
|
+
Docs PR cometchat/docs#489 merged 2026-09-08 and the live `/calls/ios/**` pages now carry these fixes — re-verified against the live pages. The one exception is **`CameraFacing.BACK`**: it is still live on both `session-settings` and `events` (`.BACK`, not `.REAR`) — #489 did not touch it (separate docs fix owed). Keep every correction above as defensive guidance. Detail + per-symbol live status: `references/docs-map.md`.
|
|
144
|
+
|
|
145
|
+
## Common pitfalls (BAKED)
|
|
146
|
+
- **Don't duplicate the built-in call controls (the #1 mistake).** The joined session renders a COMPLETE call UI — mute, camera, layout, participants, raise-hand, leave. Do NOT add your own buttons. `CallSession.shared` actions are for CUSTOM controls ONLY — reach for them **just when the user EXPLICITLY asks** to replace the defaults, and hide the built-ins first (`hide*Button` list in `references/docs-map.md`). To merely REACT to the leave button, implement `ButtonClickListener.onLeaveSessionButtonClicked` — never a second button.
|
|
147
|
+
- **Ringing teardown needs BOTH SDKs.** `CallSession.shared.leaveSession()` ends YOUR media; `CometChat.endCall(sessionID:)` tells the peer and completes the call log. Do only the first and the other side still thinks the call is live.
|
|
148
|
+
- **Zero-bounds container** — `joinSession` mounts into your `UIView`; give it real size.
|
|
149
|
+
- **CRASH — declare `var window: UIWindow?` on your AppDelegate, even in a scene-based app.** The SDK reads `UIApplication.delegate.window`; without it the app aborts (`unrecognized selector`) right after the camera permission is granted. Detail: `references/docs-map.md`.
|
|
150
|
+
- **Missing Info.plist usage strings** — no `NSCameraUsageDescription`/`NSMicrophoneUsageDescription` means iOS kills the app at the first permission request.
|
|
151
|
+
- **`cometchat-settings.json` not bundled** — `initFromSettings` fails `SETTINGS_FILE_NOT_FOUND`; the file must be in Copy Bundle Resources.
|
|
152
|
+
- **Double init** — a builder init after `initFromSettings` silently re-attributes telemetry to `"manual"`.
|
|
153
|
+
- **No local screen share on iOS.** Only the PEER events `onParticipantStarted`/`StoppedScreenShare` are real — no start/stop action (web has one), and local capture needs a Broadcast Upload Extension. Do not emit one. (The docs' `onScreenShareStarted`/`Stopped` do not exist — see docs-map.)
|
|
154
|
+
- **No virtual background on iOS** — the web Calls SDK has it; this one does not.
|
|
155
|
+
- **No roster, no participant state — so moderation is UNBUILDABLE.** There is no participant-list accessor, `Participant` carries no mute/pin/hand/share flag, and (verified live on two clients) the participant events deliver nothing: `onParticipantJoined`/`Left` never fire and `onParticipantListChanged` arrives EMPTY. You can never obtain a peer `uid`, so `muteParticipant`/`pinParticipant`/`pauseParticipantVideo` have no argument. Do NOT emit them or a custom roster — the built-in participant panel is already on screen. Detail: `references/docs-map.md`.
|
|
156
|
+
- **Assuming a signature** — event names, `SessionSettings` fields and action params are FETCHED from docs, never guessed.
|
|
157
|
+
|
|
158
|
+
## Verify it works
|
|
159
|
+
- **Tier-1 catalog:** every `CometChatCallsSDK` symbol emitted appears in `ios-calls-v5.json` (`node test-suite/scripts/verify-catalog.mjs --family ios-calls-v5`).
|
|
160
|
+
- **Tier-2 compile:** the emit type-checks against the installed `CometChatCallsSDK` (5.0.4) with `swiftc -typecheck`.
|
|
161
|
+
- **Tier-3 smoke:** the calls round-trip on a simulator (init→login→generateToken→join-wiring→leaveSession). **Ringing runs as TWO concurrent simulators** (one process per role), and only counts if both report success on the SAME session id — live-certified, not just wired.
|
|
@@ -0,0 +1,326 @@
|
|
|
1
|
+
# docs-map — iOS Calls SDK v5 (`/calls/ios/**`)
|
|
2
|
+
|
|
3
|
+
**Doc channel = the CometChat Docs MCP.** Use `search_cometchat_docs` / `fetch_cometchat_doc_page` /
|
|
4
|
+
`get_cometchat_implementation_bundle` when they are connected — they are the intended path and they
|
|
5
|
+
serve production docs for you.
|
|
6
|
+
|
|
7
|
+
**If the MCP tools are NOT connected:** add it (`claude mcp add --transport http cometchat-docs https://mcp.cometchat.com/mcp`, or reinstall/enable the plugin) and retry; only if it still will not connect, fall back to a plain fetch via `DOCS_BASE` (below).
|
|
8
|
+
Either way the `<path>` catalog in this file is the source of truth for WHICH page — MCP-vs-fetch is only HOW.
|
|
9
|
+
|
|
10
|
+
## DOCS_BASE — the fetch FALLBACK entry point (⚠️ SWAP HERE to change environments)
|
|
11
|
+
```
|
|
12
|
+
DOCS_BASE = https://www.cometchat.com/docs
|
|
13
|
+
```
|
|
14
|
+
> Production docs (`https://www.cometchat.com/docs`). **Fetch rule:** build a URL as `DOCS_BASE` + the path shown,
|
|
15
|
+
> then append `.md`. Never hardcode a host anywhere else; never read the `.swiftinterface` at authoring time
|
|
16
|
+
> for SIGNATURES (the catalog is for EXISTENCE, the docs are for signatures).
|
|
17
|
+
|
|
18
|
+
## The convention — Calls v5 lives at the UNVERSIONED root `/calls/ios/`
|
|
19
|
+
`DOCS_BASE` + `<path>` + `.md` → raw Markdown (verbatim code + parameter tables).
|
|
20
|
+
```
|
|
21
|
+
Fetch: {DOCS_BASE}/calls/ios/overview.md
|
|
22
|
+
```
|
|
23
|
+
> **⚠️ VERSION TRAP.** The **unversioned** `/calls/ios/**` tree IS **v5**. Legacy `/sdk/ios/<n>.0/calling-*`
|
|
24
|
+
> pages are the OLD chat-SDK calling surface (deprecated `startSession`, no incoming-call UI) — never fetch
|
|
25
|
+
> them for a v5 build. **Do NOT `search("default calling")`** — search surfaces that stale tree.
|
|
26
|
+
|
|
27
|
+
## Page catalog
|
|
28
|
+
| Path | Use it for |
|
|
29
|
+
|---|---|
|
|
30
|
+
| `/calls/ios/overview` | the init→login→generateToken→joinSession sequence, CallSession model |
|
|
31
|
+
| `/calls/ios/setup` | install (SPM + CocoaPods), Info.plist permissions, background modes, `CallAppSettingsBuilder` |
|
|
32
|
+
| `/calls/ios/ringing` | **1:1 RINGING — the WHOLE flow, both sides.** Fetch this DIRECTLY (see below) |
|
|
33
|
+
| `/calls/ios/session-settings` | `SessionSettingsBuilder` — every setter, the `hide*Button` list, layout/audio enums |
|
|
34
|
+
| `/calls/ios/events` | listener protocols + every event name and callback signature |
|
|
35
|
+
| `/calls/ios/call-logs` | `CallLogsBuilder` / `CallLogsRequest` / `CallLog` fields, pagination |
|
|
36
|
+
| `/calls/ios/recording` | recording start/stop, `enableAutoStartRecording`, prerequisites (`hideRecordingButton` defaults to **true** — the built-in control is HIDDEN until you opt in). **Recording AND transcription are DASHBOARD-GATED and the actions are fire-and-forget:** `startRecording()`/`startTranscription()` return `Void` and surface **no error** when the feature is off for the app — nothing happens, silently. Gate your UI on `MediaEventsListener.onRecordingStarted`/`onRecordingStopped`, never on the call returning, and tell the user to enable recording on the app first |
|
|
37
|
+
| `/calls/ios/authentication` | **`login` / `logout` / `getLoggedInUser`** — the only page with these |
|
|
38
|
+
| `/calls/ios/join-session` | **`generateToken` / `joinSession`** signatures + container setup |
|
|
39
|
+
| `/calls/ios/actions` | **every in-call `CallSession.shared` action** — mute/pin/layout/audio-mode/raise-hand. The only page with these signatures |
|
|
40
|
+
| `/calls/ios/call-layouts` | `LayoutType` values (`.tile` / `.spotlight` / `.sidebar`) and layout switching |
|
|
41
|
+
| `/calls/ios/audio-modes` | `AudioMode` values and routing |
|
|
42
|
+
| `/calls/ios/participant-management` | roster + moderation |
|
|
43
|
+
| `/calls/ios/custom-participant-list` | building your own roster UI |
|
|
44
|
+
| `/calls/ios/screen-sharing` | **receive-only on iOS** — the share EVENTS; local capture needs a Broadcast Upload Extension |
|
|
45
|
+
| `/calls/ios/raise-hand` | raise/lower hand (a built-in button exists by default) |
|
|
46
|
+
| `/calls/ios/transcription` | transcription + `TranscriptsRequest`/`TranscriptsBuilder`/`Transcript`. **`hideTranscriptionButton` and `hideClosedCaptionButton` default to hidden** |
|
|
47
|
+
| `/calls/ios/picture-in-picture` | PiP — **TWO kinds, pick one.** In-app (a draggable tile over your own app) uses **`PiPViewCoordinator`, which SHIPS in the Calls SDK**; System PiP (floating over OTHER apps) IS in the 5.0.4 binary, behind the undocumented `enableIOSPictureInPicture(_:)` — see below. `enablePictureInPictureLayout()` only reshapes the call UI — alone it does nothing visible |
|
|
48
|
+
| `/calls/ios/idle-timeout` | `setIdleTimeoutPeriod` |
|
|
49
|
+
| `/calls/ios/custom-control-panel` | replacing the built-in controls |
|
|
50
|
+
| `/calls/ios/in-call-chat` · `/calls/ios/share-invite` · `/calls/ios/background-handling` | the remaining in-call surfaces |
|
|
51
|
+
| `/calls/ios/voip-calling` | the HAND-WIRED `PKPushRegistry`/`CXProvider` recipe — **do NOT follow it**; the push SDK owns both delegates. The real VoIP page is `/notifications/ios-push-notifications-sdk`. `/calls/ios/troubleshooting`'s "CallKit UI not showing → implement CXProvider" row points here too and is equally wrong for this skill |
|
|
52
|
+
| `/calls/ios/migration-guide-v5` | v4→v5 mapping; also the only place `switchCamera()` is shown |
|
|
53
|
+
| `/calls/ios/troubleshooting` | common failures |
|
|
54
|
+
|
|
55
|
+
| `/notifications/ios-push-notifications-sdk` | **VoIP call notifications — THE page for `call-voip-push`.** `CometChatPushNotifications` 1.0.0: install, `initialize(config:)`, `registerDeviceToken`, the delegate, `notifyCallsSDKReady()`, the Notification Service Extension |
|
|
56
|
+
| `/notifications/push-overview` | dashboard providers (you need an **APNs VoIP** provider) |
|
|
57
|
+
| *(verified on a physical iPhone)* | **Testing VoIP: suspend the app ≥ 30s before ringing it, or you are testing the socket, not the push.** A freshly-backgrounded app keeps its WebSocket; the push SDK dedupes a call "delivered via WebSocket before the VoIP push", so CallKit still rings and APNs delivery goes unproven. Measured: at 2s in background the socket won; at 51s the push woke the suspended app and the socket's copy arrived 7s *after* resume. Also: on the **lock screen** CallKit shows slide-to-answer, not an Accept button |
|
|
58
|
+
| `/notifications/ios-apns-push-notifications` | the HAND-WIRED alternative. Do not follow it unless the user explicitly wants to own `PKPushRegistry`/`CXProvider` themselves |
|
|
59
|
+
|
|
60
|
+
> The three rows above live OUTSIDE `/calls/ios/**`. VoIP is a different package
|
|
61
|
+
> (`CometChatPushNotifications`), not part of `CometChatCallsSDK`.
|
|
62
|
+
|
|
63
|
+
**All 26 pages of the `/calls/ios` tree are listed above.** Earlier revisions listed only 7, which dead-ended every
|
|
64
|
+
lookup for in-call actions, `login` and `joinSession`. `llms.txt` does NOT index `/calls/ios/**` — use
|
|
65
|
+
`sitemap.xml` (or this table) for discovery, never the index.
|
|
66
|
+
|
|
67
|
+
## 1:1 RINGING — fetch the page DIRECTLY
|
|
68
|
+
**one-on-one ringing** (call a specific user, they get an incoming prompt, accept/reject) combines the
|
|
69
|
+
**Chat SDK** (`CometChatSDK` v4) for signaling + the Calls SDK for media.
|
|
70
|
+
|
|
71
|
+
**The COMPLETE, CURRENT recipe is ONE page — fetch it directly:**
|
|
72
|
+
```
|
|
73
|
+
fetch_cometchat_doc_page("/calls/ios/ringing")
|
|
74
|
+
```
|
|
75
|
+
That page carries the whole flow, both sides: `CometChat.initiateCall(call:timeout:onSuccess:onError:)` →
|
|
76
|
+
`CometChat.addCallListener(<id>, delegate)` + `CometChatCallDelegate` (`onIncomingCallReceived`,
|
|
77
|
+
`onOutgoingCallAccepted`, `onOutgoingCallRejected`, `onIncomingCallCancelled`, `onCallEndedMessageReceived`)
|
|
78
|
+
→ `CometChat.acceptCall(sessionID:)` / `rejectCall(sessionID:status:)` → `joinSession(...)` →
|
|
79
|
+
`CallSession.shared.leaveSession()` **and** `CometChat.endCall(sessionID:)` → `CometChat.removeCallListener(<id>)`.
|
|
80
|
+
|
|
81
|
+
> **⚠️ TESTING RINGING NEEDS TWO LIVE CLIENTS.** One app instance cannot ring itself: you need two logged-in
|
|
82
|
+
> users on two devices/simulators. A single-simulator run can verify meet-style end-to-end but can only verify
|
|
83
|
+
> that ringing is WIRED, not that it rings. Say which you did.
|
|
84
|
+
|
|
85
|
+
### BAKED — the Chat SDK's OWN init + login (NO page in this map covers it)
|
|
86
|
+
The ringing page starts at `initiateCall` and assumes the Chat SDK is already up. It is a SECOND SDK
|
|
87
|
+
with its OWN lifecycle, stated nowhere in `/calls/ios/**` — so bake it:
|
|
88
|
+
|
|
89
|
+
```swift
|
|
90
|
+
// Chat SDK — BEFORE addCallListener / initiateCall. Reads the SAME bundled cometchat-settings.json
|
|
91
|
+
// as the Calls SDK (root appId + region), so one file serves both.
|
|
92
|
+
CometChat.initFromSettings(onSuccess: { (ok: Bool) in }, onError: { (e: CometChatException) in })
|
|
93
|
+
CometChat.login(UID: uid, authKey: key, onSuccess: { user in }, onError: { e in })
|
|
94
|
+
```
|
|
95
|
+
`initFromSettings` → `onSuccess (Bool)`, `onError` **NON-optional** `CometChatException` — both differ
|
|
96
|
+
from the Calls SDK's shapes (see the callback table below). The classic
|
|
97
|
+
`CometChat(appId:appSettings:onSuccess:onError:)` builder also exists and is the fallback when no
|
|
98
|
+
settings file is bundled. Full ordering for ringing: **Chat init → Chat login → Calls init → Calls
|
|
99
|
+
login → addCallListener → initiateCall.**
|
|
100
|
+
|
|
101
|
+
**This is now live-certified, not just wired.** Two app instances run CONCURRENTLY on two DIFFERENT
|
|
102
|
+
simulators, one per role, and must land on the SAME session id — the actual proof of one overlapping
|
|
103
|
+
call, not two independent successes.
|
|
104
|
+
|
|
105
|
+
## BAKED — `CometChatCalls.initFromSettings` (intentionally undocumented, ai-agent only)
|
|
106
|
+
Not on any doc page by design (`@nodoc`, ai-agent-only — same posture as the chat SDK's `initFromSettings`).
|
|
107
|
+
Signature takes **no settings argument**:
|
|
108
|
+
`CometChatCalls.initFromSettings(onSuccess: (String) -> Void, onError: (CometChatCallException?) -> Void) -> CometChatCalls?`
|
|
109
|
+
|
|
110
|
+
It reads **`cometchat-settings.json` from `Bundle.main`** — the file must be added to the target's
|
|
111
|
+
**Copy Bundle Resources**. Schema (root fields shared with the chat SDK; only the `callsSDK` section is read here):
|
|
112
|
+
```json
|
|
113
|
+
{
|
|
114
|
+
"appId": "APP_ID",
|
|
115
|
+
"region": "us",
|
|
116
|
+
"callsSDK": { "host": "", "adminHost": "", "clientHost": "", "callsHost": "" }
|
|
117
|
+
}
|
|
118
|
+
```
|
|
119
|
+
`appId` and `region` are REQUIRED (`SETTINGS_MISSING_APP_ID` / `SETTINGS_MISSING_REGION`); the whole `callsSDK`
|
|
120
|
+
block is optional. Missing file → `SETTINGS_FILE_NOT_FOUND`; bad JSON → `SETTINGS_FILE_INVALID`.
|
|
121
|
+
It persists `integrationSource="ai-agent"` BEFORE delegating to the builder init — which is why a direct
|
|
122
|
+
`CometChatCalls(callsAppSettings:)` call afterwards re-attributes the app to `"manual"`.
|
|
123
|
+
|
|
124
|
+
## Picture-in-Picture: `PiPViewCoordinator` is the in-app mechanism
|
|
125
|
+
`enablePictureInPictureLayout()` ONLY re-lays-out the call UI — it creates no window, so on its own
|
|
126
|
+
nothing visibly happens and an emit that stops there ships a call that vanishes off-screen.
|
|
127
|
+
|
|
128
|
+
- **In-app PiP** (draggable tile over your own app): **`PiPViewCoordinator` ships in the SDK.**
|
|
129
|
+
`init(withView:)` on the SAME view given to `joinSession(container:)` →
|
|
130
|
+
`configureAsStickyView(withParentView:)` (pass the parent — it otherwise falls back to the key
|
|
131
|
+
window) → `show()` → `enterPictureInPicture()` alongside `enablePictureInPictureLayout()`.
|
|
132
|
+
`resetBounds(bounds:)` on rotation. `initialPositionInSuperView` is one of four corners; tile size
|
|
133
|
+
is fixed at 150px (`c` is deprecated).
|
|
134
|
+
- `PiPViewCoordinatorDelegate.exitPictureInPicture()` is a **notification that PiP already ended**
|
|
135
|
+
(the coordinator restored the view before calling you) — not a request to end it. Do
|
|
136
|
+
`disablePictureInPictureLayout()` there.
|
|
137
|
+
- **System PiP** (over OTHER apps): **the SDK DOES ship this — do not tell the user it is absent.**
|
|
138
|
+
5.0.4 implements the whole AVKit path internally (`AVPictureInPictureController`,
|
|
139
|
+
`AVPictureInPictureControllerContentSource`, `AVPictureInPictureVideoCallViewController`,
|
|
140
|
+
`AVPictureInPictureControllerDelegate`; `AVKit` is in the framework's load commands), gated behind
|
|
141
|
+
**`SessionSettingsBuilder.enableIOSPictureInPicture(_:)`** — a real setter in the interface that
|
|
142
|
+
appears on **no** `/calls/ios/**` page. Turn it on in the builder (the SDK echoes
|
|
143
|
+
`"enableIOSPictureInPicture": true` in its own settings dictionary) and add Background Modes →
|
|
144
|
+
*Audio, AirPlay and Picture in Picture*. **NOT certified by this pack:** it needs a physical device
|
|
145
|
+
with a live video stream — the Simulator has no camera feed and no window appears there. Offer it
|
|
146
|
+
as an opt-in flag with that caveat; never claim the SDK lacks system PiP.
|
|
147
|
+
- **⚠️ The PiP container must be FRAME-managed, NOT Auto Layout-pinned.** `PiPViewCoordinator`
|
|
148
|
+
positions the view by setting `.frame` and toggling `autoresizingMask` (it clears the mask in
|
|
149
|
+
`enterPictureInPicture()`), so constraints pinning the container to its superview win at the next
|
|
150
|
+
layout pass: the SDK hides its control bar and `onPictureInPictureLayoutEnabled` fires, but the
|
|
151
|
+
call stays FULL-SCREEN — no tile, no controls, no way back. The join-session recipe's "pin the
|
|
152
|
+
container with constraints" directly conflicts with the PiP recipe; for a PiP call let the
|
|
153
|
+
coordinator own the frame.
|
|
154
|
+
|
|
155
|
+
## VoIP push: map the incoming `Call` to a `SessionType` (documented NOWHERE)
|
|
156
|
+
`presentCallScreen(for call: Call, sessionId:)` hands you a Chat-SDK `Call`, and `joinSession`
|
|
157
|
+
needs a `SessionType`. No page says how to bridge them, so an emit that hardcodes `.video`
|
|
158
|
+
opens a VOICE call with the camera on. `Call.callType` IS readable — a non-optional
|
|
159
|
+
`CometChat.CallType` (`.video` · `.audio` · `.audioVideo`):
|
|
160
|
+
|
|
161
|
+
```swift
|
|
162
|
+
let sessionType: SessionType = (call.callType == .audio) ? .voice : .video
|
|
163
|
+
```
|
|
164
|
+
|
|
165
|
+
(`.voice`, not `.audio` — `SessionType.audio` is deprecated. Two different enums with
|
|
166
|
+
overlapping case names: `CometChat.CallType` on the Chat SDK's `Call`, `SessionType` on the
|
|
167
|
+
Calls SDK's builder.)
|
|
168
|
+
|
|
169
|
+
## Call-log entity types (VERIFIED in the 5.0.4 interface — documented NOWHERE)
|
|
170
|
+
`CallLog.initiator` and `.receiver` are typed `CallEntity`, and no doc page lists a single member,
|
|
171
|
+
so "show who the call was with" looks impossible from the docs. It is not:
|
|
172
|
+
|
|
173
|
+
| Type | Members |
|
|
174
|
+
|---|---|
|
|
175
|
+
| `CallEntity` (base) | **`name: String`** — NON-optional, so `callLog.initiator.name` works directly, no downcast |
|
|
176
|
+
| `CallUser : CallEntity` | `uid: String` · `avatar: String?` |
|
|
177
|
+
| `CallGroup : CallEntity` | `guid: String` · `icon: String?` |
|
|
178
|
+
| `CallEntityType` | `.callUser` · `.callGroup` (+ `.value` for the raw string) |
|
|
179
|
+
|
|
180
|
+
Downcast (`as? CallUser` / `as? CallGroup`, keyed off `receiverType`) ONLY when you need the
|
|
181
|
+
id or avatar — never for the display name.
|
|
182
|
+
|
|
183
|
+
Nesting the flat catalog cannot show you: **`CallLogsRequest.CallLogsBuilder`** is nested
|
|
184
|
+
(`CallLogsRequest.CallLogsBuilder()`), exactly like `SessionSettingsBuilder.SessionSettings`.
|
|
185
|
+
|
|
186
|
+
## Listener semantics + threading (VERIFIED in the calls-core `CallSession.swift` source)
|
|
187
|
+
Neither fact is in any doc page, and both change what correct code looks like.
|
|
188
|
+
|
|
189
|
+
- **Listeners are held WEAKLY** — `CallSession` stores every listener set as
|
|
190
|
+
`Set<WeakWrapper<T>>`. So there is NO retain cycle and `deinit` DOES fire: a `deinit`-based
|
|
191
|
+
teardown is valid. The real hazard is the opposite one — **a listener object with no other
|
|
192
|
+
strong owner is silently deallocated and stops receiving events.** If you register a standalone
|
|
193
|
+
helper (not the view controller itself), the app must retain it.
|
|
194
|
+
- **Callbacks are NOT guaranteed on the main thread.** `CallSession` observes
|
|
195
|
+
`NotificationCenter` with `addObserver(self, selector:)` and **no** `queue:`, and contains zero
|
|
196
|
+
`DispatchQueue.main` hops — so callbacks run on whichever thread posted the event. `joinSession`
|
|
197
|
+
mounts a `UIView` and listener callbacks usually drive UI, so **hop to main yourself** before
|
|
198
|
+
touching UIKit. Every doc sample that chains straight from a callback into UI is a latent
|
|
199
|
+
off-main crash.
|
|
200
|
+
|
|
201
|
+
## Listener callback SETS — copy from here, never by analogy (5.0.4)
|
|
202
|
+
Every listener protocol is `@objc` with `optional` members, so a callback name that is **not** in the
|
|
203
|
+
protocol still COMPILES — and then silently never fires. That is the `canceledCall` failure mode, and
|
|
204
|
+
it applies to all five Calls-SDK protocols, not just the Chat SDK's delegate. `/calls/ios/events` is
|
|
205
|
+
the page, but bake the one that gets guessed most:
|
|
206
|
+
|
|
207
|
+
- **`SessionStatusListener` — exactly six:** `onSessionJoined` · `onSessionLeft` · `onSessionTimedOut`
|
|
208
|
+
· `onConnectionLost` · `onConnectionRestored` · `onConnectionClosed`.
|
|
209
|
+
There is **NO `onSessionEnded`** and **NO `onError`** — both are plausible, both compile, both are
|
|
210
|
+
dead. `onSessionTimedOut` is the idle-timeout end (`setIdleTimeoutPeriod`); `onSessionLeft` is the
|
|
211
|
+
normal one. Verified live: a session left via the built-in leave button fires `onSessionLeft` only.
|
|
212
|
+
|
|
213
|
+
## ⚠️ Participant moderation is NOT buildable headless on iOS (VERIFIED LIVE, 5.0.4)
|
|
214
|
+
`CallSession.shared` exposes `muteParticipant(participantId:)`, `pauseParticipantVideo(participantId:)`
|
|
215
|
+
and `pinParticipant(participantId:type:)`, and `/calls/ios/participant-management` shows all three —
|
|
216
|
+
but every sample starts from a `participant` you already hold, or the literal `"PARTICIPANT_UID"`.
|
|
217
|
+
**Neither the docs nor the SDK gives you a way to obtain that uid.**
|
|
218
|
+
|
|
219
|
+
Measured on two simulators in ONE session, peer visibly rendered as a second tile, listener registered
|
|
220
|
+
on `CallSession.shared` before joining exactly as this skill instructs:
|
|
221
|
+
- `onParticipantJoined` and `onParticipantLeft` **never fired**;
|
|
222
|
+
- `onParticipantListChanged` fired on both the join and the leave transition with an **EMPTY**
|
|
223
|
+
`[Participant]` array;
|
|
224
|
+
- `MediaEventsListener` and `LayoutListener` on the SAME object fired normally throughout
|
|
225
|
+
(`onAudioModesChanged`, `onVideoPaused`/`Resumed`, PiP enabled/disabled) — so registration is fine.
|
|
226
|
+
|
|
227
|
+
`Participant` also has no state flags and there is no roster accessor, so there is **no** second route
|
|
228
|
+
to a uid. **Therefore: do NOT emit a custom moderation UI, a participant list, or any
|
|
229
|
+
`*Participant(participantId:)` call — you cannot supply the argument.** Say so plainly, and point the
|
|
230
|
+
user at the SDK's own participant-list panel (`hideParticipantListButton` defaults to `false`): the
|
|
231
|
+
built-in **more (⋮) → Participants** sheet renders the roster with a search field, per-row audio level,
|
|
232
|
+
a mic toggle and an overflow menu — verified live. **That panel proves the SDK HAS the roster
|
|
233
|
+
internally; only the listener surface is empty.** So moderation is reachable through the built-in UI
|
|
234
|
+
and only through it. Revisit if a later 5.x populates the event.
|
|
235
|
+
|
|
236
|
+
## `SessionSettingsBuilder.hide*Button` — the complete list (5.0.4 interface)
|
|
237
|
+
Pitfall #1 says to hide the built-ins before adding custom controls. These are the setters:
|
|
238
|
+
`hideAudioModeButton` · `hideChangeLayoutButton` · `hideChatButton` · `hideControlPanel` ·
|
|
239
|
+
`hideHeaderPanel` · `hideLeaveSessionButton` · `hideParticipantListButton` · `hideRaiseHandButton` ·
|
|
240
|
+
`hideRecordingButton` · `hideRecordingStatusIndicator` · `hideSessionTimer` ·
|
|
241
|
+
`hideShareInviteButton` · `hideStreamingButton` · `hideStreamingStatusIndicator` ·
|
|
242
|
+
`hideSwitchCameraButton` · `hideToggleAudioButton` · `hideToggleVideoButton`
|
|
243
|
+
|
|
244
|
+
The presence of `hideRaiseHandButton` is also the proof that **a raise-hand button is rendered by
|
|
245
|
+
default** — hiding it is opt-OUT, so "let people raise their hand" needs no button of your own.
|
|
246
|
+
|
|
247
|
+
## CRASH — declare `var window: UIWindow?` on the AppDelegate (verified live)
|
|
248
|
+
The Calls SDK embeds a React Native runtime whose `RCTDeviceInfo._interfaceOrientationDidChange`
|
|
249
|
+
reads `UIApplication.delegate.window`. Xcode's default template since iOS 13 is SCENE-based, so
|
|
250
|
+
`window` lives on the SceneDelegate and the AppDelegate has no such selector — the app aborts:
|
|
251
|
+
|
|
252
|
+
```
|
|
253
|
+
*** Terminating app due to uncaught exception 'NSInvalidArgumentException',
|
|
254
|
+
reason: '-[YourApp.AppDelegate window]: unrecognized selector sent to instance …'
|
|
255
|
+
```
|
|
256
|
+
|
|
257
|
+
It fires on the first orientation/permission pass — in practice the instant the CAMERA permission is
|
|
258
|
+
granted, i.e. AFTER init, login and join have all succeeded, so it reads like a media bug rather than
|
|
259
|
+
a missing property. **Fix: declare `var window: UIWindow?` on the AppDelegate.** It never has to be
|
|
260
|
+
assigned; the selector merely has to exist. `RCTDeviceInfo` is in the shipped 5.0.4 binary.
|
|
261
|
+
|
|
262
|
+
## Callback signatures (VERIFIED in the 5.0.4 interface — the SDK is INCONSISTENT)
|
|
263
|
+
`?.` on a non-optional is a hard Swift compile error, so guessing here breaks the build. The doc
|
|
264
|
+
pages are CORRECT and differ from each other because the **SDK** differs. Copy per-API:
|
|
265
|
+
|
|
266
|
+
| API | `onSuccess` param | `onError` param |
|
|
267
|
+
|---|---|---|
|
|
268
|
+
| `initFromSettings` | `String` | **`CometChatCallException?`** |
|
|
269
|
+
| `login` | `CallsUser` | **`CometChatCallException`** (NOT optional) |
|
|
270
|
+
| `logout` | `String` | **`CometChatCallException`** (NOT optional) |
|
|
271
|
+
| `generateToken` | `String?` | **`CometChatCallException?`** |
|
|
272
|
+
| `joinSession` | `String` | **`CometChatCallException?`** |
|
|
273
|
+
|
|
274
|
+
Do NOT sidestep this with `String(describing: error)` or `{ _ in }` — that throws away the error
|
|
275
|
+
text the user needs. Use the exact shape for the API you are calling.
|
|
276
|
+
|
|
277
|
+
**⚠️ `joinSession`'s `onError` is NOT terminal.** On a normal, successful join it fires **1–2 times**
|
|
278
|
+
with `"CometChatCalls in not Initialised properly"` **before** `onSuccess` — even though
|
|
279
|
+
`initFromSettings` and `login` both already succeeded (the SDK carries on, POSTs `/v3.0/call_tokens`
|
|
280
|
+
and joins). Reproduced on every join, on two simulators, in 5.0.4. So **`onSuccess` is the only join
|
|
281
|
+
verdict**: log the error, never alert / pop the call screen / retry / tear down listeners from
|
|
282
|
+
`onError`. An emit that treats it as fatal — the natural reading, and what the doc sample's shape
|
|
283
|
+
invites — kills every call it makes.
|
|
284
|
+
|
|
285
|
+
Arity the types-only catalog cannot give you: **`isCallSessionActive()` is a METHOD returning
|
|
286
|
+
`Bool`**, not a property — it is the correct guard against a double `leaveSession()`.
|
|
287
|
+
|
|
288
|
+
## ⚠️ Doc corrections — VERIFIED against CometChatCallsSDK 5.0.4
|
|
289
|
+
These pages contain symbols that do not exist. Prefer the right-hand column; do not "fix" the skill to match
|
|
290
|
+
the page.
|
|
291
|
+
| Page | The page writes | Reality (interface + binary) |
|
|
292
|
+
|---|---|---|
|
|
293
|
+
| `events`, `session-settings`, `recording` | `AudioModeType` | **`AudioMode`** (`.speaker`/`.earpiece`/`.bluetooth`/`.headphones`) |
|
|
294
|
+
| `ringing` | `CometChat.CallStatus` | **`CometChat.callStatus`** (lowercase `c`) |
|
|
295
|
+
| `ringing`, `session-settings`, `join-session`, `idle-timeout`, `migration-guide-v5` | `.setType(.video)` — Swift AND the ObjC `setType:` | **`.setSessionType(.video)`** — `SessionSettingsBuilder` has no `setType` in either language |
|
|
296
|
+
| `setup` | SPM URL `…/cometchat-calls-sdk-ios` | **`https://github.com/cometchat/calls-sdk-ios`** (documented URL 404s) |
|
|
297
|
+
| `setup` | Podfile `platform :ios, '16.0'` | package floor is **`.iOS("15.1")`** — 16.0 is the sample app's target |
|
|
298
|
+
| `overview` | "Minimum iOS version: 16.0" | the SAME defect on the overview page — the package floor is **15.1** (`Package.swift`; the shipped slice targets ios15.1) |
|
|
299
|
+
| `setup` | `region` documented as "`us` or `eu`" | **`in` is also valid** — `CometChatCalls.init` only guards `region.length > 0` (calls-core `CometChatCalls.swift:39`); the harness app itself runs in `in` |
|
|
300
|
+
| `setup` | `.setAppId()` / `.setRegion()` | **`.set(appID:)` / `.set(region:)`** — `setAppId`/`setRegion`/`setHost` are `@available(deprecated)` in 5.0.4 |
|
|
301
|
+
| `ringing` | `call.callInitiator?.name` (L121, and the ObjC variant L157) | **`(call.callInitiator as? User)?.name`** — `callInitiator` is `AppEntity?` (CometChatSDK 4.1.7 L950); `name` lives on `User : AppEntity` (L1864/1869). The documented line does not compile. |
|
|
302
|
+
| `session-settings`, `join-session`, `ringing`, `idle-timeout`, `migration-guide-v5` | `CallType` / `CallTypeVideo` as the session type | **`SessionType` / `SessionType.video`** — `CallType` has **zero** occurrences in the Calls SDK interface. It is a **Chat SDK** type (`CometChat.CallType`), correct ONLY on the ringing path |
|
|
303
|
+
| `session-settings` | `SessionType.audio` for audio-only | **`.voice`** — `.audio` and `.audioVideo` are `@available(*, deprecated)` in 5.0.4 |
|
|
304
|
+
| `setup`, `session-settings` | the **Objective-C** tabs | **Do not copy them.** Deprecated `setAppId:`/`setRegion:` (real: **`setWithAppID:`/`setWithRegion:`**, read from the framework binary) and too few opening brackets for the chain — they never compiled |
|
|
305
|
+
| `ringing`, `voip-calling` | `CometChatCallType*`, `CometChatReceiverType*`, `CometChatCallStatus*` in ObjC | **No `CometChat` prefix** — the generated `CometChatSDK-Swift.h` emits `CallTypeVideo`, `ReceiverTypeUser`, `callStatusRejected`/`callStatusCancelled` |
|
|
306
|
+
| `ringing` | `onIncomingCallCancelled(cancelledCall:error:)` | **`onIncomingCallCancelled(canceledCall:error:)`** — the METHOD name has two Ls, the ARGUMENT label has ONE (`canceledCall`). The docs' spelling COMPILES (every `CometChatCallDelegate` member is `@objc optional`, so a near-miss is just a new method) and then **silently never fires** — cancelled calls are never noticed. No gate catches this: G5 passes, and G6 never exercises the cancel path. Verified in the 4.1.7 interface; a review emit shipped exactly this dead handler. |
|
|
307
|
+
| `events` | `onScreenShareStarted()` / `onScreenShareStopped()` on `MediaEventsListener` — in the Swift sample AND the "Media Events" table | **Neither exists.** Zero occurrences in the 5.0.4 `.swiftinterface` **and** zero in the shipped binary. `MediaEventsListener`'s real members are `onRecordingStarted`/`Stopped` · `onStreamingStarted`/`Stopped` · `onAudioModeChanged` · `onAudioModesChanged` · `onCameraFacingChanged` · `onAudioMuted`/`onAudioUnMuted` · `onVideoPaused`/`onVideoResumed`. Because the protocol is `@objc optional` the phantom pair COMPILES and then silently never fires — the `canceledCall` failure mode again. There is no LOCAL screen-share event on iOS at all; only the peer events `onParticipantStartedScreenShare`/`onParticipantStoppedScreenShare` are real. **Still wrong on the corrected preview — not covered by PR #489.** |
|
|
308
|
+
| `ringing` | (unstated) | **Chat-SDK enum casing is inconsistent** — `Call(receiverId:callType:receiverType:)` takes `CometChat.CallType` and `CometChat.ReceiverType` (Capitalised) while `rejectCall(status:)` takes `CometChat.callStatus` (lowercase). Verified in CometChatSDK 4.1.7 lines 958/1238/2479. |
|
|
309
|
+
| `session-settings`, `events` | `CameraFacing.BACK` — the "CameraFacing Values" table on BOTH pages, and `.setInitialCameraFacing(.BACK)` in the session-settings sample | **`.REAR`** — `CameraFacing`'s only cases are **`.FRONT` / `.REAR`** (UPPERCASE, verified in the 5.0.4 `.swiftinterface`). **`.BACK` does not exist** and fails `swiftc` ("type 'CameraFacing' has no member 'BACK'"). `CameraFacing` is ALSO the ONE Calls-SDK enum with UPPERCASE cases — every other enum is lowercase (`AudioMode.speaker`, `LayoutType.tile`, `SessionType.video`), so writing `.front`/`.rear` by analogy ALSO fails to compile. Use `.FRONT` / `.REAR`. (This one is NOT in docs PR #489 — separate docs fix owed; owner: docs.) |
|
|
310
|
+
|
|
311
|
+
Docs PR cometchat/docs#489 **merged 2026-09-08; re-verified below** against the live `/calls/ios/**` pages.
|
|
312
|
+
Almost every row above is now CORRECT on the live pages — the live page matches the right-hand ("Reality")
|
|
313
|
+
column: `AudioMode` (events/session-settings/recording), `CometChat.callStatus` (ringing), `.setSessionType`
|
|
314
|
+
in place of `.setType` (ringing/session-settings/join-session/idle-timeout/migration-guide-v5),
|
|
315
|
+
the SPM URL `…/calls-sdk-ios`, `region` now "`us`, `eu` or `in`", `.set(appID:)`/`.set(region:)` (and the
|
|
316
|
+
ObjC `setWithAppID:`/`setWithRegion:`), `(call.callInitiator as? User)?.name`, `SessionType`/`SessionType.video`
|
|
317
|
+
for the session type, `SessionType.voice` for audio-only, the corrected ObjC tabs (no `CometChat`-prefixed
|
|
318
|
+
enum constants — `ReceiverTypeUser`/`CallTypeVideo`/`callStatusRejected`/`callStatusCancelled`), the
|
|
319
|
+
`onIncomingCallCancelled(canceledCall:error:)` one-L argument label, and the removal of the phantom
|
|
320
|
+
`onScreenShareStarted`/`onScreenShareStopped` from `MediaEventsListener` (the events page now states outright
|
|
321
|
+
that `MediaEventsListener` has NO screen-share callback and points to the peer-only
|
|
322
|
+
`onParticipantStartedScreenShare`/`StoppedScreenShare`). **STILL wrong on the live pages: `CameraFacing.BACK`**
|
|
323
|
+
— both `session-settings` and `events` still show `.FRONT` / `.BACK` in their "CameraFacing Values" tables (and
|
|
324
|
+
the session-settings sample still uses `.setInitialCameraFacing(.FRONT)`), so the `.BACK → .REAR` carve-out
|
|
325
|
+
above stays exactly as-is (owner: docs, not in #489). Every correction stays as defensive Swift guidance
|
|
326
|
+
regardless — the pages can regress.
|