我正在尝试使用它自己的图标创建一个文档包,macOS 将其视为文件,并且您必须选择“显示包内容”才能将其作为文件夹打开。我添加了一个文档类型,并且 NSDocument::initWithContentsOfURL 在传递与 UTI 匹配的 ofType:"Family Diagram" 时正确打开它。
\n\n但扩展名为 .fd 的文件夹上未设置图标,macOS 仍将它们视为文件夹。我将 LSTypeIsPackage 设置为 true。
\n\n这是我的 info.plist:
\n\n<?xml version="1.0" encoding="UTF-8"?>\n <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">\n <plist version="1.0">\n <dict>\n <key>BuildMachineOSBuild</key>\n <string>17A362a</string>\n <key>CFBundleDevelopmentRegion</key>\n <string>English</string>\n <key>CFBundleDocumentTypes</key>\n <array>\n <dict>\n <key>CFBundleTypeExtensions</key>\n <array>\n <string>fd</string>\n </array>\n <key>CFBundleTypeIconFile</key>\n <string>PKDiagram-Document</string>\n <key>CFBundleTypeMIMETypes</key>\n <array>\n <string>application/x-fd</string>\n </array>\n <key>CFBundleTypeName</key>\n <string>Family Diagram</string>\n <key>CFBundleTypeOSTypes</key>\n <array>\n <string>FD</string>\n </array>\n <key>CFBundleTypeRole</key>\n <string>Editor</string>\n <key>LSHandlerRank</key>\n <string>Default</string>\n <key>LSTypeIsPackage</key>\n <true/>\n <key>NSDocumentClass</key>\n <string>DiagramDocument</string>\n </dict>\n </array>\n <key>CFBundleExecutable</key>\n <string>Family Diagram</string>\n <key>CFBundleGetInfoString</key>\n <string>Created by Vedan\xc4\x81 Media</string>\n <key>CFBundleIconFile</key>\n <string>PKDiagram-Filled.icns</string>\n <key>CFBundleIdentifier</key>\n <string>com.vedanamedia.familydiagrammac</string>\n <key>CFBundleInfoDictionaryVersion</key>\n <string>6.0</string>\n <key>CFBundlePackageType</key>\n <string>APPL</string>\n <key>CFBundleSignature</key>\n <string>????</string>\n <key>CFBundleSupportedPlatforms</key>\n <array>\n <string>MacOSX</string>\n </array>\n <key>DTCompiler</key>\n <string>com.apple.compilers.llvm.clang.1_0</string>\n <key>DTPlatformBuild</key>\n <string>9A235</string>\n <key>DTPlatformVersion</key>\n <string>GM</string>\n <key>DTSDKBuild</key>\n <string>17A360</string>\n <key>DTSDKName</key>\n <string>macosx10.13</string>\n <key>DTXcode</key>\n <string>0900</string>\n <key>DTXcodeBuild</key>\n <string>9A235</string>\n <key>LSApplicationCategoryType</key>\n <string>public.app-category.healthcare-fitness</string>\n <key>NSHighResolutionCapable</key>\n <true/>\n <key>NSPrincipalClass</key>\n <string>NSApplication</string>\n </dict>\n </plist>\nRun Code Online (Sandbox Code Playgroud)\n\n这是 Xcode 中 UTI 的屏幕截图,请注意该图标已被识别:
\n\n\n结果你还必须将它添加到导出类型中,并且它必须符合 com.apple.package。然后,您必须在 Info.plist 中修改 CBundleVersion 编号,以使系统重新读取 UTI 设置。这将可靠地启用和禁用您的 UTI 包被视为文件而不是目录。
注意:这也改变了 NSMetadataQuery 处理文件的方式,因此如果您依赖 NSMetadataQuery 的递归结果,则应该通过在 NSDocument 中实现 fileWrapperOfType 和 readFromFileWrapper 来替换。
我不记得在苹果文档的任何地方看到过这一点的明确说明。
| 归档时间: |
|
| 查看次数: |
551 次 |
| 最近记录: |