본문으로 건너뛰기

iOS·watchOS 앱을 위한 플랫폼 결정 체크리스트

A checklist of platform decisions for iOS/watchOS apps. What am I missing?

runara.me

핵심 요약

  1. 화면 크기와 텍스트 크기, 기기 지원 범위부터 Live Activities와 권한 처리까지, 앱이 플랫폼에서 마주치는 결정을 지원 또는 제외로 명시한다.
  2. Runara는 watch 화면을 기기 크기에 맞춰 조정하고, 오래된 watch의 배터리 소모를 줄이며, Live Activities의 갱신 주기를 3초에서 10초로 변경했다.
  3. 지원하지 않는 플랫폼과 기능도 이유를 기록해야 한다. 작성자는 이를 통해 이미 검토한 결정을 매번 다시 논의하지 않고 주요 릴리스 전 점검에 활용하라고 제안한다.

도입

앱은 메인 화면뿐 아니라 잠금 화면, Dynamic Island, 위젯, Siri, 공유 시트와 여러 기기에서 동작한다. Runara 개발자는 iOS·watchOS 앱의 기능을 만들기 전에 화면 크기, 방향, 접근성, 권한, 기기 세대 등 다양한 선택을 내려야 했다고 설명한다. 이 글은 러닝 앱 Runara의 선택과 그 이유를 정리하고, 다른 앱에서도 지원 여부를 결정할 수 있는 체크리스트를 제시한다.

상세 요약

결정은 기능 목록보다 넓다

Runara 2.0은 watch 화면을 QR 코드나 공유 코드로 가져오는 기능과 화면·배터리 개선을 포함했다. 2.1은 운동 기록을 readiness, training load, 주간 보기, 구간 기록과 훈련 효과 중심으로 재구성했다. 글의 초점은 릴리스 기능이 아니라, 이를 만들기 전에 정한 플랫폼 지원 범위와 동작 규칙이다.

화면과 기기 지원

  • watch 화면은 40mm부터 49mm까지의 크기에 맞춘다. 공간이 부족하면 패딩을 먼저 줄이고 행 높이를 조정하며, 마지막에 숫자 크기를 줄인다. 값은 축소할 수 있지만 잘리지 않아야 한다는 기준으로 가장 작은 watch와 긴 시간 값도 확인한다.
  • iPhone은 세로 화면만 지원한다. 단, iPhone Duo의 내부 화면에서는 시스템이 방향 잠금을 무시하므로 앱이 넓은 화면에 맞춰 적응한다. 닫힌 상태와 열린 상태, 부분 접힘 상태에 각각 다른 레이아웃을 적용하며, 새 레이아웃은 다른 iPhone에 영향을 주지 않는 폭에서만 켠다. 일반 iPhone의 스크린샷은 픽셀 단위로 비교한다. 관련 기기의 레이아웃 검증은 iPhone Duo Simulator로 SwiftUI 앱의 레이아웃과 동작 테스트하기에서도 다룬다.
  • iPhone에서는 Dynamic Type을 따르지만 watch의 실시간 숫자는 크기를 고정한다. 어두운 테마를 기본으로 하고, watch 화면 스타일 중 Field Utility만 밝은 화면을 제공한다.
  • 지원 기기는 iPhone과 Apple Watch뿐이다. 최소 버전은 iOS 26과 watchOS 26이다. iPad, Mac, visionOS와 여러 창은 지원하지 않는다.

시스템 기능과 하드웨어

Live Activities는 잠금 화면과 Dynamic Island에 운동 시간, 거리, 페이스, 심박수를 표시한다. 갱신 간격은 3초에서 10초로 늘렸고, 일시 정지와 재개 때는 즉시 갱신한다. 위젯은 training load와 form을 여러 크기로 제공하며, 운동 중 실시간 표시와 위젯의 역할은 구분한다. watch 페이스에는 시작 버튼과 training load 컴플리케이션을 둔다.

Siri와 Shortcuts에는 운동 시작과 새 구간 기록 두 가지 동작만 제공한다. Ultra의 Action 버튼은 같은 동작을 사용하며, 설정은 실제 Ultra를 연결했을 때만 노출한다. 화면 두 번 탭과 하드웨어 Double Tap은 기본적으로 새 구간 기록으로 연결한다. 길게 누르기는 지도 확대, Digital Crown은 지도 확대와 운동 강도 평가에 사용한다.

권한, 접근성, 데이터

Health, 위치, 동작 권한은 각각 심박 데이터·운동 저장, 경로 기록, 케이던스 측정에 사용한다. 카메라는 코드 스캔 때, 사진 보관함은 비행 영상 저장 때 요청한다. 권한을 거부해도 기능이 왜 동작하지 않는지 안내하고, Health 접근이 거부된 경우 설정 화면으로 연결한다. 새 Health 데이터 유형이 필요한 기능은 기존 사용자가 다시 권한을 부여할 수 있도록 앱이 이전 권한 설정 버전을 기억한다.

VoiceOver는 지표와 단위를 하나의 요소로 읽고, 심박 구간에는 색각 이상 팔레트를 제공한다. Reduce Motion이 켜져 있거나 손목을 내린 상태에서는 애니메이션을 즉시 처리한다. 다만 실시간 숫자의 변경을 음성으로 알리지 않는 점은 남은 과제로 밝힌다. 앱과 음성 안내는 영어, 독일어, 프랑스어로 제공한다.

출시 전 점검 목록

체크리스트는 화면 크기, 회전, 텍스트 크기, 플랫폼, 여러 창, 접근성, Live Activities, 위젯, 컴플리케이션, App Intents, 공유, 권한, 새 기기 유형, 제스처, Action 버튼, 번역, 애니메이션, 기기 세대, iCloud, 밝고 어두운 화면 등 20개 항목으로 구성된다. 각 항목을 지원 또는 제외로 표시하고 이유를 기록하며, 결정은 브라우저에 남기거나 Markdown으로 다운로드할 수 있다.

작성자는 Android를 추가하면 별도의 UI 프레임워크와 언어, 더 많은 화면 크기, 여러 제조사의 watch와 건강 플랫폼을 고려해야 한다고 설명한다. 따라서 Runara는 Apple 생태계만 지원한다. 중요한 기준은 모든 항목에 예라고 답하는 것이 아니라, 선택과 제외를 의식적으로 결정하고 기록하는 것이다.

결론

체크리스트의 목적은 모든 플랫폼 기능을 지원하는 데 있지 않다. 각 항목을 지원하거나 제외하기로 정하고, 그 이유를 남기는 데 있다. 작성자는 주요 릴리스 전에도 결정을 다시 점검하고, 답변을 브라우저에 저장하거나 Markdown으로 내려받을 수 있게 했다. 지원 범위와 제외 이유를 기록하면 이후 같은 선택을 되풀이해 검토하지 않아도 된다.