iOS · Swift
Unit Converter for iOS
Twenty-one categories of everyday conversion, all of them offline. Unit Converter now exists twice too: this is the iPhone and iPad build, written against SwiftUI rather than translated out of the Kotlin one, and it goes further than that build in a few places — arithmetic in the value fields, pinned conversions, and a Clock that handles daylight saving on any date you pick.
- Twenty-one categories — length, mass, temperature, area, volume, speed, fuel economy, EV efficiency, time, clock, digital storage, energy, pressure, power, angle, frequency, pay, and shoe and shirt sizing
- Pin a whole category or a single conversion —
Foot → Centimeter— to the top of the home screen - Type it how you say it:
12*3,1½,2 ¾and5'11"are read as arithmetic - Numbers read and written the way the device's region writes them —
1,5or1.5 - Drag the category tiles into your own order, with VoiceOver actions offering the same move
- Nine test suites over the calculator, the clock, locale number parsing, pins and share text
Swift · SwiftUI · Observation · Swift Testing
Screens
Captures from the app itself. Select any one to see it full size.
-
Pins first, then every category
-
Feet and inches, read as you wrote them
-
Cups and fractions, for the kitchen
-
Time zones, on the date you choose
-
Pay, worked from your own hours
-
Sizing, with its caveat stated
-
Search by symbol, not only by name
-
Dark mode, from the system palette
How it works
The second converter, written for iOS
The Android build is Kotlin over Material 3. This one takes the same twenty-odd categories and the same conversion tables and rebuilds the app around them in SwiftUI: state in @Observable stores, pins kept in UserDefaults, colours taken from the system's grouped backgrounds so the app looks like the rest of iOS in either appearance. The home grid lays out as many columns as fit — two on an iPhone, five or so on a large iPad, and a single column at accessibility text sizes, so long category names have room to grow rather than being truncated.
Writing it twice rather than once also let the second one go further. Pinned conversions, arithmetic in the value fields and the Clock's date picker are all in this build and not the first.
Typing the way people actually type
A value field here is not a number field. It reads 12*3, (2+3)/4, 1 1/2, 1½ and 5'11", and shows what it worked out to on a line under the row — = 36 — so the arithmetic is visible rather than silently applied. Numbers inside an expression are read the same locale-aware way as a plain number, so 1,5*2 is three in Germany.
The evaluator is deliberately forgiving about half-typed input: a trailing operator or an unclosed parenthesis is ignored rather than failing. That is what stops every other row blanking out in the middle of typing.
The Clock is a converter too
Rather than being a separate feature, world time is a category whose units are cities. Picking a date at the top rebuilds the whole category against that date, so a time converted for a day in March lands on the right side of each region's daylight-saving change. Cities can be added from every zone the device knows about.
Your own zone comes from the device's settings, and the app never asks for location — which the screen says outright, in the note above the rows, rather than leaving it to a privacy policy.
Pins, and the order you use them in
Both a category and an individual pair can be pinned. A pinned pair — US cup → Milliliter — opens the converter with those two units lifted to the top under their own heading and the rest below, so the conversion you pinned is the one you land on.
The tiles underneath drag into whatever order you use them in. On iOS 27 that is the system's reorder container; before it, a tile is a drag source and a drop target and takes the place of the tile it is dropped on. Dragging isn't available to VoiceOver at all, so the same moves are offered there as accessibility actions — the reordering works without the gesture, not just alongside it.
Nothing leaves the device
There are no network requests, no analytics and no advertising SDKs — pins, saved values and settings live in the app's own storage. The in-app feedback screen opens the reader's own Mail app with the message already filled in, so nothing is sent unless they send it themselves.
Ready for the store, not yet on it
The App Store listing is written and versioned in the repository rather than drafted in App Store Connect: copy, keywords, the privacy policy, the age-rating answers and the upload checklist all sit in docs/. So does render_store_assets.swift, which takes raw simulator captures and renders the captioned iPhone and iPad screenshots and the promo banner from them, so the artwork can be regenerated from a single command when the screens change. The screenshots on this page are those raw captures. The build itself hasn't been submitted yet — when it is, this page gets an App Store button like its Android counterpart's Play one.