无法使用 duti 或 plist 向 Mac 上的应用程序添加自定义协议

问题描述

我对 Mac 的使用经验不多,因此不胜感激。

首先尝试在这里提问How to map a custom protocol to an application on the Mac?

尝试在 duti 的帮助下添加我的自定义协议,在 Packages 安装程序的安装后脚本中运行:

#!/bin/sh
## 
##  add_handlers.sh -- register UTI handlers for the MyApp
##
##  Requires the duti tool
##

./duti -s MyApp myapp

处理程序出现在 RCDefaultApp 首选项窗格中,但是当从我的其他应用程序调用时,它会在地址栏中使用该协议打开 Safari,询问“您是否要允许此页面打开“MyApp”?当单击“允许”时显示错误

Safari 无法打开指定的地址。 Safari 无法打开“myapp://”,因为 macOS 无法识别以“myapp:”开头的互联网地址。

尝试从终端打开时:

deploy@mini-mac-mini ~ % 打开 myapp://

LSOpenURLsWithRole() 失败,URL myapp:// 的错误为 -10810。

在应用程序包中的 plist 文件的帮助下尝试添加协议时出现同样的问题。

解决方法

经过一番调查,我找到了问题的原因。

事实证明,我正在分发 myapp 的 zip 存档删除了文件的可执行访问权限。

在使用 zip 的功能来保留属性(未成功)之后,我使用了另一个脚本将属性设置回解压文件:

chmod "+x" "myapp.app/Contents/MacOS/myapp"

之后 duti 工具开始按预期工作。