여기 팁들과 최고의 실행 노하우들과 함께 WatchKit 앱 활용을 극대화 하세요.


일반적 소개

이미지의 연속으로 생동감 표현

애플워치의 애니매이션들은 시스템이 반복적으로 형성되는 연속적인 코드 이미지소스들로 만들어졌습니다. 뿐만 아니라, 생동감을 표현하기 위해 생동감 있는 연속개체의 정해진 반복 횟수나 방향으로 이루어진 특정 순간 동안에 이미지의 범위를 구체화 할 수 있습니다.

애플워치 상에 연속되는 저장이미지

애니메이션이 시작될 때, 표현된 연속개체들은 애플워치상에 남아있어야만 합니다. 사전에 만들어진 연속개체들을 당신의 WatchKit 앱 번들에 추가시키거나, 추후에 사용할 목적으로 연속개체들을 만들거나 저장할 수 있도록 WKInterfaceDevice 를 통해 표현된 이미지 캐쉬 안에 있는 UImage 개체에 추가시켜보세요. 로드 타임을 줄이기 위해 만들고싶은 시각 효과가 있을 때 가장 적은 이미지들을 사용한 애니매이션들을 만드시기 바랍니다.

세팅번들을 사용하세요

iOS와 유사한 셋팅 번들과 함께 사용자들에게 WatchKit 앱 셋팅들의 컨트롤을 제공하세요.

바로 입력받으세요

만약에 텍스트 입력이 가능한 text input 컨트롤러를 사용하고 있다면 입력받는 시트 없이 바로 보내고 text input 모드는 plain으로 설정하세요.

상태 보관

당신의 앱 상태와 앱 사용자의 인터페이스를 인터페이스 컨트롤러의 didDeactivate: 메서드로 보관하세요. 그리고 당신의 앱과 사용자 인터페이스의 이전 상태는 루트 컨트롤러 안에 있는 willActivate: 메서드를 통해 복원됩니다.


성능

트래픽을 최소화 하세요.

WatchKit 앱의 좋은 퍼포먼스는 아이폰과 애플와치의 통신을 최소화를 요구합니다.

변경된 사항만 업데이트 하세요.

당신의 WatchKit 확장은 컨트롤러 안에 모든 Properties상의 리로딩 값 대신 변화된 값만을 업데이트 해야 합니다. 특히 이것은 Table 행을 컨트롤할 때 중요합니다. 전체 Table을 리로딩하는 변화된 값을 업데이트, 추가 혹은 제거 하시기 바랍니다.

비동기 컨텐츠 로딩

당신의 Watchapp의 Launch시간을 최대한 활용하고 당신의 앱을 더욱 반응하게 하기 위해, 컨트롤러가 사용자에게 보여진 이후에 컨트롤러의 초기 화면아래에 있는 컨텐츠를 로드하시기 바랍니다.

dispatch_async를 호출하여 WKInterfaceController willActivate: 메서드로 컨트롤러가 보여지기 전까지 특정 컨텐츠 셋팅을 딜레이 할 수 있습니다.

정렬된 컨트롤러를 빠르게 초기화하세요

정렬된 컨트롤러의 로딩 시간을 줄이기 위해, 각각의 모든 페이지들에 대한 셋업작업을 최초 호출되는 willActivate: 메서드 안에서 완료하시고 최초 불러온 컨텐츠만을 셋업하기 위해서 상태를 관리하시기 바랍니다. 정렬된 컨트롤러가 만들어졌을 때, 첫번째 페이지에서 willActivate: 가 호출되기 전에 init: 와 awakeWithContext: 가 각각의 페이지에 호출될 것입니다.

시스템은 모든 페이지들이 사용자들의 첫번째 페이지에 나타나기 전에 init:awakeWithContext: 안에서 셋업 작업을 끝내기 전까지 기다릴 것입니다.

단순한 컨트롤러 화면들.

로딩시간을 최대한으로 향상시키기 위해가능한 한 많은 숨겨진 개체들을 줄이시기 바랍니다. 예를들어, 싱글 컨트롤러 안에 있는 컨트롤러의 레이아웃의 5가지 버젼은 컨트롤러가 나타나기 전에 모든 객체들이 만들어지는 결과를 초래할 것입니다.

더 적은 테이블 행으로 로딩시간을 향상시키세요.

꼭 초기 화면 상에 최적의 행 갯수를 만드시고, 추가적 행들의 로딩을 willActivate: 가 끝날때 까지 지연시키시기 바랍니다. 모든 테이블은 컨트롤러가 나타나기 이전에 만들어지고 당신이 정의하는 행들이 많아 질 수록 컨트롤러 화면에 지속될 것입니다.


아이폰과의 통신.

아이폰 앱은 대부분의 작업을 수행해야 한다.

만약 당신의 앱이 애플워치 상에서 네트워크 호출과 같은 더 긴 러닝 백그라운드 작업을 수행해야 한다면, 그 작업들을 수행하기 위해 당신의 아이폰 앱을 의존하여야 한다

당신의 아이폰 앱이 배경에서 반응하게 할 수 있도록 WKInterfaceController 안에 있는 openParentApplication:reply: 메서드를 사용해서 당신의 WatchKit 익스텐션에 필요한 데이터를 반환하세요.

UIApplicationDelegate 메서드는 WatchKit의 요청을 즉각적으로 처리해서 리턴해야 한다. 예시를 위한 네트워킹 수행을 위해 동시 다발적이지 않은 호출이 요구된다면, 앱이 응답을 받기 전에 중지되지 않았다는 것을 확인하기 위해 백그라운드 테스크를 사용하라.

앱 그룹들과 데이터를 공유하라

App Groups와 NSUserDefaults 를 통해 당신의 iOS앱과 WatchKit 적은 양의 데이터를 쉽게 공유하라 코어데이터 스토어와 같은 다른 리소스들에 접근을 위해, 날짜 정보를 제공하고 데이터 접근을 간소화 할 수 있도록 당신의 iOS앱과 WatchKit익스텐션 사이에 공유된 컨테이너를 사용하세요.

핸드오프 사용

핸드오프는 사용자가 당신의 애플워치상의 앱과 아이폰 상의 앱 사이를 쉽게 이동할 수 있도록 해준다.

WKInterfaceController 안에서 사용 가능한 핸드오프 API는 당신의 Glance 안에서 사용될 수 있고 당신의 아이폰 앱상으로 깊은 연결을 만들 수 있도록 커스텀 노티피케이션 인터페이스에서 사용될 수 있다.

당신의 화면에 현재 하고있는 것에 대한 관련 정보를 모으기 위해 핸드오프 API를 사용하시고 실행중인 당신의 앱에 다른 화면을 나타낼 수 있도록 당신의 앱의 메인 인터페이스 컨트롤러로 넘기세요

Learn more about Handoff 핸드오프에 대해 더 알아보기

프레임워크들과 코드를 공유하세요.

당신의 iOS앱과 WatchKit 익스텐션 사이에 코드를 공유하기 위해서 프레임워크를 만드세요. 프레임워크는 당신의 코드가 접근 가능하도록 유지시켜주고, 불필요한 중복을 막아주며 당신의 프로젝트 내에서 코드의 버그가 여러 인스턴스 통해서 버그를 수정했다는 것을 확인해 줍니다.

원문 https://developer.apple.com/watchkit/tips/