Связывание моего пользовательского файла приложения в iOS

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

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

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

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

<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

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

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

UPDATE: Получил это, ваша проблема более тривиальная, чем кто-либо ожидал бы. Еще одна вещь для начинающих - 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 уже прекрасна.