It took a lot longer than I anticipated, but I replaced the poorly-designed SQLite database of the CodeMash Scheduler with a Core Data store.
I’m new to Core Data, so there was a learning curve involved (I highly recommend Core Data: Apple’s API for Persisting Data on Mac OS X). In addition, I insisted to myself that the app remain fully functional after every commit. That led to a long period where the app’s data was split between two data stores, which slowed me down.
Finally, I insisted on writing a migration step into the app. Because I never uninstalled the app from my iPhone after January’s conference, I discovered that the 1.0 version still (mostly) works. You can “favorite” some talks, and it records that fact in a SQLite table. It’s possible (though highly unlikely) that someone will mark some talks in this way, then upgrade to the next version of the app. I wanted to make sure they didn’t have to mark those talks again. It’s the little things that make an app useful.
That’s the big news. There are also a few minor changes that are worth noting:
- support for fast task switching, like any decent iOS 4 app;
- dynamically generate some lists that were previously hardcoded;
- replacement of the annoying full screen “loading” message with the subtler status bar network activity indicator; and
- a pre-populated Core Data store.
That last one deserves a brief explanation.
On startup in 1.0, we downloaded the contents of the CodeMash REST feeds and replaced the database contents (if any) with the results. This meant that, unless you had network connectivity, the app was unusable. CodeMash’s venue this January was in an area with terrible cell phone reception. Their wifi was also overtaxed by the presence of so many technical geeks, so the app was either useless, or people were repeatedly confronted with error messages about being unable to download data.
Because I don’t trust AT&T nor the Kalahari Waterpark Resort to beef up their offerings in time, CodeMash Scheduler will now come with a pre-populated Core Data store for improved offline use.
On a personal note, I am thoroughly enjoying Core Data. I know I’ve only just scratched the surface, but I can already see a lot of ways I can use it.