2015-01-29 9 views
7

Ho sviluppato un'applicazione Mac con Qt 5.3.2. Questa applicazione gestisce i file con estensione specifica (diciamo .xyz).L'associazione file Mac OS X funziona, ma l'icona del file non è stata modificata

Ho creato un file di icona denominato XYZ.icns e l'ho aggiunto alla cartella Risorse del pacchetto di app (MyApp.app/Contents/Resources/XYZ.icns).

Ho anche modificato il file Info.plist del pacchetto per impostare l'associazione file. Ho aggiunto questa entrata

<key>CFBundleDocumentTypes</key> 
<array> 
    <!-- Registered file accociation --> 
    <dict> 
     <key>CFBundleTypeRole</key> 
     <string>Editor</string> 
     <key>CFBundleTypeName</key> 
     <string>XYZ</string> 
     <key>CFBundleTypeExtensions</key> 
     <array> 
      <string>xyz</string> 
     </array> 
     <key>CFBundleTypeIconFile</key> 
     <string>XYZ</string> 
    </dict> 
<array> 

Il risultato: il file associazione ha lavorato (doppio clic sul file si apre la mia domanda), tuttavia, l'icona non è stato sostituito (ancora visualizzando l'icona documento vuoto).

C'è qualcosa che mi è mancato? Ho esaminato altre applicazioni come esempi e non sembra esserci nulla di più di quello che ho fatto.

MODIFICA: Ho eseguito altri test. Buttai i dati del servizio di lancio con questo comando:

/System/Library/Frameworks/CoreServices.framework/Frameworks/LaunchServices.framework/Versions/Current/Support/lsregister -dump 

nel risultato, posso trovare i crediti verso il file del tipo di file tra cui l'icona informazioni:

... 

-------------------------------------------------------------------------------- 
Container mount state: mounted 
bundle id:   105396 
    ... 
    path:   /Applications/MyApp.app 
    name:   MyApp 
    ... 
    -------------------------------------------------------- 
    claim id:   27628 
     name:   XYZ 
     rank:   Default 
     reqCaps:  
     roles:   Editor 
     flags:   relative-icon-path doc-type 
     icon:   Contents/Resources/XYZ.icns 
     bindings:  .xyz 
-------------------------------------------------------------------------------- 
... 

EDIT2: Dopo un po 'di tempo , finalmente ha potuto lavorare da solo. Durante la notte, c'è un aggiornamento del sistema operativo che è stato installato e ho anche dovuto spegnere il computer (il servizio di avvio probabilmente aggiornava qualcosa da solo). Vorrei aggiornare la mia domanda a: Come assicurarsi che il servizio di lancio aggiorni le icone di file associate quando un'applicazione viene installata o modificata?

+1

http://www.tekrevue.com/tip/rebuild-launchservices-fix-duplicate-entries-os-xs-open-menu/ –

+0

Ciao Hai trovato l'Ans per questa domanda? – Vijay

+0

@vijay se edit 2. Ha funzionato da solo ma non so perché. – gfrigon

risposta

1

La mia comprensione è certa che le azioni (incorporate) attivano i servizi di avvio per aggiornare il database. Il trascinamento di un nuovo bundle .app in una cartella Applicazioni è di un trigger, così come l'esecuzione di un programma di installazione di PackageMaker. Tuttavia, potrebbe esserci una disconnessione tra ciò che si trova nel database dei servizi di avvio e ciò che mostra il Finder (fino ad altri aggiornamenti/riavvii).

Un rapido ricerca Google suggerisce è possibile forzare una ricostruzione dalla riga di comando: /System/Library/Frameworks/CoreServices.framework/Frameworks/LaunchServices.framework/Support/lsregister -kill -r -domain local -domain system -domain user

Tuttavia, questo passaggio non dovrebbe essere necessario a causa dei trigger built-in, quindi vorrei essere riluttanti a utilizzare a meno che non può chiaramente identificare il motivo per cui i trigger integrati non riescono per la tua applicazione. E se il problema è la cache delle icone del Finder, questo potrebbe non essere d'aiuto.