{"id":"a0bba5c1-160b-4c1e-a106-85a531ecd5ac","shortId":"ekESZG","kind":"skill","title":"cometchat-ios-troubleshooting","tagline":"Diagnose and fix common CometChat iOS integration issues — build errors, runtime errors, and debugging techniques.","description":"## Purpose\n\nThis skill helps diagnose and fix common issues when integrating CometChat iOS UI Kit. It covers build errors, runtime errors, and debugging techniques.\n\n---\n\n## 1. Build Errors\n\n### \"No such module 'CometChatUIKitSwift'\"\n\n**Cause:** SDK not installed or not linked properly.\n\n**Solutions:**\n\n**CocoaPods:**\n```bash\n# Clean and reinstall\ncd /path/to/your/project\nrm -rf Pods Podfile.lock\npod install --repo-update\n\n# Open workspace (not project!)\nopen YourApp.xcworkspace\n```\n\n**Swift Package Manager:**\n1. In Xcode, go to File → Packages → Reset Package Caches\n2. File → Packages → Resolve Package Versions\n3. Clean build folder: Cmd + Shift + K\n4. Build again\n\n**Check Podfile:**\n```ruby\nplatform :ios, '13.0'\nuse_frameworks!\n\ntarget 'YourApp' do\n  pod 'CometChatUIKitSwift', '~> 5.1'\nend\n```\n\n---\n\n### \"No such module 'CometChatSDK'\"\n\n**Cause:** Core SDK not installed alongside UI Kit.\n\n**Solution:** The UI Kit should include the SDK automatically. If not:\n\n```ruby\n# Podfile\npod 'CometChatUIKitSwift', '~> 5.1'\npod 'CometChatSDK', '~> 4.0'  # Add explicitly if needed\n```\n\n---\n\n### \"No such module 'CometChatCallsSDK'\"\n\n**Cause:** Calls SDK not installed but code references it.\n\n**Solutions:**\n\n1. **If you need calls:**\n```ruby\n# Podfile\npod 'CometChatCallsSDK', '~> 4.0'\n```\n\n2. **If you don't need calls:**\nWrap call-related code in conditional compilation:\n```swift\n#if canImport(CometChatCallsSDK)\nimport CometChatCallsSDK\n// Call-related code here\n#endif\n```\n\n---\n\n### \"Value of type 'CometChatException' has no member 'localizedDescription'\"\n\n**Cause:** Using wrong property for error description.\n\n**Solution:** Use `errorDescription` instead of `localizedDescription`:\n\n```swift\ncase .onError(let error):\n    print(error.errorDescription)\n    print(error.errorCode)\n```\n\n`CometChatException` has:\n- `errorDescription` — human-readable error message\n- `errorCode` — error code string\n- `details` — optional dictionary with additional info\n\n---\n\n### \"'CometChatException' is not convertible to 'any Error'\"\n\n**Cause:** Trying to use `CometChatException` with Swift's `Result<T, Error>` type.\n\n**Solution:** `CometChatException` does NOT conform to Swift's `Error` protocol. Don't use `Result<T, Error>` with CometChat callbacks. Instead, use direct callbacks:\n\n```swift\n// ❌ WRONG - Don't use Result<T, Error>\nfunc login(completion: @escaping (Result<User, Error>) -> Void) {\n    CometChatUIKit.login(uid: uid) { result in\n        switch result {\n        case .success(let user):\n            completion(.success(user))\n        case .onError(let error):\n            completion(.failure(error))  // ERROR: CometChatException is not Error\n        }\n    }\n}\n\n// ✅ CORRECT - Use CometChatException directly\nfunc login(completion: @escaping (User?, CometChatException?) -> Void) {\n    CometChatUIKit.login(uid: uid) { result in\n        switch result {\n        case .success(let user):\n            completion(user, nil)\n        case .onError(let error):\n            completion(nil, error)\n        @unknown default:\n            completion(nil, nil)\n        }\n    }\n}\n```\n\n---\n\n### \"Cannot find 'CometChatConversationsWithMessages' in scope\" or \"Cannot find 'CometChatMessages' in scope\"\n\n**Cause:** Neither class exists in the kit. They look like \"pre-built composite UIViewControllers\" but are NOT exported from `CometChatUIKitSwift`. Older docs and AI-generated guides sometimes claim they exist.\n\n**Solution:** Compose your own `MessagesVC` from the real building blocks (`CometChatMessageHeader` + `CometChatMessageList` + `CometChatMessageComposer`). The pattern is the same one the kit's sample app uses (`SampleApp/View Controllers/CometChat Components/MessagesVC.swift`).\n\n```swift\nimport CometChatUIKitSwift\nimport CometChatSDK\n\nlet conversations = CometChatConversations()\nlet navController = UINavigationController(rootViewController: conversations)\n\nconversations.set(onItemClick: { [weak navController] conversation, _ in\n    let messagesVC = MessagesVC()  // your own VC composing CometChatMessageHeader + List + Composer\n    if let group = conversation.conversationWith as? Group {\n        messagesVC.set(group: group)\n    } else if let user = conversation.conversationWith as? User {\n        messagesVC.set(user: user)\n    }\n    navController?.pushViewController(messagesVC, animated: true)\n})\n```\n\nSee `cometchat-ios-components` § 13 (\"Custom MessagesVC Implementation\") for the full `MessagesVC` source.\n\n---\n\n### \"Cannot find 'CometChatCallLogs' in scope\"\n\n**Cause:** `CometChatCallLogs` requires `CometChatCallsSDK` which is not installed.\n\n**Solutions:**\n\n1. **Install the Calls SDK:**\n```ruby\n# Podfile\npod 'CometChatCallsSDK', '~> 4.0'\n```\n\n2. **Or wrap in conditional compilation:**\n```swift\n#if canImport(CometChatCallsSDK)\nlet callLogs = CometChatCallLogs()\n#else\n// Show placeholder or hide calls tab\n#endif\n```\n\n---\n\n### \"Duplicate symbols\" or \"Multiple commands produce\"\n\n**Cause:** Conflicting dependencies or duplicate frameworks.\n\n**Solutions:**\n\n1. **Clean derived data:**\n```bash\nrm -rf ~/Library/Developer/Xcode/DerivedData\n```\n\n2. **Check for duplicate pods:**\n```bash\npod deintegrate\npod install\n```\n\n3. **Check Build Phases:**\n   - Go to Target → Build Phases → Link Binary With Libraries\n   - Remove any duplicate frameworks\n\n---\n\n### \"The iOS deployment target is set to X.X, but the range of supported deployment target versions is Y.Y to Z.Z\"\n\n**Cause:** Minimum iOS version mismatch.\n\n**Solution:**\n\n1. Update your project's deployment target to iOS 13.0 or higher\n2. Update Podfile:\n```ruby\nplatform :ios, '13.0'\n```\n\n3. Run:\n```bash\npod install\n```\n\n---\n\n### \"Sandbox: rsync.samba denied\"\n\n**Cause:** Xcode sandbox permission issue (common in Xcode 15+).\n\n**Solution:**\n\n1. Disable User Script Sandboxing in Build Settings:\n   - Select your app target\n   - Go to Build Settings\n   - Search for \"User Script Sandboxing\"\n   - Set **ENABLE_USER_SCRIPT_SANDBOXING** to **No**\n\n2. Or add to your `Podfile`:\n```ruby\npost_install do |installer|\n  installer.pods_project.targets.each do |target|\n    target.build_configurations.each do |config|\n      config.build_settings['ENABLE_USER_SCRIPT_SANDBOXING'] = 'NO'\n    end\n  end\nend\n```\n\n3. Then run:\n```bash\npod install\n```\n\n4. Clean and rebuild:\n```bash\nrm -rf ~/Library/Developer/Xcode/DerivedData\n```\n\n---\n\n### \"Framework not found\" during archive\n\n**Cause:** Framework search paths issue.\n\n**Solution:**\n\n1. Go to Target → Build Settings\n2. Search for \"Framework Search Paths\"\n3. Add: `$(inherited)` and `$(PROJECT_DIR)/Pods`\n4. Set \"Build Active Architecture Only\" to No for Release\n\n---\n\n## 2. Runtime Errors\n\n### \"CometChat is not initialized\"\n\n**Cause:** Trying to use CometChat before initialization completes.\n\n**Solution:**\n\n```swift\n// ❌ Wrong - using before init completes\nCometChatUIKit(uiKitSettings: settings) { _ in }\nlet conversations = CometChatConversations()  // Too early!\n\n// ✅ Correct - wait for completion\nCometChatUIKit(uiKitSettings: settings) { result in\n    switch result {\n    case .success:\n        DispatchQueue.main.async {\n            let conversations = CometChatConversations()\n            // Now safe to use\n        }\n    case .failure(let error):\n        print(\"Init failed: \\(error)\")\n    }\n}\n```\n\n---\n\n### \"Invalid App ID\" or \"App not found\"\n\n**Cause:** Wrong App ID or region.\n\n**Solutions:**\n\n1. Verify App ID in CometChat Dashboard\n2. Check region matches (us, eu, or in)\n3. Ensure no extra spaces in credentials\n\n```swift\nlet uiKitSettings = UIKitSettings()\n    .set(appID: \"YOUR_APP_ID\")  // No spaces!\n    .set(region: \"us\")           // Lowercase\n    .build()\n```\n\n---\n\n### \"Invalid Auth Key\"\n\n**Cause:** Wrong or expired Auth Key.\n\n**Solutions:**\n\n1. Get fresh Auth Key from Dashboard → API & Auth Keys\n2. Use the correct key type (Auth Key, not REST API Key)\n3. Check for copy/paste errors\n\n---\n\n### \"User not found\" or \"UID not found\"\n\n**Cause:** Trying to login with a UID that doesn't exist.\n\n**Solutions:**\n\n1. **Use pre-created test users:**\n   - `cometchat-uid-1` through `cometchat-uid-5`\n\n2. **Create user first:**\n```swift\nlet user = User(uid: \"new-user-123\", name: \"John Doe\")\nCometChatUIKit.create(user: user) { result in\n    switch result {\n    case .success(let user):\n        // Now login\n        CometChatUIKit.login(uid: user.uid ?? \"\") { _ in }\n    case .onError(let error):\n        print(\"Create failed: \\(error)\")\n    }\n}\n```\n\n---\n\n### \"Already logged in\"\n\n**Cause:** Calling login when user is already logged in.\n\n**Solution:**\n\n```swift\n// Check for existing session first\nif let currentUser = CometChatUIKit.getLoggedInUser() {\n    print(\"Already logged in as: \\(currentUser.name ?? \"\")\")\n    // Proceed to chat UI\n} else {\n    // Login\n    CometChatUIKit.login(uid: \"user-123\") { _ in }\n}\n```\n\n---\n\n### Blank/Empty Conversation List\n\n**Cause:** No conversations exist for the logged-in user.\n\n**Solutions:**\n\n1. **Send a test message:**\n   - Go to CometChat Dashboard → Users\n   - Select another user\n   - Send a message to your logged-in user\n\n2. **Check user is logged in:**\n```swift\nif let user = CometChatUIKit.getLoggedInUser() {\n    print(\"Logged in as: \\(user.uid ?? \"\")\")\n} else {\n    print(\"Not logged in!\")\n}\n```\n\n3. **Check for errors:**\n```swift\nlet conversations = CometChatConversations()\nconversations.onError = { error in\n    print(\"Error loading conversations: \\(error.errorDescription ?? \"\")\")\n}\nconversations.onEmpty = {\n    print(\"No conversations found\")\n}\n```\n\n---\n\n### Messages Not Sending\n\n**Cause:** Various issues with message sending.\n\n**Solutions:**\n\n1. **Check user/group is set:**\n```swift\nlet composer = CometChatMessageComposer()\ncomposer.set(user: user)  // Must be set!\n```\n\n2. **Check for errors:**\n```swift\ncomposer.onError = { error in\n    print(\"Composer error: \\(error.errorDescription ?? \"\")\")\n}\n```\n\n3. **Verify network connection:**\n```swift\nimport Network\n\nlet monitor = NWPathMonitor()\nmonitor.pathUpdateHandler = { path in\n    if path.status == .satisfied {\n        print(\"Connected\")\n    } else {\n        print(\"No connection\")\n    }\n}\nmonitor.start(queue: DispatchQueue.global())\n```\n\n---\n\n### Push Notifications Not Working\n\n**Cause:** Multiple possible issues.\n\n**Checklist:**\n\n1. **Physical device?** Push doesn't work on simulator\n\n2. **Permissions granted?**\n```swift\nUNUserNotificationCenter.current().getNotificationSettings { settings in\n    print(\"Authorization status: \\(settings.authorizationStatus.rawValue)\")\n}\n```\n\n3. **Token registered?**\n```swift\nfunc application(_ application: UIApplication, didRegisterForRemoteNotificationsWithDeviceToken deviceToken: Data) {\n    let token = deviceToken.map { String(format: \"%02.2hhx\", $0) }.joined()\n    print(\"APNs Token: \\(token)\")\n    \n    // Register with CometChat\n    CometChat.registerTokenForPushNotification(token: token, settings: [\"voip\": false]) { success in\n        print(\"Token registered: \\(success)\")\n    } onError: { error in\n        print(\"Token registration failed: \\(error?.errorDescription ?? \"\")\")\n    }\n}\n```\n\n4. **Certificate uploaded?** Check Dashboard → Notifications → Push Notifications\n\n5. **Correct environment?** Development vs Production certificate must match\n\n---\n\n### Calls Not Working\n\n**Cause:** Missing SDK or permissions.\n\n**Checklist:**\n\n1. **CometChatCallsSDK installed?**\n```ruby\npod 'CometChatCallsSDK', '~> 4.0'\n```\n\n2. **Permissions in Info.plist?**\n```xml\n<key>NSCameraUsageDescription</key>\n<string>Camera access for video calls</string>\n<key>NSMicrophoneUsageDescription</key>\n<string>Microphone access for calls</string>\n```\n\n3. **Background modes enabled?**\n   - Audio, AirPlay, and Picture in Picture\n   - Voice over IP\n\n4. **Testing on real device?** Calls don't work on simulator\n\n---\n\n### Memory Warnings / Crashes\n\n**Cause:** Memory leaks or retain cycles.\n\n**Solutions:**\n\n1. **Use weak references in closures:**\n```swift\nconversations.onItemClick = { [weak self] conversation, _ in\n    self?.openMessages(for: conversation)\n}\n```\n\n2. **Remove listeners when done:**\n```swift\noverride func viewWillDisappear(_ animated: Bool) {\n    super.viewWillDisappear(animated)\n    CometChatMessageEvents.removeListener(\"my-listener\")\n}\n```\n\n3. **Profile with Instruments:**\n   - Product → Profile → Leaks\n   - Look for CometChat-related leaks\n\n---\n\n### UI Not Updating\n\n**Cause:** Updates happening on background thread.\n\n**Solution:**\n\n```swift\n// Always update UI on main thread\nCometChatUIKit.login(uid: \"user-123\") { result in\n    DispatchQueue.main.async {\n        switch result {\n        case .success:\n            self.showConversations()\n        case .onError(let error):\n            self.showError(error)\n        }\n    }\n}\n```\n\n---\n\n## 3. Debugging Techniques\n\n### Enable CometChat Logging\n\n```swift\n// Add before initialization\nCometChat.setLogLevel(.debug)\n```\n\n### Check Connection Status\n\n```swift\nCometChat.addConnectionListener(\"debug-listener\", self)\n\nextension YourClass: CometChatConnectionDelegate {\n    func connected() {\n        print(\"✅ CometChat connected\")\n    }\n    \n    func connecting() {\n        print(\"🔄 CometChat connecting...\")\n    }\n    \n    func disconnected() {\n        print(\"❌ CometChat disconnected\")\n    }\n}\n```\n\n### Monitor Message Events\n\n```swift\nclass DebugMessageListener: CometChatMessageDelegate {\n    \n    func onTextMessageReceived(textMessage: TextMessage) {\n        print(\"📩 Text message received: \\(textMessage.text ?? \"\")\")\n    }\n    \n    func onMediaMessageReceived(mediaMessage: MediaMessage) {\n        print(\"📎 Media message received: \\(mediaMessage.messageType)\")\n    }\n    \n    func onMessageDeleted(message: BaseMessage) {\n        print(\"🗑 Message deleted: \\(message.id)\")\n    }\n}\n\nCometChat.addMessageListener(\"debug-messages\", DebugMessageListener())\n```\n\n### Network Debugging\n\nUse Charles Proxy or Proxyman to inspect CometChat API calls:\n\n1. Install Charles Proxy\n2. Enable SSL Proxying for `*.cometchat.io`\n3. Install Charles certificate on device/simulator\n4. Monitor requests and responses\n\n### Xcode Debugging\n\n**Breakpoints:**\n- Set breakpoints in CometChat callbacks\n- Use symbolic breakpoints for CometChat methods\n\n**Console:**\n```swift\n// Print current state\nprint(\"User: \\(CometChatUIKit.getLoggedInUser()?.uid ?? \"none\")\")\nprint(\"Initialized: \\(CometChatManager.shared.isInitialized)\")\n```\n\n---\n\n## 4. Common Error Codes\n\n| Code | Description | Solution |\n|---|---|---|\n| `ERR_UID_NOT_FOUND` | User doesn't exist | Create user first |\n| `ERR_ALREADY_LOGGED_IN` | User already logged in | Check session before login |\n| `ERR_NOT_LOGGED_IN` | No active session | Login first |\n| `AUTH_ERR_AUTH_TOKEN_NOT_FOUND` | Invalid auth token | Generate new token |\n| `ERR_INVALID_APP_ID` | Wrong App ID | Verify in dashboard |\n| `ERR_INVALID_API_KEY` | Wrong API/Auth Key | Get correct key from dashboard |\n| `ERR_BLOCKED_BY_EXTENSION` | Blocked by extension | Check extension settings |\n| `ERR_RATE_LIMIT_EXCEEDED` | Too many requests | Implement rate limiting |\n| `ERR_WEBSOCKET_CONNECTION_FAILED` | Connection failed | Check network, retry |\n\n---\n\n## 5. Performance Issues\n\n### Slow Conversation Loading\n\n**Solutions:**\n\n1. **Limit initial fetch:**\n```swift\nlet conversations = CometChatConversations()\nconversations.set(conversationsRequestBuilder: ConversationsRequest.ConversationsRequestBuilder()\n    .set(limit: 20)  // Reduce initial load\n)\n```\n\n2. **Enable pagination:**\nConversations automatically paginate. Ensure you're not fetching all at once.\n\n### Slow Message Loading\n\n**Solutions:**\n\n1. **Limit message fetch:**\n```swift\nlet messageList = CometChatMessageList()\nmessageList.set(messagesRequestBuilder: MessagesRequest.MessageRequestBuilder()\n    .set(uid: user.uid ?? \"\")\n    .set(limit: 30)  // Reduce initial load\n)\n```\n\n2. **Hide unnecessary features:**\n```swift\nmessageList.hideReceipts = true  // If not needed\nmessageList.hideAvatar = true    // If not needed\n```\n\n### High Memory Usage\n\n**Solutions:**\n\n1. **Release unused view controllers:**\n```swift\n// Don't keep strong references to dismissed VCs\n```\n\n2. **Clear image cache if needed:**\n```swift\n// CometChat handles image caching internally\n// But you can clear URLCache if needed\nURLCache.shared.removeAllCachedResponses()\n```\n\n---\n\n## 6. SwiftUI-Specific Issues\n\n### View Not Updating\n\n**Cause:** SwiftUI not detecting state changes.\n\n**Solution:**\n\n```swift\nstruct ChatView: View {\n    @State private var selectedConversation: Conversation?\n    \n    var body: some View {\n        ConversationsWrapper(selectedConversation: $selectedConversation)\n            .onChange(of: selectedConversation) { newValue in\n                // Handle selection\n            }\n    }\n}\n\nstruct ConversationsWrapper: UIViewControllerRepresentable {\n    @Binding var selectedConversation: Conversation?\n    \n    func makeUIViewController(context: Context) -> CometChatConversations {\n        let vc = CometChatConversations()\n        vc.onItemClick = { conversation, _ in\n            selectedConversation = conversation\n        }\n        return vc\n    }\n    \n    func updateUIViewController(_ uiViewController: CometChatConversations, context: Context) {\n        // Handle updates if needed\n    }\n}\n```\n\n### Navigation Issues\n\n**Cause:** Mixing UIKit navigation with SwiftUI.\n\n**Solution:**\n\n```swift\nstruct ChatNavigationView: View {\n    @State private var path = NavigationPath()\n    \n    var body: some View {\n        NavigationStack(path: $path) {\n            ConversationsView(onSelect: { conversation in\n                path.append(conversation)\n            })\n            .navigationDestination(for: Conversation.self) { conversation in\n                MessagesView(conversation: conversation)\n            }\n        }\n    }\n}\n```\n\n---\n\n## 7. Quick Fixes Checklist\n\nWhen something isn't working:\n\n1. [ ] **Clean build:** Cmd + Shift + K\n2. [ ] **Delete derived data:** `rm -rf ~/Library/Developer/Xcode/DerivedData`\n3. [ ] **Reinstall pods:** `pod deintegrate && pod install`\n4. [ ] **Check credentials:** App ID, Auth Key, Region\n5. [ ] **Check user exists:** Use test users or create first\n6. [ ] **Check network:** Device has internet connection\n7. [ ] **Check permissions:** Camera, microphone, notifications\n8. [ ] **Check main thread:** UI updates on main thread\n9. [ ] **Check completion handlers:** Wait for async operations\n10. [ ] **Enable logging:** `CometChat.setLogLevel(.debug)`\n\n---\n\n## 8. Theming Errors\n\n### \"Value of type 'MessageBubbleStyle' has no member 'outgoingBackgroundColor'\"\n\n**Cause:** Incorrect property access for message bubble styles.\n\n**Solution:** Message bubble styles use separate `.incoming` and `.outgoing` style objects, not combined properties:\n\n```swift\n// ✅ CORRECT - Use separate incoming/outgoing styles\nCometChatMessageBubble.style.outgoing.backgroundColor = CometChatTheme.primaryColor\nCometChatMessageBubble.style.incoming.backgroundColor = CometChatTheme.neutralColor300\n\n// For text colors within bubbles\nCometChatMessageBubble.style.outgoing.textBubbleStyle.textColor = .white\nCometChatMessageBubble.style.incoming.textBubbleStyle.textColor = CometChatTheme.textColorPrimary\n```\n\n---\n\n### \"Value of type 'ConversationsStyle' has no member 'titleColor'\"\n\n**Cause:** Using incorrect property names for component styles.\n\n**Solution:** Check the actual property names in the style struct:\n\n```swift\n// ✅ CORRECT ConversationsStyle properties\nCometChatConversations.style.listItemTitleTextColor = CometChatTheme.textColorPrimary\nCometChatConversations.style.listItemTitleFont = CometChatTypography.Heading4.medium\nCometChatConversations.style.listItemSubTitleTextColor = CometChatTheme.textColorSecondary\nCometChatConversations.style.listItemSubTitleFont = CometChatTypography.Body.regular\n```\n\n---\n\n### \"Value of type 'MessageComposerStyle' has no member 'inputBackgroundColor'\"\n\n**Cause:** Using incorrect property names for composer style.\n\n**Solution:** Use the correct property names:\n\n```swift\n// ✅ CORRECT MessageComposerStyle properties\nCometChatMessageComposer.style.composeBoxBackgroundColor = CometChatTheme.backgroundColor01\nCometChatMessageComposer.style.composeBoxBorderColor = CometChatTheme.borderColorDefault\nCometChatMessageComposer.style.placeHolderTextColor = CometChatTheme.textColorTertiary\nCometChatMessageComposer.style.textFiledColor = CometChatTheme.textColorPrimary\nCometChatMessageComposer.style.activeSendButtonImageBackgroundColor = CometChatTheme.primaryColor\n```\n\n---\n\n### \"Value of type 'BadgeStyle' has no member 'cornerRadius'\" (type mismatch)\n\n**Cause:** `BadgeStyle.cornerRadius` is `CometChatCornerStyle?`, not a simple value.\n\n**Solution:**\n\n```swift\n// ✅ CORRECT - cornerRadius is optional CometChatCornerStyle\nCometChatBadge.style.cornerRadius = CometChatCornerStyle(cornerRadius: 8)\n// or nil for default pill shape\nCometChatBadge.style.cornerRadius = nil\n```\n\n---\n\n### \"Cannot assign value of type 'UIColor' to type 'CGColor'\"\n\n**Cause:** `BadgeStyle.borderColor` is `CGColor`, not `UIColor`.\n\n**Solution:**\n\n```swift\n// ✅ CORRECT - use .cgColor\nCometChatBadge.style.borderColor = UIColor.clear.cgColor\nCometChatBadge.style.borderColor = UIColor.white.cgColor\n```\n\n---\n\n### Theme Changes Not Applying\n\n**Cause:** Theme configured after UI is already displayed.\n\n**Solution:** Configure theme before showing any CometChat UI:\n\n```swift\n// In AppDelegate or App init, BEFORE showing any CometChat views\nfunc configureTheme() {\n    CometChatTheme.primaryColor = UIColor.systemBlue\n    CometChatTheme.backgroundColor01 = UIColor.systemBackground\n    // ... other theme settings\n}\n\n// Call this before CometChatUIKit.init()\nconfigureTheme()\n```\n\n---\n\n### \"Type 'CometChatSpacing' has no member 'Spacing1'\" or similar\n\n**Cause:** Using incorrect property access for spacing values.\n\n**Solution:** `CometChatSpacing` uses nested classes, not direct properties:\n\n```swift\n// ✅ CORRECT - Use nested class syntax\nCometChatSpacing.Spacing.s1 = 4\nCometChatSpacing.Spacing.s2 = 8\nCometChatSpacing.Padding.p1 = 4\nCometChatSpacing.Padding.p2 = 8\nCometChatSpacing.Radius.r1 = 4\nCometChatSpacing.Radius.r2 = 8\nCometChatSpacing.Radius.rMax = 1000\nCometChatSpacing.Margin.m1 = 4\n```\n\n---\n\n### \"Cannot infer type of closure parameter\" or \"Cannot infer contextual base\"\n\n**Cause:** Missing type annotations in closures for custom views.\n\n**Solution:** Always provide explicit type annotations for closure parameters:\n\n```swift\nimport CometChatSDK\n\n// ✅ CORRECT - Explicit type annotation\nusers.set(subtitle: { (user: User?) -> UIView in\n    let label = UILabel()\n    if user?.status == .online {\n        label.text = \"Online\"\n        label.textColor = .systemGreen\n    } else {\n        label.text = \"Offline\"\n        label.textColor = .gray\n    }\n    return label\n})\n```\n\nNote: Use `set(subtitle:)` method, not direct property assignment. The `User` type is from `CometChatSDK`.\n\n---\n\n### \"Value of type 'CometChatUsers' has no member 'subtitleView'\"\n\n**Cause:** Using wrong property name.\n\n**Solution:** `CometChatUsers` uses `subtitle`, not `subtitleView`:\n\n```swift\n// ✅ CORRECT\nusers.set(subtitle: { (user: User?) -> UIView in\n    // Return custom view\n})\n\n// Different components use different names:\n// - CometChatUsers: set(subtitle:)\n// - CometChatConversations: set(subtitleView:)\n// - CometChatMessageHeader: set(subtitleView:)\n```\n\n---\n\n## 10. Getting Help\n\n### CometChat Resources\n\n- **Documentation:** https://www.cometchat.com/docs/ios-uikit\n- **GitHub Issues:** https://github.com/cometchat/cometchat-uikit-ios/issues\n- **Support:** https://www.cometchat.com/support\n\n### Information to Include in Bug Reports\n\n1. CometChatUIKitSwift version\n2. iOS version\n3. Xcode version\n4. Device (simulator or physical)\n5. Error message / stack trace\n6. Steps to reproduce\n7. Relevant code snippets","tags":["cometchat","ios","troubleshooting","skills","agent-skills","ai-agent","chat","claude-code","cursor","messaging","nextjs","react"],"capabilities":["skill","source-cometchat","skill-cometchat-ios-troubleshooting","topic-agent-skills","topic-ai-agent","topic-chat","topic-claude-code","topic-cometchat","topic-cursor","topic-messaging","topic-nextjs","topic-react","topic-react-native","topic-ui-kit"],"categories":["cometchat-skills"],"synonyms":[],"warnings":[],"endpointUrl":"https://skills.sh/cometchat/cometchat-skills/cometchat-ios-troubleshooting","protocol":"skill","transport":"skills-sh","auth":{"type":"none","details":{"cli":"npx skills add cometchat/cometchat-skills","source_repo":"https://github.com/cometchat/cometchat-skills","install_from":"skills.sh"}},"qualityScore":"0.463","qualityRationale":"deterministic score 0.46 from registry signals: · indexed on github topic:agent-skills · 27 github stars · SKILL.md body (23,726 chars)","verified":false,"liveness":"unknown","lastLivenessCheck":null,"agentReviews":{"count":0,"score_avg":null,"cost_usd_avg":null,"success_rate":null,"latency_p50_ms":null,"narrative_summary":null,"summary_updated_at":null},"enrichmentModel":"deterministic:skill-github:v1","enrichmentVersion":1,"enrichedAt":"2026-05-18T19:04:53.716Z","embedding":null,"createdAt":"2026-05-07T13:05:13.808Z","updatedAt":"2026-05-18T19:04:53.716Z","lastSeenAt":"2026-05-18T19:04:53.716Z","tsv":"'-123':1047,1416 '/cometchat/cometchat-uikit-ios/issues':2393 '/docs/ios-uikit':2388 '/library/developer/xcode/deriveddata':584,743,1915 '/path/to/your/project':66 '/pods':773 '/support':2397 '0':1237 '02.2':1235 '1':44,85,175,533,577,638,675,755,858,906,952,962,1063,1137,1198,1293,1350,1520,1677,1712,1751,1903,2404 '10':1971,2380 '1000':2257 '123':980 '13':510 '13.0':116,647,656 '15':673 '2':95,185,543,585,650,703,761,784,865,916,968,1085,1152,1207,1300,1366,1524,1694,1732,1765,1909,2407 '20':1690 '3':101,595,657,730,767,873,928,1106,1164,1219,1316,1383,1431,1530,1916,2410 '30':1728 '4':108,736,774,1267,1329,1536,1568,1923,2240,2246,2252,2260,2413 '4.0':156,184,542,1299 '5':967,1275,1670,1931,2418 '5.1':124,153 '6':1785,1941,2423 '7':1894,1948,2427 '8':1954,1976,2130,2243,2249,2255 '9':1963 'access':1307,1313,1990,2220 'activ':777,1603 'actual':2047 'add':157,705,768,1438 'addit':258 'ai':417 'ai-gener':416 'airplay':1321 'alongsid':135 'alreadi':1009,1018,1033,1587,1591,2173 'alway':1407,2282 'anim':503,1375,1378 'annot':2275,2286,2296 'anoth':1074 'api':913,926,1518,1631 'api/auth':1634 'apn':1240 'app':447,685,845,848,853,860,887,1621,1624,1926,2187 'appdeleg':2185 'appid':885 'appli':2166 'applic':1224,1225 'architectur':778 'archiv':748 'assign':2140,2329 'async':1969 'audio':1320 'auth':897,903,909,914,922,1607,1609,1614,1928 'author':1216 'automat':146,1698 'background':1317,1403 'badgestyl':2105 'badgestyle.bordercolor':2149 'badgestyle.cornerradius':2113 'base':2271 'basemessag':1498 'bash':61,581,590,659,733,740 'binari':605 'bind':1826 'blank/empty':1049 'block':433,1642,1645 'bodi':1810,1874 'bool':1376 'breakpoint':1543,1545,1551 'bubbl':1993,1997,2023 'bug':2402 'build':13,37,45,103,109,432,597,602,681,689,759,776,895,1905 'built':404 'cach':94,1768,1775 'call':166,179,191,194,207,536,561,1013,1284,1310,1315,1334,1519,2203 'call-rel':193,206 'callback':297,301,1548 'calllog':554 'camera':1306,1951 'canimport':202,551 'cannot':381,387,519,2139,2261,2268 'case':234,325,332,362,369,826,836,991,1001,1422,1425 'caus':51,130,165,220,267,392,524,570,632,665,749,791,851,899,940,1012,1052,1130,1193,1287,1343,1399,1793,1857,1987,2036,2074,2112,2148,2167,2216,2272,2344 'cd':65 'certif':1268,1281,1533 'cgcolor':2147,2151,2158 'chang':1798,2164 'charl':1511,1522,1532 'chat':1040 'chatnavigationview':1866 'chatview':1802 'check':111,586,596,866,929,1023,1086,1107,1138,1153,1270,1443,1594,1648,1667,1924,1932,1942,1949,1955,1964,2045 'checklist':1197,1292,1897 'claim':421 'class':394,1474,2228,2236 'clean':62,102,578,737,1904 'clear':1766,1780 'closur':1355,2265,2277,2288 'cmd':105,1906 'cocoapod':60 'code':171,196,209,252,1571,1572,2429 'color':2021 'combin':2007 'cometchat':2,9,31,296,507,787,795,863,960,965,1070,1245,1393,1435,1458,1463,1468,1517,1547,1553,1772,2181,2192,2383 'cometchat-ios-compon':506 'cometchat-ios-troubleshoot':1 'cometchat-rel':1392 'cometchat-uid':959,964 'cometchat.addconnectionlistener':1447 'cometchat.addmessagelistener':1503 'cometchat.io':1529 'cometchat.registertokenforpushnotification':1246 'cometchat.setloglevel':1441,1974 'cometchatbadge.style.bordercolor':2159,2161 'cometchatbadge.style.cornerradius':2127,2137 'cometchatcalllog':521,525,555 'cometchatcallssdk':164,183,203,205,527,541,552,1294,1298 'cometchatconnectiondeleg':1454 'cometchatconvers':459,812,831,1113,1684,1834,1837,1848,2374 'cometchatconversations.style.listitemsubtitlefont':2064 'cometchatconversations.style.listitemsubtitletextcolor':2062 'cometchatconversations.style.listitemtitlefont':2060 'cometchatconversations.style.listitemtitletextcolor':2058 'cometchatconversationswithmessag':383 'cometchatcornerstyl':2115,2126,2128 'cometchatexcept':215,242,260,271,280,340,346,353 'cometchatmanager.shared.isinitialized':1567 'cometchatmessag':389 'cometchatmessagebubble.style.incoming.backgroundcolor':2017 'cometchatmessagebubble.style.incoming.textbubblestyle.textcolor':2026 'cometchatmessagebubble.style.outgoing.backgroundcolor':2015 'cometchatmessagebubble.style.outgoing.textbubblestyle.textcolor':2024 'cometchatmessagecompos':436,1145 'cometchatmessagecomposer.style.activesendbuttonimagebackgroundcolor':2100 'cometchatmessagecomposer.style.composeboxbackgroundcolor':2092 'cometchatmessagecomposer.style.composeboxbordercolor':2094 'cometchatmessagecomposer.style.placeholdertextcolor':2096 'cometchatmessagecomposer.style.textfiledcolor':2098 'cometchatmessagedeleg':1476 'cometchatmessageevents.removelistener':1379 'cometchatmessagehead':434,478,2377 'cometchatmessagelist':435,1719 'cometchatsdk':129,155,456,2292,2335 'cometchatspac':2209,2225 'cometchatspacing.margin':2258 'cometchatspacing.padding':2244,2247 'cometchatspacing.radius':2250,2253 'cometchatspacing.radius.rmax':2256 'cometchatspacing.spacing':2238,2241 'cometchattheme.backgroundcolor01':2093,2198 'cometchattheme.bordercolordefault':2095 'cometchattheme.neutralcolor300':2018 'cometchattheme.primarycolor':2016,2101,2196 'cometchattheme.textcolorprimary':2027,2059,2099 'cometchattheme.textcolorsecondary':2063 'cometchattheme.textcolortertiary':2097 'cometchattypography.body.regular':2065 'cometchattypography.heading4.medium':2061 'cometchatuikit':806,819 'cometchatuikit.create':984 'cometchatuikit.getloggedinuser':1031,1095,1562 'cometchatuikit.init':2206 'cometchatuikit.login':318,355,997,1044,1413 'cometchatuikitswift':50,123,152,412,454,2405 'cometchatus':2339,2350,2371 'command':568 'common':8,27,670,1569 'compil':199,548 'complet':312,329,336,350,366,373,378,798,805,818,1965 'compon':509,2042,2367 'components/messagesvc.swift':451 'compos':425,477,480,1144,1161,2080 'composer.onerror':1157 'composer.set':1146 'composit':405 'condit':198,547 'config':719 'config.build':720 'configur':2169,2176 'configurethem':2195,2207 'conflict':571 'conform':283 'connect':1167,1181,1185,1444,1456,1459,1461,1464,1663,1665,1947 'consol':1555 'context':1832,1833,1849,1850 'contextu':2270 'control':1755 'controllers/cometchat':450 'convers':458,464,469,811,830,1050,1054,1112,1120,1125,1360,1365,1674,1683,1697,1808,1829,1839,1842,1882,1885,1889,1892,1893 'conversation.conversationwith':484,494 'conversation.self':1888 'conversations.onempty':1122 'conversations.onerror':1114 'conversations.onitemclick':1357 'conversations.set':465,1685 'conversationsrequest.conversationsrequestbuilder':1687 'conversationsrequestbuild':1686 'conversationsstyl':2031,2056 'conversationsview':1880 'conversationswrapp':1813,1824 'convert':263 'copy/paste':931 'core':131 'cornerradius':2109,2123,2129 'correct':344,815,919,1276,1637,2010,2055,2085,2089,2122,2156,2233,2293,2356 'cover':36 'crash':1342 'creat':956,969,1006,1583,1939 'credenti':879,1925 'current':1558 'currentus':1030 'currentuser.name':1037 'custom':511,2279,2364 'cycl':1348 'dashboard':864,912,1071,1271,1628,1640 'data':580,1229,1912 'debug':18,42,1432,1442,1449,1505,1509,1542,1975 'debug-listen':1448 'debug-messag':1504 'debugmessagelisten':1475,1507 'default':377,2134 'deintegr':592,1920 'delet':1501,1910 'deni':664 'depend':572 'deploy':614,625,643 'deriv':579,1911 'descript':226,1573 'detail':254 'detect':1796 'develop':1278 'devic':1200,1333,1944,2414 'device/simulator':1535 'devicetoken':1228 'devicetoken.map':1232 'diagnos':5,24 'dictionari':256 'didregisterforremotenotificationswithdevicetoken':1227 'differ':2366,2369 'dir':772 'direct':300,347,2230,2327 'disabl':676 'disconnect':1466,1469 'dismiss':1763 'dispatchqueue.global':1188 'dispatchqueue.main.async':828,1419 'display':2174 'doc':414 'document':2385 'doe':983 'doesn':948,1202,1580 'done':1370 'duplic':564,574,588,610 'earli':814 'els':490,556,1042,1101,1182,2314 'enabl':697,722,1319,1434,1525,1695,1972 'end':125,727,728,729 'endif':211,563 'ensur':874,1700 'environ':1277 'err':1575,1586,1598,1608,1619,1629,1641,1651,1661 'error':14,16,38,40,46,225,237,248,251,266,277,287,294,309,316,335,338,339,343,372,375,786,839,843,932,1004,1008,1109,1115,1118,1155,1158,1162,1259,1265,1428,1430,1570,1978,2419 'error.errorcode':241 'error.errordescription':239,1121,1163 'errorcod':250 'errordescript':229,244,1266 'escap':313,351 'eu':870 'event':1472 'exceed':1654 'exist':395,423,950,1025,1055,1582,1934 'expir':902 'explicit':158,2284,2294 'export':410 'extens':1452,1644,1647,1649 'extra':876 'fail':842,1007,1264,1664,1666 'failur':337,837 'fals':1251 'featur':1735 'fetch':1680,1704,1715 'file':90,96 'find':382,388,520 'first':971,1027,1585,1606,1940 'fix':7,26,1896 'folder':104 'format':1234 'found':746,850,935,939,1126,1578,1612 'framework':118,575,611,744,750,764 'fresh':908 'full':516 'func':310,348,1223,1373,1455,1460,1465,1477,1486,1495,1830,1845,2194 'generat':418,1616 'get':907,1636,2381 'getnotificationset':1212 'github':2389 'github.com':2392 'github.com/cometchat/cometchat-uikit-ios/issues':2391 'go':88,599,687,756,1068 'grant':1209 'gray':2318 'group':483,486,488,489 'guid':419 'handl':1773,1821,1851 'handler':1966 'happen':1401 'help':23,2382 'hhx':1236 'hide':560,1733 'high':1747 'higher':649 'human':246 'human-read':245 'id':846,854,861,888,1622,1625,1927 'imag':1767,1774 'implement':513,1658 'import':204,453,455,1169,2291 'includ':143,2400 'incom':2001 'incoming/outgoing':2013 'incorrect':1988,2038,2076,2218 'infer':2262,2269 'info':259 'info.plist':1303 'inform':2398 'inherit':769 'init':804,841,2188 'initi':790,797,1440,1566,1679,1692,1730 'inputbackgroundcolor':2073 'inspect':1516 'instal':54,72,134,169,531,534,594,661,711,713,735,1295,1521,1531,1922 'installer.pods_project.targets.each':714 'instead':230,298 'instrument':1386 'integr':11,30 'intern':1776 'internet':1946 'invalid':844,896,1613,1620,1630 'io':3,10,32,115,508,613,634,646,655,2408 'ip':1328 'isn':1900 'issu':12,28,669,753,1132,1196,1672,1789,1856,2390 'john':982 'join':1238 'k':107,1908 'keep':1759 'key':898,904,910,915,920,923,927,1632,1635,1638,1929 'kit':34,137,141,398,444 'label':2304,2320 'label.text':2310,2315 'label.textcolor':2312,2317 'leak':1345,1389,1395 'let':236,327,334,364,371,457,460,471,482,492,553,810,829,838,881,973,993,1003,1029,1093,1111,1143,1171,1230,1427,1682,1717,1835,2303 'librari':607 'like':401 'limit':1653,1660,1678,1689,1713,1727 'link':57,604 'list':479,1051 'listen':1368,1382,1450 'load':1119,1675,1693,1710,1731 'localizeddescript':219,232 'log':1010,1019,1034,1059,1082,1089,1097,1104,1436,1588,1592,1600,1973 'logged-in':1058,1081 'login':311,349,943,996,1014,1043,1597,1605 'look':400,1390 'lowercas':894 'm1':2259 'main':1411,1956,1961 'makeuiviewcontrol':1831 'manag':84 'mani':1656 'match':868,1283 'media':1491 'mediamessag':1488,1489 'mediamessage.messagetype':1494 'member':218,1985,2034,2072,2108,2212,2342 'memori':1340,1344,1748 'messag':249,1067,1078,1127,1134,1471,1483,1492,1497,1500,1506,1709,1714,1992,1996,2420 'message.id':1502 'messagebubblestyl':1982 'messagecomposerstyl':2069,2090 'messagelist':1718 'messagelist.hideavatar':1742 'messagelist.hidereceipts':1737 'messagelist.set':1720 'messagesrequest.messagerequestbuilder':1722 'messagesrequestbuild':1721 'messagesvc':428,472,473,502,512,517 'messagesvc.set':487,497 'messagesview':1891 'method':1554,2325 'microphon':1312,1952 'minimum':633 'mismatch':636,2111 'miss':1288,2273 'mix':1858 'mode':1318 'modul':49,128,163 'monitor':1172,1470,1537 'monitor.pathupdatehandler':1174 'monitor.start':1186 'multipl':567,1194 'must':1149,1282 'my-listen':1380 'name':981,2040,2049,2078,2087,2348,2370 'navcontrol':461,468,500 'navig':1855,1860 'navigationdestin':1886 'navigationpath':1872 'navigationstack':1877 'need':160,178,190,1741,1746,1770,1783,1854 'neither':393 'nest':2227,2235 'network':1166,1170,1508,1668,1943 'new':978,1617 'new-us':977 'newvalu':1819 'nil':368,374,379,380,2132,2138 'none':1564 'note':2321 'notif':1190,1272,1274,1953 'nscamerausagedescript':1305 'nsmicrophoneusagedescript':1311 'nwpathmonitor':1173 'object':2005 'offlin':2316 'older':413 'onchang':1816 'one':442 'onerror':235,333,370,1002,1258,1426 'onitemclick':466 'onlin':2309,2311 'onmediamessagereceiv':1487 'onmessagedelet':1496 'onselect':1881 'ontextmessagereceiv':1478 'open':76,80 'openmessag':1363 'oper':1970 'option':255,2125 'outgo':2003 'outgoingbackgroundcolor':1986 'overrid':1372 'p1':2245 'p2':2248 'packag':83,91,93,97,99 'pagin':1696,1699 'paramet':2266,2289 'path':752,766,1175,1871,1878,1879 'path.append':1884 'path.status':1178 'pattern':438 'perform':1671 'permiss':668,1208,1291,1301,1950 'phase':598,603 'physic':1199,2417 'pictur':1323,1325 'pill':2135 'placehold':558 'platform':114,654 'pod':69,71,122,151,154,182,540,589,591,593,660,734,1297,1918,1919,1921 'podfil':112,150,181,539,652,708 'podfile.lock':70 'possibl':1195 'post':710 'pre':403,955 'pre-built':402 'pre-creat':954 'print':238,240,840,1005,1032,1096,1102,1117,1123,1160,1180,1183,1215,1239,1254,1261,1457,1462,1467,1481,1490,1499,1557,1560,1565 'privat':1805,1869 'proceed':1038 'produc':569 'product':1280,1387 'profil':1384,1388 'project':79,641,771 'proper':58 'properti':223,1989,2008,2039,2048,2057,2077,2086,2091,2219,2231,2328,2347 'protocol':288 'provid':2283 'proxi':1512,1523,1527 'proxyman':1514 'purpos':20 'push':1189,1201,1273 'pushviewcontrol':501 'queue':1187 'quick':1895 'r1':2251 'r2':2254 'rang':622 'rate':1652,1659 're':1702 'readabl':247 'real':431,1332 'rebuild':739 'receiv':1484,1493 'reduc':1691,1729 'refer':172,1353,1761 'region':856,867,892,1930 'regist':1221,1243,1256 'registr':1263 'reinstal':64,1917 'relat':195,208,1394 'releas':783,1752 'relev':2428 'remov':608,1367 'repo':74 'repo-upd':73 'report':2403 'reproduc':2426 'request':1538,1657 'requir':526 'reset':92 'resolv':98 'resourc':2384 'respons':1540 'rest':925 'result':275,292,307,314,321,324,358,361,822,825,987,990,1417,1421 'retain':1347 'retri':1669 'return':1843,2319,2363 'rf':68,583,742,1914 'rm':67,582,741,1913 'rootviewcontrol':463 'rsync.samba':663 'rubi':113,149,180,538,653,709,1296 'run':658,732 'runtim':15,39,785 's1':2239 's2':2242 'safe':833 'sampl':446 'sampleapp/view':449 'sandbox':662,667,679,695,700,725 'satisfi':1179 'scope':385,391,523 'script':678,694,699,724 'sdk':52,132,145,167,537,1289 'search':691,751,762,765 'see':505 'select':683,1073,1822 'selectedconvers':1807,1814,1815,1818,1828,1841 'self':1359,1362,1451 'self.showconversations':1424 'self.showerror':1429 'send':1064,1076,1129,1135 'separ':2000,2012 'session':1026,1595,1604 'set':617,682,690,696,721,760,775,808,821,884,891,1141,1151,1213,1249,1544,1650,1688,1723,1726,2202,2323,2372,2375,2378 'settings.authorizationstatus.rawvalue':1218 'shape':2136 'shift':106,1907 'show':557,2179,2190 'similar':2215 'simpl':2118 'simul':1206,1339,2415 'skill':22 'skill-cometchat-ios-troubleshooting' 'slow':1673,1708 'snippet':2430 'solut':59,138,174,227,279,424,532,576,637,674,754,799,857,905,951,1021,1062,1136,1349,1405,1574,1676,1711,1750,1799,1863,1995,2044,2082,2120,2154,2175,2224,2281,2349 'someth':1899 'sometim':420 'sourc':518 'source-cometchat' 'space':877,890,2222 'spacing1':2213 'specif':1788 'ssl':1526 'stack':2421 'state':1559,1797,1804,1868 'status':1217,1445,2308 'step':2424 'string':253,1233 'strong':1760 'struct':1801,1823,1865,2053 'style':1994,1998,2004,2014,2043,2052,2081 'subtitl':2298,2324,2352,2358,2373 'subtitleview':2343,2354,2376,2379 'success':326,330,363,827,992,1252,1257,1423 'super.viewwilldisappear':1377 'support':624,2394 'swift':82,200,233,273,285,302,452,549,800,880,972,1022,1091,1110,1142,1156,1168,1210,1222,1356,1371,1406,1437,1446,1473,1556,1681,1716,1736,1756,1771,1800,1864,2009,2054,2088,2121,2155,2183,2232,2290,2355 'swiftui':1787,1794,1862 'swiftui-specif':1786 'switch':323,360,824,989,1420 'symbol':565,1550 'syntax':2237 'systemgreen':2313 'tab':562 'target':119,601,615,626,644,686,716,758 'target.build_configurations.each':717 'techniqu':19,43,1433 'test':957,1066,1330,1936 'text':1482,2020 'textmessag':1479,1480 'textmessage.text':1485 'theme':1977,2163,2168,2177,2201 'thread':1404,1412,1957,1962 'titlecolor':2035 'token':1220,1231,1241,1242,1247,1248,1255,1262,1610,1615,1618 'topic-agent-skills' 'topic-ai-agent' 'topic-chat' 'topic-claude-code' 'topic-cometchat' 'topic-cursor' 'topic-messaging' 'topic-nextjs' 'topic-react' 'topic-react-native' 'topic-ui-kit' 'trace':2422 'tri':268,792,941 'troubleshoot':4 'true':504,1738,1743 'type':214,278,921,1981,2030,2068,2104,2110,2143,2146,2208,2263,2274,2285,2295,2332,2338 'ui':33,136,140,1041,1396,1409,1958,2171,2182 'uiapplic':1226 'uicolor':2144,2153 'uicolor.clear.cgcolor':2160 'uicolor.systembackground':2199 'uicolor.systemblue':2197 'uicolor.white.cgcolor':2162 'uid':319,320,356,357,937,946,961,966,976,998,1045,1414,1563,1576,1724 'uikit':1859 'uikitset':807,820,882,883 'uilabel':2305 'uinavigationcontrol':462 'uiview':2301,2361 'uiviewcontrol':406,1847 'uiviewcontrollerrepresent':1825 'unknown':376 'unnecessari':1734 'unus':1753 'unusernotificationcenter.current':1211 'updat':75,639,651,1398,1400,1408,1792,1852,1959 'updateuiviewcontrol':1846 'upload':1269 'urlcach':1781 'urlcache.shared.removeallcachedresponses':1784 'us':869,893 'usag':1749 'use':117,221,228,270,291,299,306,345,448,794,802,835,917,953,1351,1510,1549,1935,1999,2011,2037,2075,2083,2157,2217,2226,2234,2322,2345,2351,2368 'user':315,328,331,352,365,367,493,496,498,499,677,693,698,723,933,958,970,974,975,979,985,986,994,1016,1046,1061,1072,1075,1084,1087,1094,1147,1148,1415,1561,1579,1584,1590,1933,1937,2299,2300,2307,2331,2359,2360 'user.uid':999,1100,1725 'user/group':1139 'users.set':2297,2357 'valu':212,1979,2028,2066,2102,2119,2141,2223,2336 'var':1806,1809,1827,1870,1873 'various':1131 'vc':476,1836,1844 'vc.onitemclick':1838 'vcs':1764 'verifi':859,1165,1626 'version':100,627,635,2406,2409,2412 'video':1309 'view':1754,1790,1803,1812,1867,1876,2193,2280,2365 'viewwilldisappear':1374 'voic':1326 'void':317,354 'voip':1250 'vs':1279 'wait':816,1967 'warn':1341 'weak':467,1352,1358 'websocket':1662 'white':2025 'within':2022 'work':1192,1204,1286,1337,1902 'workspac':77 'wrap':192,545 'wrong':222,303,801,852,900,1623,1633,2346 'www.cometchat.com':2387,2396 'www.cometchat.com/docs/ios-uikit':2386 'www.cometchat.com/support':2395 'x.x':619 'xcode':87,666,672,1541,2411 'xml':1304 'y.y':629 'yourapp':120 'yourapp.xcworkspace':81 'yourclass':1453 'z.z':631","prices":[{"id":"c39e4b44-dad0-46b7-9259-8f9f33ff5c35","listingId":"a0bba5c1-160b-4c1e-a106-85a531ecd5ac","amountUsd":"0","unit":"free","nativeCurrency":null,"nativeAmount":null,"chain":null,"payTo":null,"paymentMethod":"skill-free","isPrimary":true,"details":{"org":"cometchat","category":"cometchat-skills","install_from":"skills.sh"},"createdAt":"2026-05-07T13:05:13.808Z"}],"sources":[{"listingId":"a0bba5c1-160b-4c1e-a106-85a531ecd5ac","source":"github","sourceId":"cometchat/cometchat-skills/cometchat-ios-troubleshooting","sourceUrl":"https://github.com/cometchat/cometchat-skills/tree/main/skills/cometchat-ios-troubleshooting","isPrimary":false,"firstSeenAt":"2026-05-07T13:05:13.808Z","lastSeenAt":"2026-05-18T19:04:53.716Z"}],"details":{"listingId":"a0bba5c1-160b-4c1e-a106-85a531ecd5ac","quickStartSnippet":null,"exampleRequest":null,"exampleResponse":null,"schema":null,"openapiUrl":null,"agentsTxtUrl":null,"citations":[],"useCases":[],"bestFor":[],"notFor":[],"kindDetails":{"org":"cometchat","slug":"cometchat-ios-troubleshooting","github":{"repo":"cometchat/cometchat-skills","stars":27,"topics":["agent-skills","ai-agent","chat","claude-code","cometchat","cursor","messaging","nextjs","react","react-native","ui-kit"],"license":null,"html_url":"https://github.com/cometchat/cometchat-skills","pushed_at":"2026-05-18T05:04:24Z","description":"Add CometChat chat to any React, Next.js, React Native, Angular, Android, iOS, or Flutter project through your AI coding agent. Works with Claude Code, Cursor, Codex, VS Code Copilot, Windsurf, Cline, Kiro, and 50+ more agents.","skill_md_sha":"b9fa3b8d29f1ff871ec52ff552f402dfde26d0a0","skill_md_path":"skills/cometchat-ios-troubleshooting/SKILL.md","default_branch":"main","skill_tree_url":"https://github.com/cometchat/cometchat-skills/tree/main/skills/cometchat-ios-troubleshooting"},"layout":"multi","source":"github","category":"cometchat-skills","frontmatter":{"name":"cometchat-ios-troubleshooting","license":"MIT","description":"Diagnose and fix common CometChat iOS integration issues — build errors, runtime errors, and debugging techniques.","compatibility":"CometChatUIKitSwift ^5; iOS 13+"},"skills_sh_url":"https://skills.sh/cometchat/cometchat-skills/cometchat-ios-troubleshooting"},"updatedAt":"2026-05-18T19:04:53.716Z"}}