[WWDC18 Review #5] What’s New in watchOS

Notifications

iOS 12에 새롭게 도입된 Notification 기능을 watchOS 5에서도 사용할 수 있습니다.

  • Dynamic Notification은 watchOS 1부터 지원했지만, Notification Center에서 확인할 때는 Static Notification이 제공되었습니다. watchOS 5부터는 Notification Center에서도 Dynamic Notification을 확인할 수 있습니다.
  • iOS 12와 마찬가지로 앱 별로 그룹핑 됩니다. Thread ID를 활용해서 Custom Group을 생성할 수 있습니다.
  • 그룹핑은 기본적으로 비활성화 되어 있습니다. 기능을 활성화 하려면 Interface Builder에서 Category 항목을 선택한 다음 Attbibute Inspector에서 Handles Grouping 옵션을 체크합니다.
  • 그룹핑이 활성화 되어 있으면 Notification Controller에 구현되어 있는 didReceive(_:) 메소드가 반복적으로 호출됩니다. 그래서 기존 화면에 새로운 내용을 추가하거나  전달된 Notification 내용을 반영하도록 구현해야 합니다.
  • didReceive(_:withCompletion:) 메소드는 이전 버전과의 호환성을 유지해야 하는 경우에만 사용하고, watchOS 5부터는 새로운 didReceive(_:) 메소드로 대체되었습니다.
    @available(watchOS 3.0, *)
    @available(watchOS, deprecated: 5.0, message: "use didReceiveNotification:")
    open func didReceive(_ notification: UNNotification, withCompletion completionHandler: @escaping (WKUserNotificationInterfaceType) -> Void)
    
    
    @available(watchOS 5.0, *)
    open func didReceive(_ notification: UNNotification)
  • Dynamic Interactive Interface에 버튼이나 스위치 등을 추가하고 터치 이벤트를 처리할 수 있습니다. Gesture Recognizer를 추가할 수도 있지만 System Gesture가 항상 우선권을 가집니다.
  • Xcode 10에서 새로운 Notification Interface Controller를 추가하면 Static Interface, Dynamic Interface와 함께 Dynamic Interactive Interface가 생성됩니다.
  • 기존 프로젝트에서는 Category를 선택하고 Has Interactive Interface 옵션을 체크해서 생성할 수 있습니다.
  • Static Interface, Dynamic Interface에서는 Default Action과 Dismiss Action이 활성화 되어 있습니다. 하지만 Dynamic Interactive Interface에서는 비활성화 되어 있습니다. 액션을 실행해야 한다면 아래의 메소드를 직접 호출해야 합니다.
    performNotificationDefaultAction()
    performDismissAction()
  • notificationActions 속성을 통해서 Notification에 표시되는 액션 목록을 동적으로 업데이트 할 수 있습니다.
    override func didReceive(_ notification: UNNotification) {
        let newActions = [UNNotificationAction(identifier: "endRental", title: "End Rental", options: []), UNNotificationAction(identifier: "help", title: "Get Help", options: .foreground)]
        self.notificationActions = newActions
    }
  • Critical Alerts와 Provisional Notification을 지원합니다.

Local Audio Playback

watchOS 5부터 오디오 재생 기능을 더 쉽게 구현할 수 있습니다.

  • 새로운 audio Background Mode가 추가되었습니다.
  • AVFoundation 프레임워크를 통해 AVAudioPlayer, AVAudioEngine API를 사용할 수 있습니다. iOS 앱과 동일한 API로 오디오 앱을 개발할 수 있게 되었습니다.
  • MPNowPlayingInfoCenter API를 통해 앱이 재생하고 있는 미디어 정보를 표시할 수 있습니다.
  • 리모콘 이벤트를 앱에서 처리할 수 있습니다.
  • Volume Control View를 활용해서 앱에서 직접 볼륨을 조절할 수 있습니다.
  • Now Playing View를 앱에 추가할 수 있습니다. 이 뷰는 화면 전체를 채우기 때문에 페이지 레이아웃에 적합합니다.

Workouts App Improvements

Workout API가 새롭게 구현되었습니다. 이전보다 더 쉽게 구현할 수 있고, 신뢰성이 증가했으며 오류를 효율적으로 처리할 수 있습니다.

  • 새로운 Workout Builder API를 사용할 수 있습니다.
    // Create session

    let session = try HKWorkoutSession(healthStore: healthStore,
 configuration: workoutConfiguration)
    
    // Retrieve builder

    let builder = workoutSession.associatedWorkoutBuilder() 
    
    // Start

    builder.beginCollection(withStart: nil, completion: { (success, error) in

        // Handle error

    })
  • 크래시가 발생한 후에 기존 세션을 복구할 수 있습니다.
    // HKHealthStore.h
    @available(watchOS 5.0, *)
    open func recoverActiveWorkoutSession(completion: @escaping (HKWorkoutSession?, Error?) -> Void)

Siri Shortcuts

Siri Watch Face에 Siri Shortcuts을 추가할 수 있습니다. 사용자는 반복적인 작업들을 쉽고 빠르게 실행할 수 있습니다.

  • Siri Shortcuts은 가장 연관성이 높은 항목부터 순서대로 표시됩니다.
  • 항목의 순서는 시간이나 장소에 따라 가장 적합한 순서로 업데이트 됩니다.
  • 앱에서 중요한 기능을 실행할 때마다 Intent나 User Activity를 Siri가 인식할 수 있도록 전달해야 합니다.
  • Intent가 백그라운드 실행을 지원한다면 앱을 실행하지 않고 Watch Face에서 연관된 기능을 인라인 방식으로 실행할 수 있습니다.
  • Siri Watch Face에 Siri Shortcuts을 표시하기 위해서는 Relevant Shortcut(INRelevantShortcut)을 생성해야 합니다. Relevant Shortcut은 시점과 장소에 대한 힌트를 제공합니다.
  • Relevant Shortcut을 생성한 후에는 Relevant Shortcut Store에 저장합니다. iOS 앱과 watchOS 앱에서 원하는 항목을 저장할 수 있습니다.
  • 저장된 항목은 주기적으로 동기화 됩니다.
  • watchOS 앱이 iOS 앱의 Siri Shortcut을 지원하는 경우에는 watchOS 엡에서 직접 실행할 수 있습니다. 반대로 지원하지 않거나 연관된 watchOS 앱이 설치되어 있지 않은 경우에는 iPhone에서 실행됩니다.
  • 다음과 같은 조건을 만족하는 경우 Siri Face에서 iOS Shortcuts을 실행할 수 있습니다.
    • Intent based
    • Background execution
    • No protected data needed
  • 사용자가 iPhone에서 추가한 Shortcut Pharases는 watch로 동기화 됩니다.

Other Improvements

  • 특정 variation에 에셋을 추가하지 않으면 다른 variation에 있는 에셋을 사용합니다. 예를 들어 이전 버전에는 38mm 에셋을 추가하고 42mm 에셋을 추가하지 않았다면 42mm 환경에서는 에셋을 사용할 수 없었습니다. 하지만 이제부터는 42mm 에셋을 제공하지 않으면 38mm 에셋을 사용합니다.
  • PDF 벡터 이미지를 Universal 에셋으로 추가하고 Auto Scaling 옵션을 Automatic으로 설정하는 것을 권장합니다.
  • Text Styles 옵션에 Title 스타일이 추가되었습니다.

 

이 글은 WWDC18 Session 206 What’s New in watchOS을 요약한 글입니다. 글쓴이의 관심사가 아닌 일부 내용은 생략되어 있습니다.