SwiftUI Jam
Last weekend was the first (and hopefully annual!) SwiftUI Jam, which I had a lot of fun taking part in. For a completely remote event I found it to have a surprisingly communal feel, with lots of great discussions and tips flowing through Discord all weekend.
My project for the jam was an app I brainstormed that same weekend with my wife, Emily, based on one of her ideas: a toddler book reading tracker. Most reading tracker apps aren’t designed for super short books that you’re reading over and over and over again, day after day, and we thought it would be fun to be able to see how our son’s interest in books develops over time. When we read to him, we’re reading between 5-20 books a day, and he often seems to go through phases of obsession with certain books (he’s now at the stage where he brings us the books we’re going to read) that might be fun to track & chart.
Another thing I liked about this idea was that I could see a clear path from a weekend’s work on a prototype to shipping a minimum viable product and future updates post-jam. Here’s what I wrote as a feature list at the start of the jam:
List of books with number of times read & date last read
Flow for adding a new book (stretch goal: isbn scanner and lookup)
Flow for marking a book as just read
Flow for marking a book as read with a past date
Stretch goal: an Apple Watch app, since I often don’t have my phone with me when reading to 👶.
I didn’t end up getting to any of my stretch goals, or the flow for adding past read dates, but I did get the other main features built and fully functioning, and had a lot of fun while working on them.
Some technical takeaways…
While I’ve now used SwiftUI for just about every new screen and UI component I built for Picky over the last six months, they were all embedded within UIKit view controllers and working with a pure SwiftUI app has a different feel to it, especially when it comes to data flow.
While you get some really nice out of the box functionality when using Core Data, it really is showing its Objective-C origins and just doesn’t feel right with Swift (especially optionals). I think I’m going to explore some options for how to more naturally integrate it with some sort of middle layer to hide some of the rough edges from my pretty SwiftUI code.
I barely scratched the surface of what it can do, but the ButtonStyle protocol is a really neat way to customize controls.
I didn’t end up having any time to play with animations but I saw a lot of really inspiring work from other folks taking part in the jam. Definitely making it a goal of mine to really put SwiftUI’s powerful animation potential to use.
If you’re curious my somewhat hacky code (remember, this was a project done in one weekend, primarily while 👶 was asleep) is here on GitHub.
Lastly, here are a few screenshots to give you an idea of where I ended up at the end of the weekend:



