¿Cómo puedo hacer que OS X reconozca nuevas extensiones de archivo?

En Finder.app, puede presionar Enterpara editar el nombre del archivo o carpeta seleccionado actualmente.

OS X seleccionará automáticamente solo la parte del nombre del archivo, no la extensión:

Esto es muy útil, porque de esa manera puede comenzar a escribir el nuevo nombre, sin preocuparse por cambiar accidentalmente la extensión del archivo.

Sin embargo, esto solo parece funcionar para tipos de archivos "conocidos". Si lo intenta con una extensión desconocida, se selecciona el nombre completo del archivo (incluida la extensión):

Intenté mapear una aplicación que puede abrir todos los .bararchivos a través de + I→ "Cambiar todo", pero sigo teniendo el comportamiento descrito anteriormente.

¿Dónde se almacena la lista de tipos de archivos "conocidos"? ¿Hay alguna manera de hacer que OS X reconozca nuevos tipos de archivos?

Respuestas (3)

Esta publicación de SuperUser funcionó para mí:

Debe buscar la aplicación que le gustaría usar para abrir estos archivos y editar su paquete. Haga clic con el botón derecho en la aplicación para manejar estas extensiones de archivo y seleccione Mostrar contenido del paquete . Navegue hasta Contentsy edite Info.plist. Es posible que necesite el Editor de listas de propiedades , que forma parte de las herramientas de desarrollo de Apple. Si tienes suerte, está en formato XML. Edite este archivo CFBundleDocumentTypesy agregue una entrada para la extensión que desee.

Usé TextEdit como la aplicación predeterminada para abrir .bararchivos. Lo único que hice de manera diferente fue cambiar el XML que entró en TextEdit Info.plista:

    <dict>
        <key>CFBundleTypeExtensions</key>
        <array>
            <string>bar</string>
        </array>
        <key>CFBundleTypeIconFile</key>
        <string>BarDocument</string>
        <key>CFBundleTypeName</key>
        <string>Bar Document</string>
        <key>CFBundleTypeRole</key>
        <string>Document</string>
    </dict>

…y luego usé LSRefresh.app para actualizar TextEdit en la base de datos de servicios de lanzamiento. Luego funcionó como sugirió, aunque probablemente romperá la firma del código de Textedit (y cualquier otra aplicación firmada) en Lion.

CFBundleTypeExtensionses una clave heredada que quedó obsoleta en OS X 10.5 . El método preferido desde 2007 es declarar nuevas infecciones urinarias, como se menciona aquí y se describe en mi respuesta .
Lo siento, tengo que rechazar esto porque es un mal consejo. No solo es imprudente manipular un paquete de aplicaciones (corriendo el riesgo de efectos secundarios extraños o algo peor), sino que también puede arruinar por completo la copia de la aplicación. Observa que este proceso invalida la firma del código, pero no señala que en las versiones de macOS que admiten sandboxing (10.7+), una aplicación de sandboxing con una firma no válida no se puede iniciar ni utilizar de ninguna manera.
@binarybob, lo que no entiendo es ¿por qué no simplemente haces clic derecho en el archivo xxx.bary seleccionas open with?
@Bob, ¿Qué es el standboxing de aplicaciones?
@Pacerier App sandboxing es una característica de seguridad de macOS que aísla completamente las aplicaciones del sistema y entre sí, con una lista muy corta de "derechos" que detalla específicamente qué aplicaciones pueden hacer. Esa lista de derechos está incrustada en la firma del código y se valida cada vez que se ejecuta la aplicación, lo que garantiza que las capacidades de las aplicaciones no puedan alterarse, ya sea por accidente o por un ataque. Consulte este documento para obtener una explicación técnica.
Permítanme reforzar el comentario de @Bob. Desde al menos macOS Catalina, y probablemente antes, la manipulación de cualquier archivo dentro de un paquete (= aplicación de macOS) evitará de forma inmediata e irreversible que la aplicación se inicie. La única forma de restaurarlo es instalarlo desde cero (sobrescribiendo los cambios que haya realizado). Consulte la respuesta de @TachyonVortex para obtener una alternativa más complicada, pero más segura , a este problema.

UTI y servicios de lanzamiento

¿Dónde se almacena la lista de tipos de archivos "conocidos"?

El término oficial para "tipos de archivo" es Identificadores de tipo uniforme (UTI), y Launch Services mantiene la base de datos de UTI .

Usando la Terminal , puede ver el contenido de la base de datos de Launch Services usando la lsregisterherramienta, que se almacena en:

/System/Library/Frameworks/CoreServices.framework/Frameworks/LaunchServices.framework/Support/lsregister

En lugar de especificar esa ruta larga cada vez que desee ejecutar lsregister, puede agregar temporalmente su directorio a su PATH:

PATH=/System/Library/Frameworks/CoreServices.framework/Frameworks/LaunchServices.framework/Support:"$PATH"

y luego puede ejecutar lsregistersimplemente ingresando:

lsregister

Para ver el contenido de la base de datos de Launch Services:

lsregister -dump

Declaración de nuevas infecciones urinarias

¿Hay alguna manera de hacer que OS X reconozca nuevos tipos de archivos?

Este artículo de Apple, "Declaración de nuevos identificadores de tipo uniforme" , proporciona información útil sobre cómo hacerlo. Aquí está el proceso completo:

1. Crea una aplicación ficticia

Cree una aplicación ficticia para registrarse en los Servicios de lanzamiento:

  • Abra el Editor AppleScript (ubicado en la carpeta Utilidades de OS X ).
  • Guarde un nuevo script vacío en algún lugar (por ejemplo, en su escritorio), configurando su Formato de archivo en Aplicación .

2. Abra su archivo Info.plist

  • Localice su nueva aplicación ficticia en el Finder.
  • Haga clic con el botón derecho en él y seleccione Mostrar contenido del paquete en el menú emergente.
  • Abra su carpeta Contenido .
  • Abra el archivo Info.plist en un editor de texto (p. ej., TextEdit ).

3. Agregue su nueva UTI

Hay una opción de dos llaves:

  • UTExportedTypeDeclarations– para sus propias extensiones de nombre de archivo personalizadas.
  • UTImportedTypeDeclarations– para extensiones de nombre de archivo que ya existen pero que OS X no reconoce.

Elija la clave que sea más apropiada para sus necesidades.

Luego, en el archivo Info.plist , antes de las dos últimas líneas ( </dict></plist>), agregue este código:

<key>KEY</key>
<array>
    <dict>
        <key>UTTypeIdentifier</key>
        <string>IDENTIFIER</string>
        <key>UTTypeTagSpecification</key>
        <dict>
            <key>public.filename-extension</key>
            <array>
                <string>EXTENSION</string>
            </array>
        </dict>
    </dict>
</array>

haciendo los siguientes cambios:

  • Reemplace KEYcon la clave elegida (ya sea UTExportedTypeDeclarationso UTImportedTypeDeclarations).
  • Reemplace IDENTIFIERcon un identificador de DNS inverso adecuado:
    • Exportado – Algo así comocom.mycompany.mytype
    • Importado: para el formato Doom WAD de id Software , un identificador adecuado seríacom.idsoftware.wad
  • Reemplace EXTENSIONcon la extensión del nombre de archivo (sin el punto inicial), por ejemplo: wad.

Este es el código mínimo necesario para que Launch Services acepte su nueva UTI. También puede agregar las siguientes propiedades opcionales:

  • UTTypeConformsTo– Consulte el Apéndice a continuación.
  • UTTypeDescription– Una descripción visible para el usuario, que se mostrará en el Finder.
  • UTTypeIconFile– Si agrega un archivo de imagen de ícono de Apple a la carpeta Contenidos/Recursos en su aplicación ficticia y agrega su nombre de archivo en esta propiedad, los archivos que tengan su nueva extensión de nombre de archivo usarán este ícono.
  • UTTypeReferenceURL– La URL de un documento de referencia que describe este tipo.

Aquí hay un ejemplo completo que muestra todas las propiedades opcionales:

<key>UTImportedTypeDeclarations</key>
<array>
    <dict>
        <key>UTTypeIdentifier</key>
        <string>com.idsoftware.wad</string>
        <key>UTTypeTagSpecification</key>
        <dict>
            <key>public.filename-extension</key>
            <array>
                <string>wad</string>
            </array>
        </dict>
        <key>UTTypeConformsTo</key>
        <array>
            <string>public.data</string>
        </array>
        <key>UTTypeDescription</key>
        <string>Doom WAD file</string>
        <key>UTTypeIconFile</key>
        <string>DoomWAD.icns</string>
        <key>UTTypeReferenceURL</key>
        <string>http://en.wikipedia.org/wiki/Doom_WAD</string>
    </dict>
</array>

4. Registre su nueva UTI con Launch Services

Ejecute este comando en la Terminal:

lsregister <PATH_TO_APP>

reemplazando <PATH_TO_APP>con la ruta a su aplicación ficticia, por ejemplo:

lsregister ~/Desktop/MyDummyApp.app

Si ahora crea un archivo con su nueva extensión de nombre de archivo y luego lo selecciona en el Finder y presiona Enter, el Finder debería seleccionar automáticamente solo la parte del nombre del archivo, no la extensión.

Si ve el contenido de la base de datos de Launch Services:

lsregister -dump

debería encontrar su nueva UTI en la lista:

type    id:            50364
        bindableKey:   12608
        generation:    1
        uti:           com.idsoftware.wad
        description:   Doom WAD file
        flags:         imported  active  apple-internal  untrusted
        icon:          DoomWAD.icns
        conforms to:   public.data
        tags:          .wad

Si posteriormente deseas dar de baja tu nueva UTI, pasa la -uopción a lsregister:

lsregister -u ~/Desktop/MyDummyApp.app

Apéndice: Jerarquía y conformidad de UTI

OS X declara una jerarquía de UTI que se enumeran aquí: Identificadores de tipo uniforme declarados por el sistema .

Aquí hay algunas UTI en la jerarquía:

  • public.content
    • public.text
      • public.rtf
      • public.html
      • public.xml
      • public.plain-text
      • public.source-code
        • public.c-source
        • public.c-header
        • com.sun.java-source
    • public.image
      • public.jpeg
      • public.tiff
      • public.png
    • public.audiovisual-content
      • public.movie
      • public.audio

Cada UTI "se ajusta a" su UTI principal:

Por ejemplo, la UTI public.html, que define el texto HTML, se ajusta al identificador de texto base, public.text. En este caso, la conformidad permite que las aplicaciones que pueden abrir archivos de texto generales identifiquen los archivos HTML como archivos que también pueden abrir. ( referencia )

Al crear una nueva UTI, es una buena idea establecer la UTTypeConformsTopropiedad en una de las UTI existentes.

Por ejemplo, si su nueva UTI es un tipo de código fuente, debe establecer la UTTypeConformsTopropiedad en public.source-code, para que pueda ser abierta por cualquier aplicación que pueda abrir archivos public.source-codeor public.plain-texto .public.text

¿Hay alguna forma de especificar el editor que está asociado con la extensión del archivo?
Para el OP: esto debería marcarse como la sugerencia aceptada. Vea el comentario de @Bob.
Para @gr4nt3d: consulte apple.stackexchange.com/a/323743/27729 a continuación para saber qué desea hacer.

Sigue estos pasos:

  1. Seleccione el archivo con extensión no reconocida (por ejemplo, .txt).

  2. Haga clic derecho y seleccione Get Infoo use el atajo de teclado Commandipara mostrar la ventana de información.

  3. Haga clic en el indicador de divulgación además de Abrir con: para abrir la vista detallada. Seleccione la aplicación deseada del menú desplegable. Esto asociará el documento con la aplicación elegida (por ejemplo, TextEdit).

  4. Haga clic en el botón Cambiar todo.... Primero mostrará un cuadro de diálogo que le pedirá que confirme su intención y vinculará todos los .txtdocumentos para abrirlos con TextEdit, y dejará la extensión sin seleccionar cuando presione regresar en el nombre del documento.