IosLocationNameResolver
iOS LocationNameResolver via CoreLocation's CLGeocoder (the CLGeocoder counterpart to Android's Geocoder). reverseGeocodeLocation is asynchronous and callback-based; it is bridged to a suspend point with suspendCancellableCoroutine.
Every failure path — geocoder error, empty placemark list, or a placemark with no usable locality — resolves to a coords-only PlaceName, so the caller always has a label. Never throws.
As on Android, the real geocoder needs network; an app running fully offline should bind its own deterministic/offline LocationNameResolver instead. This is the connected-device path.