Что касается Mac OS El Capitan, похоже, что вы не должны получать положение значка с помощью API-интерфейса Accessibility. Дело в том, что значок не находится в иерархии объектов специальных возможностей приложения - его можно найти в иерархии системного приложения Dock. Приложение в песочнице не должно обращаться к объектам специальных возможностей других приложений.
Код в утвержденном ответе не выдает никаких предупреждений о демоне sandboxd
в консоли, похоже, он не нарушает никаких правил. Создает объект доступности верхнего уровня с функцией AXUIElementCreateApplication
. В документации говорится, что это:
Creates and returns the top-level accessibility object for the
application with the specified process ID.
К сожалению, этот объект верхнего уровня не является предком иконки Dock.
Я попытался запустить код, и он вычисляет позицию пункта главного меню первого приложения (который имеет тот же заголовок, что и само приложение). Сравнение происходит в этой строке:
if ([titleValue isEqual:appName]) {
Таким образом, вывод всегда был одинаковым для моего приложения:
position: (45.000000, 0.000000)
Попытка получить доступ к объекту доступности другого приложения вызвала предупреждение в консоли. Я предполагаю, что нужно найти другой способ вычисления положения иконки.