Wie erstelle ich eine eigene Dateinamenerweiterung?

Ich möchte eine Erweiterung namens .content haben, um alle Dateien darin zu speichern, die mit dem Dateinamen verknüpft sind. Die Erweiterung „.content“ sollte vom Betriebssystem als Dateierweiterung und nicht als normale Karte erkannt werden. Die Dateien in der Erweiterung sollten nur durch Öffnen der Erweiterung über die Option "Paketinhalt anzeigen" erreicht werden. Ich hoffe jemand kann mir eine Lösung für mein Problem anbieten.

Dies ist Off-Topic, hier geht es um das Schreiben einer Bewerbung. SO besser auf StackOverflow. Schauen Sie sich jedoch zunächst das Bundle- Dokument von Apple an
Mark – Wenn die implizierte Frage ist, wie man eine App entwickelt, dann ja, das ist kein Thema, aber es gibt viel Raum, um zu beantworten, wie die Dinge funktionieren, und vielleicht das OP eine vorhandene App bearbeiten zu lassen, um zu sehen, ob sie den Start optimieren können Service-Datenbank, um ihren Bedürfnissen gerecht zu werden. Es ist eher eine "nicht detailliert genug" -Frage, und ich würde nicht dagegen protestieren, dass sie aus diesem Grund geschlossen wird, da mehr Details erforderlich sind, um wirklich zu wissen, was das OP will.

Antworten (2)

Ordner, die auf .bundle enden, verhalten sich bereits so. Sie werden jedoch standardmäßig im Terminal geöffnet.

Der Dateityp ist definiert in /System/Library/CoreServices/CoreTypes.bundle/Contents/Info.plist:

<dict>
    <key>UTTypeConformsTo</key>
    <array>
        <string>com.apple.bundle</string>
        <string>com.apple.package</string>
    </array>
    <key>UTTypeDescription</key>
    <string>bundle</string>
    <key>UTTypeIdentifier</key>
    <string>com.apple.generic-bundle</string>
    <key>UTTypeTagSpecification</key>
    <dict>
        <key>com.apple.ostype</key>
        <string>BNDL</string>
        <key>public.filename-extension</key>
        <string>bundle</string>
    </dict>
</dict>

Damit Ordner, die auf .content enden, als Pakete behandelt werden, fügen Sie einen Eintrag wie diesen hinzu:

<dict>
    <key>UTTypeConformsTo</key>
    <array>
        <string>com.apple.bundle</string>
        <string>com.apple.package</string>
    </array>
    <key>UTTypeIdentifier</key>
    <string>my.content</string>
    <key>UTTypeTagSpecification</key>
    <dict>
        <key>public.filename-extension</key>
        <string>content</string>
    </dict>
</dict>

Erstellen Sie dann die Launch Services-Datenbank neu, um die Änderungen zu übernehmen:

/System/Library/Frameworks/CoreServices.framework/Versions/A/Frameworks/LaunchServices.framework/Versions/A/Support/lsregister -kill -domain local -domain system -domain user

Sie können dies auch zu einem CFBundleDocumentTypes-Array in der Info.plist einer beliebigen Anwendung hinzufügen:

<dict>
    <key>CFBundleTypeExtensions</key>
    <array>
        <string>content</string>
    </array>
    <key>CFBundleTypeRole</key>
    <string>None</string>
    <key>LSTypeIsPackage</key>
    <true/>
</dict>

Um Änderungen anzuwenden, erstellen Sie die Launch Services-Datenbank neu oder berühren Sie das Anwendungspaket. Wenn die Anwendung signiert ist, macht das Ändern der Info.plist die Code-Signatur jedoch ungültig.

OS X wird mit einer Reihe von Erweiterungen geliefert, die bestimmten Anwendungen zugeordnet sind (und die meisten davon sind von Apple bereitgestellten Apps zugeordnet), sodass Sie Apple bitten könnten, die Änderung vorzunehmen, aber das wäre unwahrscheinlich.

Der andere Mechanismus zum Einfügen einer bestimmten .extension to Application-Zuordnung in die Launch Services-Datenbank besteht darin, eine Anwendung zu installieren, die das System anweist, bestimmte Dateitypen und Erweiterungen dieser bestimmten Anwendung zuzuordnen.

Um hier beim Thema zu bleiben, leiten wir Sie einfach zu Stack Overflow weiter, um zu fragen, wie Sie Ihre eigene Anwendung erstellen können. Wenn Sie keine Anwendung entwickeln möchten, können Sie auch einfach die App ändern, mit der Sie Ihre benutzerdefinierte Dateierweiterung öffnen möchten, indem Sie die interne info.plist-Datei ändern:

Tut mir leid, wenn diese Detailebene technischer ist, als Sie möchten, aber ich wollte dies für alle beantworten, die wissen müssen, wie man Dinge ändert.