На iOS пользователь разрешил доступ только к выбранным фотографиям, но приложение показывает всю медиатеку. Как доказать, что тест проверяет ограниченный объём разрешения, а не обычный сбой фильтрации?
Нужно воспроизвести разрешение ограниченного доступа к фотографиям, зафиксировать набор выбранных изображений и проверить, что приложение видит только его. Затем следует расширить выбор через системные настройки и убедиться, что доступ приложения меняется вместе с разрешённым набором.
Если приложение показывает фотографии, которые не входят в разрешённый набор, это указывает на ошибку обработки ограниченного scope разрешения либо на неверную интерпретацию системой доступа, а не на обычную проблему сортировки или фильтрации интерфейса.
Мобильные ОС постепенно перешли от разрешения по принципу всё или ничего к более детальному контролю доступа к персональным данным. Для фотографий это позволило пользователю предоставить приложению только выбранные изображения, не открывая всю медиатеку.
На iOS режим ограниченного доступа появился как часть усиления защиты пользовательских данных. Исходная проблема состояла в том, что приложению для одной операции, например выбора фотографии для профиля, часто требовался доступ ко всей библиотеке.
Ошибка опасна тем, что приложение может визуально или функционально раскрывать данные, на которые пользователь не давал разрешения. Особенно рискованны экраны галереи, поиск по медиатеке, синхронизация и фоновые операции.
Проверка только при первом разрешении недостаточна. Пользователь может позднее изменить список доступных фотографий, отозвать доступ или предоставить полный доступ, поэтому приложение обязано корректно реагировать на изменившийся статус разрешения.
Сначала сбросьте разрешения приложения и подготовьте медиатеку с несколькими явно различимыми изображениями. Разрешите приложению доступ только к части фотографий, затем откройте экран, который обращается к медиатеке, и зафиксируйте фактически отображённый набор.
Для доказательства причины нужны контрольные состояния:
Важно разделить два источника списка. Системный выбор фотографий может вернуть приложению конкретные объекты для одной операции, тогда как доступ к медиатеке предполагает последующее чтение с учётом текущего статуса разрешения. Нельзя считать ранее полученный список постоянным доказательством полного доступа.
Тест должен проверять не только экран. Нужно убедиться, что ограничение соблюдается в поиске, сортировке, превью, импорте, синхронизации и повторном чтении после изменения разрешения. Если приложение кэширует миниатюры или метаданные, отдельно проверьте, не остаются ли в интерфейсе данные уже недоступных фотографий.
Ограничение теста состоит в том, что наличие изображения на экране ещё не всегда доказывает успешное чтение оригинального файла: это может быть ранее сохранённая копия. Поэтому полезно проверять источник данных, повторное получение оригинала и поведение после очистки кэша.
В приложении для создания аватара пользователь выбрал три фотографии, но экран импорта показывал всю медиатеку. Рассматривались два варианта: исправить только фильтрацию списка в интерфейсе или пересмотреть получение данных с учётом текущего статуса разрешения.
Исправление интерфейсного фильтра было бы быстрым, но ненадёжным: другие экраны, поиск или фоновые задачи могли продолжить обращаться к более широкому набору данных. Был выбран второй вариант — централизованно учитывать ограниченный статус доступа, обновлять его при возвращении в приложение и удалять из представления объекты, которые больше не входят в разрешённый набор.
После этого тесты подтвердили три свойства: при ограниченном доступе видны только выбранные фотографии, изменение выбора применяется после возврата из настроек, а ранее загруженные превью недоступных объектов не восстанавливаются из кэша. Полный доступ при этом продолжил работать отдельно от ограниченного режима.
Нет. Совпадение количества может быть случайным, а приложение способно показывать кэшированные данные или неверный набор с таким же размером. Нужно использовать уникальные изображения, проверять идентичность объектов, повторное чтение после очистки кэша и изменение разрешённого набора.
Потому что пользователь может изменить разрешение без переустановки приложения и без нового первичного запроса. Если приложение хранит прежний статус или список фотографий только в памяти, оно будет показывать устаревшие данные. Корректное приложение обновляет состояние при возобновлении работы и не предполагает, что разрешение осталось прежним.
Системный picker может передать приложению выбранный пользователем объект для конкретного действия, не предоставляя общего доступа ко всей медиатеке. Ограниченный доступ к библиотеке задаёт более длительное разрешение на определённый набор объектов, который пользователь может изменить позднее. Поэтому тест должен явно фиксировать, какой механизм использует сценарий: единичную передачу выбранного файла или последующее чтение медиатеки по разрешению.