Я использовал универсальные идентификаторы типов правильно?

Я создаю приложение для Mac OS X, и я хотел знать, использовал ли я UTIs правильно в .plist файле приложения:

<key>UTExportedTypeDeclarations</key>
<array>
    <dict>
        <key>UTTypeIdentifier</key>
        <string>com.petroules.silverlock.database</string>
        <key>UTTypeDescription</key>
        <string>Silverlock Database File</string>
        <key>UTTypeIconFile</key>
        <string>app.icns</string>
        <key>UTTypeConformsTo</key>
        <array>
            <string>public.data</string>
        </array>
        <key>UTTypeTagSpecification</key>
        <dict>
            <key>com.apple.ostype</key>
            <string>SDBX</string>
            <key>public.filename-extension</key>
            <array>
                <string>sdbx</string>
            </array>
            <key>public.mime-type</key>
            <string>application/octet-stream</string>
        </dict>
    </dict>
</array>

Этот код, кажется, работает, хотя двойной щелчок по .sdbx файлу в Средстве поиска не заставляет мое приложение открывать сам файл..., но это могло бы просто быть моим кодом (что-то, что я изучу позже).

Кроме того, формат моего типа файла является зашифрованным содержимым, закодированным в основе 64... application/octet-stream лучший тип MIME для использования для этого или там что-то еще, что я должен использовать, и я мог возможно столкнуться с проблемами совместимости где-нибудь в спектре при помощи менее общего типа MIME?

Кроме того, я включал следующий код:

<key>CFBundleDocumentTypes</key>
<array>
    <dict>
        <key>CFBundleTypeExtensions</key>
        <array>
            <string>sdbx</string>
        </array>
        <key>CFBundleTypeIconFile</key>
        <string>app.icns</string>
        <key>CFBundleTypeName</key>
        <string>com.petroules.silverlock.database</string>
        <key>CFBundleTypeRole</key>
        <string>Editor</string>
        <key>LSItemContentTypes</key>
        <array>
            <string>com.petroules.silverlock.database</string>
        </array>
        <key>LSHandlerRank</key>
        <string>Owner</string>
    </dict>
</array>

Я должен включать это вообще, потому что у меня есть код UTI выше? Действительно ли это необходимо? Каковы различия между двумя? Я действительно не смог установить это из документации. Спасибо :)

1
задан kiamlaluno 10 August 2010 в 08:54
поделиться

1 ответ

Чтобы выяснить, виновата ли эта или ваш код, закройте приложение, прежде чем дважды щелкнуть файл. Если это запускает ваше приложение, но не открывает файл, то ваш Info.plist в порядке, и ваша проблема в - [[делегат NSApp] приложение: openFile:] . Если приложение вообще не запускается, можете быть уверены, что ваш Info.plist неверен с точки зрения Launch Services.

Вам требуется как UTExportedTypeDeclarations , так и CFBundleDocumentTypes . Первый сообщает Launch Services, что ваш пользовательский UTI существует. Второй сообщает ему, что ваше приложение является редактором для этого типа файлов.

2
ответ дан 2 September 2019 в 22:18
поделиться
Другие вопросы по тегам:

Похожие вопросы: