Недостатки создания приложения COCOA только для фона в качестве демона запуска?
Существуют ли недостатки создания фонового приложения COCOA без графического интерфейса и запуска его в качестве демона запуска. Это будет использовать:
import <Foundation/Foundation.h>
import <AppKit/AppKit.h>
import <CoreData/CoreData.h>
Основное преимущество использования этого средства, а не создания инструмента командной строки jective-C, заключается в том, что он предлагает неявный цикл выполнения с преимуществами, включая четко определенные функции обратного вызова, когда приложение завершает запуск или во время завершения. Это должно быть явно реализовано в приложении командной строки.
Есть ли недостатки, такие как нарушение функциональности? Будет ли запуск демона отложен?
1 ответ
Для демона есть серьезные недостатки использования любой не-безопасной среды. Из Технической ноты TN2083: Демоны и агенты - Многослойные структуры:
Слоистые рамки
Большая часть функциональности Mac OS X реализована на больших системных платформах. Многие из этих структур используют службы на основе Mach, которые они ищут с помощью службы начальной загрузки. Это может вызвать всевозможные проблемы, если вы вызываете их из программы, которая ссылается на неправильное пространство имен начальной загрузки.
Решение этой проблемы от Apple заключается в разделении на слои: мы разделяем наши структуры на уровни и для каждого уровня решаем, поддерживает ли этот уровень операции в глобальном пространстве имен начальной загрузки. Основное правило заключается в том, что все в CoreServices и ниже (включая System, IOKit, System Configuration, Foundation) должно работать в любом пространстве имен начальной загрузки (это защитные структуры демона), тогда как для всего, что выше CoreServices (включая ApplicationServices, Carbon и AppKit), требуется пространство имен начальной загрузки графического интерфейса пользователя....
Таким образом, конкретные рекомендации:
При написании демона, используйте только ссылки на безопасные для демонов фреймворки (см. Ссылка на фреймворк).
При написании агента с графическим интерфейсом вы можете связать с любым фреймворком.
Если вы пишете демон и вам необходимо связать его с фреймворком, который не безопасен для демона, рассмотрите возможность разделения вашего кода на компонент демона и компонент агента. Если это невозможно, помните о потенциальных проблемах, связанных с привязкой демона к небезопасным средам (как описано в следующем разделе).
Жизнь опасно
Если ваш демон использует фреймворки, которые не являются безопасными для демона, вы можете столкнуться с множеством проблем.
Некоторые фреймворки дают сбой во время загрузки. Таким образом, у инфраструктуры есть подпрограмма инициализации, которая предполагает, что она работает в контексте сеанса, и завершается ошибкой, если это не так.
Эта проблема редко встречается в современных системах, потому что большинство фреймворков инициализируются лениво.
Если платформа не дает сбоя во время загрузки, вы все равно можете столкнуться с проблемами при вызове различных подпрограмм из этой платформы.
Рутина может провалиться. Например, подпрограмма может молча завершиться сбоем или распечатать сообщение в stderr, или, возможно, вернуть значимый код ошибки.
Рутина может провалиться враждебно. Например, фреймворки GUI довольно часто вызывают abort, если они запускаются демоном!
Подпрограмма может работать, даже если ее структура не является официально безопасной для демонов.
Процедура может вести себя по-разному в зависимости от своих входных параметров. Например, процедура распаковки изображений может работать для некоторых типов изображений и не работать для других.
Поведение любой данной платформы и подпрограмм в этой среде может меняться от выпуска к выпуску.
В результате, если ваш демон связывается с фреймворком, который не является безопасным для демона, вы не можете предсказать, как он будет себя вести в целом. Он может работать на вашем компьютере, но не работать на компьютере другого пользователя, или не работать в будущем выпуске системы, или не работать с другими входными данными. Вы живете в опасности!
Прочитайте весь technote для полных деталей.