Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

iOS에서 알람앱을 만드는 방법에 대한 고찰 #14

Open
chaneeii opened this issue Jul 25, 2022 · 0 comments
Open

iOS에서 알람앱을 만드는 방법에 대한 고찰 #14

chaneeii opened this issue Jul 25, 2022 · 0 comments
Labels
iOS iOS 관련내용을 정리합니다 고찰🤔💭

Comments

@chaneeii
Copy link
Owner

chaneeii commented Jul 25, 2022

Intro

애플아카메이 MC3 프로젝트(슬립파이-90분수면주기기반알람앱)를 하면서 고민했던 내용(인데, 최근에 이부분에 궁금하다고 한분이 있어서 내용을 조금 더 보충했습니다 )

무엇이 문제인가?

알람앱은 백그라운드에서 돌다가 원하는 시간이 되었을때 삐용삐용 울려야하는데,
이게 iOS에서 쉽지 않습니다!

앱을 백그라운드에 띄우는 방법

아래와 같은 경우에 앱이 백그라운드에서 돌수있다고합니다.
하지만 일반적인경우는 아니죠

Apps don’t normally receive any extra execution time after they enter the background. However, UIKit does grant execution time to apps that support any of the following time-sensitive capabilities:

  • Audio communication using AirPlay, or Picture in Picture video.
  • Location-sensitive services for users.
  • Voice over IP.
  • Communication with an external accessory.
  • Communication with Bluetooth LE accessories, or conversion of the device into a Bluetooth LE accessory.
  • Regular updates from a server.
  • Support for Apple Push Notification service (APNs).

Enable the Background Modes capability in Xcode if your app supports background features. Each background task has different requirements; see the appropriate framework for details about how to implement the feature. For information about how to schedule opportunistic background tasks, see Background Tasks.

ref : https://developer.apple.com/documentation/uikit/app_and_environment/scenes/preparing_your_ui_to_run_in_the_background

그래서 어떻게 만들지?

🤔 방법1. Push Notification 을 여러개 띄우자 (✅)

  • Notification은 최대 30초의 음원파일로만 설정할 수 있다.
  • 알람이 아닌 알림앱이되지만 현재 우리앱은 이 방식을 채택해서 30초짜리 알람을 여러개 띄우고 있다.

🤔 방법2. Silent music 을 백그라운드에 깔고 알람시간에 소리를 울리자 (feat. 알라미)

근데 이렇게 개발하면 무조건 reject을 당할 것 같다

스택오버플로우는 알고 있다(?)

알라미의 작동 방법에 대해 분석해보자

결국 위의 내용을 요약하면

  • 알라미는 Silent music (즉, 아무소리가 없는 음악)을 백그라운드에 깔고 알람시간이 되면 소리를 울리는 방식으로 작동한다는 것을 알 수 있습니다.
  • 결국, 스트리밍앱 처럼 작동한다는 것... 그래서 앱이 뒤에서 계속 돌아갈 수 있다

이렇게 구현했을때, 어떻게 보면 알람을 음악앱처럼 만든건데 이게 앱스토어 심사가 될지가 제일 의문이 들더라구요...
그리고 이게 배터리가 쭉쭉 달것만같은 그런 느낌... 이 있고 성능에도 절대 안좋아보이는데 느낌적으로 이게 맞나 싶더라구요

아무튼! 그럼 알라미는 어떤가 한번 유저로서 분석해보았습니다.

저는 사실 알라미의 heavy heavy user이고 오래된 유저이기 때문에 알라미를 많이 체험하게 되었습니다 (아침에 귀가 안들려서 가능한 분석,,)

⏰ 오래된 유저가 본 알라미 특징 (몸으로 체험해서 정확하지 않을 수 있음)
1 (누구나알만한특징) 백그라운드에서 알라미를 날리면 제거 되었다고 알림이 뜹니다. 알람이 안울린다고! 즉, 백그라운드앱 task 에 있어야함
2 기본알람이랑 알라미랑 겹칠때 어느날은 알라미 어느날은 기본앱이 소리가 들립니다. (뭔가 둘 중 우선순위가 어떻게 잘,, 구성이되겠죠...? 내부는 몰라서 일단특징만)
3 알람을 켜놔도 기본 음악, 유튜브, 영상 등의 소리는 항상 잘 들림

AudioSession

여기서 2,3번을 집중적으로 봅시다. 결국 AVSession 을 이용해야할 것 같더라구요.
우선은 특징을 정리해두고,,, 깊게 WWDC 영상들을 쭉 보면 해결책이 나오지 않을까 싶네요

백그라운드에서 소리를 넣을때, 어떤 audio 가 우선순위를 차지 하는가? 어떤 세션에셔 오디오가 울려야하는가

  • 알라미앱과 기본알람앱을 사용하는 경우 어떨때는 알라미가, 어떨때는 기본알람 소리가 울린다.
  • 알라미앱을 kill 하지 않고 두어도, 유튜브나 애플 뮤직 등 여러 음악앱은 정상적으로 작동된다.

AlarmKit

그리고 이러한 원리를 기반으로 (AlarmKit)[https://github.com/brimizer/AlarmKit] 이라는 라이브러리가 존재합니다.

ref app

@chaneeii chaneeii added iOS iOS 관련내용을 정리합니다 고찰🤔💭 labels Jul 25, 2022
@chaneeii chaneeii changed the title iOS에서 알람앱을 만드는 방법 iOS에서 알람앱을 만드는 방법에 대한 고찰🤔 Jul 25, 2022
@chaneeii chaneeii changed the title iOS에서 알람앱을 만드는 방법에 대한 고찰🤔 iOS에서 알람앱을 만드는 방법에 대한 고찰 Jul 25, 2022
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
iOS iOS 관련내용을 정리합니다 고찰🤔💭
Projects
None yet
Development

No branches or pull requests

1 participant