После поверхностных анонсов первого дня наступает пора полноценных сессий для разработчиков, в которых инженеры Apple рассказывают о новых функциях, фреймворках и технологиях. Второй день практически целиком посвящен анонсированным фичам главных платформ и инструментам разработки.
Материал будет интересен в первую очередь разработчикам под платформы iOS и Mac OS, но, возможно, здесь каждому что-то придется по душе.
Приложение Watch App и набор кода WatchKit Extension теперь живут в одном месте на часах (раньше extension находился на телефоне и создавал этим гору проблем). Причем это не опция, а обязаловка. Такие нативные приложения для часов имеют сплошные плюсы: доступ к железякам (Digital Crown, микрофон, динамик, акселерометр и прочие), автономную работу, отсутствие тормозов и «вечного спиннера», работу в реальном времени. Тем не менее, приложение для часов по-прежнему обязано быть частью полноценного приложения для телефона, отдельно его распространять нельзя.
Связь между телефоном и часами теперь реализована средствами WatchConnectivity Framework. По сути это шина, в которую можно отправлять туда-сюда сообщения с текстом или файлами. Помимо такого способа получать информацию, часы могут использовать все функции NSURLSession, то есть самостоятельно залезать в интернет и скачивать данные. Даже в отсутствие телефона это происходит через WiFi.
Добавлены сеттеры для всех настроек (properties) всех интерфейсных элементов часов. Это значит, что теперь можно управлять интерфейсом из кода и менять его «на лету», а не только во время разработки дизайна в interface builder, как было ранее. В WatchKit теперь также добавлены анимации средствами animateWithDuration. Можно анимировать все те настройки, которые появились в системе. По сравнению с анимацией image sequenc’ами из watch OS 1 это уже что-то.
Наши приложения могут дублировать события интерфейса с помощью taptic engine. Доступен целый набор различных «троганий»: Notification, Start, Stop, DirectionUp, DirectionDown, Click, Failure, Success.
Часы теперь могут воспроизводить видео. Прототип Coub для часов, который был анонсирован полгода назад, теперь может стать былью, а не только сказкой.
В watchKit SDK добавлены методы openSystemURL. С помощью них сторонние приложения могут совершать звонки, отправлять сообщения и пр., и все это, не покидая интерфейса часов.
Watch Keychain, в котором хранятся все те же пароли, что и на телефоне, автоматически разблокируется, когда часы на руке, и блокируется, когда их снимают. Это решает целый ворох проблем, с которыми мы столкнулись при разработке приложения Моего Билайна, можете посочувствовать.
Новый фреймворк ClockKit сделан для разработки Complications — гаджетов на циферблате часов, отображающих любые данные. Интересно, что данные у наших complications запрашиваются не по одиночке, а вектором timeline. Благодаря этому появляется TimeTravel — возможность покрутить колесико и посмотреть, что было 3 часа назад или будет через 10 часов. Довольно классная фича.
Для анонсированного Swift 2 уже готов мигратор, который нежно и аккуратно скорректирует проекты под новые конструкции. Обещают, что все произойдет автоматически, а такому разработчику компилятора Swift разве можно не доверять:
Игровые площадки Swift Playgrounds получили много возможностей, которые позволят создавать обучающие материалы по программированию прямо в них. Это поддержка markdown-разметки в комментариях (с картинками, выделением и версткой), многостраничных проектов, возможность подключения внешних библиотек (которые даже предкомпилируются, чтобы playground не тормозил). Переделаны механизмы обработки ошибок, доработан autocomplete, добавлены API для удобного вызова новых методов так, чтобы это ни в коем случае не сломалось на старых ОС. В общем, язык развивается довольно активно, и тем лучше, что его в ближайшее время выложат в openSource.
Одновременно много всего добавлено в objectiveC для того, чтобы он лучше совмещался со свифтом и сам по себе был удобен.
Например, добавлены директивы для совмещения swift optionals с традиционными nil-объектами: nonnull (свойство не сможет стать nil’ом никогда), nullable (сможет), null_resettable (такое свойство можно установить в nil, но оно никогда его не вернет обратно, а вернет default-значение вместо этого).
Во все коллекции ObjC добавлены generics:
Есть даже специальное ключевое слово __kindof для обозначения коллекций, которые могут хранить не только объекты класса, но и его подклассов (особенно удобно для интерфейсных фреймворков):
В iOS добавили те вещи, которых многие ждали (или не очень ждали):
Многие анонсы на конференции пока были раскрыты не до конца, но мы будем держать вас в курсе. Stay tuned!
Смотрите также обзорный отчет с первого дня конференции: WWDC15. День первый. Keynote
Материал будет интересен в первую очередь разработчикам под платформы iOS и Mac OS, но, возможно, здесь каждому что-то придется по душе.
watchOS 2
Приложение Watch App и набор кода WatchKit Extension теперь живут в одном месте на часах (раньше extension находился на телефоне и создавал этим гору проблем). Причем это не опция, а обязаловка. Такие нативные приложения для часов имеют сплошные плюсы: доступ к железякам (Digital Crown, микрофон, динамик, акселерометр и прочие), автономную работу, отсутствие тормозов и «вечного спиннера», работу в реальном времени. Тем не менее, приложение для часов по-прежнему обязано быть частью полноценного приложения для телефона, отдельно его распространять нельзя.
Связь между телефоном и часами теперь реализована средствами WatchConnectivity Framework. По сути это шина, в которую можно отправлять туда-сюда сообщения с текстом или файлами. Помимо такого способа получать информацию, часы могут использовать все функции NSURLSession, то есть самостоятельно залезать в интернет и скачивать данные. Даже в отсутствие телефона это происходит через WiFi.
Добавлены сеттеры для всех настроек (properties) всех интерфейсных элементов часов. Это значит, что теперь можно управлять интерфейсом из кода и менять его «на лету», а не только во время разработки дизайна в interface builder, как было ранее. В WatchKit теперь также добавлены анимации средствами animateWithDuration. Можно анимировать все те настройки, которые появились в системе. По сравнению с анимацией image sequenc’ами из watch OS 1 это уже что-то.
Наши приложения могут дублировать события интерфейса с помощью taptic engine. Доступен целый набор различных «троганий»: Notification, Start, Stop, DirectionUp, DirectionDown, Click, Failure, Success.
Часы теперь могут воспроизводить видео. Прототип Coub для часов, который был анонсирован полгода назад, теперь может стать былью, а не только сказкой.
В watchKit SDK добавлены методы openSystemURL. С помощью них сторонние приложения могут совершать звонки, отправлять сообщения и пр., и все это, не покидая интерфейса часов.
Watch Keychain, в котором хранятся все те же пароли, что и на телефоне, автоматически разблокируется, когда часы на руке, и блокируется, когда их снимают. Это решает целый ворох проблем, с которыми мы столкнулись при разработке приложения Моего Билайна, можете посочувствовать.
Новый фреймворк ClockKit сделан для разработки Complications — гаджетов на циферблате часов, отображающих любые данные. Интересно, что данные у наших complications запрашиваются не по одиночке, а вектором timeline. Благодаря этому появляется TimeTravel — возможность покрутить колесико и посмотреть, что было 3 часа назад или будет через 10 часов. Довольно классная фича.
Objective C и Swift
Для анонсированного Swift 2 уже готов мигратор, который нежно и аккуратно скорректирует проекты под новые конструкции. Обещают, что все произойдет автоматически, а такому разработчику компилятора Swift разве можно не доверять:
Игровые площадки Swift Playgrounds получили много возможностей, которые позволят создавать обучающие материалы по программированию прямо в них. Это поддержка markdown-разметки в комментариях (с картинками, выделением и версткой), многостраничных проектов, возможность подключения внешних библиотек (которые даже предкомпилируются, чтобы playground не тормозил). Переделаны механизмы обработки ошибок, доработан autocomplete, добавлены API для удобного вызова новых методов так, чтобы это ни в коем случае не сломалось на старых ОС. В общем, язык развивается довольно активно, и тем лучше, что его в ближайшее время выложат в openSource.
Одновременно много всего добавлено в objectiveC для того, чтобы он лучше совмещался со свифтом и сам по себе был удобен.
Например, добавлены директивы для совмещения swift optionals с традиционными nil-объектами: nonnull (свойство не сможет стать nil’ом никогда), nullable (сможет), null_resettable (такое свойство можно установить в nil, но оно никогда его не вернет обратно, а вернет default-значение вместо этого).
Во все коллекции ObjC добавлены generics:
NSArray <NSString *> *array
Есть даже специальное ключевое слово __kindof для обозначения коллекций, которые могут хранить не только объекты класса, но и его подклассов (особенно удобно для интерфейсных фреймворков):
NSArray <__kindof NSView*> *array
iOS 9 и Xcode
В iOS добавили те вещи, которых многие ждали (или не очень ждали):
- Возможность менять радиус размытия и делать эффекты как при открытии Spotlight
- Рендеринг blur и vibrancy в storyboard в реальном времени
- Разделение интерфейса приложения на несколько storyboard с линковкой и переходами между ними
- Запись UI-тестов прямо в Xcode в интерактивном режиме, подсчет code coverage для тестов XCTest
- Получение крашлогов в Xcode прямо из iTunesConnect и возможность загрузить их в эмулятор в debug-режиме (!)
- Возможность вводить текст в push-нотификации (как сделано в SMS) наших приложений, и это также будет работать на часах
Многие анонсы на конференции пока были раскрыты не до конца, но мы будем держать вас в курсе. Stay tuned!
Смотрите также обзорный отчет с первого дня конференции: WWDC15. День первый. Keynote
Комментарии (11)
daspisch
10.06.2015 14:41+2Generics коллекции для ObjC это лучшее что дала Эпл разработчикам за последние пару лет, вот бы ещё классы…
dShell
10.06.2015 21:29Это правда: «коллекций, которые могут хранить не только объекты класса, но и его подклассов»?
mc_murphy Автор
10.06.2015 21:50Ну, скажем так, хранить-то они могут любые объекты вообще, как и раньше, но теперь компилятор сможет проверить, что там лежат объекты с одним интерфейсом базового класса, и не поднимать тревогу.
А для нас это дополнительная безопасность и надежность.
VitaliyNSK
11.06.2015 04:05При неоплаченном акаунте разработчика, теперь можно компилировать приложения на свои устройства. И акаунт iOS и mac os теперь объединят в один.
MaximChistov
А мб кто-то знает, как отлаживать приложения на айфоне без провода?(через WiFi/Bluetooth)
StrangerInRed
Можно вроде крашлоги скачать посмотреть, а дебажить вряд ли. Или появилась новая фича?
daspisch
Вы ошиблись дверью — Андроид со всеми удобствами в соседней)
daspisch
Просто для справки: андроид приложения можно отлаживать удалённо, например по Wi-Fi.
Parcelapp
Пару лет назад такая функция была в одной из developer preview Xcode, потом её быстро убрали, ибо работало ужасно.