Як налаштувати власні обробники URL-адрес на OS X?


64

Я багато читав в Інтернеті про спеціальні обробники 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які, здається, більше не доступні на сайті автора. Я знайшов це в Інтернеті від Googling, але це здається трохи хитким - як це було написано для старшого OSX - можливо, Тигра.

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

Відповіді:


55

Ви шукаєте файл ~/Library/Preferences/com.apple.LaunchServices/com.apple.launchservices.secure.plist.

Він містить масив, який називається LSHandlers, і діти словника, які визначають, LSHandlerURLSchemeможна відповідно модифікувати за допомогою LSHandlerRole.

Замість того, щоб вручну редагувати цей файл, ви також можете скористатися RCDefaultApp , що надає хорошу панель налаштувань. Кажуть, що він не працює для macOS 10.12 і новіших версій, але я можу підтвердити, що він працює під macOS 10.14.

Альтернатива - SwiftDefaultApps .

Наприклад, ось SVN та SSH:

… І в RCDefaultApp:


35
4 хвилини 19 секунд? Серйозно?
Даніель Бек

2
Дякуємо за швидку та детальну відповідь. Виглядає добре! Питання, однак - я думаю, що раніше я спробував RCDefaultApp і у мене виникли деякі проблеми. Це працює безперечно для вас?
cwd

@cwd Чесно кажу, я не використовую її часто. Більше для скріншотів для Super User, ніж будь-що інше :) Щоразу, коли мені потрібно змінити асоціації файлів, я це роблю через діалогове вікно Get Info… у Finder. Мені ніколи не потрібно було змінювати протоколи та оброблювачі MIME. Але це здалося мені досить стабільним.
slhck

Здається, це відкриє справжню "програму". Що робити, якщо я хочу виконати якусь спеціальну обробку, використовуючи команду термінала тощо?
nute

1
@nute Просто з моєї голови, не впевнений. Можливо, додаток, створений за допомогою Automator, який обгортає сценарій оболонки?
slhck

14

Оновлення липня 2017 року: RCDefaultApp і lstoolбільше не працює на macOS 10.12 або новішої версії. Треба буде знайти нове рішення.

Редагувати березень 2018
Я знайшов SwiftDefaultApps, але не можу перевірити, оскільки я ще не на Високій Сьєррі.


Продовжуючи попередню відповідь, якщо ви хочете зробити це в командному рядку, ви можете використовувати 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

2
Я знайшов можливу заміну для RCDefaultApp на github.com/Lord-Kamina/SwiftDefaultApps, хоча вам доведеться створити його самостійно за допомогою Xcode.
luckman212

Я використовую версію 2.1 RCDefaultApp, і вона працює чудово для мене 10.12. Принаймні, досі перелічені всі елементи. Або тільки якась конкретна операція більше не працює? Прохання уточнити
SuperTempel

@SuperTempel Інструмент lstoolкомандного рядка відображає цю помилку при спробі її запуску: objc[1049]: Objective-C garbage collection is no longer supported.( lstoolце внутрішня програма, що використовується панеллю уподобань RCDefaultApp. Хоча панель уподобань, здається, працює, я не думаю, що вона може нічого зробити, тому що lstoolвона зламана. )
Квінн Комендант

SwiftDefaultApps, мабуть, не працює на процесорах Intel. Не виправте принаймні квітня 2018 року.
Куінн Комендант

3
Я розробник SwiftDefaultApps, SWDA був кодований від початку з macOS Sierra і вище на увазі (насправді я почав працювати над ним після великих розладів, читаючи це питання та подібні). Він не працював у 10.13 значною мірою через помилку як у Swift, так і у macOS, але, здається, виправлено оновлення до 10.13.4 / Swift 4.1.
Грегоріо Літштейн

11

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

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

Так, для використання вбудованих інструментів, які не ламаються та не вимагають від вас скачати щось.
xdhmoore

У цьому списку не вказані всі параметри за замовчуванням для кожного протоколу, але лише деякі.
Вадим Перетокін

5

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


Дуже приємна ідея, але я боюся, що не можу примусити прикладний сценарій працювати. Більше у своєму блозі, чекаючи модерації: getitdoneapps.wordpress.com/lincastor-browser/support/…
Flash Sheridan

Це, здавалося, було деяким дивним дивацтвом розриву рядків у файлі прикладу, діагностованому запуском сценарію з командного рядка. ("/ Bin / sh: неправильний інтерпретатор: експлуатація не дозволена") Збереження копії в BBEdit та зміна та підзарядка розривів рядків до / з Windows, вирішили проблему.
Flash Sheridan

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

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


4

Ви також можете використовувати duti :

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

0

Я просто спробував старий Інший Інтернет, під 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
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.