Writing these packages has also been a fun exercise in how to design APIs now that we have concurrency.
For example, subscribing to IMAP idles (pushed events), I borrowed the 'updates' pattern used in the new StoreKit 2 API. It's an AsyncStream that just runs forever, and gets iterated over when new events occur.
Big Mail 2, nay, ALL my apps, wouldn't be possible if it weren't for the generous contributions of others in the OS community.
I can't wait to give back, so that's why I plan to open source all of Big Mail's core packages: SwiftIMAP, SwiftSMTP, and SwiftEmail.
They're all super Swifty, modern, and hopefully instantly familiar to anyone who's used Foundation. #Swift
There's also a sister package, GRDBQuery, which gives you a @Query property wrapper for SwiftUI (similar to @FetchRequest in Core Data)
You're then able to write views that automatically update when anything in the database changes.
Here's all the code needed for the account picker in Big Mail. So clean.
Related: I binned off Core Data for Big Mail 2, and instead have been using the phenomenal GRDB by @groue
Not only is my app now faster and less buggy, but it’s so much easier to reason with. No weird managed contexts and elaborate dances to pass stuff between threads. Just simple, safe, Swift structs.
(Also, the documentation is INSANE) https://github.com/groue/GRDB.swift
Swipey swipe 🫵
Edit: this is swiping left on the message viewer, not tapping the List. Don't worry it's not a transition 😬
Here it is on iPhone: https://mastodon.notsobig.co/@phill/109942899530912122
And here's the rub with SwiftUI: I'm sure there are certain things I'm still doing “the wrong way”, despite doing this everyday, and reading all the docs and examples I can.
But because there have been so many genuine issues (as seen by others), my default position is “Well, the API must be broken then”. That's not a helpful mindset when debugging.
Building a low level IMAP/SMTP library has been a breeze compared to understanding how to use these APIs correctly 😅
🏳️🌈 Founder / Maker
Building that new email app.
Swift and rollercoasters are my thing.
Recovering VC.