Bagaimana cara mengkonfigurasi penangan URL khusus pada OS X?


64

Saya telah membaca banyak online tentang penangan URL khusus / penangan protokol khusus seperti:

Saya mengerti bahwa Anda dapat memberi tahu sistem bahwa program tertentu dapat menangani skema / protokol tertentu dengan Info.plistfile tersebut:

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

Tetapi jika ada beberapa aplikasi yang mampu membuka penangan URL yang sama, seperti mailto:bagaimana Anda menentukan yang mana yang Anda inginkan sistem untuk digunakan?

Ada beberapa referensi ke utilitas seperti More Internet preference paneyang sepertinya tidak lagi tersedia dari situs penulis. Saya memang menemukannya secara online oleh Googling tetapi tampaknya agak goyah - seperti ditulis untuk OSX yang lebih lama - mungkin Tiger.

Saya belum dapat menemukan informasi tentang cara mengatur URL handler untuk protokol dan protokol khusus. Saya berasumsi ada plistfile di suatu tempat yang dapat saya edit - atau mungkin ada utilitas yang lebih baru dan lebih baik yang berfungsi dengan baik dengan Mountain Lion?

Jawaban:


55

File yang Anda cari adalah ~/Library/Preferences/com.apple.LaunchServices/com.apple.launchservices.secure.plist.

Itu memegang sebuah array yang disebut LSHandlers, dan Kamus anak-anak yang mendefinisikan suatu LSHandlerURLSchemedapat dimodifikasi sesuai dengan LSHandlerRole.

Daripada mengedit file ini secara manual, Anda juga dapat menggunakan RCDefaultApp , yang memberi Anda Panel Preferensi yang bagus. Dikatakan tidak berfungsi untuk macOS 10.12 dan lebih tinggi, tapi saya bisa mengonfirmasi itu berjalan di bawah macOS 10.14.

Alternatifnya adalah SwiftDefaultApps .

Misalnya, inilah SVN dan SSH:

... dan di RCDefaultApp:


35
4 menit 19 detik? Serius?
Daniel Beck

2
Terima kasih atas jawaban yang cepat dan terperinci. Kelihatan bagus! Pertanyaannya - saya pikir saya sudah mencoba RCDefaultApp sebelumnya dan ada masalah dengannya. Apakah sudah bekerja dengan mulus untuk Anda?
cwd

@ cwd Jujur saya harus mengatakan saya tidak sering menggunakannya. Lebih banyak untuk tangkapan layar untuk Pengguna Super daripada yang lain :) Setiap kali saya perlu mengubah asosiasi file, saya melakukannya melalui dialog Dapatkan Info ... di Finder. Saya tidak pernah perlu mengubah protokol dan penangan MIME. Tapi bagiku itu cukup stabil.
slhck

Ini sepertinya untuk membuka "aplikasi" nyata. Bagaimana jika saya ingin melakukan pemrosesan kustom, menggunakan perintah terminal, dll?
nute

1
@nute Hanya dari atas kepala saya, tidak yakin. Mungkin aplikasi yang dibuat dengan Automator yang membungkus skrip shell?
slhck

14

Pembaruan Jul 2017: RCDefaultApp dan lstooltidak lagi berfungsi di macOS 10.12 atau lebih baru. Kami harus menemukan solusi baru.

Sunting Mar 2018
Saya menemukan SwiftDefaultApps tetapi tidak dapat menguji karena saya belum menggunakan Sierra Tinggi.


Melanjutkan jawaban sebelumnya, jika Anda ingin melakukan ini pada baris perintah Anda dapat menggunakan lstoolperintah, yang merupakan inti dari RCDefaultApp, ditemukan di bawah RCDefaultApp.prefPane/Contents/Resources/lstool.

Penggunaannya sangat mudah:

[~]$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
Saya menemukan kemungkinan pengganti RCDefaultApp di github.com/Lord-Kamina/SwiftDefaultApps walaupun Anda harus membuatnya sendiri dengan Xcode.
luckman212

Saya menggunakan versi 2.1 dari RCDefaultApp dan berfungsi dengan baik untuk saya pada 10.12. Setidaknya masih mencantumkan semua item. Atau apakah hanya beberapa operasi tertentu yang tidak berfungsi lagi? Tolong jelaskan
SuperTempel

@SuperTempel lstoolAlat baris perintah menampilkan kesalahan ini ketika Anda mencoba menjalankannya: objc[1049]: Objective-C garbage collection is no longer supported.( lstooladalah program internal yang digunakan oleh panel preferensi RCDefaultApp. Sementara panel preferensi tampaknya berfungsi, saya tidak berpikir itu bisa melakukan apa pun karena lstoolrusak. )
Quinn Comendant

SwiftDefaultApps tampaknya tidak berfungsi pada prosesor Intel. Tidak diperbaiki hingga setidaknya April 2018.
Quinn Comendant

3
Saya adalah pengembang dari SwiftDefaultApps, SWDA dikodekan dari awal dengan macOS Sierra dan lebih tinggi dalam pikiran (Bahkan, saya mulai bekerja setelah banyak frustrasi membaca pertanyaan ini dan yang serupa). Itu tidak berfungsi di 10.13 terutama karena bug di Swift atau macOS itu sendiri, tetapi tampaknya telah diperbaiki dengan pembaruan ke 10.13.4 / Swift 4.1.
Gregorio Litenstein

11

Cantumkan pengaturan saat ini LaunchServices URL handler di Apple OS X 10.10 (Yosemite):

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

Anda dapat menggunakan alat bawaan yang tidak merusak atau mengharuskan Anda mengunduh sesuatu.
xdhmoore

Ini tidak mencantumkan semua default untuk setiap protokol, hanya beberapa.
Vadim Peretokin

5

Saya sebenarnya menulis sebuah aplikasi yang menyederhanakan pendaftaran protokol URL khusus, jika ada yang tertarik. Ini disebut LinCastor ( http://onflapp.wordpress.com/lincastor/ ). Handler dapat didefinisikan sebagai AppleScript atau skrip shell (yang dapat perl, python atau apa pun).


Ide yang sangat bagus, tapi saya khawatir saya tidak bisa mendapatkan contoh script yang disediakan untuk bekerja. Lebih banyak di blog Anda, menunggu moderasi: getitdoneapps.wordpress.com/lincastor-browser/support/…
Flash Sheridan

Itu tampak seperti keanehan break-break yang membingungkan pada file contoh, didiagnosis dengan menjalankan skrip dari baris perintah. ("/ Bin / sh: interpreter buruk: Operasi tidak diizinkan") Menyimpan salinan di BBEdit, dan mengubah dan mengisi ulang jeda baris ke / dari Windows, mengatasi masalah tersebut.
Flash Sheridan

5

Buka file dengan XCode berfungsi cukup mudah.

Menggunakan perintah build plutilseperti dijelaskan dalam jawaban di https://discussions.apple.com/thread/5815759 untuk mengkonversi antara format xml1 atau binary1 bekerja serupa.

plutil -convert xml1 /file-i-wish

nano /file-i-wish & save file 

plutil -convert binary1 /file-i-wish

Tidak perlu alat 'alien' :-)


4

Anda juga dapat menggunakan duti :

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

0

Saya baru saja mencoba internet lama lainnya, di bawah El Capitan.

Ini funky dan satu-satunya cara kerjanya adalah dengan menggunakan tombol panah atas dan bawah untuk memilih protokol, dan seret / lepas ikon APP ke jendela untuk melakukan perubahan.

Saya beralih default dari Safari ke Chrome, dan perubahan macet, jadi masih berfungsi.


Apa ini? Jawaban Anda tidak jelas.
lacostenycoder

0

Cara lain untuk membuat daftar pengaturan Handler URL LaunchServices saat ini dengan Xcode pada Apple OS X 10.10+ (Yosemite):

open -a Xcode ~/Library/Preferences/com.apple.LaunchServices/com.apple.launchservices.secure.plist
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.