Скрывайте Виджеты Экрана Блокировки когда устройство заблокировано.

02 декабря 2022

Teabyte

ЛИЧНЫЙ БЛОГ АЛЕКСАНДРА ВАЙСА

Опубликовано 2022-11-19

Недавно на работе нас попросили скрыть(*спрятать) содержимое виджетов экрана блокировки, когда устройство заблокировано, подобно виджету Activity Rings, который не показывает ваш ежедневный прогресс, когда вы блокируете устройство. Оказалось, что не так уж очевидно, как этого добиться. В этом небольшом посте я хочу рассказать о том, что необходимо для достижения такого же поведения, как у виджета Activity Rings.

 

Скрытие, Определяемое Пользователем

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

Настройки -> Face ID & код-пароль далее активируйте Виджеты главного экрана в разделе Доступ с блокировкой экрана. Это приведет к затемнению(;размытию) каждого виджета Экрана Блокировки, независимо от его реализации, при использовании .privacySenstive(_:)(doc).

 

Настраиваемое Скрытие при блокировке устройства

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

1. Выберите NSFileProtectionComplete(doc) и добавьте его в файл вашего виджета Entitlements

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
    <key>com.apple.developer.default-data-protection</key>
    <string>NSFileProtectionComplete</string>
</dict>
</plist>

 

⚠️ NSFileProtectionComplete будет правильно работать только на реальном устройстве. В симуляторе это ни на что не влияет.

2. Добавьте модификатор privacySensitive(_) в код вью ваших виджетов.

Text("My Widget View")
    .privacySensitive()

 

Теперь попробуйте запустить ваш виджет на реальном устройстве. Вы должны увидеть поведение, похожее на то, что показано в следующем видео:

 

Заключение

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

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

До встречи в следующий раз!
 

Оригинал статьи

Содержание