Один из способов состоял бы в том, чтобы ядро приложения Erlang было демоном, с которым интерфейс Cocoa взаимодействует через сокет домена Unix, используя какой-то простой протокол, который вы разработали.
Использование сокета Unix-домена означает, что демон Erlang может быть запущен по требованию launchd
, а клиент Cocoa может найти путь к сокету для использования через переменную среды. Это делает рандеву между приложением и демоном тривиальным, а также упрощает разработку нескольких внешних интерфейсов (или, возможно, каркаса, связывающего связь с демоном).
Система Mac OS X launchd
действительно крутая в этом смысле. Если вы укажете, что задание должно запускаться по требованию через безопасный сокет домена Unix, launchd
фактически создаст сам сокет с соответствующими разрешениями и объявит свое местоположение через переменную среды, указанную в списке свойств задания. При запуске задания на самом деле передается файловый дескриптор сокету launchd
при простой регистрации.
В конечном итоге это означает, что весь процесс внешнего интерфейса, открывающего сокет для связи с демоном, launchd
запуска демона, и демон, отвечающий на связь, может быть безопасным, даже если внешний интерфейс и демон запускается с разными уровнями привилегий.