@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,179 +0,0 @@
|
|
|
1
|
-
# In-call chat on iOS
|
|
2
|
-
|
|
3
|
-
> **The iOS Calls SDK v5 has NO in-call chat button.** There is no `setHideChatButton` on `CallSettingsBuilder`, no `onChatButtonClicked` callback on `CallsEventsDelegate`, and no `CometChatCalls.setChatButtonUnreadCount(_:)`. None of these symbols exist — do not emit them.
|
|
4
|
-
|
|
5
|
-
In-call chat is therefore an **app-level composition**, not an SDK feature: you add your OWN chat button to your call UI, and present a sheet hosting the kit's `CometChatMessageList` + `CometChatMessageComposer` over a group keyed to the call's session ID. The Calls SDK is not involved.
|
|
6
|
-
|
|
7
|
-
**Canonical docs:** https://www.cometchat.com/docs/calls/ios/in-call-chat
|
|
8
|
-
**Read first:** `cometchat-react-calls/references/in-call-chat.md` — group-as-session architecture + anti-patterns.
|
|
9
|
-
|
|
10
|
-
---
|
|
11
|
-
|
|
12
|
-
## Your own chat button (the SDK provides none)
|
|
13
|
-
|
|
14
|
-
Add a button to your call control panel and present the sheet yourself. Track unread count in your own state (from a `CometChat.addMessageListener` on the session group) — there is no SDK badge API.
|
|
15
|
-
|
|
16
|
-
```swift
|
|
17
|
-
import CometChatSDK
|
|
18
|
-
|
|
19
|
-
// In your call UIViewController:
|
|
20
|
-
let chatButton = UIButton(type: .system)
|
|
21
|
-
chatButton.addAction(UIAction { [weak self] _ in
|
|
22
|
-
self?.presentChatSheet() // present on main; you're already on main here
|
|
23
|
-
}, for: .touchUpInside)
|
|
24
|
-
|
|
25
|
-
// Unread badge: maintain your own count from a message listener on the session group,
|
|
26
|
-
// and update chatButton's badge view. There is no CometChatCalls.setChatButtonUnreadCount.
|
|
27
|
-
```
|
|
28
|
-
|
|
29
|
-
---
|
|
30
|
-
|
|
31
|
-
## Sheet presentation (iOS 15+)
|
|
32
|
-
|
|
33
|
-
```swift
|
|
34
|
-
import UIKit
|
|
35
|
-
|
|
36
|
-
class CallViewController: UIViewController {
|
|
37
|
-
func presentChatSheet() {
|
|
38
|
-
let chatVC = InCallChatViewController(sessionId: sessionId)
|
|
39
|
-
let nav = UINavigationController(rootViewController: chatVC)
|
|
40
|
-
|
|
41
|
-
if #available(iOS 15.0, *) {
|
|
42
|
-
if let sheet = nav.sheetPresentationController {
|
|
43
|
-
sheet.detents = [.medium(), .large()]
|
|
44
|
-
sheet.prefersGrabberVisible = true
|
|
45
|
-
sheet.preferredCornerRadius = 16
|
|
46
|
-
}
|
|
47
|
-
}
|
|
48
|
-
|
|
49
|
-
present(nav, animated: true)
|
|
50
|
-
}
|
|
51
|
-
}
|
|
52
|
-
```
|
|
53
|
-
|
|
54
|
-
`.detents = [.medium(), .large()]` is iOS 15+'s pull-up sheet API. Matches the BottomSheet UX from RN/Flutter.
|
|
55
|
-
|
|
56
|
-
---
|
|
57
|
-
|
|
58
|
-
## InCallChatViewController
|
|
59
|
-
|
|
60
|
-
```swift
|
|
61
|
-
class InCallChatViewController: UIViewController {
|
|
62
|
-
let sessionId: String
|
|
63
|
-
private var group: Group?
|
|
64
|
-
private var listenerId: String!
|
|
65
|
-
|
|
66
|
-
init(sessionId: String) {
|
|
67
|
-
self.sessionId = sessionId
|
|
68
|
-
super.init(nibName: nil, bundle: nil)
|
|
69
|
-
self.title = "Chat"
|
|
70
|
-
}
|
|
71
|
-
required init?(coder: NSCoder) { fatalError() }
|
|
72
|
-
|
|
73
|
-
override func viewDidLoad() {
|
|
74
|
-
super.viewDidLoad()
|
|
75
|
-
listenerId = "in-call-chat-\(sessionId)"
|
|
76
|
-
|
|
77
|
-
Task {
|
|
78
|
-
do {
|
|
79
|
-
group = try await ensureGroup(sessionId: sessionId)
|
|
80
|
-
try await joinGroup(sessionId: sessionId)
|
|
81
|
-
await MainActor.run {
|
|
82
|
-
self.embedMessageList()
|
|
83
|
-
}
|
|
84
|
-
} catch {
|
|
85
|
-
print("Failed to set up in-call chat:", error)
|
|
86
|
-
}
|
|
87
|
-
}
|
|
88
|
-
}
|
|
89
|
-
|
|
90
|
-
override func viewWillDisappear(_ animated: Bool) {
|
|
91
|
-
super.viewWillDisappear(animated)
|
|
92
|
-
// Clear YOUR unread count on close (no SDK badge API exists).
|
|
93
|
-
NotificationCenter.default.post(name: .inCallChatClosed, object: nil)
|
|
94
|
-
}
|
|
95
|
-
|
|
96
|
-
private func embedMessageList() {
|
|
97
|
-
guard let group = group else { return }
|
|
98
|
-
// The kit's CometChatMessageList is a UIViewController
|
|
99
|
-
let messageList = CometChatMessageList()
|
|
100
|
-
messageList.group = group
|
|
101
|
-
addChild(messageList)
|
|
102
|
-
view.addSubview(messageList.view)
|
|
103
|
-
// ... AutoLayout pinning to fill view
|
|
104
|
-
messageList.didMove(toParent: self)
|
|
105
|
-
|
|
106
|
-
// Composer
|
|
107
|
-
let composer = CometChatMessageComposer()
|
|
108
|
-
composer.group = group
|
|
109
|
-
addChild(composer)
|
|
110
|
-
view.addSubview(composer.view)
|
|
111
|
-
// ... AutoLayout pinning to bottom
|
|
112
|
-
composer.didMove(toParent: self)
|
|
113
|
-
}
|
|
114
|
-
}
|
|
115
|
-
|
|
116
|
-
func ensureGroup(sessionId: String) async throws -> Group {
|
|
117
|
-
do {
|
|
118
|
-
return try await fetchGroup(sessionId) // CometChat.getGroup wrapper
|
|
119
|
-
} catch {
|
|
120
|
-
let group = Group(guid: sessionId, name: "Call \(sessionId)", groupType: .public, password: "")
|
|
121
|
-
return try await createGroup(group)
|
|
122
|
-
}
|
|
123
|
-
}
|
|
124
|
-
```
|
|
125
|
-
|
|
126
|
-
---
|
|
127
|
-
|
|
128
|
-
## Audio ducking when keyboard opens
|
|
129
|
-
|
|
130
|
-
iOS auto-ducks call audio when the system keyboard opens (the kit handles this). For custom UI you may want to maintain unducked audio for the whole call — explicit override:
|
|
131
|
-
|
|
132
|
-
```swift
|
|
133
|
-
NotificationCenter.default.addObserver(
|
|
134
|
-
forName: UIResponder.keyboardWillShowNotification,
|
|
135
|
-
object: nil, queue: .main
|
|
136
|
-
) { _ in
|
|
137
|
-
// Re-assert non-ducking audio category
|
|
138
|
-
try? AVAudioSession.sharedInstance().setCategory(
|
|
139
|
-
.playAndRecord,
|
|
140
|
-
mode: .voiceChat,
|
|
141
|
-
options: [.allowBluetooth, .defaultToSpeaker]
|
|
142
|
-
)
|
|
143
|
-
}
|
|
144
|
-
```
|
|
145
|
-
|
|
146
|
-
Most apps don't need this; the kit's defaults are sensible. Override only if user testing surfaces the audio ducking as confusing.
|
|
147
|
-
|
|
148
|
-
---
|
|
149
|
-
|
|
150
|
-
## Anti-patterns
|
|
151
|
-
|
|
152
|
-
Web sister rules apply, plus iOS-specific:
|
|
153
|
-
|
|
154
|
-
1. **Wiring `setHideChatButton` / `onChatButtonClicked` / `setChatButtonUnreadCount`.** None exist on iOS v5. Present your own button + sheet; track unread in your own state.
|
|
155
|
-
2. **`present(nav, animated: true)` from background queue.** Crash. Always main queue.
|
|
156
|
-
3. **Mutating `group` from background.** `group` updates must be on main; `Task { @MainActor in ... }` or `DispatchQueue.main.async`.
|
|
157
|
-
4. **Forgetting `dismiss(animated: true)` on call end.** Sheet stays up over the post-call screen — looks broken.
|
|
158
|
-
|
|
159
|
-
---
|
|
160
|
-
|
|
161
|
-
## Verification checklist
|
|
162
|
-
|
|
163
|
-
- [ ] Your OWN chat button presents the sheet (no `setHideChatButton`/`onChatButtonClicked`/`setChatButtonUnreadCount` — none exist)
|
|
164
|
-
- [ ] Sheet presented on main queue
|
|
165
|
-
- [ ] `UISheetPresentationController` with `[.medium(), .large()]` detents (iOS 15+)
|
|
166
|
-
- [ ] `CometChatMessageList` + `CometChatMessageComposer` embedded as child VCs
|
|
167
|
-
- [ ] Sheet dismissed on call end
|
|
168
|
-
- [ ] Real-device smoke: 2 iPhones in call, send message → badge in other
|
|
169
|
-
- [ ] Sheet drag-down dismisses cleanly
|
|
170
|
-
- [ ] Lock-screen smoke: backgrounded → return → chat sheet still visible if open
|
|
171
|
-
|
|
172
|
-
---
|
|
173
|
-
|
|
174
|
-
## Pointers
|
|
175
|
-
|
|
176
|
-
- `cometchat-react-calls/references/in-call-chat.md` — sister web reference (group-as-session pattern)
|
|
177
|
-
- `cometchat-ios-calls` SKILL.md — the seven hard rules
|
|
178
|
-
- `references/swiftui-uikit-hosting.md` — embedding SwiftUI sheets
|
|
179
|
-
- Canonical docs: https://www.cometchat.com/docs/calls/ios/in-call-chat
|
|
@@ -1,196 +0,0 @@
|
|
|
1
|
-
# CometChat Calls iOS SDK v4 → v5 migration
|
|
2
|
-
|
|
3
|
-
`CometChatCallsSDK` v5 keeps the same session model as v4 — a per-session call token, a `CallSettingsBuilder`, and a static `CometChatCalls` facade. There is **no** `CometChatCalls.login`, **no** `CallSession`/`CallSession.shared`, and **no** `SessionSettings` struct. Auth is per-session via `generateToken`.
|
|
4
|
-
|
|
5
|
-
**Canonical docs:** https://www.cometchat.com/docs/calls/ios/migration-guide-v5
|
|
6
|
-
|
|
7
|
-
> Every symbol below is verified against the v5 `CometChatCallsSDK` Swift interface. Do NOT introduce `CallSession`, `joinSession`, `SessionSettings`, `SessionSettingsBuilder`, `CometChatCallsEventsListener`, `muteAudio`/`pauseVideo`, `setLayout`, or `startScreenShare` — none of these exist in v5.
|
|
8
|
-
|
|
9
|
-
---
|
|
10
|
-
|
|
11
|
-
## Step 1 — Bump the SDK
|
|
12
|
-
|
|
13
|
-
**SwiftPM:** Update the `CometChatCallsSDK` package version pin to `5.0.0` or higher.
|
|
14
|
-
|
|
15
|
-
**CocoaPods:**
|
|
16
|
-
```ruby
|
|
17
|
-
# Podfile
|
|
18
|
-
pod 'CometChatCallsSDK', '~> 5.0'
|
|
19
|
-
```
|
|
20
|
-
|
|
21
|
-
```bash
|
|
22
|
-
pod install --repo-update
|
|
23
|
-
```
|
|
24
|
-
|
|
25
|
-
---
|
|
26
|
-
|
|
27
|
-
## Step 2 — Init
|
|
28
|
-
|
|
29
|
-
Init takes a `CallAppSettings` built with `CallAppSettingsBuilder`, passed under the `callsAppSettings:` label (note the `s` — `callsAppSettings`, not `callAppSettings`).
|
|
30
|
-
|
|
31
|
-
```swift
|
|
32
|
-
let callAppSettings = CallAppSettingsBuilder()
|
|
33
|
-
.setAppId("APP_ID")
|
|
34
|
-
.setRegion("REGION")
|
|
35
|
-
.build()
|
|
36
|
-
|
|
37
|
-
CometChatCalls.init(callsAppSettings: callAppSettings, onSuccess: { _ in
|
|
38
|
-
// ready
|
|
39
|
-
}, onError: { error in
|
|
40
|
-
// surface error
|
|
41
|
-
})
|
|
42
|
-
```
|
|
43
|
-
|
|
44
|
-
There is no async/await `init(with:)` form and no `CallAppSettings.Builder()` nested type — use `CallAppSettingsBuilder()`.
|
|
45
|
-
|
|
46
|
-
---
|
|
47
|
-
|
|
48
|
-
## Step 3 — Auth is per-session (no Calls SDK login)
|
|
49
|
-
|
|
50
|
-
> **There is NO `CometChatCalls.login` and NO `CometChatCalls.getLoggedInUser` in v5.** Do not call them — they do not exist on the Calls SDK.
|
|
51
|
-
|
|
52
|
-
Authentication is per call session. Get a call token immediately before starting a session:
|
|
53
|
-
|
|
54
|
-
```swift
|
|
55
|
-
// Chat SDK still owns the user session. Get its auth token from the Chat SDK:
|
|
56
|
-
let authToken = CometChat.getUserAuthToken() // CometChatSDK — User has NO `authToken` property
|
|
57
|
-
|
|
58
|
-
CometChatCalls.generateToken(authToken: authToken, sessionID: sessionID, onSuccess: { token in
|
|
59
|
-
// `token` is the call token you pass to startSession
|
|
60
|
-
}, onError: { error in
|
|
61
|
-
// surface error
|
|
62
|
-
})
|
|
63
|
-
```
|
|
64
|
-
|
|
65
|
-
`generateToken` is `CometChatCalls.generateToken(authToken:sessionID:onSuccess:onError:)`.
|
|
66
|
-
|
|
67
|
-
---
|
|
68
|
-
|
|
69
|
-
## Step 4 — Session settings (`CallSettingsBuilder`, not `SessionSettings`)
|
|
70
|
-
|
|
71
|
-
> **There is NO `SessionSettings` struct and NO `SessionSettingsBuilder`.** Use `CallSettingsBuilder().build()` which returns `CallSettings`.
|
|
72
|
-
|
|
73
|
-
```swift
|
|
74
|
-
let callSettings = CallSettingsBuilder()
|
|
75
|
-
.setIsAudioOnly(false) // was setSessionType(.video) — there is no setSessionType
|
|
76
|
-
.setStartAudioMuted(false)
|
|
77
|
-
.setStartVideoMuted(false)
|
|
78
|
-
.setShowRecordingButton(true) // NOT inverted — there is no hideRecordingButton
|
|
79
|
-
.setMode(.default) // setMode(_ value: DisplayModes) — swiftinterface:281 (.default/.single/.spotlight); NSString overload is deprecated
|
|
80
|
-
.setDelegate(self) // self conforms to CallsEventsDelegate
|
|
81
|
-
.build()
|
|
82
|
-
```
|
|
83
|
-
|
|
84
|
-
There is no `setLayout`, no `setHideChatButton`, no `enableRecording`. Recording-button visibility is `setShowRecordingButton(_:)`; auto-record on start is `setStartRecordingOnCallStart(_:)`.
|
|
85
|
-
|
|
86
|
-
---
|
|
87
|
-
|
|
88
|
-
## Step 5 — Start / end the session
|
|
89
|
-
|
|
90
|
-
> **There is NO `joinSession` and NO `CallSession`.** The lifecycle is `generateToken` → `startSession` → `endSession`, all static on `CometChatCalls`.
|
|
91
|
-
|
|
92
|
-
```swift
|
|
93
|
-
// `view` is the UIView the SDK renders the call into.
|
|
94
|
-
CometChatCalls.startSession(callToken: token, callSetting: callSettings, view: callView, onSuccess: { _ in
|
|
95
|
-
// session started
|
|
96
|
-
}, onError: { error in
|
|
97
|
-
// surface error
|
|
98
|
-
})
|
|
99
|
-
|
|
100
|
-
// End the call:
|
|
101
|
-
CometChatCalls.endSession() // EXISTS in v5 — do not say it doesn't
|
|
102
|
-
```
|
|
103
|
-
|
|
104
|
-
---
|
|
105
|
-
|
|
106
|
-
## Step 6 — Events: `CallsEventsDelegate`, not `CometChatCallsEventsListener`
|
|
107
|
-
|
|
108
|
-
> **The listener protocol is `CallsEventsDelegate`.** `CometChatCallsEventsListener` does not exist. There is no `addEventListener(.someEnum)` granular-subscription API.
|
|
109
|
-
|
|
110
|
-
```swift
|
|
111
|
-
// v5: implement the CallsEventsDelegate protocol (callbacks are @objc optional).
|
|
112
|
-
// Prefer the TYPED forms below (swiftinterface:29-54); the NSDictionary/NSArray
|
|
113
|
-
// overloads still exist but are DEPRECATED.
|
|
114
|
-
extension MyCallController: CallsEventsDelegate {
|
|
115
|
-
func onSessionTimeout() { /* idle timeout — swiftinterface:30 */ }
|
|
116
|
-
func onCallEnded() { /* ... */ }
|
|
117
|
-
func onCallEndButtonPressed() { /* ... */ }
|
|
118
|
-
func onUserJoined(rtcUser: RTCUser) { /* swiftinterface:35 */ }
|
|
119
|
-
func onUserLeft(rtcUser: RTCUser) { /* swiftinterface:38 */ }
|
|
120
|
-
func onUserListChanged(rtcUsers: [RTCUser]) { /* swiftinterface:41 */ }
|
|
121
|
-
func onAudioModeChanged(mode: [CallAudioMode]) { /* swiftinterface:44 */ }
|
|
122
|
-
func onCallSwitchedToVideo(callSwitchedInfo: CallSwitchRequestInfo) { /* swiftinterface:47 */ }
|
|
123
|
-
func onUserMuted(rtcMutedUser: RTCMutedUser) { /* swiftinterface:50 */ }
|
|
124
|
-
func onRecordingToggled(recordingInfo: RTCRecordingInfo) { /* one callback — no Started/Stopped/Failed split — swiftinterface:53 */ }
|
|
125
|
-
}
|
|
126
|
-
|
|
127
|
-
// Register either via the builder (setDelegate, Step 4) or:
|
|
128
|
-
CometChatCalls.addCallEventListener(observerId: "my-id", delegate: self)
|
|
129
|
-
```
|
|
130
|
-
|
|
131
|
-
There is no `onScreenShareStarted`/`onScreenShareEnded`, no `onChatButtonClicked`, no `onActiveSpeakerUpdated`, and no layout-change callback in v5.
|
|
132
|
-
|
|
133
|
-
---
|
|
134
|
-
|
|
135
|
-
## Step 7 — In-call control method names
|
|
136
|
-
|
|
137
|
-
```diff
|
|
138
|
-
- CometChatCalls.muteAudio(true) // phantom
|
|
139
|
-
+ CometChatCalls.audioMuted(true) // mute
|
|
140
|
-
+ CometChatCalls.audioMuted(false) // unmute
|
|
141
|
-
|
|
142
|
-
- CometChatCalls.pauseVideo(true) // phantom
|
|
143
|
-
+ CometChatCalls.videoPaused(true)
|
|
144
|
-
+ CometChatCalls.videoPaused(false)
|
|
145
|
-
|
|
146
|
-
CometChatCalls.switchCamera() // unchanged
|
|
147
|
-
|
|
148
|
-
- CometChatCalls.setMode(mode) // setMode is on CallSettingsBuilder, not the runtime facade
|
|
149
|
-
+ // layout is fixed at session start via CallSettingsBuilder.setMode(_:) — there is no runtime setLayout
|
|
150
|
-
|
|
151
|
-
CometChatCalls.startRecording() // recording control
|
|
152
|
-
CometChatCalls.stopRecording()
|
|
153
|
-
|
|
154
|
-
CometChatCalls.enterPIPMode() // PiP — NOT CallSession.shared.enablePictureInPictureLayout
|
|
155
|
-
CometChatCalls.exitPIPMode()
|
|
156
|
-
```
|
|
157
|
-
|
|
158
|
-
Local screen-share initiation is **not** available on the iOS Calls SDK v5 — there is no `startScreenShare`.
|
|
159
|
-
|
|
160
|
-
---
|
|
161
|
-
|
|
162
|
-
## Chat SDK signaling (ringing mode) — verify these too
|
|
163
|
-
|
|
164
|
-
```diff
|
|
165
|
-
- Call(receiverUid: uid, receiverType: .user, callType: .video)
|
|
166
|
-
+ Call(receiverId: uid, callType: .video, receiverType: .user) // CometChatSDK arg order
|
|
167
|
-
|
|
168
|
-
- callType: .voice
|
|
169
|
-
+ callType: .audio // CallType is .audio / .video / .audioVideo — there is no .voice
|
|
170
|
-
|
|
171
|
-
- CometChat.login(UID:..., authKey:...) // still correct; there is NO loginAsync
|
|
172
|
-
```
|
|
173
|
-
|
|
174
|
-
Call delegate is `CometChatCallDelegate` with two-param callbacks, e.g. `onIncomingCallReceived(incomingCall:error:)`; register with `CometChat.addCallListener(_:_:)` (positional labels).
|
|
175
|
-
|
|
176
|
-
---
|
|
177
|
-
|
|
178
|
-
## Verification checklist
|
|
179
|
-
|
|
180
|
-
- [ ] Podfile / Package.swift updated to `~> 5.0`
|
|
181
|
-
- [ ] `pod install --repo-update` (CocoaPods) or SwiftPM resolved cleanly
|
|
182
|
-
- [ ] NO `CometChatCalls.login` anywhere — auth is per-session via `generateToken`
|
|
183
|
-
- [ ] `CallSettingsBuilder().build()` used; no `SessionSettings`/`SessionSettingsBuilder`
|
|
184
|
-
- [ ] `CallsEventsDelegate` implemented; no `CometChatCallsEventsListener`, no `addEventListener(.enum)`
|
|
185
|
-
- [ ] Lifecycle is `generateToken` → `startSession` → `endSession`; no `joinSession`, no `CallSession.shared`
|
|
186
|
-
- [ ] Controls use `audioMuted`/`videoPaused`/`enterPIPMode`/`exitPIPMode`
|
|
187
|
-
- [ ] `Call(receiverId:callType:receiverType:)` arg order; `CallType` has no `.voice`
|
|
188
|
-
- [ ] Real-device smoke: incoming call from iPhone → answer → mute → end
|
|
189
|
-
|
|
190
|
-
---
|
|
191
|
-
|
|
192
|
-
## Pointers
|
|
193
|
-
|
|
194
|
-
- Canonical migration: https://www.cometchat.com/docs/calls/ios/migration-guide-v5
|
|
195
|
-
- `cometchat-ios-calls/SKILL.md` — seven hard rules (still apply post-v5)
|
|
196
|
-
- `cometchat-ios-calls/references/server-apns-pushkit.md` — PushKit setup (unchanged in v5)
|
|
@@ -1,246 +0,0 @@
|
|
|
1
|
-
# Picture-in-Picture on iOS
|
|
2
|
-
|
|
3
|
-
iOS supports PiP for video calls via `AVPictureInPictureController` (iOS 14+) or via CallKit's auto-PiP (iOS 14+ when CallKit reports a video call). For most production calling apps, **CallKit handles PiP for free** — if you've integrated CallKit (rule 1.7 in the SKILL.md), iOS auto-PiPs your call when the user backgrounds the app.
|
|
4
|
-
|
|
5
|
-
The `AVPictureInPictureController` path is only needed for non-CallKit foreground-only calls (rare — most production apps use CallKit).
|
|
6
|
-
|
|
7
|
-
---
|
|
8
|
-
|
|
9
|
-
## CallKit auto-PiP — the simplest path
|
|
10
|
-
|
|
11
|
-
If your app integrates CallKit (rule 1.7, mandatory for VoIP push standalone mode), iOS auto-handles PiP. When the user presses Home during an active call:
|
|
12
|
-
|
|
13
|
-
1. iOS automatically captures the call's video stream
|
|
14
|
-
2. The CallKit-managed call enters PiP mode
|
|
15
|
-
3. The PiP window floats above all apps, even system UI
|
|
16
|
-
4. Tapping the PiP window foregrounds your app
|
|
17
|
-
|
|
18
|
-
No code needed beyond CallKit setup. The skill defaults to this path for standalone-mode calls.
|
|
19
|
-
|
|
20
|
-
### Required entitlements
|
|
21
|
-
|
|
22
|
-
```xml
|
|
23
|
-
<!-- Info.plist — already required by CallKit -->
|
|
24
|
-
<key>UIBackgroundModes</key>
|
|
25
|
-
<array>
|
|
26
|
-
<string>audio</string>
|
|
27
|
-
<string>voip</string>
|
|
28
|
-
<string>remote-notification</string>
|
|
29
|
-
</array>
|
|
30
|
-
```
|
|
31
|
-
|
|
32
|
-
`audio` background mode is what lets the call's audio continue while in PiP. Without it, video PiP works but audio cuts.
|
|
33
|
-
|
|
34
|
-
---
|
|
35
|
-
|
|
36
|
-
## SDK-managed PiP — `CometChatCalls.enterPIPMode()` / `exitPIPMode()`
|
|
37
|
-
|
|
38
|
-
> **Verified against `CometChatCallsSDK` v5 Swift interface:** the SDK exposes two STATIC methods on `CometChatCalls` to toggle its internal picture-in-picture mode — `CometChatCalls.enterPIPMode()` and `CometChatCalls.exitPIPMode()`. There is NO `CallSession.shared.enablePictureInPictureLayout()` (no `CallSession` type exists), and NO `CometChatCalls.attachPictureInPictureLayer(layer)` / `detachPictureInPictureLayer()`. The SDK does NOT expose video frames or a `CMSampleBuffer` pipeline to drive a host-app `AVPictureInPictureController`.
|
|
39
|
-
|
|
40
|
-
### What works today
|
|
41
|
-
|
|
42
|
-
| Goal | API |
|
|
43
|
-
|---|---|
|
|
44
|
-
| Switch the SDK's call surface to compact PiP mode | `CometChatCalls.enterPIPMode()` |
|
|
45
|
-
| Switch back to full layout | `CometChatCalls.exitPIPMode()` |
|
|
46
|
-
|
|
47
|
-
```swift
|
|
48
|
-
import CometChatCallsSDK
|
|
49
|
-
|
|
50
|
-
// When the user taps "minimize" in the call UI
|
|
51
|
-
CometChatCalls.enterPIPMode()
|
|
52
|
-
|
|
53
|
-
// When they tap to expand back, or before hangup
|
|
54
|
-
CometChatCalls.exitPIPMode()
|
|
55
|
-
```
|
|
56
|
-
|
|
57
|
-
This is **NOT iOS system-level PiP** (the floating window that survives backgrounding). It's an in-app compact layout. For true OS-level PiP (floating call window across all apps + lock screen), see the CallKit path above.
|
|
58
|
-
|
|
59
|
-
### Custom system-level PiP via `AVPictureInPictureController` — NOT directly supported
|
|
60
|
-
|
|
61
|
-
Driving iOS system-level PiP via `AVPictureInPictureController` requires feeding video frames to an `AVSampleBufferDisplayLayer`. The Calls SDK does not expose its WebRTC video track for this — the peer-connection handle is internal. Three options:
|
|
62
|
-
|
|
63
|
-
1. **Recommended: use CallKit** (rule 1.7 SKILL.md). CallKit-managed VoIP calls get auto-PiP for free — no `AVPictureInPictureController` plumbing needed.
|
|
64
|
-
2. **Use the SDK's PiP-mode API** (above — `enterPIPMode()`/`exitPIPMode()`) for in-app minimization. Acceptable UX for foreground-only flows.
|
|
65
|
-
3. **Roll your own WebRTC bridge.** Requires forking/patching the SDK to expose the underlying `RTCMediaStream` — not recommended.
|
|
66
|
-
|
|
67
|
-
### Required capability (CallKit path)
|
|
68
|
-
|
|
69
|
-
In Xcode → Signing & Capabilities → Background Modes → ensure **Audio, AirPlay, and Picture in Picture** is checked. CallKit needs this; without it, CallKit's auto-PiP doesn't fire even with a CallKit-managed call.
|
|
70
|
-
|
|
71
|
-
### Toggle button for SDK PiP mode
|
|
72
|
-
|
|
73
|
-
```swift
|
|
74
|
-
@IBAction func toggleCompactLayout(_ sender: UIButton) {
|
|
75
|
-
if isCompact {
|
|
76
|
-
CometChatCalls.exitPIPMode()
|
|
77
|
-
} else {
|
|
78
|
-
CometChatCalls.enterPIPMode()
|
|
79
|
-
}
|
|
80
|
-
isCompact.toggle()
|
|
81
|
-
}
|
|
82
|
-
```
|
|
83
|
-
|
|
84
|
-
This switches the SDK's call surface between full and compact PiP layouts. The compact view shows local + remote video tiles in a smaller container; useful when you want to free screen space for other UI but keep the call visible.
|
|
85
|
-
|
|
86
|
-
> **Note**: `AVPictureInPictureController` + KVO on `isPictureInPicturePossible` patterns (previously documented here) are not applicable because the SDK does not expose the video frames `AVPictureInPictureController` requires. Use the CallKit path for system-level PiP, or this `enterPIPMode()`/`exitPIPMode()` API for in-app PiP-style minimization.
|
|
87
|
-
|
|
88
|
-
---
|
|
89
|
-
|
|
90
|
-
## SwiftUI integration
|
|
91
|
-
|
|
92
|
-
Wrap the UIKit view controller as a `UIViewControllerRepresentable`:
|
|
93
|
-
|
|
94
|
-
```swift
|
|
95
|
-
struct PiPCallView: UIViewControllerRepresentable {
|
|
96
|
-
let sessionID: String
|
|
97
|
-
|
|
98
|
-
func makeUIViewController(context: Context) -> CustomOngoingCallViewController {
|
|
99
|
-
let vc = CustomOngoingCallViewController(sessionID: sessionID)
|
|
100
|
-
return vc
|
|
101
|
-
}
|
|
102
|
-
|
|
103
|
-
func updateUIViewController(_ vc: CustomOngoingCallViewController, context: Context) {}
|
|
104
|
-
}
|
|
105
|
-
```
|
|
106
|
-
|
|
107
|
-
Use in your SwiftUI app:
|
|
108
|
-
|
|
109
|
-
```swift
|
|
110
|
-
struct CallScreen: View {
|
|
111
|
-
let sessionID: String
|
|
112
|
-
|
|
113
|
-
var body: some View {
|
|
114
|
-
PiPCallView(sessionID: sessionID)
|
|
115
|
-
.ignoresSafeArea()
|
|
116
|
-
}
|
|
117
|
-
}
|
|
118
|
-
```
|
|
119
|
-
|
|
120
|
-
---
|
|
121
|
-
|
|
122
|
-
## Auto-PiP on backgrounding (manual path)
|
|
123
|
-
|
|
124
|
-
iOS 14+ supports auto-PiP from inline AVKit playback. For active calls:
|
|
125
|
-
|
|
126
|
-
```swift
|
|
127
|
-
pipController?.canStartPictureInPictureAutomaticallyFromInline = true
|
|
128
|
-
```
|
|
129
|
-
|
|
130
|
-
Combined with the `audio` background mode, this gives you the same behavior as CallKit auto-PiP: press Home → call enters PiP → audio + video continue.
|
|
131
|
-
|
|
132
|
-
---
|
|
133
|
-
|
|
134
|
-
## Delegate methods
|
|
135
|
-
|
|
136
|
-
```swift
|
|
137
|
-
extension CustomOngoingCallViewController: AVPictureInPictureControllerDelegate {
|
|
138
|
-
func pictureInPictureControllerWillStartPictureInPicture(_ pip: AVPictureInPictureController) {
|
|
139
|
-
// Hide your in-page video (it duplicates with PiP)
|
|
140
|
-
sampleBufferDisplayLayer?.isHidden = true
|
|
141
|
-
}
|
|
142
|
-
|
|
143
|
-
func pictureInPictureControllerDidStartPictureInPicture(_ pip: AVPictureInPictureController) {
|
|
144
|
-
// PiP is active
|
|
145
|
-
}
|
|
146
|
-
|
|
147
|
-
func pictureInPictureController(_ pip: AVPictureInPictureController,
|
|
148
|
-
failedToStartPictureInPictureWithError error: Error) {
|
|
149
|
-
print("PiP failed:", error)
|
|
150
|
-
}
|
|
151
|
-
|
|
152
|
-
func pictureInPictureControllerDidStopPictureInPicture(_ pip: AVPictureInPictureController) {
|
|
153
|
-
sampleBufferDisplayLayer?.isHidden = false
|
|
154
|
-
}
|
|
155
|
-
|
|
156
|
-
func pictureInPictureController(_ pip: AVPictureInPictureController,
|
|
157
|
-
restoreUserInterfaceForPictureInPictureStopWithCompletionHandler completion: @escaping (Bool) -> Void) {
|
|
158
|
-
// User tapped the PiP window — restore the full call screen
|
|
159
|
-
if let nav = self.navigationController {
|
|
160
|
-
nav.popToRootViewController(animated: true)
|
|
161
|
-
}
|
|
162
|
-
completion(true)
|
|
163
|
-
}
|
|
164
|
-
}
|
|
165
|
-
```
|
|
166
|
-
|
|
167
|
-
`restoreUserInterfaceForPictureInPictureStopWithCompletionHandler` is critical — without it, tapping the PiP window restores nothing.
|
|
168
|
-
|
|
169
|
-
---
|
|
170
|
-
|
|
171
|
-
## Lock screen + PiP
|
|
172
|
-
|
|
173
|
-
When the device is locked during a call:
|
|
174
|
-
|
|
175
|
-
- **CallKit-managed call:** PiP appears on the lock screen as part of the CallKit incoming-call card. Audio continues; video shows in the lock-screen UI.
|
|
176
|
-
- **Manual `AVPictureInPictureController`:** PiP cannot show on the lock screen. The video pauses; audio continues if `audio` background mode is set.
|
|
177
|
-
|
|
178
|
-
Standalone-mode VoIP apps must use CallKit for the lock-screen video story to work.
|
|
179
|
-
|
|
180
|
-
---
|
|
181
|
-
|
|
182
|
-
## Hangup cleanup
|
|
183
|
-
|
|
184
|
-
When the call ends:
|
|
185
|
-
|
|
186
|
-
```swift
|
|
187
|
-
func endCall() {
|
|
188
|
-
// Exit PiP mode BEFORE ending the session, otherwise a re-init of the SDK
|
|
189
|
-
// can inherit compact-layout state on the next call.
|
|
190
|
-
CometChatCalls.exitPIPMode()
|
|
191
|
-
|
|
192
|
-
CometChatCalls.endSession() // ends the WebRTC session (EXISTS in v5)
|
|
193
|
-
|
|
194
|
-
do {
|
|
195
|
-
try AVAudioSession.sharedInstance().setActive(false, options: .notifyOthersOnDeactivation)
|
|
196
|
-
} catch {}
|
|
197
|
-
}
|
|
198
|
-
```
|
|
199
|
-
|
|
200
|
-
If you ALSO drove a host-app `AVPictureInPictureController` (against an external video source), call `pipController?.stopPictureInPicture()` before tearing down. The CometChat SDK has no awareness of that controller.
|
|
201
|
-
|
|
202
|
-
---
|
|
203
|
-
|
|
204
|
-
## Anti-patterns
|
|
205
|
-
|
|
206
|
-
1. **Using `CometChatCalls.attachPictureInPictureLayer(layer)` / `detachPictureInPictureLayer()`, or any `CallSession.shared.*PictureInPictureLayout()` call** — none of these symbols exist on `CometChatCallsSDK` v5 (there is no `CallSession` type). Use `CometChatCalls.enterPIPMode()` / `CometChatCalls.exitPIPMode()` instead.
|
|
207
|
-
2. **Manual `AVPictureInPictureController` for VoIP apps without CallKit.** Lock-screen ringing breaks; the SDK does not expose its video pipeline so the PiP window won't render the call. Use CallKit.
|
|
208
|
-
3. **No `audio` background mode.** Audio cuts when the app backgrounds, regardless of PiP path.
|
|
209
|
-
4. **Mixing SDK compact-layout with host-driven `AVPictureInPictureController`.** Two competing PiP surfaces — the SDK's compact layout fights the user's manual PiP, both look broken. Pick one.
|
|
210
|
-
|
|
211
|
-
---
|
|
212
|
-
|
|
213
|
-
## Verification checklist
|
|
214
|
-
|
|
215
|
-
- [ ] CallKit integrated (rule 1.7 in SKILL.md) — gives you PiP for free
|
|
216
|
-
- [ ] `audio` in `UIBackgroundModes` (Info.plist)
|
|
217
|
-
- [ ] Background Modes capability includes "Audio, AirPlay, and Picture in Picture"
|
|
218
|
-
|
|
219
|
-
**SDK PiP-mode path (in-app PiP, no system-level PiP):**
|
|
220
|
-
- [ ] `CometChatCalls.enterPIPMode()` called to enter compact mode
|
|
221
|
-
- [ ] `CometChatCalls.exitPIPMode()` called BEFORE `endSession()` on hangup
|
|
222
|
-
- [ ] UI button to toggle between full/compact layouts
|
|
223
|
-
- [ ] NOT used together with a host-app `AVPictureInPictureController` (see anti-pattern #4)
|
|
224
|
-
|
|
225
|
-
**Real-device smoke (CallKit path):**
|
|
226
|
-
- [ ] Press Home during call → PiP appears (auto via CallKit)
|
|
227
|
-
- [ ] Audio continues through PiP transition
|
|
228
|
-
- [ ] Tap PiP window → app foregrounds, full call screen restored
|
|
229
|
-
- [ ] Lock device → PiP visible on lock screen (CallKit only)
|
|
230
|
-
- [ ] Hangup ends call cleanly; no stuck PiP window
|
|
231
|
-
|
|
232
|
-
**Real-device smoke (SDK compact-layout path):**
|
|
233
|
-
- [ ] Tap "minimize" → SDK switches to compact layout in-app
|
|
234
|
-
- [ ] Tap "expand" → SDK switches back to full layout
|
|
235
|
-
- [ ] Hangup from compact layout cleanly ends call
|
|
236
|
-
|
|
237
|
-
---
|
|
238
|
-
|
|
239
|
-
## Pointers
|
|
240
|
-
|
|
241
|
-
- `references/callkit-and-pushkit.md` — CallKit gives PiP for free
|
|
242
|
-
- `references/avaudiosession-routing.md` — audio routing during PiP transitions
|
|
243
|
-
- `references/swiftui-uikit-hosting.md` — SwiftUI hosting of the UIKit PiP view controller
|
|
244
|
-
- `cometchat-native-calls/references/picture-in-picture.md` — sister reference (RN bridges to the same iOS APIs)
|
|
245
|
-
- `cometchat-react-calls/references/picture-in-picture.md` — Web PiP (different APIs but same UX shape)
|
|
246
|
-
- `cometchat-ios-calls` SKILL.md — base hard rules
|
|
@@ -1,26 +0,0 @@
|
|
|
1
|
-
# Raise hand on iOS — NOT supported on the iOS Calls SDK v5
|
|
2
|
-
|
|
3
|
-
**Raise-hand is not available on the iOS `CometChatCallsSDK` v5.** Do not emit any of these — none of them exist on the SDK:
|
|
4
|
-
|
|
5
|
-
- `CometChatCalls.raiseHand()` / `CometChatCalls.lowerHand()`
|
|
6
|
-
- `onParticipantHandRaised` / `onParticipantHandLowered` (no such `CallsEventsDelegate` callbacks)
|
|
7
|
-
- any `setShowRaiseHandButton` / `enableRaiseHand` builder flag
|
|
8
|
-
|
|
9
|
-
The `CallsEventsDelegate` surface in v5 (verified against `CometChatCallsSDK` swiftinterface:29-54) is: `onSessionTimeout()`, `onCallEnded()`, `onCallEndButtonPressed()`, plus the participant/media events in BOTH a current TYPED form and a DEPRECATED `NSDictionary`/`NSArray` form — `onUserJoined(rtcUser:)`, `onUserLeft(rtcUser:)`, `onUserListChanged(rtcUsers:)`, `onAudioModeChanged(mode:)`, `onUserMuted(rtcMutedUser:)`, `onRecordingToggled(recordingInfo:)`, `onCallSwitchedToVideo(callSwitchedInfo:)`. Prefer the typed forms (`RTCUser`, `RTCMutedUser`, `RTCRecordingInfo`, `CallSwitchRequestInfo`, `CallAudioMode`). There is NO hand-raise event of any spelling.
|
|
10
|
-
|
|
11
|
-
## If a customer asks for raise-hand on iOS
|
|
12
|
-
|
|
13
|
-
There is no SDK affordance to wire. The options are:
|
|
14
|
-
|
|
15
|
-
1. **Build it out-of-band over the Chat SDK.** Send a custom message / transient message (e.g. `TransientMessage` or a typed `CustomMessage`) from the raising user, and have each client render a hand badge from those messages. This is app-level state the Calls SDK is not involved in.
|
|
16
|
-
2. **Defer to web/Android** if the meeting must have first-class raise-hand and those platforms support it.
|
|
17
|
-
3. **Wait for vendor support** — track the CometChat iOS Calls SDK release notes.
|
|
18
|
-
|
|
19
|
-
Do NOT scaffold a `CometChatCalls.raiseHand()` call path; it will not compile.
|
|
20
|
-
|
|
21
|
-
---
|
|
22
|
-
|
|
23
|
-
## Pointers
|
|
24
|
-
|
|
25
|
-
- `cometchat-react-calls/references/raise-hand.md` — web raise-hand (the feature shape, where it IS supported)
|
|
26
|
-
- `cometchat-ios-calls` SKILL.md — base hard rules
|