【问题标题】:Override system-defined UTI覆盖系统定义的 UTI
【发布时间】:2017-08-28 14:36:55
【问题描述】:

对于我正在开发的应用程序,我们开发了一种基于 HTML 的文件格式,这样即使没有我们的应用程序的用户也可以使用网络浏览器预览文档。

但是,对于拥有该应用程序的用户,我们希望使用它来打开这些文件。我们决定使用“.shtml”扩展名,它在大多数操作系统上默认由浏览器打开,并没有被广泛使用。

我们现在遇到了麻烦,让 MacOS 明白我们的 .shtml 文件不同于常规的 .html 文件,应该用我们的应用程序打开。问题是 MacOS 已经将 .shtml 文件注册为“public.html”。即使我使用 UTTypeIdentifier“com.example.shtml”和 UTTypeTagSpecification 的“shtml”的 public.filename-extension 定义了一个 UTI,系统总是将 .shtml 文件检测为“public.html”而不是“com.example.shtml” ,即使我将 UTTypeConformsTo 设置为 'public.html'...

至少可以说,有关操作系统用于检测系统定义的 UTI 的启发式方法的文档很少,因此我找不到如何将我的文件更改为不被检测为 public.html。欢迎任何帮助或正确方向的指示。谢谢!

【问题讨论】:

    标签: macos


    【解决方案1】:

    【讨论】:

    • 也许我不是很清楚。问题是系统为“.html”和“.shtml”扩展定义了一个UTI(public.html),并且无论我做什么“.shtml”文件都被检测为“public.html”而不是我的UTI。
    • 您可以在 /System/Library/CoreServices/CoreTypes.bundle/Contents/Info.plist 上覆盖
    • 谢谢,很高兴知道这个文件的位置!但是,由于 SIP,即使在较新版本的 MacOS 上的根目录下也无法编辑文件...
    【解决方案2】:

    不幸的是,这是不可能的,因为 macOS 添加了 SIP,它可以防止对系统定义的 UTI 进行任何修改,而无需在 SIP 停用的情况下重新启动。我的建议是将您的应用程序设置为 public.html 的默认值,并将任何不符合您要求的文件重定向到默认浏览器。

    【讨论】:

      猜你喜欢
      • 2015-04-30
      • 2012-03-16
      • 2012-12-07
      • 2013-01-19
      • 1970-01-01
      • 1970-01-01
      • 2012-04-30
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多