Skip to content

QuaRang1225/project-Quaram

Repository files navigation

콰람

image

💡 아이폰 알람이 너무 시끄럽고 정신없다는 생각을 하던 중 “그냥 가볍게 푸시알림으로만 알람이 떴으면 좋겠다”라는 생각을 하게 되어 첫 프로젝트로 선정하게 되었습니다. 기존 타사 알람어플처럼 알람시계, 타이머, 스톱워치 등 기능도 추가하여 다용도로 사용할 수 있도록 개발했습니다.

💻 기술스택

  • Swift
  • SwiftUI
  • CoreData
  • UserNotification

📱 주요 기능 & 레이아웃


앱 설명

콰람은 큰 소리로 울리는 알람이 아닙니다. 시간을 방해받고 싶지 않을 때, 중요한 업무를 보고 있을 때 그 분위기를 건드리지 않게 푸시알림으로 확인할 수 있도록 만들어진 어플리케이션입니다.

  • 아날로그 시계로 현재 시각이 확인 가능합니다.
  • 알람을 설정하면 설정한 시간에 푸시알림이 울립니다.
  • 스톱워치 기능을 사용할 수 있습니다.
  • 타이머를 설정하면 설정한 시간에 푸시알림이 울립니다.

레이아웃

아날로그 시계

  • 한국시간으로 설정

알람 시계

  • 현재 날짜와 시간을 출력
  • 피커로 본인이 원하는 시간으로 설정
  • 텍스트를 입력하여 알람의 이름을 설정
  • 저장을 누르면 설정된 이름과 시간 리스트에 추가됨
  • 설정한 시간이 되면 푸시 알림
  • 리스트의 데이터는 CoreData로 저장됨

스톱워치

  • 소수점 두번째 자리 까지 출력
  • 특정 시간마다 스위치를 누르면 리스트에 시간이 추가
  • 리스트의 데이터는 CoreData로 저장됨

타이머

  • 피커로 시간을 설정하고 재생 버튼을 누름
  • 설정한 시간이 지나면 푸시 알림으로 타이머가 종료 되었음을 알림

🤔 고민한 점


알람시계와 타이머의 시간은 앱이 종료돼도 유지돼야 하는데 어떻게 할까?

아래와 같은 선택지 들을 비교해봤을 때 CoreData가 더 적합하다고 판단했습니다.

  • UserDefaults : 데이터량이 많아지거나 여러 기능이 추가될 가능성이 있음
  • CoreData : 앱에서 다양한 알람을 저장 및 관리하고 효과적으로 관리할 수 있음

앱이 백그라운드에 있을땐 알림 푸시를 어떻게 실행 시킬 수 있을까?

  • Date클래스를 사용하여, 화면이 처음 등장한 시간 때를 기록
  • scheduler에서 현재 시간과, 기록된 시간을 비교하여 시간이 얼마나 지났는지 체크

위와 같은 로직을 사용하여 background모드로 갔다가 돌아와도 흐른 시간이 Timer에 반영되어 정확한 시간을 확인할 수 있었습니다.

🔧 문제해결&솔루션

[SWIFTUI] 에러 - "active scheme does not build this file"

[SWIFTUI] 방법 - HStack Picker Crash

[SWIFTUI] 에러 - Type 'Timer' has no member 'publish'

프로젝트를 진행 하며..

👶🏻 항상 예제들만 만들어보다가 처음 시작한 프로젝트입니다. 저의 창의성을 발휘할 수 있는 프로젝트를 먼저 하고 싶었지만, 나만의 이상과 내가 가진 지식의 깊이가 맞지 않다고 판단했습니다. 그래서 나만의 디자인과 방식을 채택하여 기존 앱을 똑같이 만들어보되, 나만의 작품으로 완성해보는 목표를 가지고 시작하게 되었습니다.

아무 계획 없이 무작정 도전했지만, 너무 쉽게 접근했다는 생각이 들었습니다. 평소에 앱 개발 기술들을 많이 알고 있다고 자부했지만, 앱의 생명주기, 앱 플로우 등 경험하지 못한 것들을 마주하게 되어 개발 시간도 늘어나고, 에러로 가득 찬 코드를 보게 되었습니다. 그러나 이러한 문제들을 차근차근 해결하면서 어느새 개발과 문제 해결에 대한 노하우가 생겨나고, 이슈를 줄여나갈 수 있게 되었습니다.

한 가지 아쉬운 점은 프로젝트 초반에 기능을 제대로 이해하지 못한 채 해결 목적으로 코드를 복사한 부분이 많았습니다. 결과물을 내는 것은 중요하지만, 원래 있는 기능을 그대로 가져와 개발하는 것은 성장하는 개발자로서 좋지 않을 뿐만 아니라, 나중에 문제를 해결할 때도 걸림돌이 될 것이라는 생각이 들었습니다. 그래서 프로젝트 완료 후 코드 리펙토링을 통해 기능들의 원리를 파악하고 불필요한 코드를 제거하며 나만의 코드를 작성하는 법을 연구할 수 있었습니다.

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Packages

No packages published

Languages