So I've been grappling with a technical design decision for a few days now and wanted to see what HN thinks, since I imagine there are a bunch of people who have run up against this problem and might have opinions/experience.
I've built an iOS app that uses Rails as a backend, this has worked well as a stack for me in the past, but the wrinkle is that this app now needs to be truly functional offline - I need to persist every object locally for offline use, but then also have that synced to the cloud for backup and to enable other features like sending emails and notifications containing users' content.
There are obviously plenty of straight-forward options to handle the local persistence (CoreData, SQLlite, Realm, etc.), and I'm happy to use any of them, but there seems to be no great option for persisting/syncing the local stuff on the cloud. Each of the options I've come across has significant drawbacks:
Realm Platform - prohibitively expensive (> $2000/year) if you want to access the server data to do anything other than communicate with a Realm client, also migrations are a pain
iCloud + CoreData - people might not have iCloud space or iCloud enabled
Google Cloud Firestore - in beta, some people experiencing issues with locally created objects not getting persisted, locked in to platform
Google Firebase Realtime - seems like this is effectively on the way to getting deprecated in favor of Firestore
Rolling my own solution where I write a background process to sync the client's data with my Rails server - lots of complex code, prone to bugs
Any opinions on this problem or things I should consider? Would be greatly appreciated!
2) AWS AppSync Client (not Amplify) + AWS AppSync service + Cognito + a few Lambdas + some db