2009-11-20 5 views
6

Ich versuche, ein Symbol für den Dokumenttyp meiner App zu registrieren. Nach der Lektüre Declaring New Uniform Type Identifiers und Blick auf /Developer/Examples/Sketch kam ich mit so etwas wie dies in meinem Info.plist up:Registrieren eines Symbols für den Dokumenttyp meiner Anwendung

<key>CFBundleDocumentTypes</key> 
<array> 
    <dict> 
    <key>CFBundleTypeRole</key> 
    <string>Viewer</string> 
    <key>LSItemContentTypes</key> 
    <array> 
     <string>com.mycompany.myextension</string> 
    </array> 
    <key>NSDocumentClass</key> 
    <string>NSString</string> 
    </dict> 
</array> 

... 

<key>UTExportedTypeDeclarations</key> 
<array> 
    <dict> 
    <key>UTTypeDescription</key> 
    <string>Blah blah blah</string> 
    <key>UTTypeConformsTo</key> 
    <array> 
     <string>public.data</string> 
    </array> 
    <key>UTTypeIconFile</key> 
    <string>My-file-icon.icns</string> 
    <key>UTTypeIdentifier</key> 
    <string>com.mycompany.myextension</string> 
    <key>UTTypeTagSpecification</key> 
    <dict> 
     <key>public.filename-extension</key> 
     <array> 
     <string>myextension</string> 
     </array> 
    </dict> 
    </dict> 
</array> 

Jetzt ist alles schön und gut, das heißt mein Programm geöffnet wird, wenn ich auf eine Datei mit meiner Erweiterung klicken, usw. Allerdings ist das Dokumentensymbol nicht mit dem Betriebssystem registriert, dh ich sehe ein hässliches leeres Symbol anstelle meiner schönen My-file-icon.icns. Ich vermute, dass ich etwas in der obigen Liste verpasse, irgendwelche Ideen?

Antwort

9

Versuchen Sie, den Symbolnamen in den CFBundleTypeIconFile Schlüssel in der CFBundleDocumentTypes Array, nicht in der UTExportedTypeDeclarations Array.

Und natürlich stellen Sie sicher, dass "My-file-icon.icns" in der Build-Ressourcen-Build-Phase Ihres Ziels ist und in Inhalte/Ressourcen im Paket Ihrer App kopiert wird.

+0

Ja, das war es. CFBundleTypeIconFile muss in CFBundleDocumentTypes enthalten sein. – svintus

1

Ihre UTI-Deklaration in der Info.plist scheint korrekt zu sein, jedoch ist mir ein anderes Problem aufgefallen. Wenn Sie Anwendung ein Dokument-basierte Anwendung ist, müssen Sie das NSString in folgendem Eintrag mit Ihrer NSDocument Unterklasse ersetzen:

<key>NSDocumentClass</key> 
<string>NSString</string> 

Zum Beispiel ist es "SKTDocument" in Skizze:

<key>NSDocumentClass</key> 
<string>SKTDocument</string> 

Edit: Bitte Stellen Sie außerdem sicher, dass Sie Ihren eigenen umgekehrten Domänennamen für Ihre exportierten HWIs verwenden. Dies stellt sicher, dass HWIs einzigartig sind. Zum Beispiel sein com.mindnode.MindNode.MindNodeDocument in meinem Fall.

+0

Danke, ich das beheben werde. Verstehe immer noch nicht, warum das Icon nicht registriert wird. – svintus

2

Ich hatte auch ein ähnliches Problem, stellt sich heraus, ich brauchte die Startdienste Datenbank nach neu zu erstellen, was ich hier dokumentiert ....

https://stackoverflow.com/a/12466968/1571635

+1

Ich stellte sicher, dass das Icon '.icns' im Namen hatte und baute dann die LS-Datenbank nach dieser Antwort neu auf und das reparierte es für mich. –

Verwandte Themen