Skip to content

iOS05-Stargazers/STAR

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

ko en

📱 스타 - STAR

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      // 생성된 스크린타임 스케줄에 따라 호출되는 메서드를 관리하는 앱 확장

🖼️ 미리보기

🏷 주요 기능

스타(Star) - 디지털 시간 관리 유닛

  • 사용자는 스타 목록에서 여러 스타를 조회, 추가, 수정, 삭제할 수 있습니다.
  • 각 스타는 이름, 차단할 앱 목록, 활성 시간, 지정 요일을 가지며, 하나의 세션으로 작동합니다.

휴식 모드 전환

  • 스타가 활성화된 동안에도 사용자는 스크린타임 기능을 최대 20분간 일시적으로 비활성화할 수 있습니다.
  • 사용자 친화적 플로우를 통해 균형 잡힌 디지털 라이프스타일을 지원합니다.

사용자 친화적 제약

  • 진행 중인 스타의 삭제 및 수정, 휴식 모드 전환에 일정 시간 대기 화면이 제공됩니다.
  • 사용자가 설정한 목표를 유지할 수 있도록 적절한 제약을 적용해 도움을 제공합니다.

알림 및 햅틱 피드백

  • 스타 시작 5분 전, 시작 시, 종료 시 등 사용자에게 푸시 알림을 제공합니다.
  • 버튼이 사용자 입력을 받으면 기기를 진동시켜 햅틱 피드백을 제공합니다.

✨ 개발 시 고려사항

기능 및 아키텍처

  • 데이터 통신: App Group(공유 컨테이너를 통한 UserDefaults 사용)을 통해 메인 앱과 DeviceActivityMonitor 간의 연결
  • 핵심 기능: Family Controls (FamilyControls, DeviceActivity, ManagedSettings)를 사용하여 주요 기능 구현
  • MVC -> MVVM 리팩터링: 초기에는 MVC 구조로 개발했으나, 정형화된 데이터 흐름과 역할 분리가 필요해지면서 MVVM 구조로 변경

온보딩 플로우

  • 앱이 실행 시 스크린타임 권한을 확인하고, 필요할 경우 설정 가이드를 제공합니다.
  • 처음 사용하는 사용자를 위한 도움말 화면을 제공합니다.

사용자 경험 개선

  • 간단한 스와이프 동작과 커스텀 알림을 결합하여 안전한 삭제 기능 제공
  • Auto Layout를 통해 소형 iPhone에서도 호환성 보장

🔍 Family Controls 관련 주요 과제

멀티세션 생성 및 관리

  • 단일 앱 차단 세션은 구현이 비교적 단순하지만, 여러 세션을 지원하기 위해 ActivityDeviceMonitor App Extension의 인터벌 생명주기 메서드를 활용
  • DeviceActivity의 모니터링 스케줄과 ManagedSettings의 차단할 앱 리스트(FamilyActivitySelection) 적용 로직을 분리해 유연한 관리 가능

App Extension에도 Family Controls 요청하기

  • App Extension을 활용할 경우 각 번들 ID에 대해 Family Controls (Distribution) 권한을 Apple 측에 요청해야 하며, 승인까지 보통 한 달 이상 소요됨
  • 개발 일정에 메인 앱과 App Extension의 승인 대기 시간을 고려하여 조정 필요

FamilyActivityPicker의 제약과 불안정성

  • FamilyActivityPicker 자체가 불안정하여 크래시 발생 가능성이 높으며, 2022년부터 보고된 버그가 현재 기준으로 아직 고쳐지지 않은 상황
  • 기본적으로 SwiftUI에서만 지원되므로, UIKit 기반 코드에서 정상 작동하도록 추가 처리가 요구됨
  • 우회적인 크래시 핸들링 방안을 통해 사용자 경험을 개선하는 방안을 지속적으로 모색 중