Engineering
Mobile (iOS) guidelines
SwiftUI consumer app conventions — tabs, auth, money, networking
Mobile (iOS) guidelines
Canonical consumer client: efacts-iosapp (SwiftUI, iOS 17+).
Product chrome
| Element | Rule |
|---|---|
| Tabs | AppTab: Home · My Bills · Analysis · Offers |
| Auth | Unauthenticated → AuthPortalView before RootTabView |
| Profile | Drawer / adjacent — not a fifth tab |
See Product IA.
Engineering conventions
| Topic | Convention |
|---|---|
| UI | SwiftUI; modular App/, Core/, Features/, Models/, Services/ |
| Money | Int64 cents; format for display with tabular figures |
| Tokens | Keychain (KeychainStore) — not UserDefaults |
| Networking | Typed client (ShopperAPIClient); map snake_case explicitly |
| Google Sign-In | SPM dependency; server verifies id_token |
| Privacy | Zero-PAN mindset; minimize sensitive logging |
Design
Follow Design language / docs/Design.md for color, type, and components. Prefer system materials where they aid clarity; keep Bright Accent CTAs with On-bright labels.
Build
- Local: Xcode on a current stable toolchain
- CI:
xcodebuild(with appropriateDEVELOPER_DIRin CI images) - Distribute TestFlight / App Store via the iOS repo’s release docs