Значки файлов меняются на значки приложений в macOS Catalina - PullRequest
6 голосов
/ 03 октября 2019

У меня есть приложение Mac, которое открывает офисные файлы (.doc, .xls и т. Д.), И мне нужно показать пользовательский значок для этих поддерживаемых файлов. Раньше я достигал этого, добавляя поддерживаемые типы UTI в CFBundleDocumentTypes и назначая свой собственный значок icns. Также установите мое приложение в качестве приложения по умолчанию, которое открывает файлы этих типов.

Теперь этот подход работал безупречно до появления бета-версии macOS Catalina, даже когда приложения Microsoft присутствовали вместе с моим приложением. В бета-версии macOS Catalina и далее вместо всех значков файлов отображается значок моего приложения.

Я пытался очистить кэш значков и даже перезапустить Finder, но безрезультатно. Позже я даже попытался добавить типы UTI в UTExportedTypeDeclarations и UTImportedTypeDeclarations.

. Это ошибка в Catalina Beta? Или все, что я могу сделать, чтобы заставить это работать.

В моем списке UTExportedTypeDeclarations выглядит так. UTImportedTypeDeclarations и CFBundleDocumentTypes имеют аналогичные значения.

<key>UTExportedTypeDeclarations</key>
<array>
    <dict>
        <key>UTTypeConformsTo</key>
        <array>
            <string>org.openxmlformats.spreadsheetml.sheet</string>
            <string>org.openxmlformats.openxml</string>
            <string>public.composite-content</string>
        </array>
        <key>UTTypeDescription</key>
        <string>Excel Open XML spreadsheet</string>
        <key>UTTypeIconFile</key>
        <string>custom.icns</string>
        <key>UTTypeIdentifier</key>
        <string>com.microsoft.excel.openxmlformats.spreadsheetml.sheet</string>
        <key>UTTypeTagSpecification</key>
        <dict>
            <key>com.apple.ostype</key>
            <string>XLSX</string>
            <key>public.filename-extension</key>
            <array>
                <string>xlsx</string>
            </array>
        </dict>
    </dict>
</array>

1 Ответ

3 голосов
/ 18 октября 2019

Похоже, macOS 10.15 изменил способ разрешения соответствующего значка для типа.

Я нашел способ, как получить правильные значки документов для моего приложения на Catalina:
Раньше у меня был только значок, определенный для клавиши CFBundleTypeIconFile в моих словарях CFBundleDocumentTypes. Но начиная с Catalina, система использует массив LSItemContentTypes для поиска экспортируемого UTI , а затем использует значок этого UTI (определенный через UTTypeIconFile).

Если массив LSItemContentTypes содержит типы, которые еще не известны системе (= недавно введенные пользовательские типы), эти типы также необходимо экспортировать путем определения словарей в UTExportedTypeDeclarations.

Это работает для моего случая, потому что я использую пользовательский формат файла с его собственным UTI.
Для описываемого вами случая, где используются существующие UTI, я не уверен, что все еще возможно переопределитьзначки UTI, которые вы не «владеете». Я думаю, что правильным способом определения пользовательских значков для сторонних типов будет определение словарей в массиве import types (UTImportedTypeDeclarations). В этом случае система должна выбрать ваш пользовательский значок, если никакое другое приложение не объявляет о владении UTI путем его экспорта. Я предполагаю, что значок приложения, установленного в качестве приложения по умолчанию для типа, выигрывает в случае, если на него претендуют 2 или более приложений (не пробовал).

Другая проблема, с которой я столкнулся, заключалась в том, что файл значков, назначенный UTTypeIconFile, не может быть получен из каталога активов (это работало для CFBundleTypeIconFile). Он должен ссылаться на файл .icns в папке Resource в вашем комплекте.
Существующие папки .iconset из каталога активов можно преобразовать в icns с помощью следующей команды: iconutil --convert icns iconname.iconset

Я не являюсьуверен, что это предполагаемое поведение или это просто ошибка на этапе сборки компилятора каталога активов Xcode 11. Я подал ошибку через Feedback Assistant.

...