일모도원(日暮途遠) 개발자

[MacCatalyst] 스크린 세이버 동작안하게 하기 본문

iOS개발/MacCatalyst

[MacCatalyst] 스크린 세이버 동작안하게 하기

달님개발자 2022. 7. 20. 12:27

Mac에서 동영상이 재생중일때는 스크린세이버가 동작하면 안된다.

 

CatalystAppManager.swift파일에 아래 두 func을 추가하자.

#if targetEnvironment(macCatalyst)
    import IOKit.pwr_mgt
    var noSleepAssertionId: IOPMAssertionID = 0
    var noSleepReturn: IOReturn?

    func disableScreenSleep(reason: String = "Unknown reason") -> Bool? {
        guard noSleepReturn == nil else {return nil}
        noSleepReturn = IOPMAssertionCreateWithName(kIOPMAssertionTypeNoDisplaySleep as CFString, IOPMAssertionLevel(kIOPMAssertionLevelOn), reason as CFString, &noSleepAssertionId)
        return noSleepReturn == kIOReturnSuccess
    }
    
    func enableScreenSleep() -> Bool {
        if noSleepReturn != nil {
            _ = IOPMAssertionRelease(noSleepAssertionId) == kIOReturnSuccess
            noSleepReturn = nil
            return true
        }
        return false
    }
#endif

 

비디오를 열면 적당한 곳에서 아래를 호출해서 스크린 세이버가 작동안되게 한다.

_ = CatalystAppManager().disableScreenSleep()

 

그리고 비디오를 닫기전에  enableScreenSleep을 실행해준다.

_ = CatalystAppManager().enableScreenSleep()