Связывание пользовательского файла моего приложения в iOS - PullRequest
2 голосов
/ 24 февраля 2012

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

Как связать типы файлов с приложением iPhone?

Файл называется XXX.checklist

Но это не общение.Я полагаю, что моя проблема с ключом типа public.mime, так как я понятия не имею, что я должен туда поместить.Ниже приведены соответствующие записи в инфо-листе

<key>CFBundleDocumentTypes</key>
<array>
    <array>
        <dict>
            <key>CFBundleTypeIconFiles</key>
            <array>
                <string>docIcon64.png</string>
                <string>docIcon320.png</string>
            </array>
            <key>CFBundleTypeName</key>
            <string>My App Checklist</string>
            <key>CFBundleTypeRole</key>
            <string>Viewer</string>
            <key>LSHandlerRank</key>
            <string>Owner</string>
            <key>LSItemContentTypes</key>
            <array>
                <string>com.mycompany.appid.checklist</string>
            </array>
        </dict>
    </array>
</array>

<key>UTExportedTypeDeclarations</key>
<array>
    <dict>
        <key>UTTypeConformsTo</key>
        <array>
            <string>public.content</string>/// i tried public.text but it allowed the file to be opened by the devices default text viewer which I would not like. 
        </array>
        <key>UTTypeDescription</key>
        <string>My App Checklist</string>
        <key>UTTypeIdentifier</key>
        <string>com.mycompany.appid.checklist</string>
        <key>UTTypeTagSpecification</key>
        <dict>
            <key>public.filename-extension</key> // fixed this key
            <string>checklist</string>
            <key>public.mime-type</key>
            <string>text/xml</string> /// changed to this, still doest work though
        </dict>
    </dict>
</array>

1 Ответ

5 голосов
/ 28 февраля 2012

Если ваш UTI объявлен как public.data Я предполагаю, что ваш файл контрольного списка представляет собой пользовательские двоичные данные.

Затем вам следует просто использовать application/octet-stream в качестве mime-типа.

ОБНОВЛЕНИЕ: Понял, ваша проблема более тривиальна, чем кто-либо мог ожидать.Еще одна вещь для начала - public.data хорошо для всех его потомков (включая public.xml), поэтому для файла XML вы можете установить любой из них:

  • public.item
  • public.data
  • public.content
  • public.text
  • public.xml

Список приложений, предлагаемых для открытия вашего файлаТип - это сборка, основанная на известных приложениях в системе, которые могут обрабатывать данный UTI плюс ваш.Поскольку текстовый редактор по умолчанию открывает public.text и public.xml, это будет действие по умолчанию для ваших файлов (ваше приложение будет отображаться в списке, вызванном долгим нажатием на почтовом вложении).

По-видимому, нет приложений, которые обрабатывают public.data (то же самое для public.content), поэтому при использовании этого UTI действие по умолчанию для вложения будет открывать его в вашем приложении.

Сейчасв точку ... у вашего CFBundleDocumentTypes есть еще один <array> уровень:

<key>CFBundleDocumentTypes</key>
<array>
    <array>     <!-- remove this line -->
        <dict>
            <key>CFBundleTypeIconFiles</key>
            <array>
                <string>docIcon64.png</string>
                <string>docIcon320.png</string>
            </array>
            <key>CFBundleTypeName</key>
            <string>My App Checklist</string>
            <key>CFBundleTypeRole</key>
            <string>Viewer</string>
            <key>LSHandlerRank</key>
            <string>Owner</string>
            <key>LSItemContentTypes</key>
            <array>
                <string>com.mycompany.appid.checklist</string>
            </array>
        </dict>
    </array>     <!-- and this line -->
</array>

И он сработает.UTExportedTypeDeclarations часть уже в порядке.

...