Teabyte
ЛИЧНЫЙ БЛОГ АЛЕКСАНДРА ВАЙСА
Опубликовано 2022-11-19
Недавно на работе нас попросили скрыть(*спрятать) содержимое виджетов экрана блокировки, когда устройство заблокировано, подобно виджету Activity Rings, который не показывает ваш ежедневный прогресс, когда вы блокируете устройство. Оказалось, что не так уж очевидно, как этого добиться. В этом небольшом посте я хочу рассказать о том, что необходимо для достижения такого же поведения, как у виджета Activity Rings.
Скрытие, Определяемое Пользователем
Перед непосредственным погружением в тему, стоит упомянуть, что пользователи, независимо от того, что предлагает ваш виджет в плане защиты конфиденциальности, могут решить спрятать все виджеты, когда устройство заблокировано. Чтобы добиться этого, перейдите в раздел:
Настройки -> Face ID & код-пароль далее активируйте Виджеты главного экрана в разделе Доступ с блокировкой экрана. Это приведет к затемнению(;размытию) каждого виджета Экрана Блокировки, независимо от его реализации, при использовании .privacySenstive(_:)(doc).
Настраиваемое Скрытие при блокировке устройства
Как мы уже видели, пользователи могут выбирать их собственные настройки, когда нужно что-то спрятать. Но иногда необходимо, чтобы мы не полагались на то, что пользователь активирует какой-то скрытый переключатель глубоко в настройках iOS. Чтобы всегда скрывать виджеты, когда устройство заблокировано, вам нужно настроить две вещи:
1. Выберите NSFileProtectionComplete(doc) и добавьте его в файл вашего виджета Entitlements
⚠️ NSFileProtectionComplete будет правильно работать только на реальном устройстве. В симуляторе это ни на что не влияет.
2. Добавьте модификатор privacySensitive(_) в код вью ваших виджетов.
Text("My Widget View")
.privacySensitive()
Теперь попробуйте запустить ваш виджет на реальном устройстве. Вы должны увидеть поведение, похожее на то, что показано в следующем видео:
Заключение
С помощью этих двух дополнений можно скрыть вью виджетов экрана блокировки, как только устройство будет заблокировано. Это работает совершенно независимо от любых настроек пользователя и гарантирует, что ваша логика будет применена правильно без каких-либо побочных эффектов.
Я надеюсь, что эта небольшой пост поможет вам реализовать Скрытие на Экране Блокировки для вашего следующего виджета.
До встречи в следующий раз!