← All posts

Product update4 min read

Directions in feet, and each leg said only once

Build 265 speaks walking distances in feet when the iPhone is set to US or UK measurements, and stops repeating a leg in its last meter, so the next turn is said at the corner.

Until build 265, ICIDO spoke every indoor walking distance in meters, wherever the iPhone was set up. Build 265 changes that, and fixes a second problem found along the way: a leg of a route could be announced twice, and the repeat pushed the next instruction past the corner.

Build 265 went to TestFlight as part of the work on version 1.4. The version on the App Store is 1.3.

Distances follow the phone's setting

Walking directions now follow the iPhone's measurement system, in Settings, General, Language & Region, Measurement System. Set to US or UK, ICIDO says "Go forward 40 feet, then turn right." Set to metric, it says what it said before, word for word.

The setting reaches every place a distance appears: the spoken directions, the words under the destination pill, the pill's own figure, the answer to "how far now?", the answer to "what's around me?", and the length of a previewed route. On the pill, feet are shown as "40 ft".

The setting is read for every sentence, not stored once. Change it and the next sentence uses the new unit.

Steps people can act on

A distance is only useful at the precision someone can walk to. In meters, ICIDO already rounded to half-meter steps under 10 m and whole meters above that, because the position the phone tracks is not more accurate than that. Under a meter, it says "less than a meter".

Feet needed their own steps. ICIDO uses whole feet under 20, fives under 100, and tens beyond that. Under 3 feet it says "less than 3 feet". Because the smallest figure is 3, the unit is never singular, so there is no "1 feet" to get wrong.

Apple's system formatter has a setting for road distances. At walking scale it is too coarse: it reads 3.7 m as "10 feet". A foot is defined as exactly 0.3048 m, so 3.7 m is just over 12 feet.

Rounding also has to keep a sentence true. When describing what is around, ICIDO looks up to 8 m ahead for clear floor. When the floor stays clear for the whole 8 m, it says "open floor for at least" that distance. In feet, 8 m comes out as 25 feet, rounded down, so "at least" stays honest.

Metric output was checked against the old wording at every centimetre up to 80 m, so that metric sentences in that range did not change.

The same leg, said twice

ICIDO speaks each instruction when it applies, not on a loop. To do that, it has to know whether the instruction in front of it is new or just the old one with a smaller number. A part of the app called the instruction gate makes that call. It compares instructions with their numbers removed. "Go forward 8 meters, then turn right" and "Go forward 5 meters, then turn right" are the same action, so the second is not said.

The gate removed digits, and only digits. The unit stayed behind. So "1 meter", "12 meters" and "less than a meter" looked like three different actions. The last has no digits at all. Any leg longer than a few meters was announced again in its last meter, as if it were new: "Go forward 1 meter, then turn right."

The repeat had a second cost. Each sentence holds the next one back for a few seconds. A repeat in the last meter restarted that wait just before the corner. Whatever came at the turn came late.

On a simulated L-shaped corridor, the next instruction came after 12.0 m of walking, 4 m past the turn. After the fix it comes at 8.0 m, at the turn.

Removing the whole distance

The gate now removes the entire distance phrase, not just its digits. That includes "less than a meter", "less than 3 feet" and the wording for a distance that cannot be worked out. The list of phrases it removes sits next to the code that writes them.

A list like that can fall out of step. Someone adds a new wording to one place and forgets the other. To catch that, the test fixtures sweep both units through the gate. The tests were themselves mutation-checked, against the old digit-only gate and against a wording the list does not include. Mutation checking means breaking the code on purpose and confirming the tests notice.

A smaller fix in the same build

VoiceOver read the route pill's distance as "1 meters" for the last stretch of every route. It now says "1 meter".

Why the wording carries so much weight

Directions in ICIDO are never written by a language model. Every distance and turn is worked out from the map and the live position, because a wrongly spoken "left" is not something a listener can check. The same care applies to numbers. A route is found across 12 cm cells and measured on the map, not walked, so a previewed route's length is always given as "about" a distance.

That makes the sentence the product. If it is said in a unit the listener does not think in, or said twice, or said a few meters late, the map behind it can be right and the walk can still go wrong. Build 265 is about saying each step once, in the right unit, at the right place.

Related reading