최근에 알람관련기능을 개발하면서 알람은 왜지원을 안해주는건가
많이 불편했었는데
이제야 지원을 해주네요??
시대를 빨리태어난 요구사항이 돼버렷습니다..
아무튼!
오늘은 WWDC25주제중 AlarmKit에 관련된 내용을 정리해보려합니다
알람이란?
고정되거나 예정된 시간에 발생하는 일에 대한 두드러진 알림
일정이나 카운트기반으로 작동
무음모드와 현재 포커스상태를 무시하고 실행됨
이게 중요한거같아요
잘때 알람맞추고자면 어떤상태든 아침에 울리듯이
어떠한 상태여도 알림을 줄 수 있죠

기본구성으로는
- 알람제목
- 앱이름 표시
- 앱 인텐트로 정의된 동작을 가진 커스텀 버튼 혹은 미루기 버튼
을 갖는 UI가 노출됩니다
Authorization관련해서는
사용자가 앱내에서 권한을 동의해야 사용가능하고
수동으로 요청하거나 첫알람 생성시 자동으로 요청되도록 가능하다고하네요
언제든지 설정앱에서 권한상태를 변경할 수 있습니다.
다른 권한들처럼 앱의 info.plist에 NSAlarmKitUsageDescription를 추가하여 알람사용 사례를 설명하면 됩니다.
수동으로 권한요청시 requestAuthorization를 사용하고
권한 상태 확인시 AlarmManager 클래스의 authorizationState를 사용해서 확인하고
권한 거부시 알람이 예약되지않음을 명확하게 표시해야합니다.
알람생성시 필요한 주요요소
- Countdown duration: 카운트다운 시간
- Schedule: 특정날짜나 반복패턴 일정
- Appearance: 알람표시 맞춤화
- Action: 알람동작 맞춤화
- Sound: 알람 관련소리
이렇게 5가지가 주요요소입니다.
하나씩 살펴보면
Countdown duration


알림이 처음 예약되면 알람전 카운트다운 시간에 표시될 카운트다운 UI가 표시됨
알람 시간이 경과하면 알람이 발동되고 구성에 따라서 커스텀된 알람UI가 표시됨

이때 알람에대해 다시 알림이 선택되면 다음알람 간격동안 카운트다운 UI가 다시 표시됨
이 간격이 경과하면 알람이 다시 발동되고 사용자가 알림을 선택하거나 무시 할 수 있음

위의코드는 10분후 알람 타이머를 설정하는 코드(여기서는 알람 전 10분이라고 설명합니다 그래서 preAlert 라고하나보네요)
타이머가 발동되고 반복되면 5분후 다시 발동됨
Schedule
[고정시간]
고정일정은 알람이 울릴 특정 미래날짜를 지정
일정은 절대적이고 기기 시간대가 바뀌어도 변경되지 않음

위의코드는 Date만들어서 Alarm셋팅하는 코드
Alarm.Schedule.fixed
[상대시간]
상대적인 일정을 지정할 수 있음
여기에는 시간이 포함되고, 주간 반복 패턴을 추가할 수도 있음
상대적인 일정은 시간대의 변화를 고려함

위의코드는 알람이 매주 월,수,금 오전 7시에 울리도록 설정하는코드
Alarm.Schedule.Relative
Appearance
AlarmButton타입을 이용해서 알람버튼을 구현가능
텍스트, 텍스트색, 시스템 이미지 지정가능


AlarmPresentation.Alert: 알람 제목, stop버튼 설정가능
AlarmAttributes: 알람 표시를 렌더링 하기위해 필요한 정보
기본적인 알림은 여기까지 설정만하면 됨
카운트다운을 시작하는 반복버튼을 추가하고
카운트다운UI를 표시하려면 아래와같이 설정해야함
먼저 반복버튼을 추가하는 과정을 아래와같음


AlarmPresentation.Alert에 보조 버튼으로 Repeat버튼을 만들어서 넣어줌
secondaryButtonBehavior으로 타이머반복, 다시알림과 같은 카운트다운 상태로 전활할지, 커스텀 작업을 실행할지 지정
이제 카운트다운 UI를 구현하기위해서는 Live Activity(실시간현황)를 구현해줘야함
카운트다운은 잠금화면, Dynamic Island, 스탠바이에서 표시됨
Live Activity를 앱의 위젯 확장프로그램에 추가하고
ActivityConfiguration을 설정하고
AlarmAttributes를 메타데이터 유형으로 지정하면 됨





추가정보는 알람 메타데이터에서 제공할 수 있음
AlarmAttributes을 생성할 때 이 커스텀된 메타데이터를 포함하면됨
컨텍스트 속성을 통해서 커스텀 메타데이터에 접근가능
알람이 카운트 다운기능을 지원하는경우 시스템은 카운트다운 인터페이스가 표시되도록 함
그런데 기기가 재시동되고 처음으로 잠금해제가 되기전처럼 실시간 현황이 표시 불가능한 상황도 있음
이러한 경우 시스템의 카운트다운 표시방식을 커스텀할 수 있음

잠금화면에서는 보조버튼의 아이콘, 알림제목, 카운트다운에 tintColor가 사용됨

다이나믹 아일랜드에서도 유사한방식으로 사용됨
Action
AlarmKit은 사용자가 알람버튼을 탭할때 자체코드를 실행하는 기능도 제공함
앱 인텐트로 구현
중지 버튼이나 보조 버튼에대한 커스텀 앱인텐트 제공

맞춤형 동작을 실행하도록 보조버튼 동작을 custom으로 설정합니다


알람을 예약할때 알람생성후 추적할 수 있는 고유 식별자를 생성하고
OpenInApp타입인 인텐트(LiveActivityIntent프로토콜)의 인스턴스를 생성하고
알람의 고유 식별자를 전달합니다
보조버튼이 탭될 때 이 인텐트를 실행하라고 시스템에 알립니다
Sound
알람은 기본 시스템 소리를 사용합니다
알람에 커스텀 소리를 제공할 수도 있습니다.

AlertSound구조체를 사용해서 커스텀 소리를 정의할 수 있습니다.
이 파일은 앱의 메인 번들이나 앱 데이터 컨테이너의 Library/Sounds 폴더에 있어야합니다
Life Cycle

알람을 구성한후 시스템을 통해 알람을 예약 할 수 있습니다.
예약하려면 알람의 고유식별자와 이전에 생성한 configuration을 사용합니다
알람 라이프사이클을 완전히 제어할 수 있고
카운트다운 상태로 전환하거나, 취소, 중지, 일시정지, 다시시작이 가능합니다.
'iyOmSd > Title: Swift' 카테고리의 다른 글
| [Swift] Screen Time API(FamilyControls, ManagedSettings) (0) | 2025.09.26 |
|---|---|
| [Swift] WWDC25 Explore concurrency in SwiftUI (2) | 2025.08.28 |
| [Swift] Vision OCR 인식 (0) | 2025.06.25 |
| [Swift] Task Cancel (0) | 2025.05.23 |
| [Swift] Mergeable Libraries, 병합된 라이브러리 (0) | 2025.04.16 |