如何让macos将文档包视为文件?
Posted
技术标签:
【中文标题】如何让macos将文档包视为文件?【英文标题】:How to get macos to treat document package as a file? 【发布时间】:2017-09-23 17:49:10 【问题描述】:我正在尝试使用它自己的图标创建一个文档包,macOS 将其视为文件,并且您必须选择“显示包内容”才能将其作为文件夹打开。我添加了一个文档类型,当传递与 UTI 匹配的 ofType:"Family Diagram" 时,NSDocument::initWithContentsOfURL 会正确打开它。
但该图标未设置在扩展名为 .fd 的文件夹上,macOS 仍将它们视为文件夹。我将 LSTypeIsPackage 设置为 true。
这是我的 info.plist:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>BuildMachineOSBuild</key>
<string>17A362a</string>
<key>CFBundleDevelopmentRegion</key>
<string>English</string>
<key>CFBundleDocumentTypes</key>
<array>
<dict>
<key>CFBundleTypeExtensions</key>
<array>
<string>fd</string>
</array>
<key>CFBundleTypeIconFile</key>
<string>PKDiagram-Document</string>
<key>CFBundleTypeMIMETypes</key>
<array>
<string>application/x-fd</string>
</array>
<key>CFBundleTypeName</key>
<string>Family Diagram</string>
<key>CFBundleTypeOSTypes</key>
<array>
<string>FD</string>
</array>
<key>CFBundleTypeRole</key>
<string>Editor</string>
<key>LSHandlerRank</key>
<string>Default</string>
<key>LSTypeIsPackage</key>
<true/>
<key>NSDocumentClass</key>
<string>DiagramDocument</string>
</dict>
</array>
<key>CFBundleExecutable</key>
<string>Family Diagram</string>
<key>CFBundleGetInfoString</key>
<string>Created by Vedanā Media</string>
<key>CFBundleIconFile</key>
<string>PKDiagram-Filled.icns</string>
<key>CFBundleIdentifier</key>
<string>com.vedanamedia.familydiagrammac</string>
<key>CFBundleInfoDictionaryVersion</key>
<string>6.0</string>
<key>CFBundlePackageType</key>
<string>APPL</string>
<key>CFBundleSignature</key>
<string>????</string>
<key>CFBundleSupportedPlatforms</key>
<array>
<string>MacOSX</string>
</array>
<key>DTCompiler</key>
<string>com.apple.compilers.llvm.clang.1_0</string>
<key>DTPlatformBuild</key>
<string>9A235</string>
<key>DTPlatformVersion</key>
<string>GM</string>
<key>DTSDKBuild</key>
<string>17A360</string>
<key>DTSDKName</key>
<string>macosx10.13</string>
<key>DTXcode</key>
<string>0900</string>
<key>DTXcodeBuild</key>
<string>9A235</string>
<key>LSApplicationCategoryType</key>
<string>public.app-category.healthcare-fitness</string>
<key>NSHighResolutionCapable</key>
<true/>
<key>NSPrincipalClass</key>
<string>NSApplication</string>
</dict>
</plist>
这里是 Xcode 中 UTI 的截图,注意图标被识别:
【问题讨论】:
【参考方案1】:事实证明,您还必须将它添加到导出的类型中,并且它必须符合 com.apple.package。然后,您必须在 Info.plist 中添加 CBundleVersion 编号,以使系统重新读取 UTI 设置。这将可靠地启用和禁用您的 UTI 包被视为文件而不是目录。
注意:这也会改变 NSMetadataQuery 处理文件的方式,因此如果您依赖 NSMetadataQuery 的递归结果,则应该通过在 NSDocument 中实现 fileWrapperOfType 和 readFromFileWrapper 来替换它。
我不记得在 Apple 文档的任何地方都看到过这一点。
【讨论】:
以上是关于如何让macos将文档包视为文件?的主要内容,如果未能解决你的问题,请参考以下文章