2014-03-12 2 views
1

내 응용 프로그램이 Mac OS Mountain Lion에서 시스템 잠자기를 방지하지 못하는 것 같습니다. 여기Mac OS에서 잠자기 방지

는해야 할 것입니다 :

코코아 응용 프로그램은 launchd에 프로세스를 사용하여 특정 시간에 시작됩니다. 시스템 휴면 방지는 IOPMAssertionCreateWithName을 사용하여 응용 프로그램을 시작할 때 수행됩니다. 응용 프로그램은 (숨겨진) WebView를 가지고 있으며, 여러 URL을 호출하고, 내용을 파싱하고, 결과를 웹 서버에 보내고, 종료합니다.

여기 방지하기 위해 내 코드입니다 수면 :

- (void)preventSleep 
{ 
    CFStringRef reasonForActivity= CFSTR("Content parsing"); 

    IOReturn success = IOPMAssertionCreateWithName(kIOPMAssertionTypeNoDisplaySleep, 
                kIOPMAssertionLevelOn, reasonForActivity, &self.assertionID); 
    if (success == kIOReturnSuccess) 
    { 
     Log([NSColor orangeColor], @"Prevent sleep\n"); 
    } 
} 

이 벌어지고있는 것입니다 :

launchd에 프로세스가 잘 작동합니다. 잠자기 시스템이 깨어나고 응용 프로그램이 시작되면서 내 로그에서 "잠자기 중지"를 인쇄하고 일부 URL을 구문 분석하지만 갑자기 몇 초 후에 시스템이 잠자기 상태가됩니다.

무슨 일입니까?

사용자 활동이없는 시스템에서 launchd가 실행 한 응용 프로그램과 IOPMAssertionCreateWithName이 작동하지 않을 수 있습니까?

응용 프로그램이 처리되는 동안 시스템이 잠자기되지 않도록하려면 어떻게해야합니까?

답변

0

사용자 작업이 감지되지 않으면 OS X 10.7은 절전 모드로 돌아갑니다. 다음 기능을 사용하여 사용자 활동을 시뮬레이션 할 수 있습니다.

UpdateSystemActivity(OverallAct); 

이 기능은 화면을 켭니다.

+0

10.9를 사용하고 있습니다. UpdateSystemActivity는 10.8부터 사용되지 않습니다. IOPMAssertionCreateWithName으로 대체되었습니다. 아직 작동합니까? 개인 프로젝트이기 때문에 적어도 시도하고 있습니다. – DaneOzzo

+0

10.9에서도 여전히 작동하는지 확인할 수 있습니다. Snow Leopard를 사용하는 사람들이있는 한 Apple은이 기능을 라이브러리에서 제외 할 수 없습니다! – MrAsterisco

+0

맞아요. 이제 IOPMAssertionCreateWithName과 UpdateSystemActivity를 모두 사용하고 있습니다. 그러나 시스템은 여전히 ​​어떤 이유로 잠자기 상태입니다. 매일 아침 나는 Mac을 깨우고 로그 및 계속 분석합니다. 어떤 아이디어? – DaneOzzo