Может ли кто-нибудь предложить подход к проектированию, который позволил бы моему приложению Какао (здесь я назову его «MyApp») создавать расписание для регулярного перезапуска и выполнения некоторых (длительных) задач? Ниже приведены идеи, о которых я думал до сих пор. Я новичок в Objective-C, Какао и Max OS X, поэтому я не знаю, насколько сложен или выполним каждый из вариантов.
- MyApp программно создает рабочий процесс Automator для запуска MyApp. Затем MyApp программно создает повторяющееся событие iCal , которое запускает этот рабочий процесс Automator. Я не знаю, возможно ли это, но это звучит как много кода и подвержено ошибкам. Это также позволяет пользователю очень просто удалить событие iCal, что означает, что MyApp должен быть в состоянии справиться с этим вариантом использования.
- MyApp программно создает элемент launchd . Однако я прочитал, что Launchd не может запустить приложение Какао с графическим интерфейсом (например, "launchd and Cocoa apps?" ). Это создает проблему, заключающуюся в том, что пользователь должен иметь возможность видеть графический интерфейс, чтобы он / она мог отменить / закрыть задачу. Я предполагаю, что одним из способов было бы запустить для запуска демон, который затем запускает MyApp?
- Вместо демона, открывающего MyApp, у демона фактически есть логика для запуска самой задачи. Я бы выделил некоторые задачи в MyApp в каркас. MyApp будет использовать эту платформу. Я бы создал инструмент командной строки, который использует ту же платформу, а launchd вызвал бы этот инструмент командной строки. Однако отсутствие графического интерфейса будет проблемой. Кроме того, инструмент командной строки должен был бы иметь доступ к тому же репозиторию Core Data, который использует MyApp, и я думаю, что каждый репозиторий Core Data является частным для приложения, для которого он был создан?
Расписание должно быть создано автоматически для каждого уникального пользователя приложения. Например, всплывающее сообщение с просьбой создать элемент iCal было бы неприемлемым.
Если пользователь удаляет MyApp, мне нужно очистить расписание (или расписание s , если более одного пользователя имеет «учетную запись» в MyApp) для очистки .