search runs on the iPhone against the index. It needs no network connection. Rollup learns only how many searches ran, as a count in the SDK’s run reports, never what was searched.
What a query can say
Search reads the parts of the query it understands and matches the rest against what photos show and say:- Dates, such as “last spring”, “in March”, “2025” or a holiday.
- Media, such as “videos” or “screenshots”.
- Places: countries, cities, neighborhoods, venue names and kinds of places, such as “ramen” or “museum”.
- What photos show, matched against the image and its labels.
- Text in images, such as signs, menus and screenshots.
results.plan tells you how search read the query: its operation, its retrievalIntent, the visualText left to match after dates, media and places, and the sort.
Results
Results come most relevant first. EachSearchResult carries what the index holds about the asset:
id: the PhotoKit local identifier. Load the image yourself with PhotoKit.dateandtimeZone: when and in which time zone it was taken.mediaTypeandisFavorite.location: neighborhood, city, metro, country and coordinates.placesandcuisines: the venue its visit resolved to, and cuisines for food photos. Empty whenplacesis off.labels: what the photo shows, with probabilities.text: text read from the image, andscreenshotfor what was read from a screenshot.score,relevance,matchedTextandmatchReasons: why it matched.
Loading images
The SDK returns identifiers, not images. Use PhotoKit to load them:Errors
noIndex: nothing is indexed yet. Wait untilindexing.state.isSearchableis true.notConfigured: callconfigurefirst.accessRevoked: your app’s Rollup key no longer works. See Keys and revocation.

