1. 나의 챌린지

RPReplay_Final1705649673.MP4

<aside> 👨‍🚀 1. 선택된 앱을 사용 시간을 추적하여, 시간이 경과되면 자동으로 앱이 잠금 화면으로 차단됩니다. 2. 잠금 화면 하단의 “잠금 해제하기” 버튼을 클릭하면 상단에 로컬 푸시 알림이 나타납니다. 3. 알림 클릭하면 앱으로 진입하여, 앱 사용 시간을 연장하는 Custom Alert 창을 통해 잠금을 해제할 수 있습니다.

</aside>

프로세스

  1. 앱 추가
  2. 잠글 앱 선택
  3. 이용 시간 선택
  4. 시간 경과 후 경과 notification 발송 및 화면 잠금

앱 선택

FamilyControls 을 이용하여 구현했습니다.

FamilyControls | Apple Developer Documentation

이 기능은 SwiftUI에서만 사용 가능합니다

  1. SwiftUI로 제작한 AppAddButtonView에서 버튼을 클릭하면 FamilyControlPicker가 Present 됩니다.
  2. 선택된 FamilyControlSelectionObservableObjectBlockModel에 저장하여 처리합니다.

차단 로직

DeviceActivityMonitor 타겟을 추가하여 구현 했습니다.

DeviceActivityMonitor | Apple Developer Documentation

  1. 우선, 다른 타겟간 데이터 전송을 위해 UserDefaultssuiteName을 통해 App group을 사용해줍니다.
  2. 또한, 타겟간 파일 공유를 위해 파일의 TargetMemberShip을 변경해줍니다.

Untitled

  1. 잠기기 전, 스케줄에 Warning으로 설정한 시간이 되면 다음 함수를 통해 경고를 줍니다. 이 동작 이후 앱이 잠기지는 않습니다.
override func intervalWillStartWarning(for activity: DeviceActivityName) {
        super.intervalWillStartWarning(for: activity)
        
        // Handle the warning before the interval starts.
    }
  1. 임계값(사용 시간)이 되면 아래 함수의 작업을 통해 앱 화면을 잠급니다.
override func eventDidReachThreshold(_ event: DeviceActivityEvent.Name, activity: DeviceActivityName) {
        super.eventDidReachThreshold(event, activity: activity)
        
        // Handle the event reaching its threshold.
    }