Как приложение Mac может определить метод, используемый для его запуска? - PullRequest
3 голосов
/ 28 апреля 2011

У меня есть приложение Mac OS X, которое также является обработчиком протокола (как, например, Safari - обработчик протокола для протоколов HTTP и HTTPS).Поэтому, когда пользователь щелкает ссылку вида myscheme: // some-kind-of-info в любом приложении, мое приложение запускается для обработки ссылки.

Теперь мне нужно иметь возможность определить,приложение запускалось по такой ссылке, или если оно запускалось любым другим способом.Другими словами, он запускался любым способом, кроме щелчка по ссылке.(В этих случаях я хочу, чтобы приложение оставалось открытым, но если оно было запущено по ссылке, оно должно выйти и игнорировать ссылку. Таким образом, оно работает только тогда, когда оно уже запущено.)

Есть ли какой-то путь внутриприложение при запуске, чтобы проанализировать и выяснить, что оно было запущено стандартным методом, а не событием AppleScript GetURL?Я хотел бы выяснить это с помощью документированного метода, а не, например, просто чтобы мое приложение открывало эти ссылки только после того, как оно работало в течение полсекунды.

1 Ответ

3 голосов
/ 28 апреля 2011

Вы можете зарегистрировать обработчик для каждого из возможных событий Apple, которые вы получите при запуске, и запишите, какой из них вы получите первым.

  • Если приложение запускается без документов, выkAEOpenApplication.
  • Если он запущен с документами, вы получите kAEOpenDocuments (или kAEPrintDocuments).
  • Если он запущен с URL-адресом, то (очевидно)вы получите kAEGetURL.

Также есть kAEOpenContents, но я не смог легко вызвать его в моем тестовом приложении;это, вероятно, стоит поддержать, несмотря ни на что.

Как приложения какао обрабатывают события Apple документирует все эти вещи.

Хотя есть одна ошибка;он говорит, что «запуск» AppleScript отправит kAEOpenApplication.Не будет, будет отправлено ascr/noop (kASAppleScriptSuite / kASLaunchEvent, определено в ASRegistry.h).Я не смог заставить обычный механизм обработчика событий Какао перехватить это событие, поэтому вам, возможно, придется еще немного покопаться там.

Один из способов проверить, отправлено ли событие при запуске, - это зарегистрировать событие.обработчики в методе делегата вашего приложения applicationWillFinishLaunching:;они должны доставить к моменту вызова applicationDidFinishLaunching:.С помощью этого метода вы можете только проверить на kAEGetURL.

...