Как включить открытие моего собственного пользовательского типа файла на iOS

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

  • Пользователь 1 выбирает функцию "Поделиться" в приложении. Это создает файл моего типа (скажем, file.myextension) и делится им с помощью UIActivityViewController, Они отправляют это как-то Пользователю 2 (AirDrop, электронная почта, что угодно).
  • Пользователь 2 получает файл и открывает его. Система предлагает открыть его с помощью моего приложения.

У меня первая часть работает. Я могу сгенерировать файл.myExtension и дать UIActivityViewController URL файла к нему. Это правильно отображается в AirDrop на устройстве пользователя 1, и я могу передать файл, используя AirDrop или по электронной почте или что-то еще. Но принимающее устройство отказывается показывать мое приложение в качестве опции для открытия файла.

Я пытался:

  • Объявление экспортируемых и импортируемых UTI и типа документа в соответствии с Apple Q & A. Я трижды проверил, что все идентификаторы одинаковы и все списки ключей написаны правильно.
  • Я пробовал экспортировать и импортировать UTI в одиночку (с типом документа). Эта статья, кажется, говорит, что Импортированный - это то, что я хочу, если я хочу открыть тип файла. Этот SO-ответ говорит, что регистрация типа, которым я владею и хочу открыть, означает, что я просто хочу экспортировать. Ни один сам по себе не работал.

Мой вопрос: что мне нужно сделать, чтобы иметь возможность открыть расширение файла, которым я владею на iOS? Определить ли как импортируемые, так и экспортируемые ИМП вместе с типом документа? Просто один из экспортируемых или импортируемых? Какие-то неожиданные обязательные атрибуты?

2 ответа

CFBundleDocumentTypes Ключ - это то, что вам нужно. Это должен быть массив, и каждый элемент в массиве должен быть словарем. Каждый словарь должен содержать следующие ключи:

CFBundleTypeIconFiles (Массив строк)

CFBundleTypeName (String)

CFBundleTypeRole (String)

LSHandlerRank (String)

LSIsAppleDefaultForType (Boolean)

LSItemContentTypes (Массив строк)

Вот как это выглядит для моего приложения (материал, который затемнен, чтобы не раскрывать личность моей компании):

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

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