1) Core Data is more than just SQLite wrapper, it manages objects, relationships, fetching, faulting, ...
2) Having 2 context: 1 main and 1 background that are both backed by the persistent coordinator. In modern Core Data stack, NSPersistentContainer has default viewContext already, we just need another newBackgroundContext
3) Never use a fetched NSManagedObject outside its context's queue.
4) The viewContext is for fetching NSManagedObject on the main queue, and those objects are meant for read only. All mutating operation should be in the background context.
5) Better, like I usually do, is to treat CoreData as a cache, and use plain old struct for UI. This reduces dealing with faulting and optional
6) Using struct that mirrors Core Data NSManagedObject, it looks verbose (you can use code generator or Sourcery for this) but it's safer
7) A nice trick to quickly convert struct to NSManagedObject is to use reflection with Mirror. NSManagedObject subclasses from NSObject so it is key value compliant
1) Scratch your own itch. If you don't have any itch to scratch, stop here. This is awkward. Go travelling. Go exploring the world. The world always has problems and needs solution.
2) Build any service, app or website. Along the way you'll find tons of things you need that and unsolved by existing solutions, and tons of things you can improve upon.
3) Sign up for some paid newsletters to find ideas. This is the worst. This is like someone browsing through a tatoo catalog. You're doing things for trend, for money, not for your self drive 👎
1) "earning up to $1 million" means proceeds, not sales. This is what we get after Apple's cut. "up to" means $999.999
2) "if they earned up to $1 million in proceeds during the previous calendar year". This means that if $1M is surpassed, the standard rate (30%) kicks in for the rest of the year, and also next year.