Matt Massicotte
@massicotte.org
2.6K followers 1.3K following 1.7K posts
apple platform dev, outdoors, justice, games, he/him Every problem has a simple wrong answer https://github.com/mattmassicotte https://www.massicotte.org https://mastodon.social/@mattiem
Posts Media Videos Starter Packs
Reposted by Matt Massicotte
cykele.ro
New blog post! Retcon 1.4 got a lot faster. Much of that speed is owed to caches. Straightforward caches, oddly-specific caches, hard-to-invalidate caches, the works. Here's some details about them!

pending.design/making-retcon-...
Making Retcon fast: A cache for every need
Big speedups through bespoke caches.
pending.design
Reposted by Matt Massicotte
danielsaidi.bsky.social
The videos from @ioSKonf earlier this year are starting to roll out. The video from my talk Distribute & Monetize Closed Source SDKs with the Swift Package Manager is now available. I just realized I desperately need podcast voice training 😬

#swift #swiftui

danielsaidi.com/talks/2025/0...
Distribute & Monetize Closed-Source SDKs with the Swift Package Manager
I gave this talk at iOSKonf25, in Skopje, North Macedonia, in May 2025. on how to set up, distribute, and monetize a closed-source SDK wi...
danielsaidi.com
massicotte.org
I just went and unstarred/re-starred, which I *think* may be a crude hack to get it to show up in people’s GitHub activity feeds again.
Reposted by Matt Massicotte
dijamantina.bsky.social
I’ve been rebuilding my Swift projects from the ground up — and stumbled into something I call “Extreme Packaging.”

Every responsibility lives in its own Swift Package.

🧩 Full write-up → aleahim.com/ExtremePacka...
#Swift #iOSDev #SwiftPM #Architecture
ExtremePackaging
A Modular Architecture Methodology for Swift Projects By Mihaela Mihaljevic
aleahim.com
massicotte.org
Step 1, make friends on LinkedIn.
Step 2, help those friends find other social networks.
massicotte.org
Many teams just end up making their own. But a first party solution here would have been so nice.
massicotte.org
I strongly dislike LinkedIn, but I like people and finding ways to connect with them…
massicotte.org
My assumption is that someone with power decided “Combine is done”. And that’s incredible because I bet a few carefully-considered updates could make the migration off of it more clear, simpler, and less painful.
massicotte.org
Product! There are many people that use it exclusively.
massicotte.org
It is wild how dominant LinkedIn is at Swift conferences. It’s not even close.
massicotte.org
Oh well this was so kind of you to say!! Thank you so much!
massicotte.org
It started as a toy, but Empire has turned into the most complex package I've worked on. Macros, parameter packs, very tricky concurrency and generics. And now I'm looking at lifetimes and Span. Don't fully understand them yet, but I now get why it exists.

github.com/mattmassicot...
GitHub - mattmassicotte/Empire: A local persistence system for Swift
A local persistence system for Swift. Contribute to mattmassicotte/Empire development by creating an account on GitHub.
github.com
massicotte.org
Ok right I am familiar with this approach. I was too focused on the word “state”, and I wasn’t thinking of these things as state, even though of course they can be stateful. Thanks for the clarification!
Reposted by Matt Massicotte
swifteves.bsky.social
I made Auralog because I was fed up with migraine apps full of forms and steps—the last thing I want when I’m in pain.

Effortlessly capture a migraine instantly—or later when you feel better.
Auralog brings you back.

I’m taking my life back, and you can too.

OUT NOW
apps.apple.com/us/app/aural...
‎Auralog: Migraine Tracker
‎The effortless way to beat migraines. Zero effort logging. Maximum insight. Each migraine you track keeps the next one at bay. The smartest migraine app ever built. Auralog: Migraine Tracker helps y...
apps.apple.com
Reposted by Matt Massicotte
will-lumley.bsky.social
🚀 New blog post!

AsyncCombine: Because Async Code Shouldn’t Be Ugly

I brought back Combine’s sink, assign, and CombineLatest - but built powered by Swift Concurrency.

Observing @Observable from another ViewModel shouldn’t be painful.

Here’s how I fixed it 👉 lumley.io/blogs/async-...
AsyncCombine: Because Async Code Shouldn’t Be Ugly
When Swift first introduced Combine, I loved it. The syntax was expressive, pipelines were easy to follow, and @Published made state changes feel almost magical. But as Apple pushed us toward Swift Co...
lumley.io
massicotte.org
Something you might want to think about is that isolation (MainActor or otherwise) is a *constraint*. And you add it only because something is forcing you to. Unconstrained (ie non-Sendable) types are very powerful and flexible, but unfortunately they were also very difficult to use before 6.2.
massicotte.org
Hmmm what you are describing I have never seen done anywhere else. I would be very interested to read more about these techniques!
Reposted by Matt Massicotte
jefflewis.social
My team is hiring for someone to work alongside me doing lots of fun things with mobile apps. Don't get too warded off by the JS because we've got a lot of very modern Swift and Kotlin to write. #FediHire #swift
massicotte.org
This is good!

One part gave me pause. “on a different thread or executor”. Different thread yes. But I don’t *think* a different executor is actually possible. It might be, but I don’t immediately see how. Is it?
massicotte.org
Ohh huh! How does this work? It is aggregated? Are these reports tied to the user that submits them?
massicotte.org
Thanks to a single comment in a talk on Xogot by @migueldeicaza.bsky.social, I have now learned about the “Pit of Success”. I think it is *possible* I will be thinking about this concept for the rest of my life.
massicotte.org
Racism is rampant and I would expect no less, so while unsurprising it is still disappointing