Como configurar manipuladores de URL personalizados no OS X?


64

Eu tenho lido muito online sobre manipuladores de URL personalizados / manipuladores de protocolo personalizados, como:

Entendo que você pode dizer ao sistema que um determinado programa é capaz de lidar com um determinado esquema / protocolo com o Info.plistarquivo:

<key>CFBundleURLTypes</key>
<array>
    <dict>
        <key>CFBundleURLName</key>
        <string>Local File</string>
        <key>CFBundleURLSchemes</key>
        <array>
            <string>local</string>
        </array>
    </dict>
</array>
<key>NSUIElement</key>
<true/>

Mas se houver vários aplicativos capazes de abrir o mesmo manipulador de URL, como, por exemplo, mailto:como você especifica qual deles deseja que o sistema use?

Houve algumas referências a utilitários como o More Internet preference paneque parece não estar mais disponível no site do autor. Eu o encontrei on-line pelo Google, mas parece um pouco instável - como se tivesse sido escrito para um OSX mais antigo - talvez Tiger.

Não consegui encontrar informações sobre como definir o manipulador de URL para protocolos e protocolos personalizados. Estou assumindo que existe um plistarquivo em algum lugar que eu possa editar - ou talvez haja um utilitário novo e melhor que funcione bem com o Mountain Lion?

Respostas:


55

O arquivo que você procura é ~/Library/Preferences/com.apple.LaunchServices/com.apple.launchservices.secure.plist.

Ele contém uma matriz chamada LSHandlerse os filhos do Dictionary que definem um LSHandlerURLSchemepodem ser modificados de acordo com o LSHandlerRole.

Em vez de editar manualmente esse arquivo, você também pode usar o RCDefaultApp , que oferece um bom painel de preferências. Diz-se que não está funcionando para o macOS 10.12 e posterior, mas posso confirmar que ele é executado no macOS 10.14.

Uma alternativa é SwiftDefaultApps .

Por exemplo, aqui está o SVN e o SSH:

… E no RCDefaultApp:


35
4 minutos 19 segundos? A sério?
Daniel Beck

2
Obrigado pela resposta rápida e detalhada. Parece bom! Pergunta embora - eu acho que eu tentei o RCDefaultApp antes e tive algum problema com ele. Tem funcionado perfeitamente para você?
Cwd

@cwd Sinceramente, tenho que dizer que não o uso com frequência. Mais para capturas de tela para Superusuário do que qualquer outra coisa :) Sempre que preciso alterar as associações de arquivos, faço isso na caixa de diálogo Obter informações ... no Finder. Eu nunca precisei alterar os manipuladores de protocolo e MIME. Mas parecia estável o suficiente para mim.
slhck

Parece ser para abrir um "aplicativo" real. E se eu quiser fazer algum processamento personalizado, usando um comando terminal, etc?
Nute 25/08

11
@nute Apenas do topo da minha cabeça, não tenho certeza. Talvez um aplicativo criado com o Automator que envolva um script de shell?
slhck

14

Atualização de julho de 2017: RCDefaultApp e lstoolnão funciona mais no macOS 10.12 ou posterior. Teremos que encontrar uma nova solução.

Edit Mar 2018
Encontrei o SwiftDefaultApps, mas não posso testar, pois ainda não estou em High Sierra.


Continuando a resposta anterior, se você desejar fazer isso na linha de comando, poderá usar o lstoolcomando, que é o núcleo do RCDefaultApp, encontrado em RCDefaultApp.prefPane/Contents/Resources/lstool.

Seu uso é direto:

[~]$lstool --help
Usage:

lstool read [<lsscheme> [<type>]]
lstool [-n] write <lsscheme> <type> <app>
lstool [-n] setoption <lsscheme> <type> login|ignorecreator YES|NO
lstool [-n] register {<app>}
lstool [-n] unregister {<path> | <app>}
lstool apps

-n means do not make changes
<lsscheme> is one of: internet, media, url, extension, uti, mime, ostype
<app> is the path to an application or a name to be looked up

2
Encontrei um possível substituto para o RCDefaultApp em github.com/Lord-Kamina/SwiftDefaultApps, embora você precise compilá-lo com o Xcode.
luckman212

Estou usando a versão 2.1 do RCDefaultApp e funciona bem para mim na 10.12. Pelo menos ainda está listando todos os itens. Ou apenas alguma operação específica não funciona mais? Por favor, elabore
SuperTempel 28/11

@SuperTempel A lstoolferramenta de linha de comando exibe esse erro quando você tenta executá-lo: objc[1049]: Objective-C garbage collection is no longer supported.( lstoolé o programa interno usado pelo painel de preferências RCDefaultApp. Embora o painel de preferências pareça funcionar, acho que não pode fazer nada porque lstoolestá quebrado. )
Quinn Comissário 25/12

O SwiftDefaultApps aparentemente não funciona nos processadores Intel. Nenhuma correção até pelo menos abril de 2018.
Quinn Comendant 26/03

3
Eu sou o desenvolvedor do SwiftDefaultApps, o SWDA foi codificado desde o início com o macOS Sierra e em mente superior (na verdade, comecei a trabalhar nele depois de muita frustração ao ler esta pergunta e outras similares). Ele não estava funcionando na versão 10.13 em grande parte devido a um bug no Swift ou no próprio macOS, mas parece ter sido corrigido com a atualização para a versão 10.13.4 / Swift 4.1.
Gregorio Litenstein

11

Listando as configurações atuais do manipulador de URL do LaunchServices no Apple OS X 10.10 (Yosemite):

defaults read com.apple.LaunchServices/com.apple.launchservices.secure

Yay por usar as ferramentas internas que não quebram ou exigem que você faça o download de algo.
Xdhmoore 12/0118

Isso não lista todos os padrões para cada protocolo, apenas alguns.
Vadim Peretokin 29/09

5

Na verdade, eu escrevi um aplicativo que simplifica o registro de protocolos de URL personalizados, se alguém estiver interessado. É chamado LinCastor ( http://onflapp.wordpress.com/lincastor/ ). Os manipuladores podem ser definidos como AppleScript ou shell script (que pode perl, python ou o que for).


Ótima idéia, mas eu tenho medo de não conseguir que o script de exemplo fornecido funcione. Mais sobre o seu blog, aguardando moderação: getitdoneapps.wordpress.com/lincastor-browser/support/…
Flash Sheridan

Isso parecia ser uma estranha estranheza de quebra de linha no arquivo de exemplo, diagnosticada pela execução do script na linha de comando. (“/ Bin / sh: intérprete incorreto: operação não permitida”) Salvar uma cópia no BBEdit e alterar e recarregar as quebras de linha de / para o Windows resolveram o problema.
Flash Sheridan

5

Abrir o arquivo com o XCode funciona bastante fácil.

O uso do comando build in, plutilconforme descrito na resposta em https://discussions.apple.com/thread/5815759 para converter entre o formato xml1 ou binary1, funciona de maneira semelhante.

plutil -convert xml1 /file-i-wish

nano /file-i-wish & save file 

plutil -convert binary1 /file-i-wish

Não há necessidade de ferramentas 'alienígenas' :-)


4

Você também pode usar duti :

echo $'com.apple.mail mailto\ncom.googlecode.iterm2 x-man-page'>~/.duti;duti ~/.duti

0

Acabei de experimentar o antigo More Internet, no El Capitan.

É divertido e a única maneira de funcionar é usando as teclas de seta para cima e para baixo para selecionar o protocolo e arrastar / soltar o ícone do APP na janela para fazer uma alteração.

Mudei o padrão do Safari para o Chrome, e a alteração travou, por isso ainda funciona.


O que é isso? Sua resposta não é clara.
lacostenycoder

0

Outra maneira de listar as configurações atuais do manipulador de URL do LaunchServices com o Xcode no Apple OS X 10.10+ (Yosemite):

open -a Xcode ~/Library/Preferences/com.apple.LaunchServices/com.apple.launchservices.secure.plist
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.