如何将自定义协议映射到Mac上的应用程序?

我试图在Mac上注册一个自定义协议到应用程序,即:

  1. 用户点击“abcdef:// some / url / here”链接
  2. 以上面的string作为第一个参数传入已安装的应用程序

我已经在Windows上使用这个问题的信息成功完成了这个工作:

我如何创build自己的URL协议? (例如:// …)

我宁愿find一些与浏览器无关的东西,换句话说就是在操作系统级别。 我也想通过一个shell脚本自动注册,所以希望有一种方法可以做到这一点,不涉及GUI。

谢谢!

我没有机会使用它,但前一段时间我书签的OS X URL处理程序打开链接到本地​​文件 ,这正是你在找什么。

链接过程的重要部分是在应用程序的Info.plist中添加一个合适的CFBundleURLTypes ,描述该scheme。 这里给出的例子看起来像这样:

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

在Mac上,使用AppleScript很容易。 本文中最详细的描述是从Mac上的网页链接启动脚本 。 我读过那个页面,因为它包含一个完整的步骤和一个完整的工作示例来下载。

基本上,你在脚本中创build一个事件处理程序:

 on open location this_URL display dialog "I'm doing something with this URL: " & return & this_URL end open location 

然后将其保存为应用程序。 然后在Finder中使用Show Package Contents来编辑Info.plist。 您添加一些属性到应用程序注册为您的协议的处理程序。

 <key>CFBundleURLTypes</key> <array> <dict> <key>CFBundleURLName</key> <string>Cliff's handler</string> <key>CFBundleURLSchemes</key> <array> <string>abcdef</string> </array> </dict> </array> 

Jay答案中链接页面的重要部分是Info.plist中的条目。

我想用启动服务,它会自动打开这个应用程序,如果它是唯一可以处理特定的URLscheme,否则你需要使用查理·马丁描述的伎俩。

我不确定需要执行的默认命令是什么,或者是否是launchctl命令。

挖掘细节是困难的,但有一个名为RCDefaultApp的偏好窗格可以为您处理。 我仍然很想知道它是如何工作的,将继续挖掘。

到目前为止,我发现在Mac上用最less的开销解决这个问题的最好方法是使用duti命令行,它允许我在一个非常简单的文本文件中定义所有的关联:

酿造安装duti

你将需要两件事情。 您要关联的应用的第一个捆绑ID:

mdls -name kMDItemCFBundleIdentifier /Applications/MacVim.app

其次,文件types的UTI, 苹果提供了一个列表 ,但你也可以通过你的应用程序来探索支持的UTI:

mdls -name kMDItemContentTypeTree /Applications/MacVim.app

现在在你的系统中的某个地方build立一个文本文件,你把bundle ID与UTI关联起来:

 # ~/.default-apps.duti # # bundle id UTI role com.apple.Safari public.html all org.vim.MacVim txmt org.vim.MacVim public.ruby-script 

请注意,我可以将像txmt这样的URL处理程序以及像Ruby脚本这样的文件types关联起来。

在这个文件中,我会跟踪所有的应用程序首选项,并在完全全新安装或在刚刚运行的其他Mac上获取帐户时立即重现它们:

 duti ~/.default-apps.duti