【发布时间】:2011-03-10 09:02:07
【问题描述】:
我已经在这个问题上遇到了几天,并且我一生都无法弄清楚我做错了什么(或者这是否是某种错误):
我有一个自定义的 Mac 应用程序(如果需要,使用 Java)。它本质上采用特定类型的文档包,对其进行一些处理,然后将结果发送到服务器。除了用户将“文件”拖放到应用程序的 Dock 图标上的一个用例之外,我一切正常。
到目前为止,我所阅读的所有内容似乎都表明,拖放到 Mac Dock 图标上使用的启动服务与 Finder 使用的相同。然而,打开 Applications 目录并在其中放置应用程序是可行的,而在 Dock 中放置应用程序图标则无济于事。
所以,到目前为止我尝试过的一些细节:
- 应用程序处理带有 *.foo 扩展名的文档,它们是文档包(即,选择单击提供“显示包内容”选项)
- 文档的 UTI 为 org.example.foo,符合 UTI com.apple.package 和 public.composite-content(所有信息都从所有者应用程序 Info.plist 导出的类型 UTI 键复制)
- Info.plist 在 Imported Type UTI 中声明此文档类型(UTImportedTypeDeclarations 键)
- 同样在 Info.plist 中,UTI 在文档类型中声明(CFBundleDocumentTypes 键)
- CFBundleTypeExtensions 包含“foo”
- CFBundleTypeOSTypes 设置为“****”
Dock 图标上的 Cmd-Opt-drop(强制放置)什么也不做。删除 Finder 完全符合预期。因此,这似乎是专门放置在 Dock 图标上的问题。
有什么改变的想法吗?
【问题讨论】:
-
您使用的是什么版本的 Mac OS X?因为 Java API 在 10.4 中被弃用了developer.apple.com/mac/library/qa/qa2001/qa1342.html
-
您是否对应用程序启动时的当前工作目录做出任何假设(例如,使用数据文件的相对路径等?)?从 Dock 启动时的工作目录可能与从 Finder 启动应用程序时不同。
-
在CFBundleDocumentTypes下,是否指定了LSTypeIsPackage?
标签: macos drag-and-drop dock