Как связать приложение iPhone с типом _every_?
Существует приложение iPhone "Другой почтовый клиент", который должен иметь возможность открывать любой файл для отправки его в виде вложения. Итак, я хочу связать это приложение с любым файлом с любым расширением.
Следуя документации, мы должны объявить о поддержке файлов с корневым UTI-типом public.data
- любой файл должен принадлежать этому типу. Это работает, но совсем нет. В этом случае наше приложение не сможет открыть какой-либо файл, а только те, которые уже зарегистрированы в системе. Например, если в любом приложении (например, dropbox) мы попытаемся "открыть в..." файл с неизвестным расширением (file.unknowntype) с помощью UIDocumentInteractionController, тогда ответ будет отрицательным, несмотря на то, что мы уже зарегистрировало наше приложение и поддерживает корневой UTI-тип public.data
. Но если вы устанавливаете другое приложение, которое поддерживает файлы с расширением (*.unknowntype), то наше приложение также сможет открыть эти файлы и появится в списке приложений "открыть в...".
UPD: @Gabriel Это часть CFBundleDocumentTypes моего файла info.plist:
<key>CFBundleDocumentTypes</key>
<array>
<dict>
<key>CFBundleTypeName</key>
<string>MyMail</string>
<key>LSItemContentTypes</key>
<array>
<string>public.data</string>
</array>
<key>CFBundleTypeRole</key>
<string>Viewer</string>
<key>LSHandlerRank</key>
<string>Default</string>
<key>CFBundleTypeIconFiles</key>
<array>
<string>Icon29.png</string>
...
<string>Icon114.png</string>
</array>
</dict>
</array>
Ответы
Ответ 1
Я создал приложение со следующей настройкой
<key>CFBundleDocumentTypes</key>
<array>
<dict>
<key>CFBundleTypeIconFiles</key>
<array/>
<key>CFBundleTypeName</key>
<string>name</string>
<key>LSItemContentTypes</key>
<array>
<string>public.data</string>
</array>
</dict>
</array>
Когда я пытаюсь открыть .pdf из Safari, это приложение отображается в списке "Открыть в..". Можете ли вы сделать пример приложения и попробовать его?
UPD:
Похоже, что требование "public.data" (проверено также public.item, public.content) означает файл, который принадлежит к набору "все известные системным UTI", а не к любому файлу. Таким образом, вы сможете обрабатывать 99% файлов, которые пользователи хотят отправлять по электронной почте, но не все. Другим способом было бы экспортировать UTI, которые, по вашему мнению, важны, но которые по умолчанию не относятся к системным UTI.
Ответ 2
Друг, я правильно прочитал ваш вопрос, прежде чем отправлять ответ. Я подумал, что у вас будет набор уже известных "любых типов" файлов для регистрации в большом объеме. Однако вы хотите динамически разместить свое приложение для регистрации любого типа файла, указанного в вашем приложении, в будущем и сделать его прикрепляемым. Для этого, насколько я знаю, вы не можете сделать приложение для универсальной поддержки любого неизвестного типа файла. Позвольте мне объяснить, что происходит,
-
Предположим, что вы создаете приложение APP1, тогда он не знает о расширении файла .XYZ и устанавливает его на iPhone.
-
Но позже я разрабатываю другое приложение APP2, которое содержит вышеуказанный код, и я регистрирую тип .XYZ из APP2 в любом iPhone, который он устанавливает.
-
Итак, скажем, я устанавливаю APP2 в вашем iPhone, имея APP1. И когда мое приложение запускается, расширение .XYZ(известное APP2 раньше времени) регистрируется в iPhone.
Вот почему ваше приложение APP1 может неожиданно использовать этот файл .XYZ.
В заключение вы должны заранее знать определенный тип расширений, прежде чем создавать приложение.
Однако, это возможное решение для него.
Решение:
-
Определите максимальное количество символов, которые вы хотите поддерживать в extenstion. Допустим, 4.
-
Теперь вы можете создать небольшую процедуру Brute-Force для запуска в вашем приложении, чтобы сделать все возможные комбинации символов и зарегистрировать их все. Это должно сделать любой файл с расширением до 4 символов, прикрепляемых к почте.
Я надеюсь, что это должно было сделать трюк.
Удачи!
Ответ 3
Идея для исследования...
Если установка другого приложения "исправляет" проблему, попробуйте проверить файл других приложений Info.plist, чтобы узнать, регистрирует или экспортирует какие-либо интересные UTI
или подобные настройки.
Похоже, ваше приложение может выполнять только половину задания, а другое приложение завершает отсутствующую настройку.
Вы можете просмотреть содержимое файла приложений ipa
из iTunes
, скопировав его, переименовав ipa
в zip
, извлекая содержимое, а затем Show Package Contents
в приложении внутри.