Porting wormhole to iOS, macOS and Windows
It all started with me stumbling across the GitLab repository (now archived - I'll get to that later), cloning it and messing around with the code to get it to run on my new phone. This turned out to be surprisingly easy, given that it was written in Flutter and I already had quite some experience with cross-platform development in Flutter from work, where I built and maintain the app to control the printers, and that one works on Android, iOS, macOS, and Windows.
After the code was written and working on my iPhone, I wanted to merge it, but saw that there was already a year-old issue where someone asked for iOS to be supported. The maintainer of the project, Lukas Heiligenbrunner, said that it should be possible, but he'd need help, as he doesn't have a MacBook or Apple Developer account. I responded to that issue saying that I'd be happy to fill that role and merge my changes (which also included a lot of unrelated maintenance work already, because some dependencies needed upgrading for ease of porting).
He answered quickly and mentioned that there was other tech debt that needed fixing, like moving to GitHub for better CI integration, which I was happy to help with. I became a member of the new Wormhole App Organization with the task of first merging the PR with my changes and then helping maintain the app.
After a little bit of back and forth, the PR was merged, and I could now focus on some of the other tasks to make this project maintainable and modern. The first of which was improving the CI. This was done in many small steps over the course of many months, but I'm now quite happy where we are. The CI first tests for lint and formatting issues in both Flutter and Rust code, and then builds the app for Android, iOS, Linux, macOS, and Windows. This makes sure that there are no glaring issues quickly, and makes sure the app builds for all available platforms before any PR is merged.
For version tags, the CD pipeline now also automatically releases the Android and iOS versions to the stores, and creates a release with binaries for all platforms. This includes iOS, which I had to get through the App Store review process, which turned out not to be quite straightforward, as the team there needed to test the capabilities of the app but didn't have a second appropriate magic-wormhole client on hand. This was an easy enough fix though, as I just added special handling for a demo transfer code 999763-demoooooo-mode-transfer-that-should-never-collide that (hopefully) will never occur in an actual transfer and generated a QR code for the review team to scan.
With the release process now nailed down, I could focus on adding a few nice features, and handling issues by users that popped up. One thing that really helped figure out behavior on users' devices was the addition of a logging system that can export a zip of the internal logs and directly share those.
Since starting, I've done about 150 commits, closed 50 PRs and fixed 10 issues. (updated 2026-03-03)