Почему и как создать сторожевой таймер в какао / Objective-C

Всем счастливого понедельника!

Вот моя ситуация. Любая помощь с благодарностью!

Я создал исполняемый файл, который после установки помещается в папку «Агенты запуска» на машине. Теоретически он должен работать постоянно, собирая данные каждую секунду. Он может остановиться, когда машина спит, но перезапустить, когда компьютер снова активируется.

Вот моя проблема:иногда программа просто самопроизвольно останавливаетсяобычно после пары дней бега. Если кто-то перезагружает компьютер, то программа перезапускается и снова запускается некоторое время, прежде чем возникает та же проблема.

Я не знаю причину этой проблемы, но друг сказал мне, что я могу создать «сторожевой таймер», который каждую минуту будет проверять, работает ли мой исполняемый файл. Если это не так, сторожевой таймер перезапустит исполняемый файл.

Любые указатели относительно того, как это сделать? Мои приложения написаны на Objective-C и Cocoa и работают на Mac.

Спасибо!

РЕДАКТИРОВАТЬ 1

Я объясню, как приложение работает в меру моих возможностей. В основном это набор методов, написанных на C и Objective C, которые каждую секунду запрашивают информацию о системе:

-байт переданодеятельностьдеятельностьпроцент использования жесткого диска-процесс, который имеет фокус клавиатуры

...так далее.

Это делается с помощью API низкого уровня, предоставленного веб-сайтом Apple Developer. Он записывает информацию в файл каждую секунду. Каждый час файл архивируется и создается новый файл.

Пожалуйста, спросите, нужны ли дополнительные разъяснения :)

РЕДАКТИРОВАТЬ 2

Для тех, кому интересно, вот файл plist

 <?xml version="1.0" encoding="UTF-8"?>
 <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
 <plist version="1.0">
 <dict>
     <key>Label</key>
     <string>com.Intel</string>
     <key>OnDemand</key>
     <true/>
     <key>ProgramArguments</key>
     <array>
         <string>/Library/LaunchAgents/Contents/Intel</string>
     </array>
     <key>RunAtLoad</key>
     <true/>
 </dict>
 </plist>

Еще раз спасибо....

Ответы на вопрос(1)

Ваш ответ на вопрос