2015-01-29 15 views
7

Ich habe eine Mac-Anwendung mit Qt 5.3.2 entwickelt. Diese Anwendung behandelt Dateien mit einer bestimmten Erweiterung (z. B. .xyz).Mac OS X Dateizuordnung funktioniert, aber Dateisymbol nicht geändert

Ich habe eine Icon-Datei mit dem Namen XYZ.icns erstellt und sie zu meinem App-Bundle Resource-Ordner hinzugefügt (MyApp.app/Contents/Resources/XYZ.icns).

Ich habe auch die Info.plist-Datei des Pakets geändert, um die Dateizuordnung festzulegen. Ich habe diesen Eintrag hinzugefügt:

<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> 

Das Ergebnis: die Dateizuordnung (Doppelklick auf die Datei nicht meine Anwendung öffnen) gearbeitet hat jedoch das Symbol nicht ersetzt worden ist (immer noch das leere Dokumentsymbol angezeigt wird).

Gibt es etwas, das ich vermisst habe? Ich schaute mir andere Anwendungen an und es scheint nichts mehr zu geben als das, was ich getan habe.

EDIT: Ich habe noch ein paar Tests gemacht. Ich warf die Einführung Service-Daten mit diesem Befehl:

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

Im Ergebnis ich Ansprüche auf Datei, um den Dateityp finden mit dem Symbol Informationen:

... 

-------------------------------------------------------------------------------- 
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: Nach einiger Zeit endlich hat es sich selbständig gemacht. Über Nacht gibt es ein OS-Update, das installiert wurde und ich musste den Computer auch herunterfahren (der Launch-Service hat wahrscheinlich selbst etwas aktualisiert). Ich würde meine Frage aktualisieren: Wie stelle ich sicher, dass Launch Service die zugehörigen Dateisymbole aktualisiert, wenn eine Anwendung installiert oder geändert wird?

+1

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

+0

Hallo Sie gefunden die Ans für diese Frage? – Vijay

+0

@vijay se bearbeiten 2. Es funktionierte auf eigene Faust, aber ich weiß nicht warum. – gfrigon

Antwort

1

Mein Verständnis ist sicher (integrierte) Aktionen auslösen Launch Services, um die Datenbank zu aktualisieren. Das Ziehen eines neuen .app-Bundles in einen Anwendungsordner ist ein Auslöser, ebenso wie das Ausführen eines PackageMaker-Installationsprogramms. Es kann jedoch eine Verbindung zwischen dem Inhalt der Launch Services-Datenbank und dem, was im Finder angezeigt wird, geben (bis zu einigen anderen Aktualisierungen/Neustarts).

Einige schnelle Google-Suche schlägt Sie von der Kommandozeile ein Wiederaufbau erzwingen: /System/Library/Frameworks/CoreServices.framework/Frameworks/LaunchServices.framework/Support/lsregister -kill -r -domain local -domain system -domain user

Allerdings sollte dieser Schritt nicht notwendig sein, aufgrund der eingebauten in Trigger, also würde ich zögern, es sei denn, Sie zu verwenden kann klar erkennen, warum die integrierten Trigger für Ihre Anwendung fehlschlagen. Und wenn das Problem der Icon-Cache des Finders ist, kann das auch nicht helfen.