RSSAmplifier

Blog

I am Simme

Recent content on I am Simme

iamsim.meRSS feed ↗20 posts

Latest posts

The Parting

We have known each other for half of our lives. Been together for just a little less — almost 16 years. That’s a pretty long time, both in relative and absolute terms. However, the time has come to part ways. Having grown up together it will be a little like learning to stand again, but on one leg because the other leg walked off in another direction. Sara and I have made countless of…

Composable Architecture and UIKit: Collection Views

In the first installment of this blog series on UIKit and The Composable Architecture we talked about how we can reduce the boiler plate required to setup a view controller powered by a Store. This post will build on that and see what it takes to implement a collection view. The first thing you need to know about rendering items from a TCA Store in a table or collection view is that we won’t…

untitled

Had to change how the RSS feed is generated in my Hugo install. Which is why they no longer include the full post. Sorry about that. I’ll see what I can do to fix it.

Composable Architecture and UIKit: The View Controller

This will be the first in a — hopefully — long series of posts about building a UIKit app using The Composable Architecture, developed by Brandon Williams and Stephen Celis of PointFree.co fame. If you do not subscribe to Point-Free I highly suggest you take a look at some of the free episodes to get you started. If you’d like to sign up, here’s a referral link that’ll give me…

Black Lives Matter

I’ve been meaning to post something online for weeks now. I’ve made excuses for myself. Excuses like “I don’t have a very big following, nothing I say will make a difference”. But that’s fucking bullshit. Every voice matters. The last few days have made me realize that I don’t know close to enough about the struggles of minorities. Of course I am well…

Clicking Background Windows

Here’s a little reminder that by holding down command you can send clicks to a view in the background without the current app losing focus. Handy when a big iPad simulator and Xcode window doesn’t fit side-by-side!

untitled

I really wish there was some better built in way of building forms in iOS (Catalyst). I know SwiftUI Forms is a thing. But I want to create a “Mac native” form. I should probably learn AppKit one of these days. But I want to be able to run this app on an iPad as well.

Efficient Text Navigation on macOS

A while back I noticed my wife using the trackpad on her MacBook Air to select text and felt this inner little nerd know-it-all poke my brain. And so the idea for this blog post was born. I cannot remember when or how I learned these tricks. Probably as an accident when I was learning HTML as a ten year old, writing all caps tags. Anyway, I’ve been thinking about jotting down these tips for…

untitled

I had a peak of interest for SwiftUI a while back. But after that experience I feel like I only want to build “handcrafted artisanal” UIKit apps instead. Getting to 90% is WAY faster with SwiftUI. But getting to insanely great takes another 90% and what feels like a lot of hacky code.

Tangerine Habit Tracker

Tangerine is the first habit tracker that I’ve been able to really stick with. It’s a pretty new app but came out of the gates strong. If you’re looking for an app to help you keep on track with all your 2020 resolutions1 I can’t recommend Tangerine enough. I have a few quibbles of course. Like completing a task after midnight breaks your streak. I understand the reasons…

Using Self Executing Closures to Run Code in SwiftUI

Not being able to run arbitrary code in SwiftUI view builders can be quite annoying. The other day I realized it’s possible to use self executing closures to work around this! Here’s a contrived example that creates a stretchy header: struct ScrollThing: View { var body: some View { ScrollView { VStack(spacing: 0) { GeometryReader { g in Color.white .offset(y: { let offsetY =…

UICollectionView Ergonomics

One of my favorite things in UIKit is UICollectionView. I love how versatile it is. With iOS 13 it got even better with the diffable data source and compositional layout APIs. However, when dealing with collection views there’s a lot of boiler plate one has to take care of. In this post I want to share some of the code I’ve written to make working with collection views a bit nicer.

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…

Plantry 3.4: Search

After a brief holiday in 3.3, Search is now back in Plantry and it&rsquo;s better than ever. Built using SQLite&rsquo;s FTS4 it enables our users to filter recipes based on ingredients, their name and so on. This is something we&rsquo;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…

Using Combine to Supplement Delegates With Publishers

Anyone who&rsquo;s ever written an iOS app has come in contact with the delegate pattern. It&rsquo;s a great pattern and fills an important role in iOS development. However, sometimes when you&rsquo;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…

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.

Plantry 2.8

Realized I&rsquo;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&rsquo;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&rsquo;ve…

untitled

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&hellip;

untitled

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 &ldquo;purposeful&rdquo;. Will probably slowely try to decrease the time week by week.

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.