iOS architecture
splick-mobile-ios is an XcodeGen project (project.yml generates Splick.xcodeproj, which is not committed). Architecture is MVVM plus Clean Architecture. Features are local Swift packages. Dev API base is http://localhost:8080/api. Production is https://api.splick.app/api.
Targets
| Target | Kind | Bundle id |
|---|---|---|
SplickApp | Application | com.splick.app |
SplickClip | App Clip | com.splick.app.Clip |
SplickWidgetExtension | Widget | com.splick.app.widgets |
SplickNotificationServiceExtension | Notification service extension | com.splick.app.NotificationService |
The notification service extension mutates a push before display (rich content). It does not decide business rules. Those stay on the server. See notification pipeline.
Tokens live in the Keychain. FeatureAuth owns the session actor, refresh, and logout. Other features receive an authenticated client; they do not read the Keychain themselves.
Packages
| Package | Role |
|---|---|
SplickCore | Networking, storage, design system, common, localization, bundled legal HTML |
SplickDomain | Entities and protocols. No UI and no URLSession |
FeatureAuth | Register, login, refresh, logout, /v1/auth/* |
FeatureFriends | Friends, groups, nearby |
FeatureSocialFeed | Feed, reactions, comments, paginated /v1/feed |
FeatureMedia | Camera and upload constraints |
FeatureExpense | Bills, splits, settle, /v1/expenses/* |
FeatureMessaging | Chat UI and the messaging WebSocket |
FeatureNotification | In-app inbox and push tap routing |
FeatureStickers | Sticker and GIF picker |
SplickWidgetKit | Shared widget and rich-push UI |
SimulationKit | Fakes and a sandbox CLI. Not in the production dependency graph |
External packages include GoogleSignIn and Nuke. Do not add a second image or auth stack.
Legal HTML is copied from splick-web/content/legal into SplickCore so the in-app policy matches the site. Web verify checklist calls this out before an App Store submission.
Deep links (splick://post, chat, user, and tab routes) are handled by app state. The catalog is docs/NOTIFICATIONS.md in the meta-repo. Android uses the same links.