删除Dock中的应用程序图标上的文件

时间:2010-06-30 21:32:25

标签: macos drag-and-drop dock

我已经在这个问题上打了几天了,并且在我的生活中不能弄清楚我做错了什么(或者如果这是某种错误):

我有一个自定义的Mac应用程序(如果重要的话,用Java编写)。它本质上采用特定类型的文档包,对其进行一些处理,并将结果发送到服务器。除了用户将“文件”放到应用程序的停靠栏图标上的一个用例外,我已经完成了所有工作。

到目前为止,我所阅读的所有内容似乎表明,放在Mac Dock图标上使用与Finder使用的相同的Launch Services。然而,打开Applications目录并删除应用程序就行了,而在Dock中的应用程序图标上执行任何操作都没有。

所以,到目前为止我尝试过的一些细节:

  • 应用程序处理带有* .foo扩展名的文档,这些文档包是文档包(即选择单击“显示包内容”选项)
  • Document包含org.example.foo的UTI,符合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图标的问题。

关于改变什么的任何想法?

1 个答案:

答案 0 :(得分:2)

我认为马兹已经触及了这个问题的核心。该应用程序设置为在Mac OS X 10.5或10.6中运行,我正在使用的Java API(com.apple.eawt。*)似乎已弃用而没有替换;这可能解释了为什么它主要起作用,但不能以烦人的方式工作。

似乎实际的解决方案将涉及对JavaApplicationStub可执行文件进行反向工程以使用较新的API,并使JNI挂钩以便将正确的事件传递给我的应用程序。