UTIs e serviços de lançamento
Onde está armazenada a lista de tipos de arquivos "conhecidos"?
O termo oficial para "tipos de arquivos" é
UTIs ( Uniform Type Identifiers ) e o banco de dados de UTIs é mantido pelos
Serviços de Inicialização .
Usando o Terminal , você pode visualizar o conteúdo do banco de dados dos Serviços de Inicialização usando a lsregister
ferramenta, armazenada em:
/System/Library/Frameworks/CoreServices.framework/Frameworks/LaunchServices.framework/Support/lsregister
Em vez de especificar esse caminho longo toda vez que você deseja executar lsregister
, você pode adicionar temporariamente o diretório ao seu PATH
:
PATH=/System/Library/Frameworks/CoreServices.framework/Frameworks/LaunchServices.framework/Support:"$PATH"
e então você pode executar lsregister
simplesmente digitando:
lsregister
Para visualizar o conteúdo do banco de dados do Launch Services:
lsregister -dump
Declarando novas UTIs
Existe uma maneira de fazer o OS X reconhecer novos tipos de arquivo?
Este artigo da Apple,
"Declarando novos identificadores de tipo uniforme" , fornece informações úteis sobre como fazer isso. Aqui está o processo completo:
1. Crie um aplicativo fictício
Crie um aplicativo fictício para se registrar no Launch Services:
- Abra o AppleScript Editor (localizado na pasta Utilitários do OS X ).
- Salve um novo script vazio em algum lugar (por exemplo: na área de trabalho), definindo o formato de arquivo como Aplicativo .
2. Abra o arquivo Info.plist
- Localize seu novo aplicativo fictício no Finder.
- Clique com o botão direito do mouse e selecione Mostrar Conteúdo do Pacote no menu pop-up.
- Abra a pasta Conteúdo .
- Abra o arquivo Info.plist em um editor de texto (por exemplo: TextEdit ).
3. Adicione sua nova UTI
Há uma escolha de duas chaves:
UTExportedTypeDeclarations
- para suas próprias extensões de nome de arquivo personalizadas.
UTImportedTypeDeclarations
- para extensões de nome de arquivo que já existem, mas não são reconhecidas pelo OS X.
Escolha a chave mais adequada às suas necessidades.
Em seguida, no arquivo Info.plist , antes das duas linhas finais ( </dict></plist>
), adicione 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>
fazendo as seguintes alterações:
- Substitua
KEY
pela chave escolhida ( UTExportedTypeDeclarations
ou UTImportedTypeDeclarations
).
- Substitua
IDENTIFIER
por um identificador DNS reverso adequado:
- Exportados - algo como
com.mycompany.mytype
- Importado - Para id Software 's
Perdição WAD formato, um identificador adequado seria
com.idsoftware.wad
- Substitua
EXTENSION
com a extensão de nome de arquivo (sem o ponto inicial), por exemplo: wad
.
Esse é o código mínimo necessário para o Launch Services aceitar sua nova UTI. Você também pode adicionar as seguintes propriedades opcionais:
UTTypeConformsTo
- Veja o apêndice abaixo.
UTTypeDescription
- Uma descrição visível ao usuário, que será exibida no Finder.
UTTypeIconFile
- Se você adicionar um
arquivo de imagem de ícone da Apple à pasta Conteúdo / Recursos em seu aplicativo fictício e adicionar seu nome de arquivo nessa propriedade, os arquivos com a nova extensão de nome de arquivo usarão esse ícone.
UTTypeReferenceURL
- O URL de um documento de referência que descreve esse tipo.
Aqui está um exemplo completo mostrando todas as propriedades opcionais:
<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 sua nova UTI com o Launch Services
Execute este comando no terminal:
lsregister <PATH_TO_APP>
substituindo <PATH_TO_APP>
pelo caminho para seu aplicativo fictício, por exemplo:
lsregister ~/Desktop/MyDummyApp.app
Se você agora criar um arquivo com sua nova extensão de nome de arquivo e selecioná-lo no Finder e clicar em Enter, o Finder deverá selecionar automaticamente apenas a parte do nome do arquivo, não a extensão.
Se você visualizar o conteúdo do banco de dados do Launch Services:
lsregister -dump
você deve encontrar sua nova UTI listada:
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
Se posteriormente você deseja cancelar o registro de sua nova UTI, passe a -u
opção para lsregister
:
lsregister -u ~/Desktop/MyDummyApp.app
Apêndice: Hierarquia e conformidade da UTI
O OS X declara uma hierarquia de UTIs listadas aqui:
Identificadores de tipo uniforme declarados pelo sistema .
Aqui estão algumas UTIs na hierarquia:
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 "está em conformidade com" sua UTI principal:
Por exemplo, a UTI public.html
, que define o texto HTML, está em conformidade com o identificador de texto base public.text
,. Nesse caso, a conformidade permite que aplicativos que podem abrir arquivos de texto gerais identifiquem arquivos HTML como aqueles que também podem abrir. ( ref )
Ao criar uma nova UTI, é uma boa ideia definir a UTTypeConformsTo
propriedade para uma das UTIs existentes.
Por exemplo, se sua nova UTI for um tipo de código-fonte, defina a UTTypeConformsTo
propriedade como public.source-code
, para que ela possa ser aberta por qualquer aplicativo que possa abrir
public.source-code
ou public.plain-text
ou public.text
arquivos.
CFBundleTypeExtensions
é uma chave herdada que foi descontinuada no OS X 10.5 . O método preferido desde 2007 é declarar novas UTIs, como mencionado aqui e descrito na minha resposta .