Skip to main content

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​

TargetKindBundle id
SplickAppApplicationcom.splick.app
SplickClipApp Clipcom.splick.app.Clip
SplickWidgetExtensionWidgetcom.splick.app.widgets
SplickNotificationServiceExtensionNotification service extensioncom.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​

PackageRole
SplickCoreNetworking, storage, design system, common, localization, bundled legal HTML
SplickDomainEntities and protocols. No UI and no URLSession
FeatureAuthRegister, login, refresh, logout, /v1/auth/*
FeatureFriendsFriends, groups, nearby
FeatureSocialFeedFeed, reactions, comments, paginated /v1/feed
FeatureMediaCamera and upload constraints
FeatureExpenseBills, splits, settle, /v1/expenses/*
FeatureMessagingChat UI and the messaging WebSocket
FeatureNotificationIn-app inbox and push tap routing
FeatureStickersSticker and GIF picker
SplickWidgetKitShared widget and rich-push UI
SimulationKitFakes 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.