Apple отгрузила iOS 27, Swift 6.4, переработанный SwiftUI,
новый Core AI, обновлённые Foundation Models и Xcode 27 с собственными
агентскими навыками. Ниже — лучшие фичи, примеры кода, разбор новых фреймворков, список сессий
must-watch и ссылки на group labs. Плюс свежий дайджест из канала t.me/iosdev.
Если есть пять минут, а не пять дней — вот концентрат того, что реально меняет жизнь iOS-разработчика в этом году.
Drag-and-drop переупорядочивание и swipe actions больше не привилегия List — теперь работают в ScrollView, lazy-стеках и кастомных лэйаутах. Reorder доехал и до watchOS.
WritableDocument, снапшоты и запись на диск вне главного потока. Документные приложения наконец получили инфраструктуру уровня Pages/Xcode с first-class доступом к URL.
Одно ключевое слово вместо простыни @available(macOS, iOS, watchOS…), async в defer, подавляемые предупреждения через @diagnose и куда более понятный type-checker.
On-device модель научилась «видеть» изображения, появился фреймворк Core AI для интеграции собственных моделей, а Private Cloud Compute — для тяжёлых запросов.
Новые официальные «навыки» (SwiftUI, модернизация UIKit, безопасность, C bounds safety и др.), которыми пользуется встроенный агент. Экспортируются через xcrun agent skills export.
iPhone-приложения становятся resizable — это важно для iPhone Mirroring и запуска на iPad. В Live Previews появились ручки изменения размера прямо в Xcode.
Главный фокус кейноута — Apple Intelligence и новый Siri. Но под капотом куда больше того, что касается именно нас.
Кейноут 8 июня Apple посвятила в первую очередь обновлённому, более «умному» Siri, расширению Apple Intelligence по системным приложениям и защите детских аккаунтов. Siri стал разговорчивее и больше не передаёт запросы сторонним ИИ-провайдерам по умолчанию.
Сквозная тема релиза — less boilerplate, fewer surprises, more control. Компилятор ловит больше ошибок конкурентности и объясняет их человеческим языком.
Одно ключевое слово заменяет перечисление всех платформ:
Availability shorthand
↗ Session 262 · What's new in Swift// Было:
extension Mission {
@available(macOS 27, iOS 27, watchOS 27, tvOS 27, visionOS 27, *)
func showStatus() { ... }
#if os(macOS) || os(iOS) || os(watchOS) || os(tvOS) || os(visionOS)
func makeLiveActivityWidget() -> some Widget { ... }
#endif
}
// Стало:
extension Mission {
@available(anyAppleOS 27, *)
func showStatus() { ... }
#if os(anyAppleOS)
func makeLiveActivityWidget() -> some Widget { ... }
#endif
}
Подавляемые и эскалируемые диагностики прямо на объявлении — без глобальных флагов компилятора:
@diagnose(DeprecatedDeclaration, as: ignored, reason: "Flying with surplus hardware")
func makeApolloSoyuzMission() -> Mission { ... }
@diagnose(StrictMemorySafety, as: warning)
func uplinkCommand(from receiver: inout Receiver, to computer: inout Computer) { ... }
@diagnose(ErrorInFutureSwiftVersion, as: error)
func fetchPosition() -> (x: Double, y: Double, z: Double) {
return self.rotation
}
Теперь в defer можно дожидаться асинхронной очистки. Параллельно компилятор стал диагностировать
два паттерна, которые раньше «проскакивали»: перехват ошибок внутри Task и
сохранение ссылки на task для последующего рандеву. Type-checker в большинстве кейсов,
где раньше падал в fallback-ошибку, теперь либо компилирует, либо даёт actionable-подсказку.
Появился синтаксис выбора модуля ::, атрибут @c для интеропа с Си и точные контроли инлайнинга и специализации:
// Module selectors: однозначный выбор модуля при коллизии имён
import Rocket
import GiftShopToys
let rocket1 = SaturnV() // неоднозначно: Rocket или GiftShopToys?
let rocket3 = Rocket::SaturnV() // ровно тот, что нужен
// @C: безопасная обёртка для C через Span вместо pointer + count
@C
func getAverageLaunchWindowLength(_ windows: Span<LaunchWindow>) -> Double { ... }
// InlineArray — массив фиксированной длины на стеке
func histogram<Values>(of values: Values) -> [256 of Int]
where Values: Sequence<UInt8> {
var result = makeInts(randomized: false) // [256 of Int]
for value in values { result[Int(value)] += 1 }
return result
}
// async прямо в defer
let landingTask = Task { try lander.fly(to: moon) }
defer { await orbiter.rendezvous(with: lander) }
try await orbiter.justHangOut(waitingFor: landingTask)
final class Spacecraft: Sendable со weak let, а также ~Sendable для явного отказа.internal и private версии по видимости свойств.Ref<T> / MutableRef<T> — безопасные ссылки без unsafe-указателей.Лэйаут ресайзится до 2× быстрее, состояние инициализируется лениво, а интеракции (reorder, swipe) больше не привязаны к List.
Переупорядочивание перетаскиванием на любом контейнере — два модификатора:
Drag & drop reorder · Session 271 (code-along)
↗ Session 269 · What's new in SwiftUIList {
ForEach(stickers) { sticker in
StickerListItemView(sticker: sticker)
}
.reorderable()
}
.reorderContainer(for: Sticker.self) { difference in
difference.apply(to: &stickers)
}
// Тот же приём работает и в LazyVGrid, и в кастомных контейнерах
Свайпы переехали в ScrollView и lazy-стеки — нужен лишь .swipeActionsContainer() на родителе:
ScrollView {
LazyVStack {
ForEach(stickers) { sticker in
StickerListItemView(sticker: sticker)
.swipeActions {
DeleteButton(sticker: sticker)
}
}
}
}
.swipeActionsContainer()
Выделенные вкладки (корзина, «Создать») — как в Apple Music, без хаков:
TabView {
Tab { EventsTab() }
Tab { HolidaysTab() }
Tab { FunTab() }
Tab(role: .prominent) {
CartTab()
}
}
Модель отделена от логики записи. WritableDocument + snapshot() снимают состояние,
а DocumentWriter.write() — nonisolated async, то есть I/O уходит с главного потока.
Можно сравнивать снапшоты и писать только diff.
@Observable
final class StickerDocument: WritableDocument {
static let writableContentTypes: [UTType] = [.stickerDocument, .png]
@MainActor
func snapshot(contentType: UTType) async throws -> sending PageSnapshot {
makeSnapshot()
}
func writer(configuration: sending WriteConfiguration) -> sending Writer {
Writer(contentType: configuration.contentType)
}
}
struct Writer<Snapshot>: DocumentWriter {
typealias Snapshot = PageSnapshot
let contentType: UTType
nonisolated func write(
content: sending PageSnapshot, to destination: URL,
previous: sending PageSnapshot?, progress: consuming Subprogress
) async throws {
// запись вне главного потока; можно сравнить с previous и писать только diff
}
}
Четыре новых API против тесноты на компактных экранах:
.visibilityPriority(.high) — что не уезжает в overflow.ToolbarOverflowMenu — куда складывать вторичные действия..topBarPinnedTrailing — гарантированно видимый элемент..toolbarMinimizeBehavior(.onScrollDown, for: .navigationBar) — прятать навбар при скролле.StickerPageView()
.toolbar {
ToolbarItemGroup {
UndoButton()
RedoButton()
}
.visibilityPriority(.high)
ToolbarOverflowMenu {
ChoosePhotoButton()
ExportAsImageButton()
ClearAllStickersButton()
}
ToolbarItem(placement: .topBarPinnedTrailing) {
ShareButton()
}
}
URLSession через .asyncImageURLSession().@State стал макросом с ленивой инициализацией @Observable-объектов — и бэкпортирован на iOS 17 / macOS 14..navigationTransition(.crossFade) рядом с зумом..alert и .confirmationDialog — прощай, отдельный isPresented.appearsActive.@Observable class StickerStore {
static let imageSession: URLSession = {
let config = URLSessionConfiguration.default
config.urlCache = URLCache(
memoryCapacity: 64 * 1024 * 1024,
diskCapacity: 256 * 1024 * 1024)
return URLSession(configuration: config)
}()
}
ForEach(pets) { pet in
AsyncImage(request: URLRequest(
url: pet.imageURL,
cachePolicy: .returnCacheDataElseLoad))
}
.asyncImageURLSession(StickerStore.imageSession)
// @State теперь макрос: @Observable-объект инициализируется лениво,
// ровно один раз за время жизни View (бэкпорт на iOS 17 / macOS 14)
struct StickerStoreView: View {
@State private var store = StickerStore()
var body: some View { ... }
}
// item-binding вместо отдельного isPresented
.confirmationDialog("Delete?", item: $stickerToDelete) { sticker in
DeleteStickerButton(sticker)
}
On-device модель поумнела, научилась «видеть» и лучше вызывает инструменты. А Core AI открывает дверь вашим собственным моделям.
API остался единым: структурированный вывод через @Generable и вызов Tool работают одинаково
для разных моделей. Главное — обновлённая on-device модель стала умнее в логике и tool calling.
Модель, контекст и учёт токенов
↗ Session 241 · Foundation Modelslet model = SystemLanguageModel.default
print(model.contextSize) // напр. 8192
let count = try await model.tokenCount(
for: "What are the Japanese characters for origami?")
// Управление «глубиной размышления» и инспекция usage
let session = LanguageModelSession()
let response = try await session.respond(
to: "Recommend a craft that doesn't require scissors.",
contextOptions: ContextOptions(reasoningLevel: .light)
)
print(response.usage.input.totalTokenCount)
print(response.usage.input.cachedTokenCount)
print(response.usage.output.reasoningTokenCount)
On-device модель получила vision-возможности: теперь в промпт можно передавать изображения. Это открывает целые классы приложений без облака.
// Новое в iOS 27: изображение прямо в промпте через Attachment
let response = try await session.respond {
"What animal is this?"
Attachment(UIImage(named: "mystery-pet")!)
}
Инструмент описывается типом Tool с вложенным @Generable-аргументом, а DynamicProfile позволяет на лету менять набор инструкций, инструментов и даже саму модель (например, уводить тяжёлые задачи на Private Cloud Compute):
struct SwitchModeTool: Tool {
let description = "Switch to a different mode."
let states: AppStates
@Generable
struct Arguments {
let mode: Mode
}
func call(arguments: Arguments) async throws -> some PromptRepresentable {
states.mode = arguments.mode
return "Successfully switched to \(arguments.mode)."
}
}
struct CraftProfile: LanguageModelSession.DynamicProfile {
let states: CraftProjectStates
var body: some DynamicProfile {
switch states.mode {
case .craftAnalysis:
Profile {
Instructions { ... }
SwitchModeTool(states: states)
}
case .brainstorm:
Profile { Instructions { ... } }
.model(states.privateCloudCompute)
.reasoningLevel(.deep)
}
}
}
Десяток новых системных фреймворков. Коротко — что это и зачем смотреть.
Запуск и интеграция собственных on-device ML-моделей на Apple silicon.
documentation/coreai →Анализ фото и видео на устройстве: FaceGroupAnalyzer группирует лица, VideoAnalyzer находит хайлайты и ключевые кадры.
Тестирование интентов, сущностей и запросов, а также интеграции со Spotlight и Siri.
documentation/appintentstesting →Системные подсказки действий, которые приложение может предлагать пользователю.
documentation/suggestedactions →Отправка медиа из приложения на ТВ, колонки и другие устройства через media device extension.
documentation/avsystemrouting →Публикация контролов воспроизведения на Lock Screen, Control Center, Apple Watch и CarPlay.
documentation/nowplaying →Сделать плеер-железо доступным системе: стрим из любого приложения через media device picker (как AirPlay).
documentation/mediadevice →Нодовый GPU-фреймворк для симуляций частиц и compute-графов в RealityKit.
documentation/computegraph →App-расширение по протоколу CrashReporterExtension для инспекции упавших процессов и создания крэш-репортов.
Сообщайте системе состояние приложения через именованные домены и структурированные переходы; интеграция с MetricKit и Instruments.
documentation/statereporting →Apple встроила в Xcode собственного агента и снабдила его «навыками», написанными авторами фреймворков.
xcrun agent skills export — можно забрать и переиспользовать.killall -9 CoreDeviceService как лечение зависших симуляторов (t.me/iosdev/2016).100+ видеосессий за 8–12 июня. Вот выжимка для iOS-разработчика — кликабельные ссылки на developer.apple.com.
Group labs у Apple выходят видео с панелями инженеров и дизайнеров; полные транскрипты доступны на странице каждого видео. Ниже — то, что искать.
| Group Lab | Что обсуждают |
|---|---|
| SwiftUI | reorderable/swipe в любом контейнере, новый Document API, тулбары на ресайзящихся окнах, кэш AsyncImage, @State-макрос. |
| Swift | anyAppleOS, диагностика конкурентности, async в defer, module selectors, InlineArray, интероп с C через @C/Span. |
| SwiftUI для новичков | С чего начать в SwiftUI: View и состояние, навигация и лэйаут. Базовые вопросы приветствуются. |
| Coding Intelligence, ML & AI | Foundation Models (vision на устройстве, tool calling, reasoningLevel), Core AI, Private Cloud Compute, агентский Xcode. |
| Power & Performance | Новый планировщик CPU, профилирование app responsiveness в Instruments, ускоренный лэйаут, ленивое состояние. |
| Privacy & Security | Разрешения, защита данных, новые требования и API этого года, практики аудита. |
| visionOS | Новинки visionOS и Spatial Preview, расширение Mac-приложений в пространство вокруг пользователя. |
| Accessibility Technologies | VoiceOver, Dynamic Type, новые accessibility-API и инклюзивность по умолчанию. |
| Camera & Photo | Захват и обработка, новые возможности AVFoundation и PhotoKit. |
| SwiftData скоро | Новинки SwiftData, миграции схемы, интеграция со SwiftUI. |
| Xcode Tips & Tricks скоро | Agent Skills, Device Hub, Live Previews с ресайзом, отладка и автоматизация сборок. |
| Apple Intelligence скоро | Системные возможности, интеграция через App Intents, приватность данных. |
| Machine Learning & AI скоро | Core ML, Core AI, on-device модели и инструменты их подготовки. |
| watchOS скоро | Новинки watchOS, в том числе reorder в SwiftUI впервые на часах. |
| App Store Connect скоро | Дистрибуция, кастомные баннеры, аналитика и управление релизами. |
| Icon Composer скоро | Многослойные и Liquid Glass иконки для всех платформ. |
| Safari & Web скоро | Новинки Safari, WebKit и веб-стандартов этого года. |
| Ресурс | Что внутри |
|---|---|
| Транскрипт SOTU | Полный текст Platforms State of the Union — вкладка Transcript с таймкодами на странице видео. |
| SwiftUI guide | Гид Apple: сессии, документация и сэмплы по новинкам SwiftUI в одном месте. |
| iOS guide | Что нового в iOS 27 для разработчика и куда смотреть в первую очередь. |
developer.apple.com/videos/play/wwdc2026/<номер>/ есть вкладка Transcript с полным текстом и таймкодами — её удобно копировать в заметки и индексировать.
Пока официальные видео заливаются на Apple Developer, в канале iOS Dev уже разобраны самые сочные детали WWDC26. Дайджест последних постов:
Модификатор reorderable() для переупорядочивания внутри контейнеров и между приложениями. С примером карточной игры. Доступно с iOS 27.
Топ-фича нового Xcode: очистка Derived Data буквально в два клика прямо из IDE.
Читать в Telegram →Симулятор не стартует? killall -9 CoreDeviceService в терминале — и всё снова работает.
Новая роль вкладки .prominent позволяет повторить дизайн Apple Music без костылей.
Полный список: App Intents Testing, AVSystemRouting, ComputeGraph, Core AI, CrashReportExtension, Media Device, Media Intelligence, Now Playing, StateReporting, Suggested Actions.
Читать в Telegram →Демонстрация анимированного таймера в Dynamic Island на iOS 27.
Читать в Telegram →Теперь поддерживает кэширование по HTTP с кастомным request и cache policy. iOS 27.
Читать в Telegram →Свойство-обёртка @State переехало с dynamic property на макрос. Бэкпортировано на iOS 17.
Кастомные header-баннеры в App Store открыли всем разработчикам — поддержка image и video.
Читать в Telegram →Настройка тулбара за минуту и переключение темы во всей IDE.
Читать в Telegram →Понятнее сообщения об ошибках при таймауте проверки типов — меньше загадочных fallback-ошибок.
Читать в Telegram →На Platforms State of the Union показали кастомные swipe actions с произвольным удалением в любом контейнере.
Читать в Telegram →Материал собран из официальных страниц Apple Developer и публикаций по итогам WWDC26.
Статья подготовлена по итогам WWDC26 (8–12 июня 2026). Названия API и сигнатуры могут уточняться по мере выхода финальной документации SDK — сверяйтесь с developer.apple.com. Примеры кода иллюстративны.