Совместное использование файловых данных между приложениями в Swift/iOS

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

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

1. Расширения приложения - вариант не-пользовательского интерфейса провайдера документов

Согласно документации:

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

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

2. Общий доступ к связке ключей

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

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

Я также нашел этот репозиторий, который, очевидно, облегчает работу с Keychain:

3. Пользовательские картоны

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

При записи или чтении данных в и из картона необходимо указать тип картона. Типы картона обычно используют унифицированный идентификатор типа (UTI), чтобы определить тип данных, поступающих и извлекаемых из картона. См. Справочную документацию класса UIPasteboard Apple для получения дополнительной информации.

Выше документации вытащил из этого поста

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


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

Спасибо заранее. Как всегда, хорошо написанные ответы набирают голоса;)

1 ответ

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

См. Раздел " Обмен данными с вашим приложением"

Также см. " Добавление приложения в группу приложений":

Другие вопросы по тегам