Как включить открытие моего собственного пользовательского типа файла на 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 (Массив строк)
Вот как это выглядит для моего приложения (материал, который затемнен, чтобы не раскрывать личность моей компании):
Догадаться. Одна ключевая деталь, не указанная явно в документах, заключается в том, что последняя часть типов в разделе "Тип документа" должна соответствовать выбранному вами расширению файла.