Если совсем честно, я чуть не пропустил обновление Xcode 27.1. Обычно point release — это несколько исправлений ошибок и перезагрузка. Но когда я понял, что вместе с обновлением вышел Swift 6.4, то обнаружил несколько изменений, которые решают проблемы, с которыми я сталкивался последние два года.
Сначала короткая проверка реальности по версиям
Xcode 27.1 включает Swift 6.4 и SDK для iOS 27.1; кроме того, в него входят SDK 27.0 для всех остальных платформ. Для использования Xcode 27.1 требуется macOS Tahoe 26.6 или новее. Поскольку сам компилятор вышел ещё вместе с Xcode 27.0 в сентябре, Xcode 27.1 — это в первую очередь обновление SDK и инструментов. apple
Что добавляет Xcode 27.1
- Previews: В инструменте выбора переопределений холста теперь есть группа «Дисплей», позволяющая предварительно просматривать контент на дополнительном дисплее устройства.
- iPhone Duo Simulator: При первом запуске симулятора загрузка может занять несколько минут; кроме того, большинство app extensions пока нельзя запускать или отлаживать в симуляторе.
- Подводный камень Mac Catalyst: Код, использующий API, специфичные для iOS 27.1, не будет компилироваться для Catalyst. Чтобы избежать этой проблемы, оберните такой код в
#if !targetEnvironment(macCatalyst).
С последней проблемой я столкнулся буквально через десять минут после запуска Xcode 27.1. Поверьте мне и сэкономьте себе немного нервов.
Возможности Swift 6.4, которые я бы начал использовать в первую очередь
anyAppleOSупрощает проверки доступности. Swift 6.4 вводит более простой способ проверять availability черезanyAppleOS. Больше не нужно отдельно перечислять iOS, macOS, tvOS и watchOS.- Async в
defer. Теперь вdeferможно использовать асинхронный код, гарантируя выполнение cleanup независимо от того, завершится функция черезreturnили выбросит ошибку. Это заметное улучшение для Swift concurrency. weak let. Позволяет объявлять классSendable, который раньше приходилось помечать как@unchecked Sendableиз-за weak-переменной. Если вы боролись со строгими предупреждениями concurrency в Swift 6, это большое облегчение.@diagnose. Даёт более точный контроль над предупреждениями: их можно подавлять, превращать в ошибки или, наоборот, понижать будущие ошибки до предупреждений.
// Swift 6.4: async cleanup inside defer
func uploadAvatar(_ data: Data) async throws {
let session = try await UploadSession.open()
// Before 6.4 this needed awkward workarounds.
// Now it runs on return OR throw.
defer { await session.close() }
try await session.send(data)
}
// weak let: lets this class be properly Sendable
final class Router: Sendable {
weak let delegate: RouterDelegate? // no more @unchecked Sendable
init(delegate: RouterDelegate?) { self.delegate = delegate }
}
Я упростил эти примеры, поэтому перед использованием в проде проверьте точный синтаксис в release notes.
Пример из реального приложения
Представьте MVVM-архитектуру iOS-приложения, где view model открывает socket, управление файлами или сессию загрузки. Раньше для гарантированной очистки async приходилось создавать Task внутри defer, а это fire-and-forget и потенциальный источник гонки данных. С async defer cleanup становится структурированным и предсказуемым. В результате async/await-код на Swift получается чище — и это как раз тот тип вопросов про отмену и очистку, который часто задают на iOS-собеседованиях.
Почему это важно
- Тестирование: Swift Testing и XCTest теперь могут взаимодействовать друг с другом, поэтому ошибки assertions из XCTest появляются как issues в Swift Testing. Благодаря этому тестовый набор можно мигрировать постепенно, а не за одни выходные.
- Производительность: разбор URL в Foundation стал до четырёх раз быстрее. Это бесплатный прирост производительности для iOS-приложения просто после пересборки.
- Borrowing types: новые типы массивов и протокол
Iterableуменьшают копирование и число аллокаций. В повседневной разработке вы, скорее всего, не будете использовать их постоянно, но для производительных библиотек это важно.
Кроме того, есть одно изменение SwiftUI уровня учебника, о котором стоит знать. Согласно одной статье, разбирающей release notes Xcode 27, в Xcode 27 появилась новая реализация @State на основе Swift-макроса, которая позволяет избежать повторного вычисления начальных значений. Если вы когда-нибудь сравнивали UIKit и SwiftUI по производительности, это один из разрывов, который постепенно сокращается.
Что я бы пока пропустил
Улучшения Embedded Swift, Wasm и совместимости с C++ впечатляют, но в обычной iOS-разработке в понедельник утром они на вас, скорее всего, никак не повлияют, если только вы не работаете именно с этими целевыми платформами.
ВЫВОД: сам по себе Xcode 27.1 не выглядит особенно захватывающим обновлением, но Swift 6.4 — именно тот тихий апгрейд, который мне нравится: меньше обходных решений и меньше борьбы с компилятором. Сначала обновитесь в отдельной ветке, будьте готовы к некоторым шероховатостям с Catalyst и Simulators, а затем начинайте использовать defer и weak let.

