📱 무드등 iOS 앱 사전 계획서
1. 앱 이름 (가칭)
- Lumi / GlowTime / Moodify / 무드무드
(앱 이름은 감성적이거나 직관적으로 전달되도록 고려)
2. 앱 개발 목적
- 사용자에게 감성적 무드 조명을 제공하여 휴식, 수면, 집중 등 다양한 상황에서 사용할 수 있도록 함.
- 물리적 조명 없이도 스마트폰 하나로 무드 조명 효과를 구현.
3. 주요 타겟층
- 10~30대 감성 소비층
- 취침 전 무드등 사용층
- 감성 인테리어를 선호하는 유저
- 명상 및 집중, 힐링을 원하는 유저
4. 핵심 기능 구성
기능명상세 설명
| 🎨 컬러 선택 | 원하는 색상을 직접 선택하거나, 컬러 팔레트에서 선택 |
| 🕰️ 타이머 설정 | 지정 시간 후 자동 종료 (예: 10분, 30분, 1시간) |
| 🌈 색상 전환 모드 | 그라데이션, 무지개 모드, 부드러운 색 전환 등 |
| 🔊 자연 소리 | 빗소리, 파도, 바람 등 백색소음 기능 |
| ✨ 애니메이션 효과 | 은은한 점멸, 호흡하듯 밝기 변화 |
| 📱 위젯 지원 | 홈 화면에서 빠른 ON/OFF, 색상 변경 |
| 🌙 슬립 모드 | 어두운 테마 + 자동 밝기 감소 후 종료 |
5. 참고한 인기 앱 분석
앱명참고 요소
| Moody | 간결한 UI, 다양한 컬러, 슬립 모드 |
| Night Light - Relaxing Light | 자연 소리와 무드 조명의 결합 |
| Lumi Light | 애니메이션 효과, 사용자의 감성 리뷰 활용 |
➡️ 차별화 포인트 제안:
- 사용자 맞춤 컬러 테마 저장 기능
- 사용자 경험 공유 커뮤니티 (리뷰 or 사진 공유)
- AR 무드등 효과(향후 확장 고려)
6. 디자인 방향
- 미니멀한 UI/UX: 조작이 쉽고 직관적일 것
- 감성 컬러 사용: 파스텔톤, 네온톤 중심
- 다크모드 최적화: 야간 사용 편의성 고려
- 애니메이션 부드러움 강조
7. 기술 스택
- 개발 언어: Swift, SwiftUI
- 디자인 툴: Figma
- 기능 구현: AVFoundation(소리), Core Animation(애니메이션), UserDefaults(설정 저장)
8. 개발 일정 (예시)
기간내용
| 1주차 | 기획 및 와이어프레임 제작 |
| 2~3주차 | 핵심 기능 개발 (컬러, 타이머) |
| 4주차 | UI/UX 마무리, 자연 소리 기능 추가 |
| 5주차 | 버그 수정 및 테스트 |
| 6주차 | 앱스토어 배포 준비 및 런칭 |
9. 기대 효과
- 감성 조명 앱으로 일상 속 힐링 제공
- 유료 기능 추가로 수익화 가능 (Ex. 고급 색상, 소리팩)
- 간편한 개발로 MVP 빠른 출시 가능
🗓️ 무드등 iOS 앱 개발 일정표
개발 마감일: 2025년 5월 30일
주차기간주요 일정 및 목표
| 1주차 | 3/24 ~ 3/30 | - 기능 상세 기획 - 와이어프레임 및 디자인 초안 제작 |
| 2주차 | 3/31 ~ 4/6 | - UI 디자인 확정 - SwiftUI로 기본 UI 레이아웃 구현 시작 |
| 3주차 | 4/7 ~ 4/13 | - 컬러 선택 기능 개발 - 밝기 조절 슬라이더 구현 |
| 4주차 | 4/14 ~ 4/20 | - 타이머 설정 기능 구현 - 무드 색상 애니메이션 추가 |
| 5주차 | 4/21 ~ 4/27 | - 자연 소리 재생 기능 구현 - 앱 내 설정 저장 (UserDefaults) |
| 6주차 | 4/28 ~ 5/4 | - 홈 위젯 / 슬립 모드 기능 개발 - 간단한 사용자 튜토리얼 추가 |
| 7주차 | 5/5 ~ 5/11 | - 전체 기능 통합 및 UI 마무리 - 다크 모드 및 애니메이션 최적화 |
| 8주차 | 5/12 ~ 5/18 | - 테스트 및 버그 수정 - 성능 최적화 및 Crash 점검 |
| 9주차 | 5/19 ~ 5/25 | - 앱스토어 배포 준비 - 앱 아이콘 / 스크린샷 제작 - App Store 심사 신청 |
| 10주차 | 5/26 ~ 5/30 | - App Store 최종 등록 완료 - 버전 관리 및 추후 업데이트 계획 수립 |
✅ 개발 중점 체크리스트
- UX 간결성 유지 (조작 3단계 이하)
- 타이머 및 애니메이션 매끄러운 작동
- 소리 재생 시 배터리 과소모 방지
- 다크모드 및 화면 밝기 자동화 구현
🛠️ 무드등 iOS 앱 개발 역할 분담표 (무단표)
팀원담당 역할주요 업무
| A | 기획 & 디자인 담당 | - 앱 기획 및 기능 정의 - 와이어프레임 & UI 디자인 - 앱 아이콘, 스플래시 제작 - 앱스토어 스크린샷 준비 |
| B | 프론트엔드 개발 | - SwiftUI 기반 UI 구현 - 컬러 선택 / 밝기 조절 개발 - 타이머 기능 구현 - 다크모드 최적화 |
| C | 기능 개발 및 테스트 | - 소리 재생 기능 개발 - 애니메이션 구현 - UserDefaults 설정 저장 - 앱 테스트 및 버그 수정 |
📆 주차별 역할 분담
주차A (기획/디자인)B (UI/프론트)C (기능/테스트)
| 1주차 | 기능 기획, 디자인 초안 | 환경 설정, 레이아웃 틀 | 기능 리스트 정리 |
| 2주차 | 디자인 확정 | 기본 UI 구현 시작 | 데이터 저장 설계 |
| 3주차 | UI 수정 반영 | 컬러 선택 기능 개발 | 밝기 조절 테스트 |
| 4주차 | 아이콘 디자인 시작 | 타이머 구현 | 애니메이션 효과 개발 |
| 5주차 | UI 검토 | UI 마무리 | 소리 재생 기능 구현 |
| 6주차 | 튜토리얼 디자인 | 슬립 모드 개발 | UserDefaults 적용 |
| 7주차 | 스크린샷 제작 | 최종 UI 정리 | 전체 기능 테스트 |
| 8주차 | 앱스토어 준비 | 최종 빌드 | 버그 수정, 성능 개선 |
| 9~10주차 | 배포 서류 작성 | 앱스토어 등록 | 사후 관리 계획 |

📍 1. Supported Destinations (지원 대상)
앱을 어떤 기기에서 실행할 수 있을지를 설정해.
- iPhone / iPad / Mac (Designed for iPad) / Apple Vision
→ 체크된 기기에서 실행 가능. - + 버튼으로 다른 대상 기기 추가 가능.
- Mac (Designed for iPad): iPad 앱을 Apple Silicon Mac에서도 실행할 수 있도록 지원.
📍 2. Minimum Deployments (최소 지원 버전)
- 앱이 지원할 최소 iOS 버전을 설정해.
- 현재는 iOS 18.1로 되어 있는데, 너무 최신이야. 보통 많은 기기에서 실행하려면 iOS 15 ~ 16 정도로 설정해.
- 참고: 높은 버전으로 설정하면 오래된 기기에서는 실행 불가.
📍 3. Identity (앱 신원 정보)
- App Category
- 앱스토어에서 보여질 카테고리 선택 (예: Health, Music, Lifestyle 등).
- 현재는 None이지만 실제 배포 시 반드시 설정해야 해.
- Display Name
- 사용자 폰 홈화면에 표시될 앱 이름 (스토리보드에서 설정 가능하지만 여기에서도 설정 가능).
- Bundle Identifier
- 앱의 고유 식별자 (도메인 반대 형식: kr.ac.induk.ljh.Night-Light)
- 앱스토어 등록, 푸시 알림, 인증 등에서 이 값이 중요.
- Version / Build
- Version: 사용자가 보는 앱 버전 (예: 1.0, 1.1)
- Build: 개발자 내부용 버전 (매 빌드 시마다 증가, 예: 1, 2, 3...)
- 앱스토어에 업데이트 제출할 때 이 값 필수.
📍 4. Deployment Info (배포 정보)
- iPhone Orientation / iPad Orientation
앱이 지원할 화면 방향 선택:
- Portrait: 세로
- Upside Down: 거꾸로 세로
- Landscape Left/Right: 가로 방향
※ 무드등 앱은 Portrait만 체크해도 무방함 (단, 자유롭게 회전하도록 하고 싶으면 모두 체크).
- Status Bar Style
상태 바 스타일 설정 (기본값: Default, Light, Dark 등 선택 가능).
📍 추가로 이 화면 외에도 설정 가능한 항목들
(다른 탭에서 가능하지만 함께 알아두면 좋아)
- Signing & Capabilities
- 팀(Team) 등록 및 자동 서명 설정
- 푸시 알림, App Groups, Background Modes 등의 권한 부여
- Build Settings
- 아키텍처, Swift 버전, 최적화 수준 등 고급 설정
- Info.plist
- 앱 이름, 권한 요청 문구(예: 마이크, 카메라), 런치 스크린 등 설정
✅ 요약: 필수 설정 체크리스트
- Minimum Deployment Target: iOS 16 이상 추천
- App Category: Lifestyle 등으로 설정
- Display Name: 앱 이름 입력
- Bundle Identifier: 고유하게 유지
- Version/Build: 관리 잘하기
- Orientation: 무드등이면 Portrait만도 가능
- Status Bar Style: 어두운 배경이면 Light 추천
import UIKit // UIKit 프레임워크를 가져옴. iOS 앱의 UI 구성 요소를 제공.
class ViewController: UIViewController {
// UIViewController는 iOS 앱의 화면(뷰)을 관리하는 클래스.
// ViewController는 이 클래스를 상속받아 화면을 제어함.
override func viewDidLoad() {
// viewDidLoad: 화면(View)이 메모리에 로드된 후에 한 번 호출됨.
// 앱이 실행되고 화면이 처음 나타나기 전에 초기 설정을 여기에 작성.
super.viewDidLoad() // 부모 클래스의 viewDidLoad 메서드 호출 (필수).
print("viewDidLoad") // 콘솔에 로그 출력 (디버깅용).
}
override func viewWillAppear(_ animated: Bool) {
// viewWillAppear: 화면이 나타나기 직전에 호출됨.
// 화면이 나타날 때마다 실행됨 (화면 전환 시에도 실행됨).
super.viewWillAppear(animated) // 부모 클래스의 viewWillAppear 호출 (오타 수정).
print("viewWillLoad") // 콘솔에 로그 출력 (여기 출력 내용은 viewWillAppear로 수정하는 게 더 명확함).
}
override func viewDidAppear(_ animated: Bool) {
// viewDidAppear: 화면이 완전히 나타난 후에 호출됨.
// 애니메이션 완료 후 작업이나 자동 시작되는 작업은 여기에 작성.
super.viewDidAppear(animated) // 부모 메서드 호출은 선택 사항이지만, 가급적 호출 권장.
print("viewDidappear") // 콘솔에 로그 출력 (디버깅용).
}
}
import UIKit
// SceneDelegate 클래스는 앱의 개별 화면(Scene)의 상태 변화를 감지하고 처리함
class SceneDelegate: UIResponder, UIWindowSceneDelegate {
// UIWindow는 앱 화면을 나타내는 객체
var window: UIWindow?
// 앱 화면이 처음 연결될 때 호출됨
// 이 시점에 UIWindow를 생성하고 연결하는 작업을 함
func scene(_ scene: UIScene, willConnectTo session: UISceneSession, options connectionOptions: UIScene.ConnectionOptions) {
// scene이 UIWindowScene 타입인지 확인 후 연결
guard let _ = (scene as? UIWindowScene) else { return }
// 일반적으로 스토리보드를 사용하면 window 설정은 자동으로 됨
// 만약 코드로 UI 구성 시, 여기서 window를 직접 생성해야 함
}
// 화면(Scene)이 시스템에 의해 해제될 때 호출됨
// 예: 메모리 부족, 사용자가 앱을 종료
func sceneDidDisconnect(_ scene: UIScene) {
// 이 씬과 관련된 리소스를 정리할 수 있음
// 다시 연결될 수 있으므로 완전한 해제는 아님
}
// 화면이 활성 상태로 진입했을 때 호출됨
// 앱이 다시 포커스를 얻었을 때 작업 재개
func sceneDidBecomeActive(_ scene: UIScene) {
// 일시 정지된 작업을 재개하거나 UI를 새로 고칠 수 있음
}
// 화면이 비활성 상태로 전환되기 직전에 호출됨
// 예: 전화 수신, 알림 도착 등 잠깐 중단되는 상황
func sceneWillResignActive(_ scene: UIScene) {
// 중요한 작업 저장 또는 타이머 일시 정지 등 가능
}
// 앱이 백그라운드에서 포그라운드로 돌아오기 직전에 호출됨
func sceneWillEnterForeground(_ scene: UIScene) {
// 백그라운드에서 변경된 사항을 복구할 수 있음
}
// 앱이 포그라운드에서 백그라운드로 들어갈 때 호출됨
func sceneDidEnterBackground(_ scene: UIScene) {
// 데이터 저장, 상태 저장, 리소스 해제 등 처리
// 앱이 완전히 종료되기 전에 필요한 작업
}
}
import UIKit
// 앱이 시작될 때 가장 먼저 실행되는 진입점 클래스
@main
class AppDelegate: UIResponder, UIApplicationDelegate {
// 앱이 실행되고 나서 가장 처음 호출되는 메서드
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
// 앱 실행 후 커스터마이징할 수 있는 부분
// 예: 초기 설정, 외부 SDK 초기화 등
return true
}
// MARK: UISceneSession Lifecycle (iOS 13 이상 멀티 윈도우 지원 관련)
// 새로운 화면(Scene)이 생성될 때 호출됨
func application(_ application: UIApplication, configurationForConnecting connectingSceneSession: UISceneSession, options: UIScene.ConnectionOptions) -> UISceneConfiguration {
// 새 scene을 생성할 때 사용할 설정을 반환
// 기본 설정인 "Default Configuration" 사용
return UISceneConfiguration(name: "Default Configuration", sessionRole: connectingSceneSession.role)
}
// 사용자가 scene(화면)을 종료했을 때 호출됨
func application(_ application: UIApplication, didDiscardSceneSessions sceneSessions: Set<UISceneSession>) {
// 종료된 scene과 관련된 리소스를 정리할 수 있는 곳
// 앱이 실행 중이 아닐 때 종료된 scene은 앱 시작 후 이 메서드에서 처리됨
}
}

Auto 레이아웃은 UI 요소의 위치, 크기, 간격을 자동으로 정렬해주는 기능입니다.
요소들을 수평 또는 수직으로 배치하고, 지정한 간격과 패딩에 따라 레이아웃이 자동으로 조정됩니다.
화면 크기 변화에도 반응형으로 정렬되어 효율적인 UI 구성이 가능합니다.
| 스토리보드에서 직접 설정 | - 시각적으로 쉽게 배치 가능 - 코드 없이 빠르게 UI 구성 가능 |
- 복잡한 화면은 제약 설정이 어려움 - Git 충돌 가능성이 있음 |
| Size Inspector 이용 | - UI 요소를 선택 후 세부적으로 제약 설정 가능 | - 실수로 잘못 설정할 가능성 있음 - 많은 요소일 때 번거로움 |
| Constraints 메뉴 사용 | - 위, 아래, 양 옆 간격을 쉽게 설정 가능 - 빠른 제약 추가 가능 |
- 복잡한 제약에는 제한적 - 미세 조정 어려움 |
| 코드로 설정 (NSLayoutConstraint) | - 복잡한 제약도 자유롭게 설정 가능 - 재사용성 좋음 |
- 코드량 많고 복잡해짐 - 초보자에게 어렵게 느껴질 수 있음 |
| Visual Format Language(VFL) | - 여러 제약을 간결하게 코드로 작성 가능 - 반복 작업에 유리 |
- 배우기 어려움 - 복잡한 레이아웃에는 적합하지 않을 수 있음 |
| SnapKit(서드파티 라이브러리) | - 코드로 쉽게 제약 설정 가능 - 가독성 높음 |
- 외부 라이브러리 설치 필요 - 공식 지원 아님 |
