Ответ 1
Это должно произойти. Фактически это цель initWithSuiteName, чтобы обмениваться данными между всеми приложениями в группе приложений. Документы говорят:
Используйте этот метод в таких сценариях, как:
При разработке пакета приложений, обмена предпочтениями или другими данными среди приложения
При разработке расширения приложения, для обмена предпочтениями или другими данными между расширением и содержащим приложение
Невозможно удалить приложение, поскольку при удалении приложения он не уведомляется. Это та же проблема с хранением элементов в Keychain - они сохраняются за пределами жизни приложения. Это может быть хорошим или плохим, в зависимости от потребностей вашего приложения.
Одним из решений является шифрование соответствующих частей содержимого файла и сохранение ключа в общей цепочке ключей. Для чего-то подобного случайный 256-битный симметричный ключ AES идеально подходит. В общем случае, если пользователь имеет код доступа на устройстве, файловая система шифруется, а элементы в общем хранилище считаются чистыми.
Другой вариант - использовать разделяемое хранилище как сквозную; мы делаем это в нашем наборе приложений. Одно приложение поместит зашифрованный файл в общий накопитель, затем вызовет другое приложение в нашем пакете с URI файла и ключ шифрования. Приложение-получатель скопирует файл в локальное хранилище, удалит общий файл и затем расшифрует локальный файл.