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 lsregister
herramienta, 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 lsregister
simplemente 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
KEY
con su clave elegida (ya sea UTExportedTypeDeclarations
o UTImportedTypeDeclarations
).
- Reemplace
IDENTIFIER
con un identificador DNS inverso adecuado:
- Exportado - Algo así
com.mycompany.mytype
- Importada - Para id Software 's
Destino WAD formato, un identificador adecuado sería
com.idsoftware.wad
- Reemplazar
EXTENSION
con 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 -u
opció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 UTTypeConformsTo
propiedad 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 UTTypeConformsTo
inmueble para public.source-code
, de manera que pueda ser abierto por cualquier aplicaciones que pueden abrir
public.source-code
o public.plain-text
o public.text
archivos.
CFBundleTypeExtensions
es 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 .