El por qué y el cómo crear un perro guardián en cacao / Objective-C

¡Feliz lunes a todos!

Aquí está mi situación. Cualquier ayuda muy apreciada!

He creado un ejecutable que, cuando se instala, se coloca en la carpeta Agentes de lanzamiento de la máquina. En teoría, debería ejecutarse perpetuamente, recolectando datos cada segundo. Puede detenerse cuando la máquina está dormida, pero reiniciarse cuando la computadora se reactiva.

Aquí está mi problema:a veces el programa se detiene espontáneamente, generalmente después de un par de días de carrera. Si uno reinicia la computadora, el programa se reinicia y vuelve a ejecutarse durante un tiempo antes de que ocurra el mismo problema.

No tengo idea de la razón de este problema, pero un amigo me dijo que podía crear un 'perro guardián' que cada minuto verificaría si mi ejecutable se está ejecutando. Si no es así, entonces el perro guardián reiniciará el ejecutable.

¿Alguna sugerencia sobre cómo hacer esto? Mis aplicaciones están escritas en Objective-C y Cocoa y se ejecutan en Mac.

¡Muchas gracias!

EDITAR 1

Explicaré cómo funciona la aplicación lo mejor que pueda. Básicamente es una colección de métodos escritos en C y Objetivo C que consulta información sobre el sistema cada segundo:

-bytes transmitidos-actividad de teclado--actividad del ratón--porcentaje de disco duro usado-proceso que tiene foco de teclado

... etc.

Lo hace utilizando API de bajo nivel proporcionadas por el sitio web de desarrolladores de Apple. Escribe la información en un archivo cada segundo. Cada hora, el archivo se comprime y se crea un nuevo archivo.

Por favor pregunte si se necesita más aclaración :)

EDITAR 2

Para aquellos que se preguntan, aquí está el archivo 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>

Gracias de nuevo....

Respuestas a la pregunta(1)

Su respuesta a la pregunta