【问题标题】:Mac OSX: folder extension association programmaticallyMac OSX:以编程方式进行文件夹扩展关联
【发布时间】:2013-06-26 05:07:58
【问题描述】:

是否可以在 Mac 上注册一个 folder 扩展以使用特定应用程序打开(例如 .app 文件夹以特殊方式运行)?如果有可能,那怎么做? 我正在寻找与此类似的解决方案:related question,仅适用于文件夹,不适用于文件。

我查看了 UTI UTIs 的引用,但我没有找到任何看起来合适的标识符(例如 public.folder-extension 之类的东西)。

有可能做到这一点吗?在 GUI 上,我也没有看到任何方法(对于具有特定扩展名的文件夹,没有“打开方式...”选项)。 [重要提示:我不想在 GUI 上这样做,这只是说明为什么我认为这可能是不可能的。]

【问题讨论】:

    标签: macos associations


    【解决方案1】:

    我找到了一种适合我的方法(以防其他人也遇到此问题):

    1. 在应用程序包的Info.plist文件中添加如下sn-p:

      <key>CFBundleDocumentTypes</key>
      <array>
          <dict>
             <key>CFBundleTypeExtensions</key>
             <array>
                 <string>ext1</string>
                 <string>ext2</string>
             </array>
             <key>CFBundleTypeIconFile</key>
             <string>documentlogo.icns</string>
             <key>CFBundleTypeName</key>
             <string>My Bundle Type Name</string>
             <key>CFBundleTypeRole</key>
             <string>Viewer</string>
             <key>LSTypeIsPackage</key>
             <true />
          </dict>
      </array>
      
    2. 将 ext1、ext2 替换为您希望支持的扩展,documentlogo.icns 替换为文档图标的名称(必须位于 Application Bundle.app/Contents/Resources/documentlogo.icns) , 和 My Bundle Type Name 并为您的包提供一个合理的名称)

    3. 在此示例中,任何要被识别为应用程序包的文件夹都必须具有扩展名 ext1 或 ext2,并且必须包含一个 Contents/PkgInfo 文件,其中包含 8 个“?”。所有其他内容由您决定。

    我的解决方案基于这些来源,Document PackagesInformation Property List Key ReferenceDocument Packages Examples

    如果有更好/更有效的方法,请纠正我,因为我仍然有一些疑问(例如:如我所见,这也适用于普通文件,而不仅仅是包。那我们为什么需要LaunchServices 方式也是?应用程序包是默认的,而 LaunchServices 是每个用户自定义的方式吗?)

    【讨论】:

      【解决方案2】:

      我找到了如何手动执行此操作,我将在此处列出以供其他人查找,并且以编程方式执行此操作,您可以将此信息与答案结合起来:https://superuser.com/questions/273756/how-to-change-default-app-for-all-files-of-particular-file-type-through-terminal

      您必须安装 XCode。打开终端或 iTerm 并:

      cd ~/Library/Preferences
      open com.apple.LaunchServices.plist
      

      添加或覆盖以下条目(使用 Cmd+F 搜索“文件夹”):

      LSHandlerContentType String public.folder
      LSHandlerRoleAll String com.somecompany.someproduct
      

      用现有名称替换 com.somecompany.someproduct - 您可以在同一目录中看到这些 (~/Library/Preferences) - 它们以 .plist 结尾 - 例如com.macromates.textmatecom.sublimetext.2

      如果您使用 Quicksilver,则另一种选择:为“当前选择(代理对象)-> 打开方式-> 您的应用程序”添加自定义键盘触发器。我发现,每当您在 Finder 中的文件夹上使用新创建的键盘快捷键时,这也会创建(并大力重新创建)上述关联。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-02-27
        • 2015-03-26
        • 2013-04-03
        • 1970-01-01
        • 1970-01-01
        • 2016-08-24
        • 1970-01-01
        • 2016-08-30
        相关资源
        最近更新 更多