Представлена iPadOS 15: виджеты на главном экране, библиотека приложений и создание приложений — Wylsacom

Представлена iPadOS 15: виджеты на главном экране, библиотека приложений и создание приложений — Wylsacom Ipad
Содержание
  1. Основные классы
  2. Основные принципы
  3. «заметки»
  4. «переводчик»
  5. Abgrid
  6. Battery widget
  7. Code widgets
  8. Eventime (сколько времени до события)
  9. Intenthandler
  10. Ladderentry
  11. Ladderprovider
  12. Ladderwidgetentryview
  13. Smart stack
  14. Spark mail
  15. Sticky widgets / uno task
  16. Wdgts.
  17. Widget wizard
  18. Widgetlink
  19. Yahoo погода
  20. Библиотека приложений
  21. Виджет «галерея фотографий»
  22. Виджет «напоминания»
  23. Виджет «погода»
  24. Виджеты
  25. Википедия
  26. Встроенные виджеты apple
  27. Добавление виджета в проект
  28. Добавление виджетов на рабочий стол
  29. Еще пару слов
  30. Закрепление виджетов в окне «сегодня»
  31. Зачем нужна библиотека приложений
  32. Какие модели поддерживают виджеты
  33. Конфигурация виджета — intentconfiguration
  34. Менеджер задач microsoft to do
  35. Менеджер задач things 3
  36. Менеджер привычек habitminder
  37. Многозадачность
  38. Настройка виджетов
  39. Обновление виджета
  40. Определение главной идеи для виджета
  41. Передача данных между виджетом и приложением
  42. Плейсхолдер
  43. Погода the weather channel
  44. Поддержка различных размеров экранов
  45. Показ placeholder’a
  46. Принудительное обновление виджета
  47. Разработка
  48. Смотрите похожее
  49. Список покупок bring
  50. Сторонние приложения с крутыми виджетами
  51. Таймлайн
  52. Текущий снапшот
  53. Трекинг посылок parcel
  54. Удаление виджетов с главного экрана
  55. Учет водного баланса waterminder
  56. Fantastical и calendars
  57. Заключение

Основные классы

Рассмотрим какие классы создал для нас Xcode.

Как мы увидим, на самом деле это не классы, а структуры, кратко пройдемся по каждой из этих структур.

Как данные обновляются на виджете? iOS использует механизм слепков, то есть виджету предоставляются таймлайн слепков из провайдера и он их показывает на определенном интервале времени в будущем.

Проведем небольшой рефакторинг и переименуем наши структуры.

Основные принципы

Главное предназначение виджета это показать небольшой объем информации пользователю, актуальной в данный момент времени. Определение этого одного предназначение является первым шагом для построения хорошего пользовательского опыта. Поэтому основные принципы включают в себя

  • Придерживайтесь одной идеи. Главная идея вашего приложения должна быть отображена в вашем виджете. Например приложение Weather может показывать погоду для одной локации, приложение Stocks последние котировки акций.
  • Для каждого размера показывайте только ту информацию, которая прямо относится к вашей идее. Для Stocks это может быть отображение только 3-х акций для маленького размера с указанием только названия и цены, а для большого размера это будет отображение более 5 акций с более детальной информации по ним.
  • Не создавайте виджет, который ничего не делает, а только открывает приложение. Пользователь ожидает возможность просмотра важной информации без открытия приложения.
  • Сделайте поддержку нескольких размеров, это улучшит пользовательский опыт. Реализация одного маленького размера приведет к тому, что на бОльших размерах много свободного пространства будет не задействовано, что не придает привлекательности приложению.
  • Информация показанная на виджете должна меняться в течении дня. Если информация будет статичной или будет меняться очень редко, то будет ли польза от такого виджета? Поэтому важно чтобы информация менялась в течении дня, для приложения Calendar это будут предстоящие митинги, для Weather текущая погода.

«заметки»

Тут можно отмечать людей. Они получат уведомления.

Также заметки получат тэги, по которым можно проводить поиск.

Новая функция «Быстрые заметки» позволит быстро работать c заметками на iPadOS, iOS и macOS.

«переводчик»

Новое приложение для перевода текста. Функция работает практически везде, даже с тем текстом, который размещён на фотографиях.

Abgrid

Многие используют виджеты, чтобы разместить на экране любимые фотографии. Приложение ABGrid позволяет сделать несколько виджетов из одного изображения — получается своеобразная мозаика. Разместить нарезанные кусочки картинки можно в любом порядке.

Battery widget

Это приложение визуализирует выбранные показатели (уровень заряда, расход ОЗУ, количество свободной памяти и даже версию iOS) в компактном формате. Если несколько шаблонов, все они бесплатные. Для смены цветовой схемы придётся купить Pro-версию (есть и подписка, и возможность единоразовой покупки).

А какими виджетами пользуетесь вы? Поделитесь подборкой в комментариях!

Code widgets

Если вы хотите, чтобы виджеты делали что-то полезное, обратите внимание на Code Widgets. Приложение позволяет добавить на экран штрих-код карты, которой вы часто пользуетесь, чтобы не залезать в приложение «Кошелёк» каждый раз, когда стоите на кассе.

Eventime (сколько времени до события)

Eventime показывает точно время до созданных мероприятий вплоть до минут или секунд. К каждому событию можно присвоить цвет и фоновое изображение, которые и будут отображаться на виджете. На вкладке Поиск расположен целый список созданных событий по категориям.

Intenthandler

Что если, когда мы редактируем виджет мы хотели бы иметь не статические параметры, а динамические? Которые мы могли бы, скажем, загружать с сервера?

Виджеты позволяют это сделать и для этого нужно будет создать Intents Extension таргет, создать файл .intentdefinition и в нем определить опции выбора и далее в классе IntentHandler` обработать колбек выбора опции.

Итак начнем, создаем новый таргет New -> Target -> Intents Extension и даем ему имя например LadderWidgetIntent. Далее руками создаем DynamicLadderIntents.intentdefinition. Его конфигурация будет похожа на LadderIntents.intentdefinition, но с небольшими отличиями.

Вместо Enum у нас будет конкретный тип ProfileType, сам intent будет называться DynamicProfileSelection и так же нужно проставить галочку динамически загружать опции.

Теперь везде в проекте нужно заменить ProfileSelectionIntent на DynamicProfileSelectionIntent.

Xcode автоматически для нас генерирует класс ProfileType, а также протоколы выбора конкретного профиля. Тем самым мы получаем тот самый колбек для загрузки конфигурации.

extension IntentHandler: DynamicProfileSelectionIntentHandling { func provideProfileTypeOptionsCollection(for intent: DynamicProfileSelectionIntent, with completion: @escaping (INObjectCollection<ProfileType>?, Error?) -> Void) { DispatchQueue.global().asyncAfter(deadline: .now() 1) { let items: [ProfileType] = [ ProfileType(identifier: "1", display: "Bloodseeker"), ProfileType(identifier: "2", display: "Morphling"), ProfileType(identifier: "3", display: "Lina")] let collection = INObjectCollection(items: items) completion(collection, nil) } }
}

Поправляем функцию profile(for _:) в провайдере и теперь наша конфигурация подтягивается динамически.

Ladderentry

Данные для виджета определяются именно в этой структуре путем добавления соответствующих свойств.

struct LadderEntry: TimelineEntry { let date: Date // your properties -> let name: String
}

То есть если ваш виджет будет показывать, например, погоду, то у вас скорее всего будут свойства let cityName: String, let cityTemperature: Double, ну и let date: Date, последнее свойство определяет дату когда WidgetKit обновит виджет и является обязательным, чтобы следовать протоколу TimelineEntry.

Ladderprovider

Кто-то должен предоставлять LadderEntry для виджета и за это ответственен LadderProvider. Эта структура следует протоколу TimelineProvider, взлянем на определение.

protocol TimelineProvider { associatedtype Entry : TimelineEntry typealias Context = TimelineProviderContext func placeholder(in context: Context) -> Entry func getSnapshot(in context: Context, completion: @escaping (Entry) -> Void) func getTimeline(in context: Context, completion: @escaping (Timeline<Entry>) -> Void)
}

Ladderwidgetentryview

Это обычное View, которое определяет, как будет выглядеть наш виджет.

struct LadderWidgetEntryView : View { var entry: LadderProvider.Entry var body: some View { Text(entry.date, style: .time) }
}

LadderWidget — наследник Widget, если посмотреть на определение протокола Widget, то можно заметить, что оно сильно напоминает обычный View, так же через body определяется контент виджета, но тут также указывается, как виджет будет конфигурироваться статически или динамически, а также здесь указывается провайдер для виджета.

@main
struct LadderWidget: Widget { let kind: String = "LadderWidget" var body: some WidgetConfiguration { StaticConfiguration(kind: kind, provider: LadderProvider()) { entry in LadderWidgetEntryView(entry: entry) } .configurationDisplayName("My Widget") .description("This is an example widget.") .supportedFamilies([.systemMedium, .systemSmall]) }
}

@main перед определением виджета обозначает «точку входа» для данного таргета, а именно то, что при запуске будет показан именно Ladder Widget.

Наше приложение показывает список профилей, было бы неплохо иметь виджет, который показывает данные конкретного профиля, причем для виджета с маленьким размером это будет просто текст, а для среднего размера картинка и текст.

Начнем с LadderEntry, для этого добавим соответствующую поле.

struct LadderEntry: TimelineEntry { let date: Date let profile: Profile
}

Так же надо не забыть включать файлы, классы которых используется в таргете виджета, в таргет виджета. Для Profile.swift это будет выглядеть так.

Теперь обновим как будет отображается виджет.

struct LadderWidgetEntryView : View { var entry: LadderProvider.Entry @Environment(.widgetFamily) var family @ViewBuilder var body: some View { switch family { case .systemSmall: ProfileInfoView(profile: entry.profile) default: ProfileView(profile: entry.profile) } }
}

С помощью @Environment(.widgetFamily) можно получить доступ к размеру виджета и в зависимости от значения показывать просто текст для маленького размера или картинку и текст для среднего размера.

Чтобы можно было сразу увидеть, как виджеты будут выглядеть для разных размеров, можно заключить их в Group.

Smart stack

Вы можете организовывать виджеты в стеки, сам по себе стек это просто список виджетов, где в данный момент показывается только один виджет.

Когда у пользователя есть стек, то он может включить Smart Rotate (включено по умолчанию), который будет перемешивать и показывать только тот виджет, который он посчитает релевантным в данный момент времени.

Читайте также:  iPad для сисадмина - Сисадминство

Spark mail

Виджет этого почтового клиента позволяет просматривать последние полученные письмо прямо на экране «Домой». Если вас раздражает счётчик непрочитанных сообщений у почтового клиента, но отключать его не хочется, чтобы не пропустить новые письма, этот виджет будет полезен.

appbox fallback

Sticky widgets / uno task

Два приложения с очень простым и похожим принципом работы. Это стикеры-записки, которые можно «прилепить» на экран, чтобы точно не забыть что-то сделать. Отличаются они, по сути, только дизайном и задумкой: если Sticky Widgets позволяет создавать сколько угодно виджетов, то идея Uno Task — выделить одну вещь и сфокусироваться на ней.

Wdgts.

Напоследок, я приготовил очень интересное приложение, которое содержит не один, а целых 5(!) виджетов. Сама программа Wdgts не несет за собой никакой функциональной составляющей, кроме настроек самих виджетов. Все самое интересное скрывается за «шторкой».

(кликабельно)

Первый доступный виджет — калькулятор. Рассказать о нем нечего, разве что он менее удобен, чем упомянутый выше аналог PCalc Lite. Второй виджет — конвертер валют. Пользоваться им очень удобно, достаточно один раз настроить нужные валюты, и дело в шляпе. Еще одно расширение называется «Photo Frame», и оно позволяет добавлять фотографии в интерактивную фоторамку. Правда, зачем это нужно не совсем понятно.

(кликабельно)

Есть среди виджетов и календарь, но только на текущий месяц. Чтобы разблокировать функцию переключения месяцев, нужно будет заплатить 1 доллар. Последний виджет — Временные зоны. По умолчанию можно показывать два часовых пояса, но за отдельную плату и больше.

Widget wizard

В приложении Widget Wizard вы выбираете, какие данные использовать для виджета, выбираете шрифт и цвета, а затем просто добавляете его на домашний экран.

Вы можете выбрать тёмную или светлую тему в настройках приложения. В нём можно выбирать стили, цвета разных элементов и цвет фона. К тому же, выбор доступен не просто из самых популярных цветов, вы можете выбрать абсолютно любой цвет с помощью спектра и слайдеров. Затем можно настроить оттенок и насыщенность цвета.

Можно менять шрифт заголовка виджета, основного и дополнительного текста.

Widget-Wizard-Theme-and-Fonts-1536×903

Доступны виджеты с отсчётом времени, с календарём, напоминаниями и др. Дизайн у виджетов тоже может быть разный.

Widget-Wizard-Available-Widgets-1536×903

Коснувшись элемента виджета, вроде количества пройденных шагов, вы откроете приложение Widget Wizard с более подробными деталями. Благодаря этому прямо через виджеты можно добавлять события, напоминания и данные о здоровье.

Если вы хотите создавать виджеты с важными данными и собственным стилем, приложение Widget Wizard – отличный выбор.

Если вы часто просматриваете одни и те же сайты в браузере, упростите себе задачу, создав виджет-ссылку. В виджете среднего размера помещается до 8 иконок в два ряда. Название, иконки и цвет оформления можно настраивать. Также в приложении можно настроить, через какой браузер будут открываться ссылки.

Yahoo погода

(Yahoo Weather)

Yahoo Погода, без сомнения, одно из самых красивых приложений, отображающих метеорологический прогноз на iOS. До прихода iOS 8 на наши устройства, приложение было довольно спорным, потому что заходить в отдельную программу, дабы посмотреть прогноз — явно, не решение 21 века.

(кликабельно)

Теперь в Центр Уведомлений можно добавить очень красивый виджет, который подскажет текущую температуру, осадки, а также прогноз на ближайшее время. Все поле виджета будет занято картинкой, которую программа автоматически подбирает из сервиса Flickr. Отметим, что изображение подбирается точно под происходящую на улице ситуацию. Если за окном пасмурно, то в шторке вы солнышка не увидете.

(кликабельно)

Библиотека приложений

Ещё одна фишка iOS 14 также добралась до iPadOS. Неудаляемый рабочий стол теперь появится и на айпэдах. Тут сгруппированы все приложения. В общем, как и в iOS 14.

Разница лишь в том, что библиотека приложений находится в доке, то есть в плашке снизу экрана на вашем iPad.

Виджет «галерея фотографий»

Выводит на дисплей фотографии пользователя. Изображение будет меняться раз в час, однако нельзя указать, какие именно фото покажет виджет. Они будут выводиться случайным образом. Если вас не устраивает такой вариант, выход только один — воспользоваться другим приложением. Они уже выложены в App Store.

iOS позволяет не только использовать готовые виджеты, но и создавать собственные. Для этого загрузите из App Store специальные приложения. Например, Widgetsmith, Color Widgets или Apple Shortcuts. В результате вы сможете кастомизировать размеры виджетов, изменять цвет, шрифт и другие настройки.

*{padding:0;margin:0;overflow:hidden}html,body{height:100%}img,svg{position:absolute;width:100%;top:0;bottom:0;margin:auto}svg{left:calc(50% — 34px)}Представлена iPadOS 15: виджеты на главном экране, библиотека приложений и создание приложений — Wylsacom» frameborder=»0″ allow=»accelerometer; autoplay; encrypted-media; gyroscope; picture-in-picture» allowfullscreen>

Для планшетов iPad и операционной системы iPadOS 14.0 существуют свои виджеты. Но имеются ограничения по размещению виджетов: они ограничены боковой панелью «Сегодня». Туда можно добавить собственные виджеты и удалить то, что не востребовано. Для этого нажмите и удерживайте виджет или пустое пространство.

Виджеты — это способ упростить работу с приложениями и сделать экран смартфона более красивым и удобным, настроив его конкретно под вас.

Виджет «напоминания»

Дает быстрый доступ к одному из списков ваших напоминаний. Например, можно вывести на экран планы на день. 

Виджет «погода»

В зависимости от настроек покажет прогноз на ближайшие несколько часов или дней. Информация будет отображаться на экране, поэтому не понадобится каждый раз открывать само приложение. 

Виджеты

Теперь их можно размещать в любой части экрана на любом рабочем столе. Совсем как в iOS 14.

Специально для планшетов разработали виджеты большого размера, которые занимают чуть ли не четверть экрана.

Википедия

Любознательных смогут порадовать бесплатные виджеты от фирменного приложения Википедия. Есть простенькие в виде изображения дня, которые ставятся чисто для эстетики, есть и полезные, например топ читаемых статей или исторические события произошедшие в этот день.

Встроенные виджеты apple

Одним из главных и самых удобных родных виджетов для меня видится виджет зарядки. В нем показываются все ваши Apple устройства и уровень их заряда. Несмотря на то, что в Apple Watch есть возможность посмотреть уровень заряда просто потянув наверх главный экран, я все равно смотрю уровень их зарядки на iPhone.

С AirPods дело обстоит сложнее. Там имеется всего один индикатор заряда батареи, которому просто не хватает информативности. В этом виджете можно посмотреть уровень зарядки гораздо проще. На iPad я обычно отслеживаю заряд Apple Pencil. Особенно актуально, если используете карандаш первого поколения.

Вторым по значимости среди родных приложений, поддерживающих виджеты, мне видится Активность. Те самые кольца, с помощью которых можно следить за активностью в течение дня. До покупки Apple Watch я абсолютно не следил за своим здоровьем, эти часы как-то незаметно заставили меня это сделать.

На виджете красуются привычные кольца активности и расшифровка по каждому кольцу отдельно. Мы берем телефон в руки гораздо чаще чем смотрим на часы, поэтому идея поставить виджет на домашний экран кажется мне очень удобной. Если у вас нет часов, не спешите их покупать.

Далее на второй домашней странице моего iPhone красуется стопка, одним из виджетов в которой располагаются предложения Siri. В своей прошлой статье я уже рассказывал о том, что с большинством задач Siri до сих пор не может справиться.

Заказать еду или отправить сообщение с ее помощью я бы вам не рекомендовал. Но, что касается предложений, здесь искусственный интеллект справляется просто великолепно. Siri анализирует все ваши действия и предлагает то, что может быть актуально сейчас. Работает эта функция очень хорошо. Рекомендую.

Добавление виджета в проект

Для того чтобы добавить виджет в приложение нужно выбрать File -> New -> Target, на вкладке iOS выбираем Widget Extension, даем имя нашему виджету, например LadderWidget. В проект добавится новый таргет, также файл LadderWidget.swift, где будет сразу добавлены все необходимые классы.

Добавление виджетов на рабочий стол

Теперь вам доступны различные виджеты приложений, но их придется настроить. На главном рабочем экране нужно войти в меню виджетов свайпом вправо. Меню виджетов было доступно пользователю и ранее, однако с iOS 14.0 можно добавлять виджеты не только в само меню, но на другие экраны рабочего стола. Для этого нужно спуститься вниз и нажать «Изменить». В верхней части экрана появится значок «плюс».

Добавление виджетов доступно и через любой экран рабочего стола. Нужно вызвать «плюс» долгим нажатием на иконку приложения или пустую область рабочего стола, после чего он появится в верхней части экрана. 

На экране появятся доступные виджеты. Кроме того, их можно искать как через поиск, так и по списку.

Читайте также:  Кнопка Home на экране iPhone, или как включить Assistive Touch и пользоваться им

Еще пару слов

У многих могли возникнуть вопросы по работе с виджетами, попробую ответить на некоторые из них.

Вопрос: Можно ли использовать готовые UIKit вьюшки в виджетах?Ответ: Нет, виджеты работают только на чистом SwiftUI, даже если вы обернете UIKit вьюшку в SwiftUI вью, то да код скомпилируется, но на устройстве вы увидите просто желтый экран заглушку.

Вопрос: Почему при запуске на симуляторе, я не вижу своих последних изменений?Ответ: Отладка виджетов достаточно болезненный процесс, то виджет не появляется на экране или появляется только черный квадрат, то вообще виджета нету в галереи виджетов или виджет не обновляется, и такого много, как правило удаление виджета с симулятора и перезапуск симулятора помогает решить такие проблемы.

Закрепление виджетов в окне «сегодня»

Вместе с виджетами из «Избранного», которые вы можете добавить, у вас есть возможность немного другим путем закреплять виджеты в окне «Вид «Сегодня»».

Закрепленный виджет будет постоянно оставаться в окне «Вид «Сегодня»», а «Избранное» будет скрыто при проведении пальцем вниз. Чтобы снова увидеть «Избранное», просто проведите пальцем вверх. Помните, что для закрепления виджетов на главном экране iPad у вас должен быть включен «Вид «Сегодня»».

Чтобы закрепить виджет, вернитесь к настройкам «Вида «Сегодня»», нажав кнопку «Изменить» в нижней части окна.

Выберите и перетащите виджет из области «Избранное» в область «Закрепленное избранное» прямо над ним. Опять же, вы можете изменить место виджетов в этой области, перетаскивая их в новое положение.

♥ ПО ТЕМЕ:Как сканировать документы на iPhone и iPad напрямую из приложения «Файлы».

Зачем нужна библиотека приложений

Закончить хотелось бы некоторыми советами по поводу организации виджетов в своем устройстве. Главное — не бойтесь стопок. Это правда очень удобно и позволяет избавиться от лишней информации. Часто, когда я рекомендую виджеты моим знакомым, они говорят, что не будут добавлять их, потому что места на экране и без того мало.

Второй совет — удаляйте все приложения, которыми вы не пользуетесь в течение недели в библиотеку приложений. Используйте Spotlight. Таким образом, вам точно хватит места для виджетов, с которыми получится посмотреть на смартфон совершенно под другим углом.

А вы пользуетесь виджетами на iPhone и iPad? Тоже ждете интерактивные виджеты в будущих обновлениях? Своим мнением можете поделиться в нашем Телеграм чате или в комментариях ниже, будет интересно прочесть.

Какие модели поддерживают виджеты

Чтобы пользоваться виджетами, не придется устанавливать дополнительные программы. Главное условие — это наличие iOS 14.0 и выше.

На данный момент операционную систему iOS 14.0 поддерживают следующие модели:

iPhone 6siPhone 6s PlusiPhone SEiPhone SE 2iPhone 7iPhone 7 PlusiPhone 8iPhone 8 PlusiPhone XiPhone XRiPhone XsiPhone Xs MaxiPhone 11iPhone 11 ProiPhone 11 Pro MaxiPhone 12iPhone 12 ProiPhone 12 Pro Max

Чтобы узнать, какая операционная система у вас установлена, нужно зайти в настройки и выбрать пункт «Основные». Далее перейдите в пункт «Об этом устройстве». Затем кликните по «Версия ПО».

Если ваша версия iOS ниже версии 14.0, и вы хотите обновиться, нужно вернуться в пункт «Основные» и выбрать там «Обновление ПО». Смартфон проверит наличие актуальной версии. Для установки нужно выбрать пункт «Загрузить и установить», при этом загрузка обновления доступна только по Wi-Fi.

Конфигурация виджета — intentconfiguration

Чтобы добавить динамическую конфигурацию, нужно в LadderWidget заменить StaticConfiguration на IntentConfiguration, для этого нажимаем File -> New -> File -> SiriKit Intent Definition File. Называем файл LadderIntents.intentdefinition.

Конфигурация определяется Intent, Intent определяет некоторые свойства для виджета, их много, рассмотрим только некоторые. Но перед этим создадим модель для Intent, это будет списком профилей из которых будет выбирать пользователь.Нажимаем на плюсик и добавляем Enum, заполняем поля этого перечисления.

Гуд, теперь создадим сам Intent, нажимаем на плюсик и кликаем New Intent, называем его ProfileSelection и конфигурируем, как показано на картинке.

Xcode под капотом сгенерирует для нас класс ProfileSelectionIntent. Теперь заменим конфигурацию в нашем LadderWidget.

 IntentConfiguration(kind: kind, intent: ProfileSelectionIntent.self, provider: LadderProvider()) { entry in LadderWidgetEntryView(entry: entry) }

Компилятор будет ругаться, что LadderProvider не следует протоколу IntentTimelineProvider, исправляем это, для этого просто следуем протоколу IntentTimelineProvider вместо TimelineProvider и обновляем сигнатуры функций соответственно.

Раз мы добавили ProfileSelectionIntent, значит пора его где-то использовать, то есть в зависимости от выбранного профиля наш провайдер должен отдавать соответствующий LadderEntry. Обновим наш getTimeline(for configuration:, in context:, completion:)

 func getTimeline(for configuration: ProfileSelectionIntent, in context: Context, completion: @escaping (Timeline<LadderEntry>) -> ()) { let entries: [LadderEntry] = [LadderEntry(date: Date(), profile: profile(for: configuration))] let timeline = Timeline(entries: entries, policy: .atEnd) completion(timeline) } func profile(for configuration: ProfileSelectionIntent) -> Profile { switch configuration.profile { case .lina: return Profile(id: 3, name: "Lina", ...) case .morphling: return Profile(id: 2, name: "Morphling", ...) // ... } }

Теперь у виджета появится кнопка Edit Widget и выбор отображаемого профиля для виджета.

Менеджер задач microsoft to do

Версии под андроид и виндовс ПК нет, а я тестирую их на постоянной основе. Так что рекомендую бесплатную кроссплатформенную программу Microsoft To Do, поглотившую Wunderlist. Своего виджета и приложения для Apple Watch нет, но есть обходной маневр — настраивается синхронизация с штатным приложением напоминания через учетки Exchange или Outlook.

Менеджер задач things 3

В некоторых менеджерах задач уже появились виджеты и вот это, наверное, одна из самых крутых фич — видеть текущие задачи на рабочем столе. Виджет появился у моего любимого приложения Things 3. Там еще есть удобная кнопка для добавления новых задач. Пользоваться программой перестал только по одной причине — упертые разработчики не хотят пилить кроссплатформу.

Менеджер привычек habitminder

Менеджер привычек HabitMinder также вовремя обновился и предлагает несколько вариаций виджетов для рабочего стола. Добавив привычку, приложение всегда напомнит о ее выполнении. На отдельной вкладке ведется подробная статистика по всем или выбранным привычкам.

Многозадачность

Наконец-то появился беспроблемный способ переключения из режима Split View (разделение экрана на две части) в Slide Over (когда одно окошко находится поверх других) и обратно.

Появился режим «Полка», где вы можете просматривать все открытые приложения, а также все вкладки в Safari.

Настройка виджетов

Устанавливая виджет, выберите один из трех размеров. Так, на рабочий стол поместится шесть маленьких или три средних виджета. Если выбрать самый большой размер, то на экран рабочего стола поместится всего один такой виджет, но останется дополнительное место, куда можно вставить еще один средний или два маленьких виджета.

Виджеты можно комбинировать в удобном для вас размере и порядке размещения. Если перетянуть один виджет на другой, создается стопка. Она призвана освободить место на экране. В стопке можно разместить до 10 виджетов. Приложения можно объединять также в смарт-стопках или виджетах быстрого просмотра, но об этом расскажем позже.

Установив виджет, вы можете его перемещать, удалять или изменять настройки. Для этого нужно вызвать настройки долгим нажатием. Меню откроется, если настройки в принципе доступны для этого виджета.

Более того, пока далеко не все приложения поддерживают установку самих виджетов. Чтобы проверить, возможно ли это, надо обновить приложения в App Store. Чем популярнее приложение, тем выше вероятность, что для него уже выпустили или в ближайшее время выпустят обновление, поддерживающее виджеты. Так, например, сделали в недавнем обновлении для Telegram Messenger.

В Telegram Messenger доступны два разных виджета среднего размера. Первый покажет два телеграмм-канала, выбранных вами. Лента будет обновляться динамически.

Во втором случае на экране покажут восемь иконок телеграм-каналов или контактов, выбранных вами.

Обновление виджета

  • Поддерживайте обновленное состояние вашего виджета. Для того чтобы информация на виджете оставалась актуальной, его нужно периодически обновлять. Виджеты не поддерживают обновление в режиме реального времени, так же система может ограничить вас в частоте обновления виджета. Поэтому нужно подойти к этому вопросы с осторожностью, например приложение Почта России может обновлять статус посылки раз в час или в два, этого будет достаточно, а вот приложению для трейдинга обновление раз в час может быть недостаточно и нужно будет обновляться чаще.
  • Позвольте системе обновлять даты и время в вашем виджете. Частота обновления виджета ограничена и поэтому переложите обязанность обновления даты и времени системе.
  • Показывайте контент быстро. Когда вы определяете частоту обновления контента, помните, что вам не обязательно прятать устаревшие данные за каким-то плейсхолдером, лучшее показать что-то старое, чем какой-то пустой скелетон.
Читайте также:  Что такое смартфон айфон айпад и в чем разница

Определение главной идеи для виджета

Перво-наперво нужно определиться с главной идеи для виджета, какую проблему он будет решать, будет ли он полезен пользователю, также желательно соотнести вашу идею с эпловскими гайдлайнами.

Передача данных между виджетом и приложением

iOS предоставляет несколько способов передачи данных между виджетом и приложением.

Плейсхолдер

func placeholder(in context: Self.Context) -> Self.Entry

Тут все просто, просто возвращаем слепок для плейсхолдера.

Погода the weather channel

Родной погодный информер слабоват по части отображаемой информации. Есть только дневной перепад по температуре и погода по часам. А вот сторонний от приложения the weather channel куда интереснее. Отображается погода не только по часам, но и интерактивная карта с осадками или погода на 3 дня. В компактном виджете тоже больше информации.

Вообще, как сторонним разработчиком, так и Apple стоит уделять больше внимания плотности информации в виджетах. А то виджеты зачастую занимают много места, а данных в них мало. Самим приложениям я не пользуюсь. Оно довольно тяжелое, много рекламы, дополнительные возможности покупаются по конской подписке, а скорость ветра указывается почему-то в километрах в час, в общем метрическая система в приложении странная.

Поддержка различных размеров экранов

Виджеты масштабируются к размеру экрана на различных устройствах, начиная с iPhone 6s заканчивая iPhone 11 Pro Max.

Показ placeholder’a

Когда WidgetKit отображает виджет первый раз, он показывает вью виджета как placeholder. Вью Placeholder view показывает общую структуру вашего виджета, как бы давая пользователю понять, что будет отображено на виджете. WidgetKit вызывает placeholder(in:) у провайдера чтобы получить слепок для placeholder’a.

 func placeholder(in context: Context) -> LadderEntry { LadderEntry(date: Date(), profile: sampleProfile) }

WidgetKit использует redacted(reason:) модификатор, чтобы показать вью как placeholder.Для того, чтобы понять, как будет выглядеть наш виджет в данном случае давайте создадим LadderWidgetPlaceholderView.

struct LadderWidgetPlaceholderView: View { var entry: LadderProvider.Entry var body: some View { LadderWidgetEntryView(entry: entry) .redacted(reason: .placeholder) }
}

То есть мы просто показываем вью нашего виджета и применяем к нему модификатор .redacted(reason: .placeholder). Если есть необходимость не показывать какие-то отдельные элементы вью как placeholder, то можно использовать оператор .unredacted() для них.

Более подробно про работу placeholder’ов можно прочитать у Majid Jabrayilov здесь.

Данные для виджета предоставляет LadderProvider, пройдемся более подробно по его функциям.

Принудительное обновление виджета

Приложение может обновить свой виджет не дожидаясь, когда это сделает система, с помощью WidgetCenter.

WidgetCenter.shared.reloadAllTimelines()

Разработка

С помощью Swift Playgrounds можно создавать приложения для iPhone прямо на iPad. Проекты, созданные там, можно редактировать в Xcode.

Смотрите похожее

iOS 14ВиджетыПриложения

Список покупок bring

Список покупок также неплохо вынести в виде виджета. Вообще для этой цели подойдут и менеджеры задач, но добавлять продукты там не так удобно. Bring отлично справляется с этой задачей. Только начинаете вводить наименование, как сразу же появляется список рекомендованных. Полезными будут раздел недавно использованные и категории.

В разделе Идеи создаются шаблоны для разных ситуаций. Там же можно найти рецепты, правда на английском. Аналогичный виджет со случайными рецептами можно вынести на рабочий стол. Приложение абсолютно бесплатное.

Сторонние приложения с крутыми виджетами

Главным сторонним виджетом, доступным на устройствах от Apple, я вижу менеджер задач. Things 3, Microsoft To Do, Bear — в App Store каждый найдет что-нибудь себе по душе. Привычка записывать все задачи хорошо помогает в жизни. Теперь вы не забудете о том, что надо отправить отчет или отвести сына на занятия по английскому. Все будет у вас под рукой. Жить станет значительно проще, а голова будет свободна для новых идей.

Еще одним виджетом, которым я пользуюсь, является приложение Spark. Многие офисные сотрудники зависимы от проверки почты в течение каждых 5 минут. Spark является пожалуй лучшим сторонним почтовым клиентом во всем App Store. Виджет имеет несколько вариаций, где каждый сможет найти что-то лично для себя. Теперь не придется искать нужное сообщение среди горы ненужных рассылок. Почтовый клиент от Readdle сделает это за вас.

Таймлайн

 func getTimeline(for configuration: Self.Intent, in context: Self.Context, completion: @escaping (Timeline<Self.Entry>) -> Void)

Как можно заметить этот метод ничего не возвращает, вместо этого у него есть комплишен блок, который принимает объект Timeline.

По сути таймлайн это просто структура, которая содержит массив слепков и объект полиси.

struct Timeline<EntryType> where EntryType : TimelineEntry { public let entries: [EntryType] public let policy: TimelineReloadPolicy
}

Как мы помним, слепок здесь это наша структура LadderEntry, у которой есть date и собственно данные для виджета, так вот эта date и определяет когда виджет будет обновлен в будущем.

Можно например сгенерировать таймлайн, где виджет будет обновляться каждые 3 секунды на протяжении 1 минуты.

 func getTimeline(for configuration: ProfileSelectionIntent, in context: Context, completion: @escaping (Timeline<LadderEntry>) -> ()) { let profile = self.profile(for: configuration) var entries: [LadderEntry] = [LadderEntry(date: Date(), profile: profile)] let threeSeconds: TimeInterval = 3 var currentDate = Date() let endDate = Calendar.current.date(byAdding: .minute, value: 1, to: currentDate)! while currentDate < endDate { let newScore = Double.random(in: 150...200) let newProfile = Profile(id: profile.id, name: profile.name, rating: profile.rating, score: newScore, imageName: profile.imageName) let entry = LadderEntry(date: currentDate, profile: newProfile) entries.append(entry) currentDate = threeSeconds } let timeline = Timeline(entries: entries, policy: .atEnd) completion(timeline) }

Что будет когда закончится эта 1 минута? Это зависит от того, что указано в policy объекта структуры TimelineReloadPolicy.

Текущий снапшот

Осталась одна функция в провайдере, которую осталась описать.

 func getSnapshot(for configuration: Self.Intent, in context: Self.Context, completion: @escaping (Self.Entry) -> Void)

В ней мы возвращает слепок, который представляет текущее время и состояние виджета. По сути реализация мало чем отличается от getTimeline(), но есть один момент который стоит упомянуть.

WidgetKit вызывает этот метод, когда виджет появляется в разных переходах и так же в галерее виджетов, тогда context.isPreview == true. В этом случае нужно вызвать комплишен как можно быстрее, допускается возвращать заранее приготовленные данные, если загрузка реальных данных может занять больше пары секунд.

 func getSnapshot(for configuration: ProfileSelectionIntent, in context: Context, completion: @escaping (LadderEntry) -> ()) { if context.isPreview { let entry = LadderEntry(date: Date(), profile: sampleProfile) completion(entry) } else { // it takes a few seconds to fetch the data let profile = self.profile(for: configuration) let entry = LadderEntry(date: Date(), profile: profile) completion(entry) } }

На симуляторе, это будет выглядеть вот так

WidgetKit также предоставляет возможность иметь больше чем один виджета на приложение.Для того, чтобы добавить еще один виджет в приложение нужно соответственно реализовать этот виджет и создать бандл виджетов, который будет входной точкой для Widget таргета.

Важный момент здесь, что точка входа может быть только одна, то есть @main должен быть только один и стоять перед WidgetsBundle.

@main
struct WidgetsBundle: WidgetBundle { @WidgetBundleBuilder var body: some Widget { LadderWidget() NewsWidget() }
}

Здесь Xcode может бросить ошибку:

Please specify the widget kind in the scheme’s Environment Variables using the key ‘_XCWidgetKind’ to be one of: ‘LadderWidget’, ‘NewsWidget’}.

Чтобы это поправить нужно пойти Edit Scheme виджет таргета и поправить значение свойства _XCWidgetKind.

Запускаем симулятор снова и видим, что теперь мы можем выбрать еще один виджет для приложения.

Трекинг посылок parcel

Если у вас много посылок или вы постоянно заходите в какое-нибудь специализированное приложение, чтобы отследить трек отправления — вынесите виджет на рабочий стол. Приложение Parcel или посылка предлагает 3 варианта виджета. Да, шрифт и размеры текста оставляют желать лучшего, но в целом программа справляется с поставленной задачей.

Удаление виджетов с главного экрана

Если вы хотите удалить виджет из «Вида «Сегодня»», вернитесь к настройкам с помощью кнопки «Изменить». Нажмите красный значок минуса рядом с виджетом, который требуется убрать.

Потом нажмите появившуюся красную кнопку «Удалить».

Удаление виджета из областей «Закрепленные» или «Избранное» вернет виджет в нижний список «Еще виджеты».

Учет водного баланса waterminder

Если вы ведете учет выпитой жидкости, то, пожалуй, лучшим приложением станет WaterMinder. Тем более оно предлагает просто километр разнообразных виджетов для рабочего стола iOS 14. В программе вы можете создать шаблоны напитков и объемы выпитого. Имеется подробная статистика выпитого.

Fantastical и calendars

Не устраивает штатный виджет календаря? Могу посоветовать два на замену. Один Fantastical. Можно поставить даже календари на 2 месяца, не говоря уже о кучи банальных. А приложение Calendars предлагает календарь и менеджер задач 2 в 1.

Заключение

В статье были разобраны основные моменты работы с виджетами, надеюсь кому-то пригодится.

Оцените статью
iPad Мобайл