Похоже, 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.