Enterprise AI Chat Client
iOS chat client for an enterprise AI platform -- shipped to the App Store
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
From Idea to App Store
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.
Authentication Pipeline
Enterprise SSO via a managed auth provider shared with the web platform. Token refresh, session persistence, and Keychain-based credential storage.
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.
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.
Modularity Meets Enterprise
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.
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.
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.
Under the Hood
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.
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.
Connected Pet Platform
Live pet tracking from collar to map -- BLE hardware, real-time GPS, geofencing