Watch Kit이 어제 공개되었다. Watch Kit은 Xcode 6.2에서 SDK를 제공할 예정이며 현재 (2014.11.20)는 베타 버전이다. 지금도 Xcode 6.2 베타 버전을 설치한다면 시뮬레이터로 Watch App을 실행 가능하다. Watch Kit에서 제공하는 구성요소는 크게 Watch에서 구동하는 'App'과 간단한 정보만을 표시하고 터치할 때 앱을 실행시키는 'Glances', 알림을 표시하고 사용자의 동작을 유도하는 'Notification' 등 3가지이다.
Watch App & Watch Extension
먼저 Watch App부터 설명하면 Watch App은 단순히 UI와 UI 리소스만을 포함한다. 실제로 데이터를 처리하고 요청하는 등의 비지니스 로직은 iOS App의 Extension 형태로 개발되는 구조이다. 위의 그림에서 보다시피 iOS8에서 제공되는 App Extension처럼 별도의 타겟으로 Watch Extension을 생성하여 Watch App과 iOS App이 상호 작용하는 구조이다. App Extension에 대해서 잘 모르시는 분은 위젯에 관한 글을 참고하도록 하자.
Extension을 통한 데이터의 공유는 App Group에 등록된 ID를 사용하여 UserDefault를 사용하면 된다. 파일을 공유하기 위해선 NSFileManager의 Shared container 기능을 활용하면 되며 설명된 2가지 방식을 보면 알다시피 기존의 다른 App Extension의 데이터 공유 방식과 같음을 알 수 있다. ('containerURLForSecurityApplicationGroupIdentifier:')
다른 Extension과 다른 것이 있다면 기존 Extension은 실행 코드를 포함하여 UI 표시 여부에 따라 UI 구현까지 됐다면 Watch Extension은 위에서 말한거와 같이 Watch App에 UI와 UI 리소스가 분리되어 있다는 것이다. Watch Kit의 UI Components는 WKInterfaceObject를 상속 받으며 아래의 그림에서 같이 크게 11가지로 구성되어 있다. UI의 로직은 WKInterfaceController를 상속받아 구현이 가능하다. 기기에 관한 정보는 WKInterfaceDevice를 사용할 수 있으며 사용 가능한 정보는 스크린 정보와 지역 설정, 이미지 캐시 등이다. iOS App에서 같이 화면 전환을 위한 Navigation과 Page Control을 제공한다. Modal interface도 사용 가능하며 왼쪽 상단에 Modal interface를 지우기 위한 라벨을 제공한다. 기본적으로 'Cancel (취소)'이라는 문장이 입력되며 임의로 변경도 가능하다.
Watch Kit에서만 별도로 제공하는 UI 기능 중에 Context Menu가 있다. Apple Watch는 감압식 터치를 사용하여 디스플레이를 세게 누르는 것과 살짝 tap하는것을 구분이 가능하다. 세게 눌렀을 때 표시 되는 것이 Context Menu이다. Context Menu는 해당 화면에서 적절한 부가 메뉴를 표시한다. Story board를 통해 Context Menu를 구현할 수 있으나 Story board를 통해 만들 경우, 런타임에서 변경이 불가능하기 때문에 좀 더 유연한 Context Menu 구현을 위해선 WKInterFaceController의 메소드를 활용한다. 추가적으로 Watch Kit에서 제공하는 Table View는 row만 존재하며 section을 나눌 수 없는 것이 Watch Kit에서 제공하는 UI만의 특징 중 하나이다.
Glances
다음으로 Glances가 있다. Glances는 사용자에게 즉시 중요한 정보만 간략하게 표시하기 위한 인터페이스로 스크린에 딱맞는 사이즈만을 제공한다. 데이터를 Push를 통해 수신할 수 없고 Glances가 표시될 때, 데이터를 Pull하는 방식으로 동작한다. 스크롤도 할 수 없고 사용자의 입력도 받을 수 없으며, Glances를 터치하면 오로지 앱을 실행하기만 한다. Glances를 통한 앱 진입 시의 동작을 따로 구현이 가능하다. Glances의 UI 설계를 위해 Story board에서는 Glances entry를 제공한다. Glances는 Watch App 구현을 위한 필수 요소가 아니므로, 앱 외적으로 사용자의 편의를 위한 정보 표시가 필요할 때 구현하면 된다. Glances의 예시 화면은 아래와 같다.
Notification
Notification은 Glances에 비해 유연하며 기능이 확장되어 있다. 2가지의 interface를 제공한다. Short-Look은 사용자가 알림을 확인할 수 있는 가장 첫 화면이다. 스크롤이 불가능하며 customize 또한 불가능하다. 시스템은 오로지 App icon과 App name, notification payload에 설정된 Title 메시지만을 참고하여 Template으로 표시한다. Short-Look Notification은 아래와 같다.
사용자가 Short-Look Notification을 확인하고자 한다면 Long-Look Notification으로 넘어가게 되며 Long-Look Notification을 정의하지 않은 경우엔 Short-Look 과 비슷하게 기본화면이 표시되지만 Title 메시지와 더불어 notification payload에 설정된 Alert 메시지를 같이 표시한다. Long-Look은 크게 3가지 부분으로 나눌 수 있다. 위에서부터 순서대로 Sash, Content Area, Bottom Area로 나뉜다. Sash는 상단에 App icon과 App name이 표시되는 부분으로 색만 개발자가 설정 가능하다. Content Area는 상세 정보가 표시되는 영역으로 개발자 임의로 구현이 가능하다. 마지막으로 Bottom Area는 Notification을 지우는 버튼과 더불어 사용자가 취할 수 있는 동작을 정의한 Action Button들이 표시된다. 화면 예시는 아래와 같다. 참고로 Remote Notification 등록은 Watch App이 아닌 Watch Extension에서 할 수 있다.
Conclusion
현재 공개된 여건 상, Watch Kit의 기능은 상당히 제한적이다. 사용할 수 있는 기능은 iOS App에서 수집한 데이터를 Watch Glances라는 UI를 통해 정보를 표시하거나 Notification을 통해 알림을 받고 이에 대해 어떻게 처리할지 사용자에게 묻는 정도이다. 심지어 Apple은 Apple Watch를 통한 쾌적하고 빠른 반응성을 제공하기 위해 복잡한 연산들을 iOS App에 맡기길 권장하고 있다. 밑에 Apple이 권장하는 Watch Kit을 통한 개발 가이드를 요약했다. 현재 Watch Kit에 관한 더 자세한 내용은 Apple이 공개한 Document를 통하여 확인이 가능하다.
Core location과 같은 사용자에 관한 권한 요청을 피해라. 만약 Watch Extension에서 처음으로 권한을 요청한다면 사용자의 아이폰에 예상치 못한 메시지를 표시할 수도 있다. 만약에 사용자의 폰이 주머니에 들어있다면 사용자는 이를 확인하지 못할 수도 있다.
Background 실행을 사용하지 마라. Watch extension을 오로지 사용자가 직접 Watch App을 사용하는 Foreground만을 고려했고 사용자가 조작할 때만 실행된다. 결론적으로 Background Execution을 지원하지 않는다.
Long-task를 피해라. Watch Kit은 사용자의 사용이 끝난 앱을 suspend 시킨다. Watch App은 일반적으로 아주 잠깐동안 동작하기 때문에 요청한 데이터가 도착하기도 전에 Extension이 suspend될 수 있음을 참고해라.
출처 : Apple Watch Kit Programming Guide, Apple Watch Kit Framework References
'Programming > Mac & iOS' 카테고리의 다른 글
[iOS] iOS에서 쿠키 사용하기 (NSHTTPCookieStorage, NSHTTPCookie) (1) | 2014.12.03 |
---|---|
[iOS] iOS 멀티태스킹 (Background Service 이용하는 법 : iOS7 이상) (0) | 2014.11.24 |
[iOS] Notification Action : Interactive Notification in iOS8 (0) | 2014.09.18 |
[iOS] App Extension : Today view (Widget) (0) | 2014.09.18 |
[Swift] 알면 좋은 Array에서 제공하는 함수 (map, filter, reduce) (0) | 2014.09.12 |