Làm cách nào để định cấu hình trình xử lý URL tùy chỉnh trên OS X?


64

Tôi đã đọc rất nhiều trên mạng về trình xử lý URL tùy chỉnh / trình xử lý giao thức tùy chỉnh, chẳng hạn như:

Tôi hiểu rằng bạn có thể nói với hệ thống rằng một chương trình cụ thể có thể xử lý một lược đồ / giao thức nhất định với Info.plisttệp:

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

Nhưng nếu có nhiều ứng dụng có khả năng mở cùng một trình xử lý URL, chẳng hạn như mailto:làm thế nào để bạn chỉ định ứng dụng nào bạn muốn hệ thống sử dụng?

Có một số tài liệu tham khảo về các tiện ích như cái More Internet preference panemà dường như không còn có sẵn từ trang web của tác giả. Tôi đã tìm thấy nó trực tuyến bởi Googling nhưng có vẻ hơi run - giống như nó được viết cho một OSX cũ hơn - có lẽ là Tiger.

Tôi chưa thể tìm thấy thông tin về cách đặt trình xử lý URL cho các giao thức và giao thức tùy chỉnh. Tôi giả sử có một plisttệp ở đâu đó mà tôi có thể chỉnh sửa - hoặc có thể có một tiện ích mới hơn, tốt hơn hoạt động tốt với Mountain Lion?

Câu trả lời:


55

Các tập tin bạn tìm kiếm là ~/Library/Preferences/com.apple.LaunchServices/com.apple.launchservices.secure.plist.

Nó chứa một mảng được gọi LSHandlersvà các từ điển con xác định một LSHandlerURLSchemecó thể được sửa đổi cho phù hợp với LSHandlerRole.

Thay vì chỉnh sửa thủ công tệp này, bạn cũng có thể sử dụng RCDefaultApp , cung cấp cho bạn một Ưu tiên tốt đẹp. Nó được cho là không hoạt động cho macOS 10.12 trở lên, nhưng tôi có thể xác nhận nó chạy theo macOS 10.14.

Một thay thế là SwiftDefaultApps .

Ví dụ: đây là SVN và SSH:

Càng và trong RCDefaultApp:


35
4 phút 19 giây? Nghiêm túc?
Daniel Beck

2
Cảm ơn câu trả lời nhanh và chi tiết. Có vẻ tốt! Câu hỏi mặc dù - Tôi nghĩ rằng tôi đã thử RCDefaultApp trước đây và có một số vấn đề với nó. Nó đã được làm việc liền mạch cho bạn?
cwd

@cwd Tôi thực sự phải nói rằng tôi không sử dụng nó thường xuyên. Nhiều hơn cho ảnh chụp màn hình cho Siêu người dùng hơn bất cứ điều gì khác :) Bất cứ khi nào tôi cần thay đổi liên kết tệp, tôi sẽ thực hiện thông qua hộp thoại Nhận thông tin trong Finder. Tôi không bao giờ cần phải thay đổi giao thức và trình xử lý MIME. Nhưng nó dường như đủ ổn định với tôi.
slhck

Điều này dường như là để mở một "ứng dụng" thực sự. Điều gì xảy ra nếu tôi muốn thực hiện một số xử lý tùy chỉnh, sử dụng lệnh đầu cuối, v.v.?
Nute

1
@nute Chỉ từ đỉnh đầu của tôi, không chắc chắn. Có lẽ một ứng dụng được tạo bằng Automator bao bọc một tập lệnh shell?
slhck

14

Cập nhật tháng 7 năm 2017: RCDefaultApp và lstoolkhông còn hoạt động trên macOS 10.12 trở lên. Chúng ta sẽ phải tìm một giải pháp mới.

Chỉnh sửa tháng 3 năm 2018
Tôi đã tìm thấy SwiftDefaultApps nhưng chưa thể kiểm tra vì tôi chưa ở High Sierra.


Hơn nữa câu trả lời trước, nếu bạn muốn làm điều này trên dòng lệnh, bạn có thể sử dụng lstoollệnh, đó là cốt lõi của RCDefaultApp, được tìm thấy bên dưới RCDefaultApp.prefPane/Contents/Resources/lstool.

Cách sử dụng của nó rất đơn giản:

[~]$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
Tôi đã tìm thấy một sự thay thế khả dĩ cho RCDefaultApp tại github.com/Lord-Kamina/SwiftDefaultApps mặc dù bạn sẽ phải tự xây dựng nó bằng Xcode.
luckman212

Tôi đang sử dụng phiên bản 2.1 của RCDefaultApp và nó hoạt động tốt với tôi vào ngày 10.12. Ít nhất vẫn là danh sách tất cả các mục. Hoặc chỉ một số hoạt động cụ thể không hoạt động nữa? Xin hãy giải thích
SuperTempel

@SuperTempel Công lstoolcụ dòng lệnh hiển thị lỗi này khi bạn cố chạy nó: objc[1049]: Objective-C garbage collection is no longer supported.( lstoollà chương trình nội bộ được sử dụng bởi ngăn tùy chọn RCDefaultApp. Trong khi ngăn tùy chọn xuất hiện để hoạt động, tôi không nghĩ nó có thể làm gì vì lstoolbị hỏng. )
Quinn Comendant

SwiftDefaultApps dường như không hoạt động trên bộ xử lý Intel. Không sửa chữa cho đến ít nhất là tháng 4 năm 2018.
Quinn Comendant

3
Tôi là nhà phát triển của SwiftDefaultApps, SWDA đã được mã hóa từ đầu với macOS Sierra và trong tâm trí cao hơn (Thực tế, tôi đã bắt đầu làm việc với nó sau nhiều lần thất vọng khi đọc câu hỏi này và những câu hỏi tương tự). Nó không hoạt động trong 10.13 phần lớn là do lỗi trong chính Swift hoặc macOS, nhưng có vẻ như nó đã được sửa với bản cập nhật lên 10.13.4 / Swift 4.1.
Gregorio Litenstein

11

Liệt kê các cài đặt trình xử lý URL LaunchService hiện tại trên Apple OS X 10.10 (Yosemite):

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

Yay vì đã sử dụng các công cụ dựng sẵn không phá vỡ hoặc yêu cầu bạn tải xuống một cái gì đó.
xdhmoore

Điều này không liệt kê tất cả các giá trị mặc định cho mọi giao thức, chỉ một số.
Vadim Peretokin

5

Tôi thực sự đã viết một ứng dụng đơn giản hóa việc đăng ký các giao thức URL tùy chỉnh, nếu có ai quan tâm. Nó được gọi là LinCastor ( http://onflapp.wordpress.com/lincastor/ ). Trình xử lý có thể được định nghĩa là AppleScript hoặc shell script (có thể perl, python hoặc what ever).


Ý tưởng rất hay, nhưng tôi e rằng tôi không thể làm cho kịch bản ví dụ được cung cấp hoạt động. Thông tin thêm về blog của bạn, chờ kiểm duyệt: getitdoneapps.wordpress.com/lincastor-browser/support/...
flash Sheridan

Đó dường như là một sự kỳ lạ phá vỡ dòng trong tệp ví dụ, được chẩn đoán bằng cách chạy tập lệnh từ dòng lệnh. (Khác / bin / sh: trình thông dịch xấu: Không được phép thao tác)
Flash Sheridan

5

Mở tệp bằng XCode hoạt động khá dễ dàng.

Sử dụng lệnh build in plutilnhư được mô tả trong câu trả lời trên https://discussions.apple.com/thread/5815759 để chuyển đổi giữa định dạng xml1 hoặc binary1 hoạt động tương tự.

plutil -convert xml1 /file-i-wish

nano /file-i-wish & save file 

plutil -convert binary1 /file-i-wish

Không cần công cụ 'người ngoài hành tinh' :-)


4

Bạn cũng có thể sử dụng duti :

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

0

Tôi vừa thử Internet cũ hơn, dưới El Capitan.

Thật thú vị và cách duy nhất để nó hoạt động là sử dụng các phím mũi tên lên và xuống để chọn giao thức và kéo / thả biểu tượng APP vào cửa sổ để thực hiện thay đổi.

Tôi đã chuyển mặc định từ Safari sang Chrome và thay đổi bị kẹt, vì vậy nó vẫn hoạt động.


Cái này là cái gì? Câu trả lời của bạn không rõ ràng.
lacostenycoder

0

Một cách khác để liệt kê các cài đặt trình xử lý URL LaunchService hiện tại với Xcode trên Apple OS X 10.10+ (Yosemite):

open -a Xcode ~/Library/Preferences/com.apple.LaunchServices/com.apple.launchservices.secure.plist
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.