All posts

Your bug reports, shipped the same week

Quartermaster 1.1.3 reached the App Store, then spent a week getting rebuilt by the people using it. Most of the fixes arrived over the air: no re-download, no account, nothing about you collected to make it happen.

Quartermaster 1.1.3 went out as an App Store update, a fast follow-up to the launch build put together from the first two days of reports. Then it spent a week getting better without another trip to the App Store. Most of what changed came straight from a message with a screenshot, and most of it reached you over the air.

That last part is unusual enough for an iOS app to be worth explaining.

Fixes that don't sit in the review queue

An App Store review takes a day or two on a good week. For a bug that is getting in the way of thousands of people right now, that is a long time to do nothing.

So the reports that can be fixed in JavaScript don't wait for it. They ship over the air. The app picks up the patch quietly on its own, and fully closing and reopening it twice puts you on the newest one. No visit to the App Store, no re-download, no badge nagging you to update.

Over-the-air updates have earned some suspicion over the years, so it is worth being plain about how they work here:

  • Everyone on the public build gets the same patch. There is no staged rollout quietly picking who tests it first.
  • The app still has no account and no analytics, and the update check adds neither. It asks for the current patch and nothing else.
  • The changes over-the-air can't touch, the native parts iOS compiles, still go through a normal reviewed build. It is not a side door.

The reports that turned into fixes

qui was hiding your newest torrents. The app asked qui for its torrent pages starting at page one. qui counts its pages from zero. So the two hundred newest torrents were quietly missing from the count, the list and Pause, and had been since the day qui support landed. It reads the whole library now, up to ten thousand torrents, loading the pages in parallel so a big seedbox stops stalling the launch.

Deluge took three tries to pin down. Deluge kept dropping its session for a handful of people, and each fix uncovered the next layer. First: when Deluge clears its old session and issues a fresh one in the same breath, the app was keeping the cleared one. Then a reverse proxy setting its own cookie could push the Deluge session out entirely. Then the phone itself could cling to a stale cookie from an old proxy and send that instead of the new one. Three separate cookie bugs, each found because someone kept reporting the same symptom. If Deluge still drops on your setup, the error now quotes exactly what Deluge said, so the next report starts further along.

The library, the moment the app opens. A stack with thousands of films used to leave you waiting at launch while every library loaded from scratch. The app now remembers your Radarr, Sonarr and Lidarr libraries between sessions, so they are on screen straight away and refresh quietly behind you. Posters arrive in the phone-sized versions your server already keeps, so grids fill faster and use a fraction of the data away from home. Only the lists you already see are kept, never your keys, and all of it clears when you remove a service.

Not everything was a fix

Once the basics held up, the requests turned to features. Editing Plex metadata from your phone was the one nobody expected. Open a Plex library, pick a title, and change its name, sort title, summary and labels. Plex locks the fields you touch so a library scan can't quietly undo the work. The official Plex apps don't do this one.

A few of the others that landed in the same week:

  • Radarr and Sonarr show a green pill on their card when a new version is waiting. You read the server's own release notes first, then install, if you have turned that on. It is never automatic, and a containerised service says so plainly rather than offering a button that does nothing.
  • Tautulli gained a full play history: who watched what, when, on which player, with the town and country under each IP, looked up by your own Tautulli. Nothing leaves your stack.
  • Running a second profile stopped meaning starting from scratch. Migrate between profiles copies the services you tick, with their settings and sign-ins, across from one profile to another.
  • A title's page split cleanly in two. About holds the story and cast; Manage is purely what your server holds, the codecs, languages, quality, size and file. The extra facts fill in from the same lookup that already powers trailers, so they cost no new requests.

What over-the-air can't do

It is worth being straight about the limits. Anything that touches the native side of the app, the parts iOS compiles, can't ship this way. When one of those is in the notes, it came through a normal App Store build, reviewed like everything else. Over-the-air carries the everyday fixes, and that is all it is for.

Next up: 1.1.4, in beta first

That is also why the bigger changes work differently. 1.1.4 is a full App Store build, and it goes out to the TestFlight beta before it reaches everyone. New service connections get tested against real instances first, so a module is proven on other people's stacks before it lands on yours.

Penciled in for it:

  • Arcane, full support for the Docker manager: environments, containers, stacks and updates.
  • Dispatcharr, for the IPTV side: channels, playlists and EPG health, beside the rest of your stack.
  • ReadMeABook, audiobook requests and downloads through the same flow your films and series already use.
  • Drag to reorder, so Home, the Hot Bar, the tabs and your custom links rearrange by dragging, done once and done properly.

If you want a look before any of it goes live, the beta is where it lands first.

The loop underneath all of it is simple. A report with a screenshot is still the fastest way a fix reaches your phone, and none of it depends on the app knowing a single thing about you. Your keys and your servers stay where they are, on your device and on your network, through every patch.

Written while building Quartermaster, a native iOS app for self-hosted stacks.