Учитывая полный путь или экземпляр NSBundle приложения, как вы получите его значок?

Если у меня есть полный путь к пакету приложения или NSBundle экземпляру этого приложения, как я могу получить NSImage представление значка этого приложения?

В частности, я хотел бы получить наилучшую доступную версию значка для определенного набора размеров. Например, если доступные версии значка приложения включают размеры 32 x 32, 64 x 64 и 128 x 128 точек, если я запрошу одну для 96 x 96 точек, я получу версию 128 x 128.

Это должно работать как на дисплеях с сетчаткой, так и на дисплеях без сетчатки, поэтому результирующий NSImage должен будет включать в себя представления значка как с сетчаткой, так и без сетчатки.

Я нашел метод iconForFile: для NSWorkspace, но, к сожалению, он возвращает только значок размером 32x32 пикселя, так что это бесполезно для моих целей.

Я также мог бы прочитать ключи CFBundleIconFile и CFBundleIconName пакета из его информационного словаря, а затем извлечь правильное изображение из его файла icns или каталога активов, но это кажется большой работой. Я не уверен, с чего начать получение изображений из любого из этих типов файлов. Я надеюсь, что есть более простой способ!


person GuyGizmo    schedule 23.04.2018    source источник


Ответы (1)


Я ошибся насчет iconForFile:. Хотя NSImage, который он возвращает, сообщает о своем размере 32x32, он содержит представления изображений для всех различных размеров значков для этого приложения, включая гораздо более крупные. Это просто вопрос выбора того, что я хочу, или использования метода bestRepresentationForRect:context:hints:.

person GuyGizmo    schedule 24.04.2018