O porquê e o como criar um cão de guarda no cacau / Objective-C

Feliz segunda-feira a todos!

Aqui está a minha situação. Qualquer assistência muito apreciada!

Eu criei um executável que, quando instalado, é colocado na pasta Launch Agents da máquina. Em teoria, ele deve ser executado perpetuamente, coletando dados a cada segundo. Pode parar quando a máquina está em suspensão, mas reiniciar quando o computador for reativado.

Aqui está o meu problema:às vezes o programa para espontaneamente, geralmente após alguns dias de corrida. Se alguém reiniciar o computador, o programa reiniciará e novamente será executado por algum tempo antes que o mesmo problema ocorra.

Não tenho idéia do motivo desse problema, mas um amigo me disse que eu poderia criar um 'cão de guarda' que a cada minuto verificaria se meu executável está sendo executado. Caso contrário, o watchdog reiniciará o executável.

Alguma dica de como fazer isso? Meus aplicativos são escritos em Objective-C e Cocoa e executados em Macs.

Muito obrigado!

EDIT 1

Vou explicar como o aplicativo funciona da melhor maneira possível. É basicamente uma coleção de métodos escritos em C e Objetivo C que consulta informações sobre o sistema a cada segundo:

bytes transmitidosatividade de tecladoatividade do mouseporcentagem de disco rígido usadoprocesso com foco no teclado

... etc

Isso é feito usando APIs de baixo nível fornecidas pelo site da Apple Developer. Ele grava as informações em um arquivo a cada segundo. A cada hora, o arquivo é compactado e um novo arquivo é criado.

Por favor, pergunte se são necessários mais esclarecimentos :)

EDIT 2

Para quem está se perguntando, aqui está o arquivo 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>

Obrigado novamente....

questionAnswers(1)

yourAnswerToTheQuestion