¿Cómo crear una extensión de nombre de archivo propia?

Quiero tener una extensión, llamada .content, para almacenar todos los archivos que están vinculados al nombre del archivo. El sistema operativo debe reconocer la extensión ".content" como una extensión de archivo en lugar de un mapa normal. Solo se debe acceder a los archivos de la extensión abriendo la extensión con la opción "Mostrar contenido del paquete". Espero que alguien pueda ofrecerme una solución a mi problema.

Esto está fuera de tema aquí, esta es una pregunta sobre cómo escribir una aplicación. TAN mejor en StackOverflow. Sin embargo, para empezar, mire el paquete de documentos de Apple.
Mark: si la pregunta implícita es cómo desarrollar una aplicación, entonces sí, esto está fuera de tema, sin embargo, hay mucho espacio para responder cómo funcionan las cosas y tal vez dejar que el OP edite una aplicación existente para ver si pueden modificar el lanzamiento base de datos de servicios para satisfacer sus necesidades. Es más una pregunta "no lo suficientemente detallada" y no me opondría a que se cierre por ese motivo, ya que se necesitan más detalles para saber realmente lo que quiere el OP.

Respuestas (2)

Las carpetas que terminan en .bundle ya actúan de esa manera. Sin embargo, se abren en la Terminal de forma predeterminada.

El tipo de archivo se define en /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>

Para que las carpetas que terminan en .content se traten como paquetes, agregue una entrada como esta:

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

Luego reconstruya la base de datos de Launch Services para aplicar los cambios:

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

También puede agregar esto a una matriz CFBundleDocumentTypes en Info.plist de cualquier aplicación:

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

Para aplicar cambios, reconstruya la base de datos de Launch Services o toque el paquete de aplicaciones. Sin embargo , si la aplicación está firmada, la modificación de Info.plist invalida la firma del código .

OS X viene con un conjunto de extensiones que se asignan a aplicaciones específicas (y la mayoría de estas se asignan a aplicaciones proporcionadas por Apple), por lo que podría solicitarle a Apple que realice el cambio, pero eso sería poco probable.

El otro mecanismo para inyectar un .extension específico para el mapeo de aplicaciones en la base de datos de Launch Services es instalar una aplicación que le indique al sistema que asigne ciertos tipos de archivos y extensiones a esa aplicación específica.

Entonces, para mantener las cosas en el tema aquí, solo lo dirigiremos a Stack Overflow para preguntar cómo hacer su propia aplicación. Si no está buscando desarrollar una aplicación, también puede modificar la aplicación que desea para abrir su extensión de archivo personalizada cambiando su archivo interal info.plist:

Lo siento si este nivel de detalle es más técnico de lo que deseas, pero quería responder esto para cualquiera que necesite saber cómo modificar las cosas.