I’ve just built an iOS chat app using SwiftUI, Realm, and Realm Sync. I decided on a chat app as it makes an interesting case study for designing a data model and controlling who can access what data:
- A chat message needs to be viewable by all members of a chat room and no one else.
- New messages must be pushed to the chat room for all online members in real-time.
- The app should notify a user that there are new messages even when they don’t have that chat room open.
- Users should be able to observe the “presence” of other users (e.g., whether they’re currently logged into the app).
- There’s no limit on how many messages users send in a chat room, and so the data structures must allow them to grow indefinitely.
Because this app’s data model (and the decisions taken when designing) serve as a great starting point for many different types of apps, I wrote it up in this HowTo article.
You can download all of the code from the GitHub repo.
Checkout Building a Mobile Chat App Using Realm – Data Architecture for all of the details.