Регистрация значка для типа документа моего приложения

Я пытаюсь зарегистрировать значок для типа документа моего приложения. После прочтения Объявление Новых Идентификаторов Единого Типа и, глядя на /Developer/Examples/Sketch Я придумал что-то подобное в моем Info.plist:

<key>CFBundleDocumentTypes</key>
<array>
  <dict>
    <key>CFBundleTypeRole</key>
    <string>Viewer</string>
    <key>LSItemContentTypes</key>
    <array>
      <string>com.mycompany.myextension</string>
    </array>
    <key>NSDocumentClass</key>
    <string>NSString</string>
  </dict>
</array>

...

<key>UTExportedTypeDeclarations</key>
<array>
  <dict>
    <key>UTTypeDescription</key>
    <string>Blah blah blah</string>
    <key>UTTypeConformsTo</key>
    <array>
      <string>public.data</string>
    </array>
    <key>UTTypeIconFile</key>
    <string>My-file-icon.icns</string>
    <key>UTTypeIdentifier</key>
    <string>com.mycompany.myextension</string>
    <key>UTTypeTagSpecification</key>
    <dict>
      <key>public.filename-extension</key>
      <array>
        <string>myextension</string>
      </array>
    </dict>
  </dict>
</array>

теперь все нормально, и денди, т. е. моя программа открывается, когда я нажимаю на файл с моим расширением и т. д. Однако, значок документа не зарегистрирован в ОС, т. е. я вижу уродливый пустой значок вместо моего прекрасного My-file-icon.icns. Я подозреваю, что я упускаю что-то в plist выше, есть идеи?

3 ответов


Попробуйте поместить имя значка в CFBundleTypeIconFile ключ в CFBundleDocumentTypes массив, а не в UTExportedTypeDeclarations массив.

и, конечно, убедитесь, что " My-file-icon.icns " находится на этапе сборки ресурсов пакета копирования вашей цели и копируется в содержимое/ресурсы в пакете вашего приложения.


У меня также была аналогичная проблема, оказывается, мне нужно было перестроить базу данных служб запуска в соответствии с тем, что я задокументировал здесь....

https://stackoverflow.com/a/12466968/1571635


ваша декларация UTI в информации.plist кажется правильным, однако я заметил другую проблему. Если приложение является приложением на основе документа, вам необходимо заменить NSString в следующей записи подклассом NSDocument:

<key>NSDocumentClass</key>
<string>NSString</string>

например, это "SKTDocument" в Sketch:

<key>NSDocumentClass</key>
<string>SKTDocument</string>

изменить: Также убедитесь, что для экспортируемых UTIs используется собственное обратное доменное имя. Это гарантирует, что UTIs уникальны. Например com.mindnode.MindNode.MindNodeDocument в моем случае.