Распознавание файловых пакетов iOS (в Simulator и Finder)

Я пытаюсь использовать файловые пакеты для приложения iOS, определяющего тип UTI. После поиска в Google и просмотра записей в Xcode.plist я попробовал несколько вещей, но продолжал сталкиваться с проблемами. Мое приложение создает несколько тестовых документов, а затем пытается прочитать эти файлы с помощью пользовательского интерфейса пользователя.

Если я не укажу "LSItemContentTypes", то finder правильно увидит их как пакеты. Но затем mdls возвращает "dyn.longstring" как kMDItemContentType.

Если я укажу "LSItemContentTypes", то kMDItemContentType будет правильным. Но искатель видит это как папку.

В обоих случаях UTI я получаю через

[url getResourceValue:&UTI
forKey:NSURLTypeIdentifierKey
error:nil];

это неверно. Он либо возвращает "dyn.longstring", либо "public.folder". Мое приложение не загружает эти файлы из-за неправильного UTI. Я мог бы переписать это, но хочу сделать это правильно с UTI.

Я определил пакет файлов iOS как тип документа и экспортировал тип UTI, как показано ниже. Что я пропускаю?

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<array>
    <dict>
        <key>CFBundleTypeExtensions</key>
        <array>
            <string>tdp</string>
        </array>
        <key>CFBundleTypeName</key>
        <string>MyFilePackage</string>
        <key>CFBundleTypeRole</key>
        <string>Editor</string>
        <key>LSItemContentTypes</key>
        <array>
            <string>reverse.dns.ios.package</string>
        </array>
        <key>CFBundleTypeIconFile</key>
        <string>Default</string>
        <key>LSIsAppleDefaultForType</key>
        <true/>
        <key>LSTypeIsPackage</key>
        <true/>
    </dict>
</array>
</plist>


<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<array>
    <dict>
        <key>UTTypeTagSpecification</key>
        <dict>
            <key>public.filename.extension</key>
            <array>
                <string>tdp</string>
            </array>
        </dict>
        <key>UTTypeIdentifier</key>
        <string>reverse.dns.ios.package</string>
        <key>UTTypeConformsTo</key>
        <array>
            <string>com.apple.package</string>
            <string>public.composite-content</string>
        </array>
    </dict>
</array>
</plist>

0 ответов

Была аналогичная проблема, в том числе UTI отображался как "dyn.longstring". Похоже, исправление заключалось в удалении атрибута CFBundleTypeExtensions (который устарел). Эта комбинация в info.plist сработала для меня:

<key>CFBundleDocumentTypes</key>
<array>
    <dict>
        <key>CFBundleTypeName</key>
        <string>My App Name</string>
        <key>LSHandlerRank</key>
        <string>Owner</string>
        <key>LSItemContentTypes</key>
        <array>
            <string>my.content.type</string>
        </array>
        <key>LSTypeIsPackage</key>
        <true/>
    </dict>
</array>
<key>UTExportedTypeDeclarations</key>
<array>
    <dict>
        <key>UTTypeConformsTo</key>
        <array>
            <string>com.apple.package</string>
            <string>public.composite-​content</string>
        </array>
        <key>UTTypeDescription</key>
        <string>My App Name</string>
        <key>UTTypeIdentifier</key>
        <string>my.content.type</string>
        <key>UTTypeTagSpecification</key>
        <dict>
            <key>public.filename-extension</key>
            <string>myextension</string>
        </dict>
    </dict>
</array>
Другие вопросы по тегам