¿Cómo obtener información sobre la memoria gratuita y los procesos en ejecución en una aplicación aprobada por App Store? (¡Sí hay una!)

Hay una aplicación llamada “Monitor de actividad táctil” en la App Store, que muestra los procesos en segundo plano, así como la memoria libre.

Entonces, DEBE haber una API pública para acceder a esta información. La evidencia:

evidencia

evidencia

Ya estoy buscando días pero no puedo encontrar ningún buen punto de partida. ¿Cómo puede esta aplicación descubrir todo esto sin jailbreaking / hacking / etc.?

Hasta hace poco, estaba seguro de que algo como esto es absolutamente imposible en iOS.

Encontré este fragmento de código:

- (NSArray *)runningProcesses { int mib[4] = {CTL_KERN, KERN_PROC, KERN_PROC_ALL, 0}; size_t miblen = 4; size_t size; int st = sysctl(mib, miblen, NULL, &size, NULL, 0); struct kinfo_proc * process = NULL; struct kinfo_proc * newprocess = NULL; do { size += size / 10; newprocess = realloc(process, size); if (!newprocess){ if (process){ free(process); } return nil; } process = newprocess; st = sysctl(mib, miblen, process, &size, NULL, 0); } while (st == -1 && errno == ENOMEM); if (st == 0){ if (size % sizeof(struct kinfo_proc) == 0){ int nprocess = size / sizeof(struct kinfo_proc); if (nprocess){ NSMutableArray * array = [[NSMutableArray alloc] init]; for (int i = nprocess - 1; i >= 0; i--){ NSString * processID = [[NSString alloc] initWithFormat:@"%d", process[i].kp_proc.p_pid]; NSString * processName = [[NSString alloc] initWithFormat:@"%s", process[i].kp_proc.p_comm]; NSDictionary * dict = [[NSDictionary alloc] initWithObjects:[NSArray arrayWithObjects:processID, processName, nil] forKeys:[NSArray arrayWithObjects:@"ProcessID", @"ProcessName", nil]]; [processID release]; [processName release]; [array addObject:dict]; [dict release]; } free(process); return [array autorelease]; } } } return nil; } 

Pero no puedo hacer que funcione en el iPhone. Xcode no conoce estos símbolos: CTL_KERN, KERN_PROC, KERN_PROC_ALL

Entonces, por supuesto, debo importar un archivo de cabecera o una biblioteca. ¿Alguien sabe a dónde pertenecen y cómo deben importarse los encabezados para que esto funcione?

Funciona de maravilla:

 #import  

sysctl ya no es accesible para aplicaciones de iOS 9 con espacio aislado.

De WWDC 2015 session 703 Privacidad y su aplicación:

En iOS 9, el entorno limitado ahora impide que un proceso acceda a los valores kern.proc, kern.procargs y kern.procargs2 para otros procesos

y

Las aplicaciones iOS no tienen permiso para ver qué otras aplicaciones se están ejecutando

Entonces, incluso si encuentra una forma, es probable que sea rechazado en la App Store.

https://developer.apple.com/videos/play/wwdc2015-703/