12 сентября Apple показала свои новые продукты: iPhone 15, iPhone 15 Pro, часы Apple Watch 9. Рассказываем про основные характеристики новинок и почему программисты тоже следят за релизом.
iPhone 15 и iPhone 15 Plus: коротко о новом
Статичная монобровь ушла — пришел динамический остров
Последний айфон будут выпускать с системой Dynamic Island. Это всем привычный вырез в экране под фронтальную камеру и датчик распознания лиц, но интерактивный: он меняет форму, размер и функционал в зависимости от задач пользователя. Например, с помощью динамичного острова можно управлять плеером без разблокировки смартфона. Впервые фича появилась в Pro-версии iPhone 14, теперь она доступна в базовой линейке смартфонов.
Появился разъем USB-C
iPhone 15 — первый и долгожданный айфон в линейке с таким типом разъема.
Увеличилась яркость дисплея
Показатели яркости в HDR-режиме выросли до 1600 нит, а если устройство используют на улице, то показатель увеличивается до 2000 нит. Цифры в разы выше, чем на iPhone 14.
Камера
Новинка получила камеру 48 Мп с широкоугольным модулем. Последнему айфону он достался от iPhone 14 Pro. Из важных особенностей камеры: разрешение фотографий станет гораздо выше, двукратный зум не будет влиять на качество, а мощное размытие можно использовать даже без режима «Портрет».
Какой установлен процессор?
Заметных изменений в начинке не произошло, новинка доступна с Apple A16 Bionic. С ним покупатели уже знакомы — он был на iPhone 14 Pro. Но в новых айфонах стоит чип UWB второго поколения, отвечающий за геолокацию устройства. Специалисты обещают, что дальность передачи данных увеличится до трех раз.
Apple Watch Series 9 и Apple Watch Ultra 2
12 сентября компания также рассказала про линейку смарт-часов Apple Watch Series 9 и презентовала второе поколение Apple Watch Ultra 2.
Линейка Apple Watch Series 9
Устройства оснастили обновленным процессором S9, благодаря ему должна вырасти производительность. Видеоускоритель улучшили на 30%, чтобы сделать анимацию более плавной. Точность определения речи увеличилась на 25% по сравнению с восьмой серией. В новинку также установили чип UWB второго поколения.
Apple Watch Ultra 2
Конкретная модель второго поколения из линейки Apple Watch Series 9. Управлять устройством стало проще — в новинку добавили новые жесты. Яркость дисплея теперь достигает 3000 нит — самый высокий показатель в истории Apple. Кроме того, смарт-часы оснастили датчиком освещенности — теперь ночной режим активируется автоматически, в зависимости от освещения.
iPhone 15 Pro и iPhone 15 Pro Max
Кратко охарактеризуем внешний вид старших моделей 2023 года:
- традиционно две диагонали на выбор: 6,1 и 6,7 дюймов;
- титановая панель, которая делает новинки самыми легкими флагманами со времен XS;
- нет рычажка включения беззвучного режима.
Совершенно новый процессор — Apple A17 Pro
Флагман оснастили первым в мире 3-нанометровым чипом. По заявлениям разработчиков, производительность устройства будет выше при меньших энергозатратах. Этому способствует ряд характеристик:
- 19 млрд транзисторов;
- два производительных ядра, что увеличивает производительность на 10%;
- четыре экономичных ядра;
- нейромодуль: 35 трлн операций в секунду, самый быстрый в истории Apple;
- поддержка кодека ProRes;
- поддержка USB 3 — до 10 Гбит/с. Это в 20 раз быстрее, чем с портом Lightning (USB 2.0);
- видеоускоритель на 20% быстрее — шесть ядер, поддержка RTX.
По всей видимости, владельцы Pro версии ощутят заметный прирост производительности в играх. Apple анонсировали выход четырех ААА-игр на iPhone 15 Pro и iPhone 15 Max: Death Stranding, Assassin’s Creed Mirage, Resident Evil 4 Remake и Village.
Объем оперативной памяти у Pro-версий увеличили до 8 Гб. Это пригодится для хранения, обработки видео, а также работы с приложениями и в браузере.
Для iPhone 15 Pro доступны четыре накопителя на выбор: 128, 256, 512 Гб или 1 Тб. У iPhone 15 Pro Max будут только три опции: 256, 512 Гб или 1 Тб.
Почему презентация iPhone 15 важна для программистов?
Нововведения в первую очередь интересны разработчикам софта на базе iOS. Во-первых, новую iOS необходимо изучить перед разработкой продуктов. Во-вторых, программистам нужно адаптировать текущий софт под новую систему.
В день презентации новых устройств Apple выпускает так называемую Golden Master версию последней операционной системы для программистов. Разработчики софта тестируют ее в течение недели и только затем выпускают новую прошивку для широкой публики. Это значит, что с 12 сентября у разработчиков есть одна неделя для оптимизации своих приложений под iOS 17.
Помимо раскатки Golden Master iOS для программистов, Apple выпускает Golden Master версию Xcode 15 — интегрированную среду для разработки софта под iOS.
Это значит, что мы уже можем загружать наши приложения, созданные в Xcode 15, в App Store, чтобы они были доступны для загрузки, когда iOS 17 выйдет. Еще одна хорошая новость для мобильных разработчиков: если вы обычно поддерживаете последние версии ОС, то самое время повысить минимально поддерживаемую версию на одну мажорную цифру. Это значит, что вы сможете избавиться от некоторой устаревшей части кода.
Новое в Swift
Также незадолго до выхода новой операционной системы Apple добавил ряд полезных функций в версию Swift 5.9. Тезисно рассказываем про обновление в языке.
If и switch как выражения
Ранее в Swift операторы if и switch использовали для управления потоком выполнения кода, не возвращали значения. Теперь можно использовать if и switch как выражения в тех местах, где ожидается значение, например при присваивании значения переменной.
Обновление отлично сочетается с фичей SE-0255, которая позволила опускать ключевое слово return в однострочных функциях, возвращающих результат, или в вычисляемых свойствах. Совместное использование if или switch с SE-0255 позволяет писать код более компактно и читабельно.
Пакеты параметров значений и типов
Предложения SE-0393, SE-0398 и SE-0399 объединились для использования вариативных обобщений (variadic generics).
Обновление решает в Swift серьезную проблему: раньше универсальные (generic) функции требовали определенного количества параметров типа. Эти функции могли принимать вариативные параметры, но в конечном итоге все они должны были использовать один и тот же тип.
Новый синтаксис функции автоматически проверяет, чтобы количество элементов внутри переданных типов данных (T и U) было одинаковым. При попытке передать два набора данных разного размера компилятор Swift выдаст ошибку.
Обновление сокращает время работы над кодом и делает его более устойчивым к ошибкам, так как компилятор принудительно проверяет соответствие размеров переданных наборов данных.
Появление макросов
SE-0382, SE-0389 и SE-0397 привносят в Swift макросы. Несмотря на то, что использование макросов — распространенное явление, работать с ними в Swift довольно сложно. Одно из объяснений — в этом языке они более продвинутые по функционалу.
Несколько советов по работе:
- Макросы в этом Swift типобезопасные. Поэтому нужно указать, с какими именно типами данных надо работать. В других языках программирования макросы могут заменять одну строку кода на другую без учета типов данных.
- Макросы работают как отдельные программы во время фазы сборки программы, то есть они — не часть основного исполняемого кода приложения.
- В Swift макросы классифицируются по различным типам в зависимости от того, какую функцию выполняют в коде. ExpressionMacro — тип макроса, который используется для создания одного выражения в коде. Выражение — это фрагмент кода, который возвращает значение при выполнении. AccessorMacro — тип макроса, который используется для добавления «геттеров» и «сеттеров» в код. ConformanceMacro — тип макроса, который используется для автоматического добавления реализаций протоколов для типов.
- Макросы в Swift работают с уже обработанным (проанализированным) исходным кодом, то есть могут взаимодействовать с различными частями кода. Например, именами свойств, их типами или другими элементами кода.
Некопируемые структуры и перечисления
Предложение SE-0390 — это идея структур и перечислений в разных местах в коде, которые нельзя копировать. При этом они будут иметь только одного владельца. Если кратко, вместо создания копий одного и того же экземпляра вы просто ссылаетесь на него. Это повысит эффективность и предотвратит потенциальные ошибки, которые могут возникнуть при работе с копиями одного и того же объекта.
SE-0377 вводит новые ограничения для параметров функций, принимающих некопируемые типы. Функции теперь должны указывать, собираются ли они «использовать» значение параметра или им нужно только «заимствовать» его.
У некопируемых структур в Swift теперь появляется функция реализации деинициализатора или деструкторы. Это фича, которая автоматически вызывается при уничтожении экземпляра объекта, то есть когда последняя ссылка на объект удаляется. Ранее возможность была только среди классов и акторов.
Оператор consume для завершения жизненного цикла связывания переменной
SE-0366 вносит изменения в то, как Swift обрабатывает «потребление» значений переменных и констант.
«Потребление» относится к тому, как язык обрабатывает жизненный цикл данных: когда данные создаются, используются и в конечном итоге уничтожаются. Улучшение завершает жизненный цикл переменной или константы, чтобы избежать лишних операций удержания/освобождения памяти (retain/release) при передаче данных.
Новый метод makeStream
Предложение SE-0388 вводит новый метод makeStream() для создания экземпляров AsyncStream и AsyncThrowingStream. Метод позволяет получить одновременно поток (stream) и его продолжение (continuation).
Раньше AsyncStream и AsyncThrowingStream действовали как основные асинхронные последовательности, теперь оба элемента можно получить одновременно.
Новый подход полезен, когда продолжение (continuation) нужно использовать вне текущего контекста, например в другом методе. А с новым методом код становится намного проще.
Метод sleep(for:) для протокола Clock
SE-0374 — новый метод расширения для протокола Clock. Он позволит приостановить выполнение кода на нужное количество секунд. Пригодится в различных сценариях, например для добавления задержки в коде или имитации долгих операций в тестах.
Предложение расширяет функциональность «сна» для Task и позволяет указать допустимую погрешность. Например, вы указываете задержку в 1 секунду с допустимой погрешностью 0.5 секунды. При запуске система может «проснуться» и продолжить выполнять задачу в момент между 0.5 и 1.5 секунды. Особенно полезно для оптимизации энергопотребления, когда точное время пробуждения не является критическим.
Отказ от группы задач
В оригинальной версии API withTaskGroup() была проблема утечки памяти в сценариях, когда группа задач работала в течение длительного времени или потенциально бесконечно, как это обычно происходит на веб-серверах. Проблема была в том, что Swift удалял завершенные задачи и связанные с ними данные при вызове метода next() или при проходе по всем дочерним задачам группы.
Однако, если все задачи были заняты выполнением, вызов next() приостанавливал выполнение кода. Это мешало бесперебойной работе сервера, который постоянно прослушивает соединения и добавляет задачи для их обработки, а также периодически удаляет завершенные задачи.
SE-0381 решает проблему: задачи, созданные внутри группы задач, автоматически удаляются, как только завершаются. Значит, длительно работающие или бесконечные группы задач (например, в веб-серверах) не будут со временем вызывать утечки памяти.
Акторы
Предложение SE-0392 может создавать пользовательские исполнители для акторов. Это дает разработчикам детальный контроль над тем, как актор выполняет свой код. Функция специально направлена на очень точные и продвинутые требования, даже в Swift Evolution говорят о том, что пользовательские исполнители будут полезны в основном экспертам.
SE-0392 может быть полезна в ситуациях, когда, например, группы акторов должны выполняться в одном и том же потоке для синхронизации работы, или если операционная система предъявляет специфические требования к тому, где должна выполняться определенная работа.