51

Я много читал в Интернете о пользовательских обработчиках URL / пользовательских протоколах, таких как:

Я понял, что вы можете сказать системе, что определенная программа может обрабатывать определенную схему / протокол с помощью файла Info.plist :

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

Но если есть несколько приложений, которые могут открывать один и тот же обработчик URL, например mailto: как указать, какое из них вы хотите использовать в системе?

Были некоторые ссылки на такие утилиты, как панель « More Internet preference pane которая больше не доступна на сайте автора. Я нашел его в Интернете от Google, но он кажется немного шатким - как будто он был написан для более старой OSX - возможно, Tiger.

Я не смог найти информацию о том, как установить обработчик URL для протоколов и пользовательских протоколов. Я предполагаю, что где-то есть файл plist который я могу отредактировать - или, может быть, есть более новая, лучшая утилита, которая хорошо работает с Mountain Lion?

8 ответов8

45

Файл, который вы ищете - ~/Library/Preferences/com.apple.LaunchServices.plist .

(в OSX 10.11 основным списком является ~/Library/Preferences/com.apple.LaunchServices/com.apple.launchservices.secure.plist хотя вышесказанное все еще существует…)

Он содержит массив LSHandlers , и дочерние элементы Dictionary, которые определяют LSHandlerURLScheme могут быть изменены соответствующим образом с помощью LSHandlerRole .

Вместо того, чтобы вручную редактировать этот файл, вы также можете использовать RCDefaultApp, который дает вам хорошую панель настроек (… больше не работает в OSX 10.12).

Изменить март 2018
Я нашел SwiftDefaultApps, но не могу проверить, так как я еще не на High Sierra.
Если кто-то хотел бы проверить и сообщить ...

Например, вот SVN и SSH:

... и в RCDefaultApp:

14

Обновление июль 2017: RCDefaultApp и lstool больше не работают на macOS 10.12 или более поздней версии . Мы должны найти новое решение.

Изменить март 2018
Я нашел SwiftDefaultApps, но не могу проверить, так как я еще не на High Sierra.


В продолжение предыдущего ответа, если вы хотите сделать это в командной строке, вы можете использовать команду lstool , которая является ядром RCDefaultApp, которая находится в RCDefaultApp.prefPane/Contents/Resources/lstool .

Его использование просто:

[~]$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
10

Перечисление текущих настроек обработчика URL-адресов LaunchServices в Apple OS X 10.10 (Yosemite):

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

Я на самом деле написал приложение, упрощающее регистрацию пользовательских протоколов URL, если кому-то интересно. Он называется LinCastor (http://onflapp.wordpress.com/lincastor/). Обработчики могут быть определены как AppleScript или сценарий оболочки (который может быть perl, python или что-либо еще).

5

Открыть файл с помощью XCode работает довольно легко.

Использование команды build in plutil как описано в ответе на https://discussions.apple.com/thread/5815759, для преобразования между форматами xml1 или binary1 работает аналогично.

plutil -convert xml1 /file-i-wish

nano /file-i-wish & save file 

plutil -convert binary1 /file-i-wish

Нет необходимости в «чужих» инструментах :-)

3

Вы также можете использовать duti:

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

Я только что попробовал старый интернет More под El Capitan.

Это забавно, и единственный способ, которым он работает, это использование клавиш со стрелками вверх и вниз для выбора протокола и перетаскивание значка APP в окно, чтобы внести изменения.

Я переключился по умолчанию с Safari на Chrome, и изменения застряли, так что он работает до сих пор.

0

Другой способ перечислить текущие настройки обработчика URL-адресов LaunchServices с помощью Xcode в Apple OS X 10.10+ (Yosemite):

open -a Xcode ~/Library/Preferences/com.apple.LaunchServices/com.apple.launchservices.secure.plist

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .