Yes, yes... another grocery list app. But this one is special to me because it works the way I want it to work.
Features include:
Real time list replication between devices
Items can be in different aisles in separate stores. For example, peanut butter might be in the Bread aisle in one store, but in the Canned Goods aisle in some other store.
Aisles can be ordered to match your typical walking path through the store - no more backtracking
Ordering of items within aisles is automatically updated as you shop
Prepare mode works like a home inventory, allowing you to navigate through your home to see what regular shopping items you are low on and need to buy.
Grocery List is implemented in Swift and UIKit. It uses a self-hosted CouchDB backend and the CouchBase Lite client package. I really wanted to use CoreData hosted in iCloud, but really couldn't for two big reasons:
Replication between devices is not real time, and is provided with no guarantees about the time it will take for changes to propagate across devices.
CoreData collections hosted in iCloud are not ordered. While I could have implemented indexed side tables to make up for this, the real time limitation above really was the deal breaker already.
At this point the app keeps chugging along, doing what it needs to do for my family, but it is getting old and I have an incredible itch to reimplement it. Given the opportunity, I would do the following:
At least investigate whether SwiftData is suitable for this application. Specifically, if it had solid replication with some sort of time guarantee, then it could be used to sync lists between devices. Additionally, iCloud would be my data store which would alleviate me from hosting and maintenance responsibilities. Failing that, I would look into a relational database with strong replication features - perhaps Supabase.
SwiftUI all the way! Having worked with both UIKit and SwiftUI it is obvious to me that SwiftUI is vastly superior for this kind of app and would allow me to get rid of so much code.
This has never been distributed to the App Store as I did not want to be responsible for hosting a CouchDB instance for the whole world. And besides, there really are enough grocery list apps out there already, even though mine just might be the best đŸ˜‰