STAR: 맞춤형 스크린타임 관리 앱(iOS)
STAR는 스크린 제어 기능을 통해 사용자들에게 건강한 디지털 사용 습관을 유도하고, 스크린타임을 효율적으로 관리하여, 삶의 질과 생산성을 높이는 것을 목표로 합니다.
https://stargazers-star.vercel.app/
| 이름 | GitHub | 주요 개발 사항 |
|---|---|---|
| 박유빈 Youbin Park |
@daydreamplace | 권한 및 온보딩 화면 데이터 처리 기반 마련 |
| 서문가은 Gaeun Seomun |
@name-mun | 스타 목록 화면 스타 목록 핸들링 |
| 안준경 Jungyung Ahn |
@AhnJunGyung | 스타 생성 및 수정 화면 사용자 입력 처리 |
| 이재영 Jaeyoung Lee |
@0-jerry | 데이터 모델 설계 팀 프로젝트 감독 |
| 황도일 Doyle Hwang |
@DoyleHWorks | 스크린타임 프레임워크 공통 UI 컴포넌트 |
- 시작일: 2025/01/16
├── star // 프로젝트의 메인 앱
│ ├── App // 메타데이터, 권한, 라이프사이클
│ ├── Resource
│ └── Source
│ ├── Core
│ │ ├── Extension // DeviceActivityName, FamilyActivitySelection, UserDefaults 등의 Extension
│ │ ├── Manager
│ │ │ ├── StarManager // (UserDefaults)
│ │ │ ├── BlockManager // (DeviceActivity)
│ │ │ ├── FamilyControlsManager // (FamilyControls, ManagedSettings)
│ │ │ └── NotificationManager // (UserNotifications)
│ │ └── Theme
│ ├── Model
│ │ ├── Star
│ │ ├── StarListModel
│ │ └── StarState
│ └── Presentation // 뷰 및 뷰모델
│ ├── AppLaunch
│ ├── CustomView // 공통 UI 컴포넌트를 비롯한 커스텀 뷰
│ ├── Onboarding
│ ├── Permission
│ ├── Rest
│ ├── StarDeleteAlert
│ ├── StarEdit
│ └── StarList
├── ShieldConfiguration // 앱 사용 제한 화면인 스크린타임 화면 커스터마이징을 위한 앱 확장
├── ShieldAction // 스크린타임 화면에서 호출되는 메서드를 관리하는 앱 확장
└── DeviceActivityMonitor // 생성된 스크린타임 스케줄에 따라 호출되는 메서드를 관리하는 앱 확장![]() |
![]() |
![]() |
![]() |
![]() |
- 사용자는 스타 목록에서 여러 스타를 조회, 추가, 수정, 삭제할 수 있습니다.
- 각 스타는 이름, 차단할 앱 목록, 활성 시간, 지정 요일을 가지며, 하나의 세션으로 작동합니다.
- 스타가 활성화된 동안에도 사용자는 스크린타임 기능을 최대 20분간 일시적으로 비활성화할 수 있습니다.
- 사용자 친화적 플로우를 통해 균형 잡힌 디지털 라이프스타일을 지원합니다.
- 진행 중인 스타의 삭제 및 수정, 휴식 모드 전환에 일정 시간 대기 화면이 제공됩니다.
- 사용자가 설정한 목표를 유지할 수 있도록 적절한 제약을 적용해 도움을 제공합니다.
- 스타 시작 5분 전, 시작 시, 종료 시 등 사용자에게 푸시 알림을 제공합니다.
- 버튼이 사용자 입력을 받으면 기기를 진동시켜 햅틱 피드백을 제공합니다.
- 데이터 통신: App Group(공유 컨테이너를 통한 UserDefaults 사용)을 통해 메인 앱과 DeviceActivityMonitor 간의 연결
- 핵심 기능: Family Controls (FamilyControls, DeviceActivity, ManagedSettings)를 사용하여 주요 기능 구현
- MVC -> MVVM 리팩터링: 초기에는 MVC 구조로 개발했으나, 정형화된 데이터 흐름과 역할 분리가 필요해지면서 MVVM 구조로 변경
- 앱이 실행 시 스크린타임 권한을 확인하고, 필요할 경우 설정 가이드를 제공합니다.
- 처음 사용하는 사용자를 위한 도움말 화면을 제공합니다.
- 간단한 스와이프 동작과 커스텀 알림을 결합하여 안전한 삭제 기능 제공
- Auto Layout를 통해 소형 iPhone에서도 호환성 보장
- 단일 앱 차단 세션은 구현이 비교적 단순하지만, 여러 세션을 지원하기 위해 ActivityDeviceMonitor App Extension의 인터벌 생명주기 메서드를 활용
- DeviceActivity의 모니터링 스케줄과 ManagedSettings의 차단할 앱 리스트(FamilyActivitySelection) 적용 로직을 분리해 유연한 관리 가능
- App Extension을 활용할 경우 각 번들 ID에 대해 Family Controls (Distribution) 권한을 Apple 측에 요청해야 하며, 승인까지 보통 한 달 이상 소요됨
- 개발 일정에 메인 앱과 App Extension의 승인 대기 시간을 고려하여 조정 필요
- FamilyActivityPicker 자체가 불안정하여 크래시 발생 가능성이 높으며, 2022년부터 보고된 버그가 현재 기준으로 아직 고쳐지지 않은 상황
- 기본적으로 SwiftUI에서만 지원되므로, UIKit 기반 코드에서 정상 작동하도록 추가 처리가 요구됨
- 우회적인 크래시 핸들링 방안을 통해 사용자 경험을 개선하는 방안을 지속적으로 모색 중




