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

16

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

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 los tipos de archivos "conocidos". Si lo prueba 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 aún obtengo 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?

Mathias Bynens
fuente

Respuestas:

7

Esta publicación de SuperUser me funcionó:

Debe buscar la aplicación que desea 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 . Navega hasta Contentsy edita 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 estaba en TextEdit's 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 inicio. Luego funcionó como sugirió, aunque probablemente romperá la firma del código de Textedit (y cualquier otra aplicación firmada) en Lion.

binarybob
fuente
1
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 .
TachyonVortex
55
Lo siento, tengo que rechazar esto porque es un mal consejo. No solo es imprudente manipular un paquete de aplicaciones (correr el riesgo de efectos secundarios extraños o peores), sino que también puede destruir por completo la copia de la aplicación. Tenga en cuenta 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 sandbox con una firma no
Bob
1
@binarybob, lo que no entiendo es ¿por qué no haces clic derecho en el archivo xxx.bary seleccionas open with?
Pacerier
@Bob, ¿Qué es el standboxing de aplicaciones?
Pacerier
@Pacerier App caja de arena es una característica de seguridad de macOS que aísla por completo aplicaciones del sistema y entre sí, con una lista muy corta de "derechos" que los detalles específicamente qué aplicaciones están autorizados a hacerlo. Esa lista de derechos está incrustada en la firma del código y validada cada vez que se ejecuta la aplicación, asegurando que las capacidades de las aplicaciones no puedan ser alteradas, ya sea por accidente o por un ataque. Consulte este documento para obtener una explicación técnica.
Bob
26

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 uniformes (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 puedes correr lsregistersimplemente ingresando:

lsregister

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

lsregister -dump

Declarando 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 uniformes" , proporciona información útil sobre cómo hacerlo. Aquí está el proceso completo:

1. Crear una aplicación ficticia

Cree una aplicación ficticia para registrarse en Launch Services:

  • Abra el Editor AppleScript (ubicado en la carpeta Utilidades de OS X ).
  • Guarde una nueva secuencia de comandos vacía en algún lugar (por ejemplo: en su escritorio), estableciendo su Formato de archivo en Aplicación .

2. Abra su archivo Info.plist

  • Localice su nueva aplicación ficticia en el Finder.
  • Haga clic derecho sobre él y seleccione Mostrar contenido del paquete en el menú emergente.
  • Abre su carpeta de contenido .
  • Abra el archivo Info.plist en un editor de texto (por ejemplo: TextEdit ).

3. Agregue su nueva infección urinaria

Hay una opción de dos claves:

  • 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 adecuada para sus necesidades.

Luego, en el archivo Info.plist , antes de las dos líneas finales ( </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 su clave elegida (ya sea UTExportedTypeDeclarationso UTImportedTypeDeclarations).
  • Reemplace IDENTIFIERcon un identificador DNS inverso adecuado:
    • Exportado - Algo así com.mycompany.mytype
    • Importada - Para id Software 's Destino WAD formato, un identificador adecuado seríacom.idsoftware.wad
  • Reemplazar EXTENSIONcon la extensión de 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 - Vea 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 icono de Apple a la carpeta Contenido / 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 icono.
  • 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 infección del tracto urinario con los Servicios de lanzamiento

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 de archivo, no la extensión.

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

lsregister -dump

debería encontrar su nueva infección urinaria 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 luego desea cancelar el registro de su nueva infección urinaria, pase la -uopción a lsregister:

lsregister -u ~/Desktop/MyDummyApp.app

Apéndice: jerarquía UTI y conformidad

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

Aquí hay algunas infecciones urinarias 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 primaria:

Por ejemplo, la infección del tracto urinario public.html, que define el texto HTML, se ajusta a la identificador de texto base, public.text. En este caso, la conformidad permite que las aplicaciones que pueden abrir archivos de texto generales identifiquen archivos HTML como los que también pueden abrir. ( ref )

Al crear una nueva infección urinaria, es una buena idea establecer la UTTypeConformsTopropiedad en una de las infecciones urinarias existentes.

Por ejemplo, si su nueva infección urinaria es un tipo de código fuente, entonces usted debe establecer el UTTypeConformsToinmueble para public.source-code, de manera que pueda ser abierto por cualquier aplicaciones que pueden abrir public.source-codeo public.plain-texto public.textarchivos.

TachyonVortex
fuente
0

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 abrir con TextEdit, y dejará la extensión sin seleccionar cuando presione regresar en el nombre del documento.

usuario3127882
fuente