cometchat-ios-production — independently scanned and version-tracked by SaferSkills.
SaferSkills independently audited cometchat-ios-production (Agent Skill) and scored it 100/100 (green). The audit ran 55 deterministic rules across Security, Supply Chain, Maintenance, Transparency, and Community; it found 0 high-severity and 0 lower-severity findings. The full rule-by-rule trace and per-finding evidence are below. Free, methodology-open.
Findings & checks · 0 flagged
Every scanned point with the score it earned and what moved between them.
First recorded scan — no prior version to compare against.
The primary manifest — the file an agent reads to learn what this artifact does.
Ground truth:CometChatUIKitSwift5.1.22 +CometChatSDK4.1.7 (symbols verified vscatalogs/ios-v5.json). The login/auth-token API is FETCHED viacometchat-ios-core/references/docs-map.md; the REST auth-token endpoint is{DOCS_BASE}/rest-api/auth-tokens. The iOS UI Kit docs have no single production-hardening page — this checklist is the pack's own guidance fromRULES.md§4 +cometchat-ios-core/references/setup-credentials.md, labelled as such. Tracked DOCS GAP.
cometchat-ios-core — references/setup-credentials.md (the Secrets.xcconfig → Info.plist → Bundle.main flow) and references/swiftui.md (the init→login launch hook) this hardens.cometchat-security — the enterprise auth model this client-side hardening plugs into: wiring your IdP / SSO into the token flow (your IdP → your server → mint the CometChat auth token; CometChat is not an IdP), token expiry/refresh + re-login, RBAC roles + group (SBAC) scopes, and Auth Key vs auth token vs REST API Key. Load it for a security review or any SSO question.Moving off the development setup: TestFlight/App Store submission, a security review, or "is this safe to ship."
Never embed the Auth Key in the app binary.
The Auth Key can mint a session for any user in your app. Anything baked into the app — an xcconfig value promoted into Info.plist, a string constant — is recoverable from the shipped .ipa (strings, class-dump). Treat it as public.
| Development | Production | |
|---|---|---|
| Login | CometChatUIKit.login(uid:...) | CometChatUIKit.login(authToken:...) |
| Auth Key | in Secrets.xcconfig | not in the build |
| Token source | n/a | your backend, per authenticated user |
| REST API Key | never in the app | server only |
{DOCS_BASE}/rest-api/auth-tokens).login(authToken:).// UID comes from the SERVER session, never from the client
let authToken = try await fetchCometChatToken() // your authenticated endpoint
CometChatUIKit.login(authToken: authToken) { result in /* handle success/failure */ }init must resolve first (initFromSettings), then login — calling login before init resolves fails silently (cometchat-ios-core).
Development reads the Auth Key from a gitignored Secrets.xcconfig promoted into Info.plist. For production, ship App ID + Region only (not secrets — they identify the app) and log in with a token; leave the Auth-Key value empty in the release configuration.
# after an archive/build, confirm the key is not in the app binary
strings "$APP_BUNDLE/YourApp" | grep -q "<your-auth-key>" && echo "LEAK" || echo "clean"Also verify Secrets.xcconfig is in .gitignore (only a committed placeholder), and that it is not bundled as a resource.
CometChatUIKit.logout(), then clear derived state and unregister VoIP/APNs push tokens (cometchat-ios-push).CometChatSDK breaks it (cometchat-ios-core Install).NSAllowsArbitraryLoads exceptions.NSCameraUsageDescription + NSMicrophoneUsageDescription with real strings, or App Review rejects; VoIP push needs the entitlement.strings-verified)login(authToken:) in production; UID from the server sessionSecrets.xcconfig gitignored; only a placeholder committedArchived build's binary contains no Auth Key (strings) · login works via token · a tampered UID is rejected by the server · logout fully clears · calls request permission and connect · features enabled on the production app.
~30 seconds. Free. No account. Every finding cites a rule and a line of evidence.