如何将自定义协议映射到Mac上的应用程序?
我试图在Mac上注册一个自定义协议到应用程序,即:
- 用户点击“abcdef:// some / url / here”链接
- 以上面的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