Apple이 Screen Time API에서 고쳐 줬으면 하는 3가지
저는 팔굽혀펴기를 해서 스크린타임을 버는 앱 차단 앱 HonorFit을 만들고 있어요(양심 시스템, 카메라 없음). iPhone과 Android에서 같은 앱이고, 아이디어도 같고, 코드도 대부분 같아요. 그런데 솔직히요? Android 버전이 더 쓰기 편해요.
Android가 앱 차단을 더 잘해서 그런 건 아니에요. iOS의 Screen Time API는 차단 자체는 정말 탄탄해요. 문제는 iOS가 딱 세 가지 지점에서 손발을 묶어 두는데, 그중 어느 것도 사용자를 보호하려고 있는 것 같지 않다는 거예요. 그래서 그 목록과 함께 Apple에 바라는 점을 정리해 봤어요. 누구의 개인정보도 대가로 치르지 않는 것들로만 골랐어요.
(이 API로 개발하는 구체적인 이야기는 따로 정리해 뒀어요: Apple 문서에는 없는 이야기.)
1. 스크린 타임 앱은 한 번에 하나만 쓸 수 있어요
이미 Brick, Opal이나 one sec을 쓰고 있는데 HonorFit도 써 보고 싶다고 해 볼게요. iPhone에서는 안 돼요. 두 번째 앱이 스크린 타임 접근 권한을 요청하면 iOS는 권한 요청 창조차 띄우지 않아요. 그냥 Family Controls는 한 번에 한 앱만 쓸 수 있다는 오류를 던질 뿐이에요. 저도 이 오류를 직접 봤고, 다른 개발자들도 겪고 있어요.
앱을 바꾸려면 설정 › 스크린 타임 › 스크린 타임 접근 권한이 있는 앱으로 가서 다른 앱을 끄고, 가끔은 폰을 재시동해야 해요. 지금 HonorFit은 이 오류를 감지해서 그 과정을 안내해 줘요. 원래 오류 메시지는 일반 사용자에게 아무 의미도 없으니까요.
이상한 점은 따로 있어요. Apple이 WWDC22에서 이런 종류의 권한을 처음 소개할 때 이렇게 말했거든요. 자녀 보호용 권한과 달리, 개인용(individual) 권한은 한 기기에서 앱 몇 개든 쓸 수 있다고요. 지금은 그렇게 동작하지 않고, 이 제한이 문서화된 곳도 찾지 못했어요.
이게 왜 사용자에게 좋지 않냐면: 사람들은 도구를 섞어 써요. 회사에서 바짝 집중할 때는 Brick을 쓰고, 저녁에 스크롤할 시간은 HonorFit으로 버는 사람도 있을 수 있죠. Apple에는 이미 제한을 합치는 규칙이 있어요. 여러 ManagedSettingsStore가 같은 항목을 설정하면, Apple의 표현으로는 “the most restrictive setting always wins”(가장 제한적인 설정이 항상 이긴다)예요. 앱 사이에도 똑같이 적용하면 둘 다 쓸 수 있고, 그렇게 해도 폰은 더 잠기기만 할 뿐 덜 잠길 일은 없어요.
2. 앱 선택기가 불편한데, 앱이 손댈 수도 없어요
iPhone에서 차단할 앱을 고르려면 Apple의 FamilyActivityPicker를 써야 해요. 앱이 바꿀 수 있는 건 위아래에 들어가는 안내 문구 한 줄뿐인 시스템 시트예요. 처음엔 카테고리 목록(소셜, 게임, 엔터테인먼트…)이 뜨고, 카테고리를 눌러 들어가야 실제 앱이 보여요. Android에서는 목록을 제가 직접 만들기 때문에, HonorFit은 설치된 앱을 최근 24시간 동안 쓴 시간 순으로 보여 줘요.
iOS 선택기에서 거슬리는 점이 두 가지 있어요.
- 실수로 카테고리 전체를 차단하기가 정말 쉬워요. 카테고리를 펼치는 대신 그 줄을 누르면, 그 안의 앱 전부가 선택돼요. 나중에 설치할 앱까지요. 많은 앱에서 이건 절대 원하는 결과가 아니에요. ‘소셜’ 전체가 아니라 인스타그램과 틱톡을 막고 싶은 거잖아요.
- 어떤 앱이 실제로 하루를 잡아먹는지 볼 수 없어요. 사람들이 앱 차단 앱을 여는 이유는 결국 ‘폰을 너무 많이 본다’예요. 선택기는 뭘 막을지 정하는 바로 그 순간인데, 시간이 어디로 새는지에 대한 정보는 하나도 안 줘요. iPhone은 앱마다 얼마나 썼는지 정확히 알고 있는데도(설정에 그대로 나와 있어요), 선택기에는 안 보여 줘요.
이건 개인정보를 하나도 희생하지 않아요. 선택기는 iOS가 자기 프로세스에서 그려요. 앱은 그 안에 뭐가 있는지 전혀 보지 못하고, 사용자가 고른 것에 대한 불투명한 토큰만 받아요. HonorFit은 말 그대로 사용자가 어떤 앱을 골랐는지 알 수 없어요. 그러니 iOS가 선택기 안에 사용 시간을 보여 줘도 앱은 여전히 아무것도 알 수 없어요. Apple은 이미 DeviceActivityReport 익스텐션으로 비슷한 일을 하고 있어요. 앱이 읽을 수 없는 샌드박스 안에서 사용 시간을 보여 주는 방식이죠.
- 선택기에서 카테고리 전체를 고를지, 앱만 고를지 정하는 옵션. 그러면 앱 차단 앱이 실수로 카테고리가 선택될 일 없는 앱 전용 목록을 보여 줄 수 있어요(웹사이트를 안 쓰는 앱이라면 웹사이트도 숨기고요).
- 각 앱 옆에 측정된 스크린타임을 표시하고 그 순서로 정렬하는 옵션. iOS가 직접 그려서 앱은 그 숫자를 절대 보지 못하게요.
3. 남은 시간을 정확한 카운트다운으로 볼 수 없어요
HonorFit에서 번 시간은 차단한 앱을 실제로 쓰고 있을 때만 줄어들어요. 그러니 당연히 보여 주고 싶은 건 카운트다운이에요. “12:34 남음”이 스크롤하는 동안 줄어들고, 앱을 나가면 멈추는 거요.
Android에서는 쉬워요. HonorFit의 백그라운드 서비스가 매초 화면에 떠 있는 앱을 확인하고, 알림은 Android에 내장된 카운트다운 타이머를 써서 알림 창이 매초 알아서 다시 그려요. 알림 창을 내리면 남은 시간이 초 단위까지 정확히 보여요.
iPhone에서는 불가능해요. 이유는 이래요.
- iOS는 사용자가 차단한 앱을 열거나 나갈 때 앱에 절대 알려 주지 않아요. 받을 수 있는 건 ‘사용 시간이 이만큼 쌓였다’는 이벤트뿐이에요. HonorFit은 15초 사용마다 이벤트를 하나씩 걸어 두고, 그 이벤트가 알림을 갱신하는 백그라운드 익스텐션으로 전달돼요.
- 일반 알림은 스스로 카운트다운할 수 없어서, HonorFit이 할 수 있는 최선은 이벤트가 올 때마다 문구를 바꿔 끼우는 거예요. 그래서 iPhone 알림에는 “약 12:30 남았어요”처럼 ‘약’이 붙어요. 15초 단위로 뚝뚝 줄어드니까요.
- 그 이벤트가 늘 제때 오는 것도 아니에요. iOS 26에서는 늦게 오거나, 여러 개가 한꺼번에 오는 걸 봤어요.
- Live Activities는 스스로 카운트다운할 수 있지만, 멈출 수가 없어요. 사용자가 인스타그램을 나갔다고 앱에 알려 주는 게 없으니, Live Activity는 폰이 테이블 위에 놓여 있는 동안에도 계속 줄어들 거고, 그건 틀린 숫자예요.
결국 iPhone 사용자는 대략적인 추정치를 보고, Android 사용자는 진짜 숫자를 봐요.
DeviceActivity 이벤트로 iOS가 직접 그리는 카운트다운을 띄울 수 있게 해 주세요. 알림이든, Live Activity든, 실드든, 모니터링 중인 앱이 화면에 떠 있을 때만 흘러가게요. iOS는 이미 그 사용 시간을 초 단위로 추적하고 있으니, 앱에 새로운 정보를 하나도 넘기지 않고 시간을 보여 줄 수 있어요. 모니터 익스텐션에 ‘차단한 앱 열림 / 닫힘’ 콜백만 줘도 대부분 해결될 거예요.이게 전부예요
Apple 편을 좀 들자면, 여기 개인정보 모델은 정말 좋아요. 앱은 사용자가 무엇을 차단했는지, 얼마나 쓰는지 절대 알 수 없고, 저는 그게 바뀌지 않았으면 해요. 위의 세 가지는 어느 것도 그걸 바꾸지 않아요. 그저 iPhone 앱도 Android 버전이 이미 그런 것처럼 쓸모 있게 만들어 줄 뿐이에요.
스크린 타임으로 개발하고 계시고 이 중에 원하는 게 있다면, Feedback Assistant로 꼭 제보해 주세요. 제가 알기로는 같은 제보가 많이 쌓여야 눈에 띄거든요. 그리고 그냥 앱을 써 보고 싶다면, HonorFit은 iPhone과 Android에서 무료예요. 마음에 들어 하실 분도 있을 거예요!