I have tried several collaborative real-time shopping lists on iOS (and Android in the past, but right now I need iOS only), but none of them fit my criteria exactly.
Milk For Us comes part-way to the solution with the following features that we do need (These are all a requirement for any solution to this problem):
- Real-time Collaborative grocery list: multiple people can add and remove from the list simultaneously and, provided both clients have an active Internet connection (4G or WiFi), the changes are reflected very quickly on the other users' devices. The refresh is "instant", not manually initiated (I assume it's based on push notification programming).
- Customizable aisles: for each item on your list, you can customize which aisle it's in, and create aisles with custom names and a custom sort order.
- Customizable display: for those people who e.g. don't care about pricing information, at your option you can completely disable price as a field, so it doesn't clutter up your UI with irrelevant info.
- Does not force you to scan barcodes or otherwise directly associate list items with real items in a storefront. You can enter something that isn't even a product, like "Pick up kids from soccer practice" or "Check the PO box for mail".
- Not store-specific. Store-specific apps might, for example, only allow you to add items to your list that are products you can purchase at that store, or require you to be GPS located near the store to use the app. That won't work for us, as we need to be able to build our list from home and then go shop.
- Should support multiple different stores with different aisle configurations and item database.
- Adding a new item to your list should automatically save it in the shared account persistent list-item database (including its aisle and any associated metadata, such as comments that appear in smaller font below the item name) so that when you try to add a new item later, if the item you're typing already exists as a substring of an existing item, it'll show up in an "autocomplete" list -- this avoids the list database having items like "Diet Sprite", "Diet Sprite Soda", "Diet Sprite Softdrink", "Sprite without the sugar", etc. -- as soon as you start typing "Sp" it would bring up "Diet Sprite" and you'd see that and go, "Oh -- I'll just use that one" (to avoid duplication).
However, there are two severe problems with Milk For Us that really annoy us every week:
- Tapping on an item on the list "crosses it off" -- this keeps it on the persistent item database, but it gets removed from what's currently on your list to buy. We need some kind of an intermediate state, where it remains on the list for, say, an hour, or two hours (or however long the user wants), but grayed-out and scratched off, to indicate that someone has recently purchased that item. This is to address the problem that one of the shoppers will forget whether they added an item to the list for this shopping trip; if they think they didn't add it, they'll put it in the cart when they think of it. But the other person already purchased that item because it was on the list, so you end up with "double-buying" items (Person 1 buys milk at 4:02 PM, scratches it off the list, then Person 2 goes "Oh! There's no milk on the list but we need it!" and buys it and puts it in their own cart at 4:05 PM.)
- Tapping an item accidentally scratches it off with no ability to "Undo" -- so if you didn't mean to scratch off something obscure from the list, and you didn't see what you scratched off when your thumb tapped the screen while shopping, you will lose an item from the list and forget to buy it. To address this, the list should have undo history like MS Office programs, with the ability to see a list of previous actions and selectively undo them (adds and removals from the list). It'd also be nice if the UI keeps an item highlighted in orange or something for a few seconds after tapping it to really hammer home the point "you just scratched this off just a few seconds ago".
These two added features are basically essential for parallel shopping (divide and conquer) strategy, where two people take a shared list into a store at the same time, grab two carts, and one starts at one end of the store and the other person starts at the other end. Occasionally their path through the store will tend to overlap, meaning that unless you have the "recently crossed-off" feature, double-buying is a very real risk, so the two people have to constantly cross-check their carts before checking out at the end of the shopping trip to make sure they don't buy more of an item than they have storage for in the refrigerator.
So, is there an app that does all this? Price is not a factor, but obtrusive ads with no way to get rid of them would immediately disqualify the app from consideration.
If it matters, the devices specifically in use are the iPhone 7 Plus and iPhone 8 Plus running iOS 11.1 and are kept up-to-date. At the very least, "your iOS is too old to use the app I want to recommend" would not become a constraint for this question for at least 3-5 years from the time this question is asked!