如何使OS X识别新的文件扩展名?


18

在Finder.app中,您可以点击Enter以编辑当前所选文件或文件夹的名称。

OS X将仅自动选择文件名部分,而不选择扩展名:

这非常有用,因为这样您就可以开始输入新名称,而不必担心意外更改文件扩展名。

但是,这似乎仅适用于“已知”文件类型。如果尝试使用未知扩展名,则会选择整个文件名(包括扩展名):

我尝试映射可以.bar通过+ I→“全部更改” 打开所有文件的应用程序,但仍然出现上述行为。

“已知”文件类型列表存储在哪里?有没有一种方法可以使OS X识别新文件类型?

Answers:


7

SuperUser帖子对我有用

您需要浏览至要用于打开这些文件的应用程序,然后编辑其捆绑包。右键单击该应用程序以处理这些文件扩展名,然后选择显示包内容。导航至Contents,然后进行编辑Info.plist。您可能需要属性列表编辑器,它是Apple开发人员工具的一部分。如果幸运的话,它采用XML格式。编辑此文件,CFBundleDocumentTypes并为所需的扩展名添加一个条目。

我使用TextEdit作为打开.bar文件的默认应用程序。我唯一做的不同的是将TextEdit中使用的XML更改Info.plist为:

    <dict>
        <key>CFBundleTypeExtensions</key>
        <array>
            <string>bar</string>
        </array>
        <key>CFBundleTypeIconFile</key>
        <string>BarDocument</string>
        <key>CFBundleTypeName</key>
        <string>Bar Document</string>
        <key>CFBundleTypeRole</key>
        <string>Document</string>
    </dict>

…然后我使用LSRefresh.app刷新了启动服务数据库中的TextEdit。然后,它按照您的建议进行了工作,尽管它可能会破坏Lion上Textedit(和任何其他已签名应用程序)的代码签名。


1
CFBundleTypeExtensions是遗留密钥,在OS X 10.5中已弃用。自2007年以来最好的方法是宣布新的尿路感染,提到这里,并在描述我的答案
TachyonVortex 2015年

6
抱歉,我不得不对此表示反对,因为这是个坏建议。篡改应用程序捆绑包不仅是不明智的做法(冒着怪异的副作用甚至更糟的风险),而且还可能完全破坏应用程序的副本。您注意到此过程确实使代码签名无效,但没有指出在支持沙箱(10.7+)的macOS版本上,无法以任何方式启动或使用具有无效签名的沙盒应用程序
鲍勃(Bob)

1
@binarybob,我不明白的是,为什么不简单地右键单击文件xxx.bar并选择open with
Pacerier's

@Bob,什么是应用程式拳击?
Pacerier '17

@Pacerier App沙箱是macOS的一项安全功能,它完全隔离了应用程序与系统之间的相互隔离,并提供了非常简短的“权利”列表,其中详细列出了允许执行的应用程序。该权利列表嵌入在代码签名中,并在每次运行应用程序时进行验证,以确保应用程序的功能不会因意外或攻击而被篡改。有关技术说明,请参阅此文档
鲍勃,

27

UTI和发射服务

“已知”文件类型列表存储在哪里?

“文件类型”的正式术语是 统一类型标识符 (UTI),UTI的数据库由Launch Services维护 。

使用终端,您可以使用该lsregister工具查看Launch Services数据库的内容,该工具存储在:

/System/Library/Frameworks/CoreServices.framework/Frameworks/LaunchServices.framework/Support/lsregister

不必每次都指定要运行的长路径lsregister,而是可以将其目录临时添加到您的PATH

PATH=/System/Library/Frameworks/CoreServices.framework/Frameworks/LaunchServices.framework/Support:"$PATH"

然后lsregister只需输入以下内容即可运行:

lsregister

要查看启动服务数据库的内容:

lsregister -dump

声明新的UTI

有没有一种方法可以使OS X识别新文件类型?

苹果公司的这篇文章 “声明新的统一类型标识符”提供了有关如何执行此操作的有用信息。这是完整的过程:

1.创建一个虚拟应用程序

创建一个虚拟应用程序以注册启动服务:

  • 打开AppleScript编辑器(位于OS X的“ 实用工具”文件夹中)。
  • 将新的空脚本保存在某处(例如:在桌面上),然后将其文件格式设置为Application

2.打开其Info.plist文件

  • 在Finder中找到新的虚拟应用程序。
  • 右键单击它,然后从弹出菜单中选择“ 显示包内容 ”。
  • 打开其目录文件夹。
  • 在文本编辑器(例如:TextEdit)中打开Info.plist文件。

3.添加新的UTI

有两个键可供选择:

  • UTExportedTypeDeclarations –用于您自己的自定义文件扩展名。
  • UTImportedTypeDeclarations –对于已存在但OS X无法识别的文件扩展名。

选择最适合您需要的钥匙。

然后在Info.plist文件的最后两行(</dict></plist>)之前,添加以下代码:

<key>KEY</key>
<array>
    <dict>
        <key>UTTypeIdentifier</key>
        <string>IDENTIFIER</string>
        <key>UTTypeTagSpecification</key>
        <dict>
            <key>public.filename-extension</key>
            <array>
                <string>EXTENSION</string>
            </array>
        </dict>
    </dict>
</array>

进行以下更改:

  • 替换KEY为您选择的键(UTExportedTypeDeclarationsUTImportedTypeDeclarations)。
  • 替换IDENTIFIER为合适的反向DNS标识符:
    • 出口–像 com.mycompany.mytype
    • 导入–对于id SoftwareDoom WAD格式,将使用合适的标识符com.idsoftware.wad
  • 替换EXTENSION为文件扩展名(不带前导点),例如:wad

这是启动服务接受新的UTI所需的最低代码。您还可以添加以下可选属性:

  • UTTypeConformsTo –请参阅下面的附录。
  • UTTypeDescription –用户可见的描述,将显示在Finder中。
  • UTTypeIconFile–如果将Apple Icon Image 文件添加到虚拟应用程序的Contents / Resources文件夹中,并在此属性中添加其文件名,则具有新文件名扩展名的文件将使用此图标。
  • UTTypeReferenceURL –描述此类型的参考文档的URL。

这是显示所有可选属性的完整示例:

<key>UTImportedTypeDeclarations</key>
<array>
    <dict>
        <key>UTTypeIdentifier</key>
        <string>com.idsoftware.wad</string>
        <key>UTTypeTagSpecification</key>
        <dict>
            <key>public.filename-extension</key>
            <array>
                <string>wad</string>
            </array>
        </dict>
        <key>UTTypeConformsTo</key>
        <array>
            <string>public.data</string>
        </array>
        <key>UTTypeDescription</key>
        <string>Doom WAD file</string>
        <key>UTTypeIconFile</key>
        <string>DoomWAD.icns</string>
        <key>UTTypeReferenceURL</key>
        <string>http://en.wikipedia.org/wiki/Doom_WAD</string>
    </dict>
</array>

4.在启动服务中注册新的UTI

在终端中运行以下命令:

lsregister <PATH_TO_APP>

<PATH_TO_APP>您的虚拟应用程序的路径替换,例如:

lsregister ~/Desktop/MyDummyApp.app

如果现在创建带有新文件扩展名的文件,然后在Finder中选择它并单击Enter,则Finder应该自动仅选择文件名部分,而不选择扩展名。

如果您查看启动服务数据库的内容:

lsregister -dump

您应该找到列出的新UTI:

type    id:            50364
        bindableKey:   12608
        generation:    1
        uti:           com.idsoftware.wad
        description:   Doom WAD file
        flags:         imported  active  apple-internal  untrusted
        icon:          DoomWAD.icns
        conforms to:   public.data
        tags:          .wad

如果以后要注销新的UTI,请将-u选项传递给lsregister

lsregister -u ~/Desktop/MyDummyApp.app

附录:UTI层次结构和一致性

OS X声明了此处列出的UTI的层次结构: 系统声明的统一类型标识符

这是层次结构中的一些UTI:

  • public.content
    • public.text
      • public.rtf
      • public.html
      • public.xml
      • public.plain-text
      • public.source-code
        • public.c-source
        • public.c-header
        • com.sun.java-source
    • public.image
      • public.jpeg
      • public.tiff
      • public.png
    • public.audiovisual-content
      • public.movie
      • public.audio

每个UTI“符合”其父UTI:

例如,public.html定义HTML文本的UTI 符合基本文本标识符public.text。在这种情况下,一致性可使可以打开常规文本文件的应用程序将HTML文件标识为也可以打开的HTML文件。(参考

创建新的UTI时,最好将UTTypeConformsTo属性设置为现有的UTI之一。

例如,如果你的新UTI是一种类型的源代码,那么你应该设置的UTTypeConformsTo属性public.source-code,以便它可以通过可以打开任何应用程序打开 public.source-codepublic.plain-textpublic.text文件。


0

按着这些次序:

  1. 选择扩展名无法识别的文件(例如.txt)。

  2. 右键单击并选择Get Info或使用键盘快捷键Commandi显示信息窗口。

  3. 单击“ 打开方式:”旁边的公开指示器以打开详细视图。从下拉列表中选择所需的应用。这会将文档与所选的应用程序关联(例如TextEdit)。

  4. 单击全部更改...按钮。它首先会显示一个对话框,要求您确认意图,并将所有.txt文档链接到使用TextEdit打开,并在单击文档名称的return时保留未选择的扩展名。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.