Ecco la mia comprensione, che è in parte congetturali e relativo al dettagli di implementazione:
Il Dock viene eseguito in un processo separato, e non è possibile passare un arbitrario NSImage
banalmente attraverso il confine processo dall'applicazione al Dock . Esistono solo due tipi di immagini che possono essere trasmesse correttamente: icone di sistema standard e icone nel pacchetto di risorse. Ma non penso che lo NSImage
compia gli incantesimi necessari per far funzionare entrambi.
So you're going to have to use Carbon. In particolare, è necessario utilizzare SetMenuItemIconHandle
sia con kMenuSystemIconSelectorType
(copre Carbon IconRef
s, ottenuti con GetIconRef
) o kMenuIconResourceType
(CFString
s che fanno riferimento a un file .icns
nella cartella Risorse del bundle dell'applicazione).
Le intestazioni rilevanti sono <HIToolbox/MacApplication.h>
(per GetApplicationDockTileMenu
), <HIToolbox/Menus.h>
(per SetMenuItemIconHandle
) e <HIServices/Icons.h>
, (per GetIconRef
, se si sta utilizzando icone di sistema).
testato, ma dovrebbe essere simile a questa:
#include <Carbon/Carbon.h>
SetMenuItemIconHandle(
GetApplicationDockTileMenu(),
[dockMenu indexOfItem:dockMenuItem],
kMenuIconResourceType,
(Handle) CFSTR("icon.icns")
);
potrebbe non essere questo semplice; alcuni di questi possono essere solo a 32 bit.
fonte
2012-07-08 04:12:38
"Non disponibile per applicazioni a 64 bit." :( – Wevah
Deve esserci qualcos'altro, QuickTime, Anteprima e XCode sono applicazioni a 64 bit –
@MatthieuRiegler Non è qualcosa che 'NSDocumentController' fa? Potrebbe utilizzare un'API Apple privata. –