I had eleven days to myself over the winter holidays (I live in Japan and my family in the UK). I decided that rather than feed myself half to death in front of Netflix, I would try to design, build and release an iPhone app using Swift.
I wanted to do this to brush up on Swift since I dabbled a few months ago and to see how far it's come, and to try out Realm, a very simple Coredata replacement. I also wanted to just release something to the AppStore; my other major side project will probably take the better part of 2015 to finish. Side projects have a tendency to gather resistance as they go on because the realisation begins to settle in that your simple idea actually wasn't so simple. While keeping your eyes on that distance goal it's important to remind yourself what it feels like to ship something.
The app
I used to use the Omnifocus application and loved the idea of nested to-do lists, and specifically with the simple idea of having parent items automatically complete when all their child items are complete.
I decided to build a simple checklist with this functionality: items can have child items, which appear nested (inset from the left) and have a completed status. Parent items reflect the completed status of their children with a progress indicator. If 2 out of 8 of an items children are complete, the progress indicator would show 25%.
Adding items in quick succession should also be easy; once you've entered one item, you can easily add another one as a child of it, or add another as a sibling of it.
And that's pretty much it. No syncing. No deadline dates. No tags or search. I'm saving some of those for version 2.0 (I only had eleven days, excluding those where I went outside and talk to people)
Thoughts on Swift
Swift is a lot better to work on now that it was a couple of months ago. Auto-complete fills out your closures, which helps tremendously. Compilation is faster. Xcode had less of those "I don't know what to do about syntax highlighting right now" freakouts.
Overall coding in Swift is more concise than Objective-C and is really a pleasure to work on. When the time comes for me to contribute to an app for my day job with Swift I'll be happy enough.
I do like having header files in Objective-C though; I love having contracts between classes easily visible in one place. Swift has access modifiers, but no real way of showing a list of methods/properties available to client classes (other than using protocols)
Realm
Realm is nice, and a welcome alternative to Coredata which seems absurdly complex by comparison. I would ideally like to build my apps with a persistence layer, and have my view controllers (and view models) know nothing about how I'm saving my objects to disk, but both Coredata and Realm don't practically know this. Coredata because you have to be aware of what thread your context was created on, and Realm because every single mutation to a Realm object must be enclosed in write/end-write.
If you're already familiar with Coredata there isn't a massive benefit to using Realm other than it's easy to set up, but if you're relatively new to iOS then Realm has much less of a learning curve. I don't regret using it for this project and will continue to do so. For my more complex projects I'll stick with Coredata for now.