macOS 应用程序文件关联
macOS application file association
一段时间以来,我一直在努力筛选信息,但在确定哪些信息仍然相关时遇到了问题。似乎由于某种原因,有关该主题的信息也少于应有的信息。
我正在开发一个为 macOS 分发的应用程序。我想将自定义文件扩展名与我的应用程序相关联。我希望用户能够双击其中一个文件并让应用程序打开它。我很容易选择应用程序来打开文件,但我不知道如何获取打开文件的文件名。
到目前为止我唯一发现的是从 AppleScript 创建应用程序。然后 AppleScript 可以解析参数并使用它们调用主应用程序。这种方法有两个问题。
首先,如果用户更改它并直接选择应用程序会怎样?我以为它只是行不通?有什么解决办法吗?
其次,如何首先自动关联应用程序?我找到了有关 CFBundleTypeExtensions 的信息,但后来发现这已被弃用。我找到了一些关于 UTI 和启动服务的信息。如何将 UTI 添加到 plist 文件和 运行 lsregister 命令是有意义的。你会如何自动执行此操作?用户使用 dmg 安装应用程序,我什么时候可以 运行 lsregister 命令?
在您的 Info.plist
中添加如下内容。它会告诉 macOS 您的应用程序处理 .foo
和 .bar
文件。
<key>CFBundleDocumentTypes</key>
<array>
<dict>
<key>CFBundleTypeRole</key>
<string>Viewer</string>
<key>CFBundleTypeExtensions</key>
<array>
<string>foo</string>
<string>bar</string>
</array>
<key>CFBundleTypeIconFile</key>
<string>FileIcons.icns</string>
<key>CFBundleTypeMIMETypes</key>
<string>application/octet-stream</string>
<key>CFBundleTypeName</key>
<string>Something Unique Here</string>
<key>CFBundleTypeOSTypes</key>
<array>
<string>****</string>
</array>
</dict>
</array>
FileIcons.icns
应包含已注册文件的图标文件。如果您不想创建文件图标,您可以将该字符串留空:
<key>CFBundleTypeIconFile</key>
<string></string>
CFBundleTypeMIMETypes
上面设置为application/octet-stream
。这是通用二进制数据的 MIME 类型。如果文件确实具有正确的 MIME 类型,则使用它们。
一旦 macOS 看到您的应用程序(例如,在下载它时),它会自动知道打开 .foo
和 .bar
。您不需要 运行 任何外部内容。
最后,当用户双击 .foo
或 .bar
文件时,macOS 将启动您的应用程序,并且它会收到一个 "open file" 事件。你需要处理它。如何做到这一点取决于 framework/language 您用来开发应用程序的内容。
一段时间以来,我一直在努力筛选信息,但在确定哪些信息仍然相关时遇到了问题。似乎由于某种原因,有关该主题的信息也少于应有的信息。
我正在开发一个为 macOS 分发的应用程序。我想将自定义文件扩展名与我的应用程序相关联。我希望用户能够双击其中一个文件并让应用程序打开它。我很容易选择应用程序来打开文件,但我不知道如何获取打开文件的文件名。
到目前为止我唯一发现的是从 AppleScript 创建应用程序。然后 AppleScript 可以解析参数并使用它们调用主应用程序。这种方法有两个问题。
首先,如果用户更改它并直接选择应用程序会怎样?我以为它只是行不通?有什么解决办法吗?
其次,如何首先自动关联应用程序?我找到了有关 CFBundleTypeExtensions 的信息,但后来发现这已被弃用。我找到了一些关于 UTI 和启动服务的信息。如何将 UTI 添加到 plist 文件和 运行 lsregister 命令是有意义的。你会如何自动执行此操作?用户使用 dmg 安装应用程序,我什么时候可以 运行 lsregister 命令?
在您的 Info.plist
中添加如下内容。它会告诉 macOS 您的应用程序处理 .foo
和 .bar
文件。
<key>CFBundleDocumentTypes</key>
<array>
<dict>
<key>CFBundleTypeRole</key>
<string>Viewer</string>
<key>CFBundleTypeExtensions</key>
<array>
<string>foo</string>
<string>bar</string>
</array>
<key>CFBundleTypeIconFile</key>
<string>FileIcons.icns</string>
<key>CFBundleTypeMIMETypes</key>
<string>application/octet-stream</string>
<key>CFBundleTypeName</key>
<string>Something Unique Here</string>
<key>CFBundleTypeOSTypes</key>
<array>
<string>****</string>
</array>
</dict>
</array>
FileIcons.icns
应包含已注册文件的图标文件。如果您不想创建文件图标,您可以将该字符串留空:
<key>CFBundleTypeIconFile</key>
<string></string>
CFBundleTypeMIMETypes
上面设置为application/octet-stream
。这是通用二进制数据的 MIME 类型。如果文件确实具有正确的 MIME 类型,则使用它们。
一旦 macOS 看到您的应用程序(例如,在下载它时),它会自动知道打开 .foo
和 .bar
。您不需要 运行 任何外部内容。
最后,当用户双击 .foo
或 .bar
文件时,macOS 将启动您的应用程序,并且它会收到一个 "open file" 事件。你需要处理它。如何做到这一点取决于 framework/language 您用来开发应用程序的内容。