October 3, 2019

Combine's Sequence Publisher Missing First Element

Just had a fun run in with a bug in Combine. Any Sequence can produce a Publisher that publishes each element in the sequence when you subscribe to it. You might have a custom sequence implementation that counts from 1 to 9: final class Incrementer { var value = 0 func next() -> Int? { value += 1 guard value < 10 else { return nil } return value } } extension Incrementer: Sequence { func makeIterator() -> AnyIterator<Int> { return AnyIterator { self.

October 2, 2019

Plantry 3.4: Search

After a brief holiday in 3.3, Search is now back in Plantry and it’s better than ever. Built using SQLite’s FTS4 it enables our users to filter recipes based on ingredients, their name and so on. This is something we’ve been wanting to do a long time, feels great to finally ship. Many thanks to Gwendal Roué for his amazing work on GRDB.swift and the quick responses to issues. I also finally had a use for the quintessential reactive programming example: debouncing search queries!

October 1, 2019

Using Combine to Supplement Delegates With Publishers

Anyone who’s ever written an iOS app has come in contact with the delegate pattern. It’s a great pattern and fills an important role in iOS development. However, sometimes when you’re writing your own custom classes it can feel like a bunch of boilerplate just to notify a delegate that something happened. You might resort to adding a couple of callback properties instead, but those come with their own baggage.

September 18, 2019

Plantry Goes Dark Mode

When we first started work on Plantry it had another name and a different look. The rumors of an OLED iPhone were rampant at the time, it was too tempting to not make an app with a true black look. After a while we came to the conclusion that maybe it was more appropriate for a cooking app, commonly used in a bright kitchen, to have a lighter and more friendly look.

February 25, 2019

Plantry 2.8

Realized I’ve been terrible at promoting my own work. Last post mentioning my app was in October. Anyways, Lita has been renamed to drumroll Plantry! A bit more international, a bit more playful and on the nose. It’s about plants. And plans. And trying new foods! Version 2.8 is waiting for review as we speak. Since version 2.3 — which is the last version I blogged about — we’ve introduced a way of manually picking any recipe you want for a plan, instead of just shuffling.

February 25, 2019

I really have to streamline my blogging workflow. Running CLI commands and manually keeping track of microblog numbers and committing and pushing is too high of a barrier to blog often. Maybe some cool Shortcut.app workflows and Working Copy / iA Writer integrations could be cool. Someday…

February 25, 2019

Added a Screen Time limit to social media apps on my iPhone. Set it to an hour. It had the interesting side effect of shortening my Instagram sessions because I want to preserve my precious time. Same with Facebook and Twitter. It almost completely killed the aimless scrolling. Made each app visit more “purposeful”. Will probably slowely try to decrease the time week by week.

October 12, 2018

Lita 2.3

Yesterday we released Lita version 2.3. Among a number of bug fixes and other improvements there are two major changes: You can now pick from a number of alternate app icons. We love being able to make our favorite apps look great on our own personal homescreens, so we wanted to bring this feature to Lita. We repainted the entire app white. We started out with a black background in Lita.

July 31, 2018


A couple of days ago the venerable @grapefrukt, aka Martin Jonsson, released his new game, Holedown. And it is great! I’ve loved Martin’s previous games, Rymdkapsel and Twofold Inc. so jumping on Holedown was a no-brainer. It’s a delightful brick breaking game with simple but effective physics, good music and great sound effects. My current run is at 788m down the blockhole with 99 balls. Can you beat me? ;)

July 27, 2018

Finally took the time to learn Katakana. Been putting it off for like two years. It took ~two hours spread over two days.

Thanks @tofugu, for your learning guide!