В понедельник стартовал WWDC 2023. Компания Apple рассказала о последних новинках и изменениях, которые сделают жизнь разработчика и конечного пользователя лучше. Мы собрали для вас самые запоминающиеся детали. Но лучше один раз увидеть, чем сто раз услышать. Так что советуем самим посмотреть интересные вам сессии, которые будут идти всю эту неделю. Swift Macros поможет сделать ваш код более читаемым, убрать бойлерплейт-код, а также избежать ошибок компиляции. Apple взяли propertyWrapper, спрятали в него кодогенерацию, и получился фундамент для нового стиля написания Swift-кода. Теперь у разработчиков больше поводов использовать аннотации. Выглядит крайне полезной вещью! Ожидается много готовых встроенных макросов, значительно упрощающих жизнь. Плюс появился @AddAsync — макрос для помощи в переезде на Concurrency API. Подробнее смотрите на сессиях What’s new in Swift, Write Swift Macros, Expand on Swift macros Значительно упростили взаимодействие с данными, появился новый макрос @Observable! Вместо комбинации @ObservableObject и @Published properties теперь достаточно указать макрос @Observable и использовать модель как источник данных для SwiftUI View. Упрощение API, снижение порога входа, потребуется меньше кода. Круто! Сессия What’s new in Swift Виджеты. Добавили интерактивности к поведению, а также возможность использовать виджеты приложений, установленных на одном устройстве, на всех девайсах личной экосистемы. Позитивные шаги к развитию в этом направлении! Сессии: Bring widgets to life, Bring widgets to new place, Explore enhancements to App Intents AnimationPhase — новое API для multipart-анимаций и в целом большие апдейты по анимациям в SwiftUI. Сессии: What’s new in SwiftUI, Explore SwiftUI animation, Wind your way through advanced animations in SwiftUI, Animate with springs TipKit позволяет упростить flow обучения пользователя новым фичам: разработчику доступен набор типовых view, которые можно встроить прямо в приложение. Сессия Make features discoverable with TipKit Самое главное, на наш взгляд, — SwiftData: долгожданное «native solution for data management». На основе проверенного слоя хранения данных CoreData, но с новым API. Не забыли и про тесную интеграцию со SwiftUI: доступно автоматическое обновление UI-слоя при изменении данных в хранилище, реализация которой занимает пару строк. Сессии: Meet SwiftData, Model your schema with SwiftData, Build an app with SwiftData, Migrate to SwiftData, Dive deeper into SwiftData Не обошли стороной и тему доступности приложений: «accessibilty is a core value at Apple». Pause Animated Images — accessibility-фича. Позволяет управлять остановкой анимации в gif-изображениях. В дополнении с фичой отключения анимации в приложении в целом — крайне полезна людям, которым тяжело пользоваться устройством при часто и хаотично меняющемся контенте. Dim Flashing Lights — автоматическое затемнение дисплея, если в видео есть вспышки света. Для поддержки этого сделали отдельную фазу предобработки в AVFoundation пайплайне. Так что если видео в вашем приложении используют этот фреймворк, то делать для поддержки ничего не надо, все будет работать «из коробки». И, конечно, все accesibility-фичи, а также ряд эксклюзивных, доступны и на VisionOS! Сессия Perform accessibility audits for your app Тема безопасности данных всегда была важна для Apple: «Privacy is a fundamental human right». И мы с ними солидарны!  Сессия What’s new in Privacy Без приятных мелочей не обошлось и здесь: Add only permission для работы с календарем — новый вид пермишена, если надо только добавить событие, и полный доступ к календарю не нужен. Сессии: What’s new in Privacy, Discover Calendar and EventKit Новый пикер для выбора медиафайлов. Пользователь сможет выбрать из своей галереи определенные медиафайлы, к которым приложение сразу получит доступ. То есть не надо давать полный доступ ко всей галерее для выбора единственного фото. И не надо заставлять пользователя выбирать сначала медиафайлы, к которым разрешить доступ, а потом уже медиафайлы для загрузки в приложение. Теперь можно сделать всего один шаг вместо двух. Сессии: What’s new in Privacy, Embed the Photos Picker in your app Пристальное внимание Apple обратили и на сторонние SDK, которые используются в проектах: ожидается ужесточение. Privacy manifests позволит упорядочить сбор информации о том, какие данные пользователя используют и собирают сторонние SDK. А Signatures for third-party SDKs предупредит разработчика при подозрительном обновлении версии библиотеки, если подпись автора библиотеки изменится. Sensitive Content Analysis framework позволит определить ненормативный контент, нежелательный для детей, а Sensitive Content Warning позволит заблюрить его. Тут просто нет слов, очень крутое нововведение: Apple не только уверенно движется в сторону защиты детей от нежелательного контента, но и выкатил для всеобщего доступа фреймворк для обнаружение такового контента, затраты на самостоятельную разработку которого довольно велики. Xcode местами значительно похорошел. Обещают умный autocomplete, который будет ориентироваться на то, что ранее видел на проекте. Конкурент для Github Copilot? Посмотрим… Для Image и UIImage тоже добавился autocomplete, которые подтягивает названия ассетов прямо из проекта. Type safety из коробки! Возможно, скоро отпадет необходимость в инструментах подобных SwiftGen, посмотрим. Отчёт по тестам теперь содержит больше информации: есть insights, есть возможность посмотреть видео и accessibility frames упавших UI-тестов. Сессии: What's new in Xcode 15, Get started with privacy manifests, Verify app dependencies with digital signatures Мало того, что для их создания теперь требуется значительно меньше кода с новыми макросами. Также теперь они доступны не только на SwiftUI, но и на UIKit! Подробности смотрите в рамках Build programmatic UI with Xcode Previews. И, конечно, большие обновления, связанные с VisionOS, для которых потребуются, возможно, отдельные статьи. Следите за новостями и смотрите видео с сессий WWDC 2023! Больше полезного про iOS — в нашем телеграм-канале Surf iOS Team. Публикуем кейсы, лучшие практики, новости и вакансии Surf. Присоединяйтесь >>