AsyncImage повзрослел: HTTP-кэширование из коробки 🎇
🖼 Главная причина писать свой загрузчик картинок только что отпала. AsyncImage теперь уважает HTTP-заголовки кэширования, принимает целый URLRequest через init(request:), а asyncImageURLSession(_:) подставляет собственную сессию и URLCache на всю иерархию.
⚠️ И вот чего не пишут: у этих трёх вещей разные пороги доступности. init(request:) — iOS 15+ и бэкдеплоится. А вот автоматическое кэширование по заголовкам и asyncImageURLSession(_:) — только iOS 27. Так что «ничего не бэкдеплоится» это неправда, но и «всё доступно с 15» тоже. Кэширование идёт за сервером: ответы с no-store или вовсе без заголовков кэширования будут перезагружаться каждый раз. Политику можно переопределить на уровне конкретного URLRequest или подставленной сессии. Чего по-прежнему нет: контроля времени жизни и LRU-вытеснения, префетчинга и прогрессивного декодирования. Если нужно это — свой загрузчик всё ещё оправдан.