File System Tile Store
Filesystem-backed TileStore for iOS. One root directory per content key under baseDirectory; tiles live at ${baseDirectory}/${contentKey}/${z}/${x}/${y}.bin.
ETag / Last-Modified ride alongside in a ${y}.meta companion file written only when at least one of them is set on the blob — most XYZ servers don't supply either, so the common case stays one-file-per-tile.
No locking — concurrent writes to the same tile are last-writer-wins. Acceptable for the LRU-driven tile-pyramid pipeline where double-write means double-network and not data corruption.
evict honors a bounded CachePolicy by dropping the oldest tile files (by mtime); an unbounded policy is a no-op.
Functions
Refresh a tile's freshness timestamp WITHOUT rewriting its bytes — the conditional-GET 304 Not Modified path. Restarts the stale-while-revalidate window so a still-current tile isn't re-requested every frame. Default no-op for stores that don't track freshness.
bumpValidatedAt for many tiles at once — keys packed by tileKey. Stores that commit per call should override this with a single-transaction implementation so a coalesced restamp burst costs one commit instead of one per tile.
Drop a tile from the store (after a server-side delete, manual eviction, etc.).
Persist sector as the store's content bounding box — the data-availability extent a bulk download records (e.g. gpkg_contents). Default no-op for stores without one.