@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,113 @@
|
|
|
1
|
+
# Anti-patterns — what does NOT exist, and what compiles but is wrong
|
|
2
|
+
|
|
3
|
+
> Catalog-verified against the shipped 5.1.22 `.swiftinterface`. If a symbol is not in
|
|
4
|
+
> `catalogs/ios-v5.json`, it does not exist in the installed kit — no matter where you saw it.
|
|
5
|
+
|
|
6
|
+
## 1. v4 composite components — they do not exist in v5
|
|
7
|
+
|
|
8
|
+
The single most damaging carry-over. These are **v4** names and are NOT in the v5 public API:
|
|
9
|
+
|
|
10
|
+
- `CometChatConversationsWithMessages`
|
|
11
|
+
- `CometChatUsersWithMessages`
|
|
12
|
+
- `CometChatGroupsWithMessages`
|
|
13
|
+
- `CometChatMessages`
|
|
14
|
+
|
|
15
|
+
They appeared on v5 documentation pages (tracked as **IOS-DOCS-001**), which is exactly why the
|
|
16
|
+
rule is "verify against the catalog", not "trust a code sample". v5 has **no composite** — the
|
|
17
|
+
host composes header + list + composer itself and owns the navigation. See `layout.md`.
|
|
18
|
+
|
|
19
|
+
If you find yourself reaching for a one-liner chat screen: there isn't one. That is the design.
|
|
20
|
+
|
|
21
|
+
## 2. Styles are PROPERTIES, not setters
|
|
22
|
+
|
|
23
|
+
The kit's API is setter-based and returns `Self`, so `set(...)` is the reflex — but styling is
|
|
24
|
+
not applied that way:
|
|
25
|
+
|
|
26
|
+
```swift
|
|
27
|
+
// wrong — no such setter
|
|
28
|
+
list.set(style: myStyle)
|
|
29
|
+
|
|
30
|
+
// right — assign the style property
|
|
31
|
+
list.style = myStyle
|
|
32
|
+
```
|
|
33
|
+
|
|
34
|
+
Guessing the call form is the most common compile failure. Fetch the component's `.md` twin via
|
|
35
|
+
`docs-map.md` and match the shape exactly.
|
|
36
|
+
|
|
37
|
+
## 3. `CometChatCallLogs` hands back `Any`
|
|
38
|
+
|
|
39
|
+
Unlike every other list component, five of its setters pass untyped values. Using them directly
|
|
40
|
+
does not compile — cast first:
|
|
41
|
+
|
|
42
|
+
```swift
|
|
43
|
+
callLogs.set(onItemClick: { callLog, _ in
|
|
44
|
+
guard let log = callLog as? CallLog else { return }
|
|
45
|
+
// …
|
|
46
|
+
})
|
|
47
|
+
```
|
|
48
|
+
|
|
49
|
+
This is a property of the shipped binary, not a docs error. Treat every `CometChatCallLogs`
|
|
50
|
+
callback parameter as `Any` until proven otherwise.
|
|
51
|
+
|
|
52
|
+
## 4. The thread trap — two parent APIs
|
|
53
|
+
|
|
54
|
+
A threaded reply view needs its parent message, and there is more than one way to hand it over.
|
|
55
|
+
Mixing them (setting a parent message id on one component and a parent message object on
|
|
56
|
+
another) yields a view that renders but never sends. Set the parent ONE way, on the component
|
|
57
|
+
the docs prescribe for that surface, and verify by actually sending a reply.
|
|
58
|
+
|
|
59
|
+
## 5. Assuming the SDK ships with the kit's dependencies resolved
|
|
60
|
+
|
|
61
|
+
The kit is a prebuilt binary xcframework compiled against ONE `CometChatSDK` version, and SPM
|
|
62
|
+
does **not** resolve that transitively. Pin the exact version. On 5.1.19 the shipped
|
|
63
|
+
`.swiftinterface` also hard-imports `CometChatCallsSDK`, so the Calls SDK must resolve for ANY
|
|
64
|
+
integration to compile — even a chat-only one that never places a call. 5.1.18 built without it,
|
|
65
|
+
so treat this as a packaging regression to state plainly, not as a design requirement to teach.
|
|
66
|
+
|
|
67
|
+
## 6. Answering API from memory
|
|
68
|
+
|
|
69
|
+
The kit's surface is largely un-prefixed (`User`, `Group`, `ConversationRequest`), so a
|
|
70
|
+
plausible-looking name is often a real type from a DIFFERENT module — which is why guessing here
|
|
71
|
+
fails silently rather than loudly. Always fetch the `.md` twin via `docs-map.md`. Never read the
|
|
72
|
+
`.swiftinterface` as a substitute for the docs; it is the catalog's source, not user-facing API
|
|
73
|
+
guidance.
|
|
74
|
+
|
|
75
|
+
## 7. Three things that are NOT like the web UI Kit
|
|
76
|
+
|
|
77
|
+
Read these before writing any Swift, or you will carry React habits across and they will compile but not work.
|
|
78
|
+
1. **The API is SETTER-based, not prop-based.** `view.set(user: user)`, `view.set(controller: self)` — chained, returning `Self`. There are no props.
|
|
79
|
+
2. **There is NO composite/all-in-one component.** `CometChatMessages`, `CometChatConversationsWithMessages` and friends are **v4** and do not exist in v5 — never emit them, in any file. You compose the chat screen from three components. (Some v5 doc pages still showed them; that is tracked as IOS-DOCS-001 and corrected upstream.)
|
|
80
|
+
3. **The default UX is a NAVIGATION STACK**, not side-by-side panes. The list pushes the chat screen. There is nothing to "collapse on mobile" — iOS is one-pane by construction.
|
|
81
|
+
|
|
82
|
+
## 8. Kit components are VIEW CONTROLLERS, not views
|
|
83
|
+
|
|
84
|
+
`CometChatConversations`, `CometChatMessageHeader`, `CometChatMessageList`,
|
|
85
|
+
`CometChatCompactMessageComposer`, `CometChatGroups`, `CometChatUsers`, `CometChatCallLogs` — every
|
|
86
|
+
one is a `UIViewController`. The names read like views, and `addSubview` + Auto Layout is the
|
|
87
|
+
reflex, but it does not compile:
|
|
88
|
+
|
|
89
|
+
```
|
|
90
|
+
error: value of type 'CometChatConversations' has no member 'translatesAutoresizingMaskIntoConstraints'
|
|
91
|
+
error: cannot convert value of type 'CometChatConversations' to expected argument type 'UIView'
|
|
92
|
+
error: value of type 'CometChatConversations' has no member 'topAnchor'
|
|
93
|
+
```
|
|
94
|
+
|
|
95
|
+
**Push or present it** (see the core skill's navigation stack), or, to place it inside a screen you
|
|
96
|
+
own, **embed it as a child view controller** — never `addSubview(component)`:
|
|
97
|
+
|
|
98
|
+
```swift
|
|
99
|
+
let conversations = CometChatConversations()
|
|
100
|
+
addChild(conversations)
|
|
101
|
+
conversations.view.translatesAutoresizingMaskIntoConstraints = false
|
|
102
|
+
container.addSubview(conversations.view) // the .view, not the component
|
|
103
|
+
NSLayoutConstraint.activate([
|
|
104
|
+
conversations.view.topAnchor.constraint(equalTo: container.topAnchor),
|
|
105
|
+
conversations.view.leadingAnchor.constraint(equalTo: container.leadingAnchor),
|
|
106
|
+
conversations.view.trailingAnchor.constraint(equalTo: container.trailingAnchor),
|
|
107
|
+
conversations.view.bottomAnchor.constraint(equalTo: container.bottomAnchor),
|
|
108
|
+
])
|
|
109
|
+
conversations.didMove(toParent: self) // omitting this breaks appearance callbacks
|
|
110
|
+
```
|
|
111
|
+
|
|
112
|
+
Constrain `component.view`; `addChild` before adding the view and `didMove(toParent:)` after, or
|
|
113
|
+
the child never receives `viewWillAppear`/`viewDidAppear` and its data never loads.
|
|
@@ -0,0 +1,124 @@
|
|
|
1
|
+
# docs-map — CometChat iOS v5: intent → the exact docs page to fetch
|
|
2
|
+
|
|
3
|
+
## Reaching docs — PREFER the CometChat docs MCP; fetch is the fallback
|
|
4
|
+
The canonical doc channel is the **first-party CometChat docs MCP** — tools `search_cometchat_docs`,
|
|
5
|
+
`fetch_cometchat_doc_page`, and `get_cometchat_implementation_bundle`. **If those tools are connected,
|
|
6
|
+
use them instead of a raw web fetch:**
|
|
7
|
+
- **Find the page** → `search_cometchat_docs(query, version?)` — replaces browsing the scoped `llms-*` index.
|
|
8
|
+
- **Read the page** → `fetch_cometchat_doc_page(path)` — pass the SAME `<path>` the tables below list
|
|
9
|
+
(the conversations page path for your platform); the MCP resolves the `.md` twin and returns raw Markdown.
|
|
10
|
+
A full `https://…/docs/<path>` URL also works.
|
|
11
|
+
- **A whole feature/recipe** → `get_cometchat_implementation_bundle(...)` is **NON-AUTHORITATIVE** — curated STATIC recipes that can lag the live docs (verified stale vs v7: e.g. `CometChatConversationsWithMessages`, `css-variables.css`). Treat any bundle as a hint only: RECONCILE it against the `fetch_cometchat_doc_page` result + the pack's hardening; never emit bundle code verbatim.
|
|
12
|
+
|
|
13
|
+
The MCP reads whatever docs environment it is pointed at (production by default; a preview when repointed),
|
|
14
|
+
so it also carries the environment-swap concern below — no hardcoded host on the skill side.
|
|
15
|
+
|
|
16
|
+
**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`/`SDK_DOCS_BASE` (defined next).
|
|
17
|
+
Either way the `<path>` catalog in this file is the source of truth for WHICH page — MCP-vs-fetch is only HOW.
|
|
18
|
+
|
|
19
|
+
## DOCS_BASE — the fetch FALLBACK entry point (⚠️ SWAP HERE to change environments)
|
|
20
|
+
```
|
|
21
|
+
DOCS_BASE = https://www.cometchat.com/docs
|
|
22
|
+
SDK_DOCS_BASE = https://www.cometchat.com/docs
|
|
23
|
+
```
|
|
24
|
+
> **Fetch rule:** always build a URL as `DOCS_BASE` + the path shown, then append `.md`.
|
|
25
|
+
> Never hardcode a host anywhere else; **never** read the kit's `.swiftinterface`, and never
|
|
26
|
+
> answer API from memory.
|
|
27
|
+
>
|
|
28
|
+
> **Docs note (`DOCS-BACKLOG.md`):** the v4 composite components (`*WithMessages`) do not exist in
|
|
29
|
+
> 5.1.22. The live pages now say so (`conversations.md` states there is no composite; `*WithMessages`
|
|
30
|
+
> survives only on `upgrading-from-v4`, correctly as the v4 "before" side). Still: verify every symbol
|
|
31
|
+
> against `catalogs/ios-v5.json` before emitting — the catalog is the ground truth, not the docs.
|
|
32
|
+
|
|
33
|
+
## The convention
|
|
34
|
+
`DOCS_BASE` + `<path>` + `.md` → raw Markdown (verbatim Swift + an "AI Integration Quick Reference"
|
|
35
|
+
block: component, package, props, callbacks).
|
|
36
|
+
```
|
|
37
|
+
Fetch: {DOCS_BASE}/ui-kit/ios/conversations.md
|
|
38
|
+
```
|
|
39
|
+
Fallback order: `.md` twin → if it 404s, the same URL **without** `.md` (HTML) → **never** the
|
|
40
|
+
`.swiftinterface`, never memory.
|
|
41
|
+
|
|
42
|
+
## Scoped iOS v5 index
|
|
43
|
+
```
|
|
44
|
+
{DOCS_BASE}/ui-kit/ios/llms-ios-v5.md
|
|
45
|
+
```
|
|
46
|
+
> Covers all 51 iOS UI Kit v5 pages, and its **"Task guides (recipes)"** section is the source for
|
|
47
|
+
> the guide list below. Prefer this index over the site-wide `{DOCS_BASE}/llms.txt` (large; last
|
|
48
|
+
> resort). The twin of React's `llms-react-v7.md` and Angular's `llms-angular-v5.md`.
|
|
49
|
+
> If this path 404s, fall back to the trigger table below.
|
|
50
|
+
|
|
51
|
+
## SDK docs — the FALLBACK reference (a feature the UI Kit has NO component for)
|
|
52
|
+
The rule of the pack: **for every feature, first check whether the UI Kit has a component for it**
|
|
53
|
+
(the table below + `catalogs/ios-v5.json`). **If it does — USE it. If it does NOT** (AI agents,
|
|
54
|
+
campaigns, moderation, add-members, transient messages, low-level presence, webhooks) **— drop to the
|
|
55
|
+
Chat SDK and call its method directly.** The SDK is already linked under the kit. Look the method up —
|
|
56
|
+
never guess:
|
|
57
|
+
- **SDK index:** prefer the scoped `{SDK_DOCS_BASE}/sdk/ios/llms-ios-v4.md` — it routes every iOS
|
|
58
|
+
Chat SDK v4 page by intent. If it 404s, fall back to `{SDK_DOCS_BASE}/sdk/ios/overview.md` and
|
|
59
|
+
the page for the area.
|
|
60
|
+
- **Convention:** `{SDK_DOCS_BASE}/sdk/ios/<page>` + `.md`. Each page opens with an **"AI Integration
|
|
61
|
+
Quick Reference"** accordion (package · import · key methods) — read that FIRST.
|
|
62
|
+
- **Worked example (the kit ships no component):** adding group members →
|
|
63
|
+
`{SDK_DOCS_BASE}/sdk/ios/group-add-members.md` →
|
|
64
|
+
`CometChat.addMembersToGroup(guid:groupMembers:bannedUIDs:onSuccess:onError:)`, driven from a
|
|
65
|
+
`CometChatUsers` picker in `selectionMode`.
|
|
66
|
+
|
|
67
|
+
## Don't fetch the hot path — it's baked
|
|
68
|
+
Install, the exact version trio, `init → login → render`, the golden-path composition and its five
|
|
69
|
+
layout rules are BAKED in `cometchat-ios-core`. Fetch ONLY for exhaustive API, long-tail components,
|
|
70
|
+
theming tokens, or feature enablement.
|
|
71
|
+
|
|
72
|
+
## The 80% trigger table (URL = `{DOCS_BASE}` + path, then append `.md`)
|
|
73
|
+
| Intent | Path (append `.md`) |
|
|
74
|
+
|---|---|
|
|
75
|
+
| install / init / login / permissions | `/ui-kit/ios/getting-started` |
|
|
76
|
+
| conversation list → chat screen (THE core recipe) | `/ui-kit/ios/ios-conversation` |
|
|
77
|
+
| 1:1 or group chat from a user/group list | `/ui-kit/ios/ios-one-to-one-chat` |
|
|
78
|
+
| tab-based app | `/ui-kit/ios/ios-tab-based-chat` |
|
|
79
|
+
| conversation list (full API) | `/ui-kit/ios/conversations` |
|
|
80
|
+
| message list · composer · header | `/ui-kit/ios/message-list` · `message-composer` · `message-header` |
|
|
81
|
+
| users · groups · group members | `/ui-kit/ios/users` · `groups` · `group-members` |
|
|
82
|
+
| threads | `/ui-kit/ios/threaded-messages-header` |
|
|
83
|
+
| search | `/ui-kit/ios/search` |
|
|
84
|
+
| call buttons · incoming · outgoing · ongoing · logs | `/ui-kit/ios/call-buttons` · `incoming-call` · `outgoing-call` · `ongoing-call` · `call-logs` |
|
|
85
|
+
| calling setup | `/ui-kit/ios/calling-integration` |
|
|
86
|
+
| AI features / assistant history | `/ui-kit/ios/ai-features` · `/ui-kit/ios/ai-assistant-chat-history` |
|
|
87
|
+
| theming: tokens · colors · per-component · bubbles | `/ui-kit/ios/theme-introduction` · `color-resources` · `component-styling` · `message-bubble-styling` |
|
|
88
|
+
| localization · sounds | `/ui-kit/ios/localize` · `/ui-kit/ios/sound-manager` |
|
|
89
|
+
| formatters (mentions · shortcuts) | `/ui-kit/ios/mentions-formatter-guide` · `shortcut-formatter-guide` |
|
|
90
|
+
| message templates | `/ui-kit/ios/message-template` |
|
|
91
|
+
| events | `/ui-kit/ios/events` |
|
|
92
|
+
| extensions (dashboard-gated) | `/ui-kit/ios/extensions` |
|
|
93
|
+
| full component list | `/ui-kit/ios/components-overview` |
|
|
94
|
+
| v4 → v5 upgrade | `/ui-kit/ios/upgrading-from-v4` |
|
|
95
|
+
| push notifications | `/notifications/push-overview` |
|
|
96
|
+
|
|
97
|
+
## Task guides (recipes) — for a whole FEATURE, BUILD FROM the guide + COMPARE against it
|
|
98
|
+
For a TASK ask (a whole capability, not one component's API), the docs ship **end-to-end guides**. iOS
|
|
99
|
+
has **nine** — more than React:
|
|
100
|
+
`guide-overview` · `guide-new-chat` · `guide-group-chat` · `guide-group-ownership` ·
|
|
101
|
+
`guide-threaded-messages` · `guide-message-privately` · `guide-block-unblock-user` ·
|
|
102
|
+
`guide-call-log-details` · `guide-ai-agent`
|
|
103
|
+
(at `{DOCS_BASE}/ui-kit/ios/<guide>.md`). Use the matching guide **two ways**:
|
|
104
|
+
1. **As the implementation SOURCE** — build the feature from the official recipe, adapted
|
|
105
|
+
**ADDITIVELY** into the user's app (reuse their navigation, auth and layout; never drop in the
|
|
106
|
+
guide's standalone shell).
|
|
107
|
+
2. **As a COMPLETENESS check** — after you emit, DIFF your implementation against the guide: every
|
|
108
|
+
component, call and affordance it shows. Fill any gap.
|
|
109
|
+
|
|
110
|
+
> **Then apply the baked HARDENING DELTAS — the guide is the BASELINE, not the whole truth.**
|
|
111
|
+
> The guides do not carry the runtime lessons: `set(controller:)` on every component or its
|
|
112
|
+
> affordances are inert; the composer pinned to the **safe-area bottom** (NOT `keyboardLayoutGuide` — the kit composer already handles the keyboard, and double-pinning collapses the list)
|
|
113
|
+
> the recipe shows; explicit vertical division or the list collapses; the host nav bar hidden or you
|
|
114
|
+
> get two headers; and the thread trap — `CometChatThreadedMessageHeader` takes
|
|
115
|
+
> `set(parentMessage:)`; the LIST takes `set(user:parentMessage:withParent:)` (parent in the same
|
|
116
|
+
> call as the target); the composer takes `set(user:)` + `set(parentMessageId:)`.
|
|
117
|
+
|
|
118
|
+
**No matching guide? → build from this skill's baked golden path** and fetch each component's `.md`
|
|
119
|
+
twin for exact API. The guide is an enhancement when present, never a hard dependency.
|
|
120
|
+
|
|
121
|
+
## Not in the table?
|
|
122
|
+
Fetch the page from the trigger table nearest your intent, or the site-wide `{DOCS_BASE}/llms.txt`.
|
|
123
|
+
Never guess a path; never read the `.swiftinterface`; never answer API from memory. If a symbol is not
|
|
124
|
+
in `catalogs/ios-v5.json`, it does not exist in v5 — do not emit it, whatever a page says.
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
# Install — Swift Package Manager
|
|
2
|
+
|
|
3
|
+
The full install detail. The entry keeps only the three pinned versions and the SPM-only rule.
|
|
4
|
+
|
|
5
|
+
**Use SPM. Do not use CocoaPods and do not offer it as an option**, even if the user's project already has a `Podfile`: CocoaPods distribution is being wound down and its spec repo is going read-only, so a Podfile-based integration cannot receive future releases. A project already on CocoaPods should be moved to SPM as part of adding CometChat.
|
|
6
|
+
|
|
7
|
+
Add these three packages. The kit is a **prebuilt binary compiled against ONE Chat SDK version** and SPM does not resolve that transitively, so the versions are **exact, not floors** — overriding either side is unsupported and either fails to build or crashes at runtime.
|
|
8
|
+
|
|
9
|
+
| Package | Repository | Version |
|
|
10
|
+
|---|---|---|
|
|
11
|
+
| `CometChatUIKitSwift` | `https://github.com/cometchat/cometchat-uikit-ios` | **exactly 5.1.22** |
|
|
12
|
+
| `CometChatSDK` | `https://github.com/cometchat/chat-sdk-ios` | **exactly 4.1.7** |
|
|
13
|
+
| `CometChatCallsSDK` | `https://github.com/cometchat/calls-sdk-ios` | **exactly 5.0.3** |
|
|
14
|
+
|
|
15
|
+
> **All three must be added BY HAND — including the Calls SDK, and including for a chat-only app.**
|
|
16
|
+
> This is a **packaging regression in 5.1.19**, not a design requirement, so treat it as a workaround with a shelf life rather than a permanent rule:
|
|
17
|
+
> - 5.1.19's compiled `.swiftinterface` carries `import CometChatCallsSDK`, and Swift requires every import in an interface to be resolvable — so the module must be present to compile **any** integration, even one with no calling.
|
|
18
|
+
> - Nothing in the kit's **public API actually uses a CallsSDK type** (0 references), and **5.1.16 and 5.1.18 have no such import at all**. It appears in 5.1.19 only. That makes it an internal import leaking into the public interface, not an intentional dependency.
|
|
19
|
+
> - The kit's own `Package.swift` declares **neither** `CometChatSDK` nor `CometChatCallsSDK`, so SPM cannot supply them. Omit the Calls SDK and the build fails with `unable to resolve module dependency: 'CometChatCallsSDK'`.
|
|
20
|
+
>
|
|
21
|
+
> If a future release drops that import, the Calls SDK goes back to being calls-only and belongs to `cometchat-ios-calls`. Re-check the interface before assuming this still applies.
|
|
22
|
+
|
|
23
|
+
Deployment target **iOS 15.1+**. Add the usage descriptions the kit's media features need to `Info.plist` (camera, microphone, photo library) — see `references/setup-credentials.md`.
|
|
@@ -0,0 +1,219 @@
|
|
|
1
|
+
# The iOS sizing standard — why each rule exists
|
|
2
|
+
|
|
3
|
+
> Every rule below was measured on a simulator by the native review harness (iPhone 16 / iOS
|
|
4
|
+
> 18.2, kit 5.1.22), not reasoned across from the web UI Kit. Where a claim is unverified, it
|
|
5
|
+
> says so.
|
|
6
|
+
|
|
7
|
+
v5 ships **no composite chat component**. The host composes `CometChatMessageHeader` +
|
|
8
|
+
`CometChatMessageList` + `CometChatCompactMessageComposer` and owns the layout. That means the sizing
|
|
9
|
+
below is YOUR responsibility — the kit will not correct it, and every failure here is a RUNTIME
|
|
10
|
+
failure that compiles perfectly.
|
|
11
|
+
|
|
12
|
+
## Rule 0 — a component is a `UIViewController`, so constrain `component.view`
|
|
13
|
+
|
|
14
|
+
Every kit component (`CometChatConversations`, `CometChatMessageList`, `CometChatGroups`, …)
|
|
15
|
+
subclasses `UIViewController`, **not** `UIView`. Treating one as a view does not compile:
|
|
16
|
+
|
|
17
|
+
```
|
|
18
|
+
error: value of type 'CometChatConversations' has no member 'translatesAutoresizingMaskIntoConstraints'
|
|
19
|
+
error: cannot convert value of type 'CometChatConversations' to expected argument type 'UIView'
|
|
20
|
+
error: value of type 'CometChatConversations' has no member 'topAnchor'
|
|
21
|
+
```
|
|
22
|
+
|
|
23
|
+
Push or present it, or — to place it inside a screen you own — embed it as a child view
|
|
24
|
+
controller and constrain its `.view`:
|
|
25
|
+
|
|
26
|
+
```swift
|
|
27
|
+
let conversations = CometChatConversations()
|
|
28
|
+
addChild(conversations) // BEFORE adding the view
|
|
29
|
+
conversations.view.translatesAutoresizingMaskIntoConstraints = false
|
|
30
|
+
container.addSubview(conversations.view) // the .view, not the component
|
|
31
|
+
NSLayoutConstraint.activate([
|
|
32
|
+
conversations.view.topAnchor.constraint(equalTo: container.topAnchor),
|
|
33
|
+
conversations.view.leadingAnchor.constraint(equalTo: container.leadingAnchor),
|
|
34
|
+
conversations.view.trailingAnchor.constraint(equalTo: container.trailingAnchor),
|
|
35
|
+
conversations.view.bottomAnchor.constraint(equalTo: container.bottomAnchor),
|
|
36
|
+
])
|
|
37
|
+
conversations.didMove(toParent: self) // AFTER; omitting it breaks
|
|
38
|
+
// viewWillAppear/viewDidAppear,
|
|
39
|
+
// so the child never loads data
|
|
40
|
+
```
|
|
41
|
+
|
|
42
|
+
Unlike the rules below, this one fails at COMPILE time — which is why it belongs first: the
|
|
43
|
+
sizing rules only matter once the thing builds. Full treatment in `references/anti-patterns.md`.
|
|
44
|
+
|
|
45
|
+
## Rule 1 — exactly one target
|
|
46
|
+
|
|
47
|
+
`conversationWith` is a `User` **or** a `Group`, never both. Set one:
|
|
48
|
+
|
|
49
|
+
```swift
|
|
50
|
+
if let user { list.set(user: user) } else if let group { list.set(group: group) }
|
|
51
|
+
```
|
|
52
|
+
|
|
53
|
+
Setting both is not a compile error; it produces a surface bound to the wrong conversation.
|
|
54
|
+
|
|
55
|
+
## Rule 2 — `set(controller:)` is REQUIRED. Omitting it CRASHES the app.
|
|
56
|
+
|
|
57
|
+
Call `set(controller: self)` on the header, the list and the composer. It hands the kit a
|
|
58
|
+
controller to present its OWN sub-screens from — the action sheet behind a long-press, the media
|
|
59
|
+
picker, the details screen.
|
|
60
|
+
|
|
61
|
+
**Measured: omitting it is not a degradation, it is a crash.** Long-press any message in a surface
|
|
62
|
+
built without `set(controller:)` and the app dies:
|
|
63
|
+
|
|
64
|
+
```
|
|
65
|
+
EXC_BREAKPOINT (SIGTRAP) — nil force-unwrap
|
|
66
|
+
MessagePopupViewController.buildUI()
|
|
67
|
+
← CometChatMessageList.onCellLongPressGestureRecognized
|
|
68
|
+
← CometChatMessageBubble.onLongPressEnded
|
|
69
|
+
```
|
|
70
|
+
|
|
71
|
+
The kit force-unwraps the presenting controller it was never given. There is no error, no no-op,
|
|
72
|
+
no degraded mode — the process terminates on a gesture any user will perform within minutes.
|
|
73
|
+
|
|
74
|
+
**An earlier version of this file said the opposite.** It reported that omitting `set(controller:)`
|
|
75
|
+
"affects neither rendering nor primary navigation" and called the kit's presented sub-screens
|
|
76
|
+
"genuinely untested" — because our own gate only tapped, and a tap never reaches this path. The
|
|
77
|
+
sub-screens were testable all along; the answer is a crash. `Fixtures/broken-no-controller` scored
|
|
78
|
+
WORKING for the entire life of this project while modelling an app that dies on first long-press.
|
|
79
|
+
The gate now long-presses and detects process death, so the fixture fails as it always should have.
|
|
80
|
+
|
|
81
|
+
The lesson is the one this pack keeps relearning: an untested path reported as "probably fine" is a
|
|
82
|
+
claim, not a measurement. Say "untested" and stop there, or test it.
|
|
83
|
+
|
|
84
|
+
## Rule 3 — pin to the safe area, top AND bottom
|
|
85
|
+
|
|
86
|
+
```swift
|
|
87
|
+
headerView.topAnchor.constraint(equalTo: view.safeAreaLayoutGuide.topAnchor)
|
|
88
|
+
composerView.bottomAnchor.constraint(equalTo: view.safeAreaLayoutGuide.bottomAnchor)
|
|
89
|
+
```
|
|
90
|
+
|
|
91
|
+
Both anchors come straight from the published recipe. **Do not pin the composer to
|
|
92
|
+
`view.keyboardLayoutGuide.topAnchor`.** `CometChatCompactMessageComposer` does its own keyboard
|
|
93
|
+
adjustment, so that double-applies the offset. Measured on iPhone 16 / iOS 18.2 with the keyboard
|
|
94
|
+
raised:
|
|
95
|
+
|
|
96
|
+
<!-- Provenance: the table below was measured against `CometChatMessageComposer`, which the golden
|
|
97
|
+
path used before it moved to the compact composer. The rule carries over because the compact
|
|
98
|
+
composer self-adjusts the same way — it registers
|
|
99
|
+
`UIResponder.keyboardWillChangeFrameNotification` and offsets itself (source-verified on
|
|
100
|
+
master-v5). The numbers are NOT a re-measurement of the compact composer; re-measure before
|
|
101
|
+
quoting them as such. -->
|
|
102
|
+
|
|
103
|
+
|
|
104
|
+
| | safe-area pin (correct) | keyboardLayoutGuide pin |
|
|
105
|
+
|---|---|---|
|
|
106
|
+
| message list | `(0, 109, 393, 267)` — survives | **height 0 — gone** |
|
|
107
|
+
| composer internal stack | on the keyboard top | **`(0, -249, 393, 0)`** |
|
|
108
|
+
|
|
109
|
+
The user taps to type and the entire conversation disappears, along with the text field they were
|
|
110
|
+
about to type into. It compiles, and it looks perfect until that first tap.
|
|
111
|
+
|
|
112
|
+
This skill previously taught the keyboardLayoutGuide pin as a "hardening delta" over the docs, and
|
|
113
|
+
asserted it was simulator-verified. That assertion was false: no gate raised the keyboard, so
|
|
114
|
+
nothing could contradict it. The gate now taps the composer and grades whether a list survives
|
|
115
|
+
above the keyboard (`Fixtures/broken-keyboard-double-pin` is the standing regression case).
|
|
116
|
+
|
|
117
|
+
## Rule 4 — divide the vertical space EXPLICITLY
|
|
118
|
+
|
|
119
|
+
The list must be pinned top and bottom so it scrolls internally instead of growing its parent:
|
|
120
|
+
|
|
121
|
+
```swift
|
|
122
|
+
messageListView.topAnchor.constraint(equalTo: headerView.bottomAnchor),
|
|
123
|
+
messageListView.bottomAnchor.constraint(equalTo: composerView.topAnchor),
|
|
124
|
+
```
|
|
125
|
+
|
|
126
|
+
Without both, the surface collapses to its intrinsic content height. **This is the defect the
|
|
127
|
+
harness catches most often**: a collapsed pane measured 10% of screen height where a correct one
|
|
128
|
+
measures ~90%. It compiles, it mounts, and a launch-only screenshot of the conversation list
|
|
129
|
+
looks perfectly fine — the collapse is one tap away, on the pushed screen.
|
|
130
|
+
|
|
131
|
+
## Rule 5 — one navigation bar, not two
|
|
132
|
+
|
|
133
|
+
`CometChatMessageHeader` carries its own title and back control. Left alone, `UINavigationController`
|
|
134
|
+
adds a second bar above it:
|
|
135
|
+
|
|
136
|
+
```swift
|
|
137
|
+
override func viewDidLoad() {
|
|
138
|
+
super.viewDidLoad()
|
|
139
|
+
navigationController?.setNavigationBarHidden(true, animated: false)
|
|
140
|
+
}
|
|
141
|
+
override func viewWillDisappear(_ animated: Bool) {
|
|
142
|
+
super.viewWillDisappear(animated)
|
|
143
|
+
navigationController?.setNavigationBarHidden(false, animated: true) // restore for the list
|
|
144
|
+
}
|
|
145
|
+
```
|
|
146
|
+
|
|
147
|
+
Hide it on the message screen only, and restore it on the way out — hiding it globally strips
|
|
148
|
+
the conversation list's own bar.
|
|
149
|
+
|
|
150
|
+
## Navigation, not panes
|
|
151
|
+
|
|
152
|
+
The web kit's default is side-by-side. iOS composes by NAVIGATION: the conversation list
|
|
153
|
+
pushes the message pane. Wire selection or the list is a dead end:
|
|
154
|
+
|
|
155
|
+
```swift
|
|
156
|
+
conversations.set(onItemClick: { [weak nav] conversation, _ in
|
|
157
|
+
let vc = MessagesVC()
|
|
158
|
+
vc.user = conversation.conversationWith as? CometChatSDK.User
|
|
159
|
+
vc.group = conversation.conversationWith as? CometChatSDK.Group
|
|
160
|
+
nav?.pushViewController(vc, animated: true)
|
|
161
|
+
})
|
|
162
|
+
```
|
|
163
|
+
|
|
164
|
+
## Surface errors
|
|
165
|
+
|
|
166
|
+
A failed load and an empty account render the SAME empty list. Wire `set(onError:)` or a
|
|
167
|
+
failure is indistinguishable from "no conversations yet".
|
|
168
|
+
|
|
169
|
+
### Own the bar centrally — the per-screen recipe does not survive real flows
|
|
170
|
+
|
|
171
|
+
The published recipe (hide in `viewDidLoad`, restore in `viewWillDisappear`) works for a single
|
|
172
|
+
push and breaks in three flows we measured:
|
|
173
|
+
|
|
174
|
+
| flow | result |
|
|
175
|
+
|---|---|
|
|
176
|
+
| activate the list's search field, then open a conversation | host bar returns |
|
|
177
|
+
| chat → thread | host bar returns — and on the THREAD screen that is what you want: it has no back control of its own (see below) |
|
|
178
|
+
| pop back thread → chat | chat screen ends with two headers |
|
|
179
|
+
|
|
180
|
+
Measured on the search flow: `(0,109,393,579)` becomes `(0,199,393,488)` — two headers, 91pt lost.
|
|
181
|
+
|
|
182
|
+
**Why the obvious fixes fail.** `viewDidLoad` runs once, so it cannot correct a later transition.
|
|
183
|
+
`viewWillAppear` cannot either: the INCOMING screen's `viewWillAppear` runs BEFORE the outgoing
|
|
184
|
+
screen's `viewWillDisappear`, so the restore lands last and clobbers the hide. `isMovingFromParent`
|
|
185
|
+
handles the pushes but not the pop-back.
|
|
186
|
+
|
|
187
|
+
**What works, measured, with no flash** — decide the bar on the navigation controller:
|
|
188
|
+
|
|
189
|
+
```swift
|
|
190
|
+
final class NavBarCoordinator: NSObject, UINavigationControllerDelegate {
|
|
191
|
+
// Hide the bar ONLY on screens whose kit header has its own back control (your composed chat
|
|
192
|
+
// screen). Do NOT hide it on a pushed thread screen: CometChatThreadedMessageHeader ships NO
|
|
193
|
+
// back/close of its own (measured — its public surface is hideReceipt/hideBubbleHeader/
|
|
194
|
+
// hideReplyCount/hideReplyCountBar/hideAvatar plus setters), and edge-swipe does not pop it.
|
|
195
|
+
// Hiding the host bar there removes the ONLY exit and strands the user. Same rule for any
|
|
196
|
+
// pushed kit list (CometChatGroupMembers etc.): keep the host bar, hide the KIT's — see the
|
|
197
|
+
// placement skill.
|
|
198
|
+
private func shouldHide(_ vc: UIViewController) -> Bool { vc is MessagesVC } // your chat screens ONLY
|
|
199
|
+
|
|
200
|
+
func navigationController(_ nav: UINavigationController, willShow vc: UIViewController, animated: Bool) {
|
|
201
|
+
nav.setNavigationBarHidden(shouldHide(vc), animated: animated)
|
|
202
|
+
}
|
|
203
|
+
func navigationController(_ nav: UINavigationController, didShow vc: UIViewController, animated: Bool) {
|
|
204
|
+
let want = shouldHide(vc) // re-assert ONLY if clobbered, so no flash
|
|
205
|
+
if nav.isNavigationBarHidden != want { nav.setNavigationBarHidden(want, animated: false) }
|
|
206
|
+
}
|
|
207
|
+
}
|
|
208
|
+
```
|
|
209
|
+
|
|
210
|
+
Hold the coordinator somewhere that outlives the push — `UINavigationController.delegate` is weak.
|
|
211
|
+
With it in place the message pane measures `(0,109,393,579)` through all four flows.
|
|
212
|
+
|
|
213
|
+
**Note on how this was found.** An earlier pass reported the defect with `CometChatSearch` as the
|
|
214
|
+
trigger; a fixture built around presenting and dismissing `CometChatSearch` measured clean every
|
|
215
|
+
time, and this file recorded it as unreproduced. The real trigger is activating the list's OWN
|
|
216
|
+
`UISearchController` — which is simply how a user reaches search, so the original report was right
|
|
217
|
+
about the symptom and wrong about the cause. `Fixtures/broken-navbar-after-search` is the standing
|
|
218
|
+
regression case, and the gate now asserts `navBars == 0` on the message pane, because the collapse
|
|
219
|
+
ratio cannot see this (488/852 = 57%, over the 50% minimum).
|