Skip to content

Repository files navigation

OpenChat Native

A fully Apple-native OpenChat client built with SwiftUI. It connects directly to the existing OpenChat/Noos backend at https://chat.globalbr.ai; it does not embed the website and does not use React Native.

First native slice

  • Sign in with Apple using AuthenticationServices
  • Native Noos email/password fallback UI for development and existing accounts
  • Session storage in the iOS Keychain
  • Conversation list with native navigation and pull-to-refresh
  • Message history and native chat composer
  • Live messages over Socket.IO using WebSocket transport only
  • REST send fallback when the live connection is unavailable
  • Light/dark mode, Dynamic Type, iPad layout, and Mac Catalyst support

Generate and run

Requirements: Xcode 16+, XcodeGen, and an Apple development team for device builds.

brew install xcodegen
./scripts/generate.sh
open OpenChatNative.xcodeproj

Select the OpenChatNative scheme and an iPhone simulator. Simulator builds do not require code signing. Sign in with Apple on a physical device requires the com.jacobcole.openchat App ID capability already used by the Expo client.

The networking, session, persistence, and model layers also build as a Swift package. A lightweight contract check runs on machines with Command Line Tools only; the Xcode scheme additionally runs the Apple-platform unit-test bundle:

./scripts/verify.sh

The Xcode project is generated from project.yml and committed so the app can be opened immediately. Regenerate after changing targets, build settings, packages, or resources.

Architecture

OpenChatNative/
  App/                 SwiftUI app entry point
  Features/Auth/       Apple and Noos login
  Features/Conversations/
  Features/Chat/
  Models/              API wire models + display helpers
  Networking/          URLSession REST + native Socket.IO adapter
  Persistence/         Keychain session storage
  Session/             App-wide authentication and realtime state
  UI/                  Reusable native components

The socket is explicitly configured for WebSocket transport because Cloudflare breaks OpenChat's polling fallback. The dependency is pinned to Socket.IO-Client-Swift 16.1.1, an established release compatible with the server's Socket.IO v4 protocol.

Known integration issue

On 2026-08-23, a production smoke test confirmed that Noos issues a valid access token but chat.globalbr.ai rejects that fresh token with HTTP 401. The app safely clears the rejected session and returns to login; Sign in with Apple uses an OpenChat-minted token and is not affected. The shared-JWT deployment drift is tracked separately in the canonical OpenChat tracker and must be fixed before the Noos email path is considered production-ready.

OpenChat native login screen

Tracked by OpenChat-dbr in the canonical OpenChat beads database.

About

Fully Apple-native SwiftUI client for OpenChat

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages