Como posso fazer o OS X reconhecer novas extensões de arquivo?

16

No Finder.app, você pode clicar Enterpara editar o nome do arquivo ou pasta selecionado no momento.

O OS X selecionará automaticamente apenas a parte do nome do arquivo, não a extensão:

Isso é muito útil, pois assim você pode simplesmente começar a digitar o novo nome, sem se preocupar em alterar acidentalmente a extensão do arquivo.

No entanto, isso parece funcionar apenas para tipos de arquivos "conhecidos". Se você tentar com uma extensão desconhecida, o nome completo do arquivo (incluindo a extensão) será selecionado:

Tentei mapear um aplicativo que pode abrir todos os .bararquivos via + I→ "Alterar tudo", mas ainda assim recebo o comportamento descrito acima.

Onde está armazenada a lista de tipos de arquivos "conhecidos"? Existe uma maneira de fazer o OS X reconhecer novos tipos de arquivo?

Mathias Bynens
fonte

Respostas:

7

Esta postagem do SuperUser funcionou para mim:

Você precisa navegar para o aplicativo que deseja usar para abrir esses arquivos e editar seu pacote. Clique com o botão direito do mouse no aplicativo para lidar com essas extensões de arquivo e selecione Mostrar Conteúdo do Pacote . Navegue para Contentse edite Info.plist. Você pode precisar do Property List Editor , que faz parte das ferramentas de desenvolvedor da Apple. Se você tiver sorte, está no formato XML. Edite esse arquivo CFBundleDocumentTypese adicione uma entrada para a extensão que deseja.

Eu usei o TextEdit como o aplicativo padrão para abrir .bararquivos. A única coisa que fiz de maneira diferente foi alterar o XML incluído no TextEdit's Info.plistpara:

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

… E usei o LSRefresh.app para atualizar o TextEdit no banco de dados dos serviços de inicialização. Então funcionou como você sugeriu, embora provavelmente interrompa a assinatura de código do Textedit (e qualquer outro aplicativo assinado) no Lion.

binarybob
fonte
1
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 .
precisa saber é o seguinte
5
Sinto muito, eu tenho que rebaixar isso, porque este é um mau conselho. Não é apenas prudente adulterar um pacote de aplicativos (correndo o risco de efeitos colaterais bizarros ou algo pior), mas também pode destruir completamente a cópia do aplicativo. Você observa que esse processo invalida a assinatura de código, mas falha ao apontar que nas versões do macOS compatíveis com sandbox (10.7+), um aplicativo em área restrita com uma assinatura inválida não pode ser iniciado ou usado de forma alguma.
Bob
1
@binarybob, o que eu não entendo é por que você simplesmente não clica com o botão direito do mouse no arquivo xxx.bare seleciona open with?
Pacerier
@ Bob, o que é app standboxing?
21717 Pacerier
O sandboxing do @Pacerier App é um recurso de segurança do macOS que isola completamente os aplicativos do sistema e entre si, com uma lista muito curta de "direitos" que detalha especificamente quais aplicativos têm permissão para fazer. Essa lista de direitos é incorporada na assinatura do código e validada toda vez que o aplicativo é executado, garantindo que os recursos dos aplicativos não possam ser violados, por acidente ou por um ataque. Consulte este documento para obter uma explicação técnica.
Bob
26

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 lsregisterferramenta, 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 lsregistersimplesmente 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 KEYpela chave escolhida ( UTExportedTypeDeclarationsou UTImportedTypeDeclarations).
  • Substitua IDENTIFIERpor um identificador DNS reverso adequado:
    • Exportados - algo como com.mycompany.mytype
    • Importado - Para id Software 's Perdição WAD formato, um identificador adequado seriacom.idsoftware.wad
  • Substitua EXTENSIONcom 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 -uopçã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 UTTypeConformsTopropriedade para uma das UTIs existentes.

Por exemplo, se sua nova UTI for um tipo de código-fonte, defina a UTTypeConformsTopropriedade como public.source-code, para que ela possa ser aberta por qualquer aplicativo que possa abrir public.source-codeou public.plain-textou public.textarquivos.

TachyonVortex
fonte
0

Siga esses passos:

  1. Selecione o arquivo com extensão não reconhecida (por exemplo, .txt).

  2. Clique com o botão direito e selecione Get Infoou use o atalho do teclado Commandipara exibir a janela de informações.

  3. Clique no indicador de divulgação ao lado de Abrir com: para abrir a exibição detalhada. Selecione o aplicativo desejado na lista suspensa. Isso associará o documento ao aplicativo escolhido (por exemplo, TextEdit).

  4. Clique no botão Alterar tudo .... Ele primeiro mostrará uma caixa de diálogo solicitando a confirmação de sua intenção e vinculará todos os .txtdocumentos a serem abertos com o TextEdit, deixando a extensão desmarcada quando você clicar em retornar no nome do documento.

user3127882
fonte