Удаление файлов на значке приложения в Dock - PullRequest
1 голос
/ 01 июля 2010

Я уже несколько дней бьюсь об стену по этому вопросу и никак не могу понять, что я делаю неправильно (или, если это какая-то ошибка):

У меня есть пользовательское приложение Mac (на Java, если это имеет значение). По сути, он принимает пакет документов определенного типа, обрабатывает его и отправляет результаты на сервер. У меня все работает, кроме одного варианта использования, когда пользователь перетаскивает «файл» на значок дока приложения.

Все, что я прочитал до сих пор, похоже, указывает на то, что для сброса на иконке Mac Dock используются те же Launch Services, которые использует Finder. И, тем не менее, открытие каталога «Приложения» и перетаскивание на него там приложения работает, тогда как перетаскивание на значок приложения в Dock ничего не делает.

Итак, некоторые особенности того, что я пробовал до сих пор:

  • Приложение обрабатывает документы с расширением * .foo, которые являются Пакетами документов (т. Е. Щелчок по нажатию на кнопку opt дает параметр «Показать содержимое пакета»)
  • Документ имеет UTI org.example.foo, который соответствует UTI com.apple.package и public.composite-content (вся информация скопирована из приложения-владельца Info.plist Ключ экспортированного типа UTIs)
  • Info.plist объявляет этот тип документа в UTI импортированного типа (ключ UTImportedTypeDeclarations)
  • Также в Info.plist UTI объявлен в типах документов (ключ CFBundleDocumentTypes)
    • CFBundleTypeExtensions включает «foo»
    • CFBundleTypeOSTypes установлен в "****"

Cmd-Opt-drop на значке Dock (чтобы вызвать сброс) ничего не делает. Удаление в Finder работает точно так, как и ожидалось. Так что, похоже, это проблема с падением иконки Dock.

Есть идеи, что менять?

1 Ответ

2 голосов
/ 02 июля 2010

Маз поразил суть проблемы, я думаю.Приложение настроено для работы в Mac OS X 10.5 или 10.6, и используемые мной API-интерфейсы Java (com.apple.eawt. *) Выглядят устаревшими без замен;что, вероятно, объясняет, почему он в основном работает, но не работает раздражающими способами.

Кажется, что реальное решение будет включать в себя обратный инжиниринг исполняемого файла JavaApplicationStub для работы с более новыми API и создание JNI-хуков, чтобыправильные события передаются моему приложению.

...