Как связать приложение 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 в приложении внутри.