tapa suspensión reposo quitar que ponga para pantalla modo malo mac hacer evitar entre dejar cómo cerrar bloqueé apague objective-c macos

objective c - suspensión - ¿Cómo evitar programáticamente que una Mac se quede dormida?



es malo dejar en reposo la mac (3)

Aquí está la documentación oficial de Apple (incluido el fragmento de código):
Preguntas y respuestas técnicas QA1340 - ¿Cómo puedo prevenir el sueño?

Cita: Impedir dormir utilizando el kit de E / S en Mac OS X 10.6 Snow Leopard:

#import <IOKit/pwr_mgt/IOPMLib.h> // kIOPMAssertionTypeNoDisplaySleep prevents display sleep, // kIOPMAssertionTypeNoIdleSleep prevents idle sleep // reasonForActivity is a descriptive string used by the system whenever it needs // to tell the user why the system is not sleeping. For example, // "Mail Compacting Mailboxes" would be a useful string. // NOTE: IOPMAssertionCreateWithName limits the string to 128 characters. CFStringRef* reasonForActivity= CFSTR("Describe Activity Type"); IOPMAssertionID assertionID; IOReturn success = IOPMAssertionCreateWithName(kIOPMAssertionTypeNoDisplaySleep, kIOPMAssertionLevelOn, reasonForActivity, &assertionID); if (success == kIOReturnSuccess) { // Add the work you need to do without // the system sleeping here. success = IOPMAssertionRelease(assertionID); // The system will be able to sleep again. }

Para versiones anteriores de OSX, verifique lo siguiente:
Preguntas y respuestas técnicas QA1160 - ¿Cómo puedo evitar que el sistema duerma mientras mi aplicación se está ejecutando?

Cita: Ejemplo de uso de UpdateSystemActivity (la forma canónica para <10.6)

#include <CoreServices/CoreServices.h> void MyTimerCallback(CFRunLoopTimerRef timer, void *info) { UpdateSystemActivity(OverallAct); } int main (int argc, const char * argv[]) { CFRunLoopTimerRef timer; CFRunLoopTimerContext context = { 0, NULL, NULL, NULL, NULL }; timer = CFRunLoopTimerCreate(NULL, CFAbsoluteTimeGetCurrent(), 30, 0, 0, MyTimerCallback, &context); if (timer != NULL) { CFRunLoopAddTimer(CFRunLoopGetCurrent(), timer, kCFRunLoopCommonModes); } /* Start the run loop to receive timer callbacks. You don''t need to call this if you already have a Carbon or Cocoa EventLoop running. */ CFRunLoopRun(); CFRunLoopTimerInvalidate(timer); CFRelease(timer); return (0); }

¿Hay alguna manera de evitar que una Mac se quede dormida programáticamente usando Objective-C? La sección de fundamentos del kit de E / S en el sitio de desarrollo de Apple me dice que un controlador recibe una notificación de inactividad / inactividad del sistema, pero no puedo encontrar una manera de evitar que el sistema se quede dormido. ¿Es posible?

He encontrado otras soluciones usando Cafeína, jiggler, insomnio e incluso AppleScript, pero quiero hacer esto en Objective-C. Gracias.


La Q & A1340 de Apple reemplaza la Q & A1160. La última sesión de preguntas y respuestas responde a la pregunta "P: ¿Cómo se puede notificar a mi aplicación cuando la computadora se va a dormir o cuando se está despertando? ¿Cómo evito dormir?"

Listado 2 de Q & A1340 :

#import <IOKit/pwr_mgt/IOPMLib.h> // kIOPMAssertionTypeNoDisplaySleep prevents display sleep, // kIOPMAssertionTypeNoIdleSleep prevents idle sleep //reasonForActivity is a descriptive string used by the system whenever it needs // to tell the user why the system is not sleeping. For example, // "Mail Compacting Mailboxes" would be a useful string. // NOTE: IOPMAssertionCreateWithName limits the string to 128 characters. CFStringRef* reasonForActivity= CFSTR("Describe Activity Type"); IOPMAssertionID assertionID; IOReturn success = IOPMAssertionCreateWithName(kIOPMAssertionTypeNoDisplaySleep, kIOPMAssertionLevelOn, reasonForActivity, &assertionID); if (success == kIOReturnSuccess) { //Add the work you need to do without // the system sleeping here. success = IOPMAssertionRelease(assertionID); //The system will be able to sleep again. }

Tenga en cuenta que solo puede detener el tiempo de inactividad y no el sueño activado por el usuario.

Para las aplicaciones compatibles con Mac OS X 10.6 y posterior, use la nueva familia de funciones IOPMAssertion . Estas funciones permiten que otras aplicaciones y utilidades vean el deseo de su aplicación de no dormir; esto es fundamental para trabajar a la perfección con el software de administración de energía de terceros.


Solo crea un NSTimer que active una función con este

UpdateSystemActivity(OverallAct);

Estoy bastante seguro de que eso es exactamente lo que hace la Cafeína.