Skip to main content

Enterprise AI Chat Client

iOS chat client for an enterprise AI platform -- shipped to the App Store

Private
Enterprise AI Chat Client hero
The Problem

Enterprise AI Chat Client

A production iOS chat client for an enterprise AI platform that shipped to the App Store before the org shifted strategy. Built with a modular architecture spanning 7 Swift packages -- isolating auth, networking, design system, features, and domain logic into independently testable units. The in-app content viewer for videos and media from ingested sources was the feature I'm proudest of.

iOS

Platform

iOS Engineer

Role

My Role
iOS DevelopmentModular ArchitectureAuth IntegrationCI/CD
Process

From Idea to App Store

01

Package Architecture

Split the app into 7 Swift packages covering secrets management, shared utilities, networking and persistence, UI primitives, business logic, feature screens, and orchestration. Strict dependency boundaries between all of them.

02

Authentication Pipeline

Enterprise SSO via a managed auth provider shared with the web platform. Token refresh, session persistence, and Keychain-based credential storage.

03

Chat Interface & Content Viewer

Real-time chat connecting to the enterprise AI platform API. Streaming responses, message persistence, conversation management, and graceful recovery when the network drops. The proudest feature was the in-app content viewer — users could watch videos and browse media from ingested sources directly in the app without leaving the conversation flow.

04

CI/CD & Release Pipeline

Two Xcode Cloud workflows: PR validation on every push and automatic TestFlight releases on merge to main. Separate Debug and Release schemes point at different backend environments.

Key Features

Modularity Meets Enterprise

01

7-Package Modular Architecture

Each package owns one concern. Data handles networking and persistence, Features contains every screen, Domain holds business rules. A change to the design system can't accidentally break networking because the import boundaries enforce it. Build times improved too since Xcode compiles independent packages in parallel.

02

Enterprise Authentication

Auth flows through a managed enterprise identity provider shared across iOS and web. Token refresh is transparent. You only see the login screen if the refresh token itself has expired. Credentials live in Keychain, not UserDefaults.

03

In-App Content Viewer

Users could browse videos, documents, and media from the platform's ingested content sources directly within the app. The viewer rendered rich media inline without leaving the conversation context — bridging the gap between AI-generated responses and the source material they referenced.

Technical Deep Dive

Under the Hood

Built With
SwiftSwiftUIiOS
AppFeaturesDomainDataAuth

Key Technical Decisions

Modular Package Dependencies

The 7 packages form a DAG. Features depends on Domain and DesignSystem. Domain depends on Data and Common. Circular dependencies are literally impossible because the Swift compiler won't let you. New engineers could onboard by reading one package at a time instead of understanding the whole app.

Xcode Cloud Dual Workflow

PR builds validate compilation and tests on every push. Release builds trigger on main merges, auto-increment build numbers, and upload to TestFlight. Developers get fast feedback, releases are hands-free.

Shared Auth Provider

The platform's managed identity provider handled password reset, MFA enrollment, and SSO configuration once for both iOS and web. You lose some UI control, but the auth surface stays consistent across platforms. For an enterprise app, consistency wins.

Learnings

What I Learned

Seven packages felt like overkill for a small team

Within a month, we were merging features without merge conflicts because packages are independently editable. The compile-time dependency enforcement caught design violations that code review would have missed. Upfront cost, long-term payoff.

Managed auth shipped fast but boxed us in

We had auth working in days instead of weeks. Then the product team wanted custom onboarding flows, and we couldn't easily customize the login UI. Worth the trade-off, but I wish we'd documented the limitation earlier.

API keys were in a plist committed to the repo

That's how it shipped before I joined. Arkana's XOR obfuscation isn't real security, but it stops casual extraction from the binary. The bigger win is build-time injection. Different keys per scheme, no manual switching.

Next ProjectSee more projects →
Connected Pet Platform

Connected Pet Platform

Live pet tracking from collar to map -- BLE hardware, real-time GPS, geofencing