Oto moje zrozumienie, co jest częściowo hipotetyczne i dotyczyły szczegółów realizacji:
Dock działa w oddzielnym procesie, a nie można przekazać dowolną NSImage
trywialnie poprzek granicy procesowego z aplikacji do doku . Istnieją tylko dwa rodzaje obrazów, które można poprawnie przekazać: standardowe ikony systemowe i ikony w pakiecie zasobów. Ale nie wydaje mi się, żeby NSImage
dokonał niezbędnych zaklęć, aby któryś z nich zadziałał.
So you're going to have to use Carbon. szczególności, trzeba użyć SetMenuItemIconHandle
albo kMenuSystemIconSelectorType
(obejmuje Carbon IconRef
s, otrzymane z GetIconRef
) lub kMenuIconResourceType
(CFString
y, które odnoszą się do pliku w folderze Resources .icns
swoją aplikację w wiązce).
Odpowiednie nagłówki są <HIToolbox/MacApplication.h>
(dla GetApplicationDockTileMenu
) <HIToolbox/Menus.h>
(dla SetMenuItemIconHandle
) i <HIServices/Icons.h>
(na GetIconRef
, jeśli używasz ikon systemowych).
Nietestowane, ale powinno to wyglądać mniej więcej tak:
#include <Carbon/Carbon.h>
SetMenuItemIconHandle(
GetApplicationDockTileMenu(),
[dockMenu indexOfItem:dockMenuItem],
kMenuIconResourceType,
(Handle) CFSTR("icon.icns")
);
może nie być to proste; niektóre z nich mogą być tylko 32-bitowe.
"Niedostępny dla aplikacji 64-bitowych." :( – Wevah
Musi być coś jeszcze, QuickTime, Preview & XCode są aplikacjami 64-bitowymi –
@MatthieuRiegler Czy to nie coś, co robi 'NSDocumentController' Może używać prywatnego Apple API –