← All posts

Product update3 min read

Following a person who keeps moving

Build 277 lets ICIDO guide you to a paired iPhone in the same place. The goal follows the person, and pairings are now proved without sending the secret.

Build 277 adds a new kind of destination to ICIDO's Go to list: a person. If another iPhone is paired with this one, and both are in the same place, ICIDO can guide you to it. The route keeps up as the person moves.

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

What pairing is

Pairing lives in Settings, under Paired devices. The other device is either another iPhone running ICIDO or an ICIDO Companion robot. While the pairing screen is open, ICIDO lists the iPhones running ICIDO and the Companion robots nearby. One tap asks a device to pair, and its owner taps Allow. There is no code to type.

Once paired, your position inside the place you are navigating goes straight to the other device, and a paired iPhone's position comes to you. That position is where you are and which way you face, plus the place's name and scan date, and the name you gave the iPhone. It travels over an encrypted device-to-device link, never through a server, and only while ICIDO is open. Two further switches, each off until turned on, can add to what is sent. The privacy policy describes both.

A person in the Go to list

When a paired iPhone is in the same place and has been found there, the Go to list shows it first, under Paired devices, with how far away it is.

Choosing it starts a route to it as to a tagged spot. The difference is that the goal follows the person. As they move, the route target moves to their latest position. Moves of less than half a metre are ignored. Larger moves are re-planned at the usual pace.

Arrival is set at one metre, a step away. The arrival is spoken in the form "Sam's iPhone is here."

The timer that never fired

The first version moved the goal from a one-second timer on the navigation screen. It was tested on two Simulators. The simulated person walked from one room to another, and the route kept going to the first room.

The timer never fired there. The navigation screen redraws with every camera frame, and the goal was never moved.

The fix moved the job out of the screen and into the route planner. At every re-plan, the planner now asks where the paired device is, and moves the goal itself. The screen's only part is to supply the latest position it has from the link. Nothing depends on a timer kept by the screen.

When the person goes quiet

The link runs only while ICIDO is open. And the person being followed can walk out of the scanned place. If the paired device goes quiet or leaves the place, the route keeps to where it was last.

Build 279 made that state visible. Each paired device has a last sighting. It is kept in memory only, and it stays after the device disconnects, until ICIDO closes or the device is removed. On the maps it is drawn as a hollow amber ring with a name and an age, such as "Sam · 3 min". The Go to list marks it "last seen". A route to it says "This is where … was last seen."

Proving a pairing without sending it

A route to a person depends on the position arriving over the link coming from the device that was actually paired.

An earlier design sent the stored pairing secret when two paired devices met again. That gap was found during work on the robot's side of the link. A device's ID travels in every invitation. So anyone could collect a robot's ID, invite with it, receive the secret, echo it back, and receive the person's position.

In the current design the secret never travels after pairing. Each connection starts with a fresh one-time value, called a nonce, from each side. Each side answers the other's nonce with a proof: an HMAC-SHA256 code, keyed by the secret. Nothing flows until both proofs check. A device paired under this scheme that comes back without a nonce is refused as a downgrade.

The change was tested on two Simulators, with paired iPhones reconnecting by proofs.

What did not change

A paired person can be routed to only when both iPhones are in the same place and the other one has been found there. Nothing paired devices send reaches ICIDO's server, because the link between them never goes through one. What changed is that a destination can now move, and the route moves with it.

Related reading