• New Page
  • home
Menu

James Kelly

  • New Page
  • home
  • ⁦@Procreate⁩ how come time-lapse replay is unavailable (I also found a bug where time lapses stop at the point Proc… https://t.co/H0WK84dSIX
    Sep 24, 2020, 11:35 PM
  • Soo #iOS14 can only be debugged with Xcode 12 - the DeviceSupport workaround to keep using the stable, usable, prev… https://t.co/7lnjqYedCD
    Sep 24, 2020, 7:11 PM
  • According to #itunesconnect / #appstoreconnect analytics, iOS 14 doesn't exist?
    Sep 24, 2020, 4:35 PM
  • Just found that the Reference view in @Procreate 5X will auto-size to the content if you pinch-and-release 👌 (if it… https://t.co/12Nvi6sZak
    Sep 22, 2020, 9:29 PM
  • Just deleted derived data after a day of compiling in #Xcode . It was SIXTY GIGABYTES. What the actual fuck.
    Sep 22, 2020, 8:57 PM
  • RT @MengTo: So SwiftUI can wrap items inside a Lazy Grid by setting min/max 🤯 https://t.co/OCexE8ZMyX
    Jul 7, 2020, 12:49 PM
  • Is there really no way to change the backgroundhighlight color of a list row in #SwiftUI ? What am I missing?
    Jun 30, 2020, 9:00 PM
  • Having problem with the #appstoreconnect agreement banner not going away so I cannot update my app.
    Jun 26, 2020, 1:54 PM
  • 👍 https://t.co/EjlTHneJBO
    Jun 25, 2020, 8:08 PM
  • There's a lot being un-said in this wwdc about arm based Macs. No graphs showing the improved performance compared… https://t.co/fOS9dQK8bi
    Jun 22, 2020, 10:43 PM
icon.png

Complete. iPhone App

January 15, 2015

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.

← Forge workout appEffective iOS App Architecture →
Back to Top