【问题标题】:Dropping files on application icon in Dock将文件拖放到 Dock 中的应用程序图标上
【发布时间】: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


【解决方案1】:

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

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

【讨论】:

    猜你喜欢
    • 2016-02-20
    • 2011-01-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多