nyancoder

WWDC 2021 - Adopt Quick Note 본문

WWDC/WWDC 2021

WWDC 2021 - Adopt Quick Note

nyancoder 2021. 8. 11. 02:40

원본 영상: https://developer.apple.com/videos/play/wwdc2021/10264/

 

 

Quick Note

  • 메모 앱으로 전환하는 대신 연필을 사용하여 화면의 오른쪽 하단 모서리에서 위로 스와이프 하여 새로운 메모를 작성할 수 있습니다.

  • 새로 작성하는 노트 상단에 링크 추가 메뉴가 있으며, 이를 선택하면 해당 웹사이트에 대한 링크가 추가됩니다.

  • PIP(Picture-in-Picture)와 유사하게 Quick Note는 어느 화면상의 어느 위치에나 배치할 수 있습니다.
  • 또한 두 손가락으로 크기를 조절할 수 있습니다.
  • UI를 오른쪽으로 스와이프 하면 잠시 밀어 넣어 두었다가 원할 때 꺼낼 수 있습니다.

  • 더 큰 화면이 필요할 때에는 도구 모음에서 메모 아이콘을 탭 하여 메모 앱에서 작성 중인 메모 화면을 볼 수 있습니다.

  • 특정 링크를 포함한 메모가 있을 때, 해당 링크의 사이트로 이동하면 빠른 메모 제안이 우측 하단에 표시됩니다.
    이를 탭 하면 해당 메모로 이동할 수 있습니다.

  • iPad에서 작성된 메모라도 Mac에서 접근할 수 있으며, 해당 링크를 방문하면 빠른 메모 제안 UI가 Mac에도 나타납니다.


How it works

  • NSUserActivity 객체는 앱의 상태를 캡처하고 나중에 사용할 수 있는 방법을 제공합니다.
  • 이는 웹 페이지를 보거나 앱의 콘텐츠를 볼 때에 생성되며 각 앱은 현재 활동을 시스템에 등록합니다.
  • 시스템은 이러한 활동을 가져와 Handoff와 같은 기능으로 보냅니다.

  • 등록된 NSUserActivity는 Handoff, Spotlight, Reminders로 전달되는 것 이외에도 Quick Note로 전송되며, 이를 통해 Quick Note를 제안할 수 있습니다.

  • NSUserActivity에서 제공되는 targetContentIdentifier, persistentIdentifier, webpageURL 속성 중 하나 이상을 설정하면 Quick Note와 연결할 수 있습니다.
  • targetContentIdentifier는 상태 복원 중에도 사용되며, iPad에서 실행되는 멀티태스킹 시에도 사용됩니다.
  • persistentIdentifier는 시스템의 Spotlight 색인에서 앱 콘텐츠를 식별할 때도 사용됩니다.
  • webpageURL은 Handoff 동안 웹 페이지를 다시 불러오기 위해서도 사용됩니다.

  • Quick Note 링크가 작동하려면 해당 식별자가 콘텐츠에 대해 고유해야 합니다.
  • 또한 모든 장치에서 작동할 수 있는 전역적인 값이어야 하며, 시간이 지나도 사용할 수 있는 안정적인 값이어야 합니다.

  • 예를 들어 메모에 등록했던 사이트로 이동했을 때 빠른 메모 제안 UI가 표시되는 이유는, 6개월 전에 생성된 링크의 식별자가 여전히 현재의 식별자와 일치하기 때문입니다.

  • NSUserActivity를 적용하기 위해서는 우선 앱의 Info.plist에서 지원되는 활동을 선언해야 합니다.
  • 그다음 화면에 표시되는 내용을 설명하는 사용자 활동을 생성 및 등록하고, 활동을 지속하기 위해 들어오는 요청을 처리해야 합니다.

  • Info.plist 파일에서 NSUserActivityTypes키에 앱이 지원하는 활동 유형을 선언하면 됩니다.
  • 시스템은 해당 키의 정보를 사용하여 앱이 사용자 활동 개체를 처리할 수 있는지 여부를 결정합니다.

  • NSUserActivity 개체를 생성하려면 plist에 등록된 활동 유형 중 하나를 사용하고 title을 설정합니다.
  • 앞에서 언급된 세 가지 식별자 중 하나 이상을 설정합니다.
  • 이 예에서는 앱이 상태 복원에도 관심이 있는 iPad 앱이라고 가정했기 때문에 targetContentIdentifier를 설정합니다.
  • 이를 응답할 view controller나 window등에 등록해두면 시스템이 UIKit 및 AppKit을 통해 자동으로 처리합니다.
  • NSUserActivity는 크로스 플랫폼이기 때문에 이 코드는 iOS와 macOS 양쪽 다 작동합니다.

  • 마지막으로 전달되는 Activity를 수신하고 앱에서 상태를 복원을 해야 합니다.
  • 링크를 탭 하면 Quick Note가 앱을 시작하고 UIWindowSceneDelegate의 scene(willContinueUserActivityWithType)를 호출합니다.
  • 그다음 Quick Note는 scene(continue)를 호출하며, 여기에서 View Controller나 View를 설정하여 활동을 복원할 수 있습니다.
  • Handoff의 경우 장치를 연결할 수 없으면 시스템에서 오류 메시지를 표시할 수 있는 scene(didFailToContinueUserActivityWithType)을 호출합니다.
  • 이 메서드는 Quick Note 의해 호출되지 않지만 NSUserActivity의 올바른 동작을 위해 구현하는 것이 좋습니다.

  • macOS 앱의 경우 AppDelegate에서 동일한 application(willContinueUserActivityWithType), application(continue) 및 application(didFailToContinueUserActivityWithType)을 구현합니다.

  • Quick Note를 위해 NSUserActivity를 사용하면 위의 항목들을 얻을 수 있습니다.
  • Handoff는 기본적으로 활성화되어 있으며, 나머지는 설정이 가능합니다.
  • 앱에서 문서에 대한 알림을 만들 거나 다중 창 처리를 개선하는 등의 이점을 얻을 수 있습니다.

 

Best practices

  • Quick Note에 NSUserActivity를 사용할 때의 각 항목에 대해서 알아보겠습니다.

  • title 속성은 해당 활동에 대해 사람이 읽을 수 있는 문자열을 제공합니다.
  • 따라서 내용을 잘 설명하는 문서의 제목 같은 문자열을 사용하는 것이 좋습니다.

  • 식별자는 고유하고 전역적이며 안정적으로 만들어야 하기 때문에, 기기별 데이터나 로컬 파일 경로 등을 피해야 합니다.
  • 또한 특정 파일의 제목과 같은 수정 가능한 항목의 경우 변경될 수 있기 때문에 UUID 같은 안정적인 값을 채택해야 합니다.

  • Quick Note는 식별자로 웹페이지의 URL 보다 targetContentIdentifier 또는 persistentIdentifier를 선호하며, 앱이 상태 복원과 Spotlight 양쪽에 NSUserActivity를 사용하는 경우 targetContentIdentifier 및 PersistentIdentifier에 동일한 값을 사용해야 합니다.
  • 웹사이트 URL을 두 번째 대체 식별자로 추가하면 앱이 설치되지 않은 경우 링크를 열었을 때, 웹사이트로 리디렉션 되도록 할 수 있습니다.

  • 앱의 현재 NSUserActivity가 현재 상태에 잘 맞는지를 확인해야 합니다.
  • 다른 사진 보기를 선택하는 것과 같이 활동 변경을 감지할 때 제목 및 식별자 속성을 정확하게 유지해야 합니다.
  • 새 콘텐츠가 있을 때는 새 인스턴스를 만들고 기존의 인스턴스를 재사용하지 않는 것이 좋습니다.

  • ViewController 또는 View에 현재 활동을 연결하여 UIKit 및 AppKit이 처리하도록 해야 합니다.

  • becomeCurrent()와 resignCurrent()를 호출하여 현재 앱 활동을 수동으로 관리할 수 있습니다.
  • 예를 들어 사진 보기가 끝나면 앱은 현재 활동에 대해 resignCurrent()를 호출하고, 새 사진이 선택되면 앱은 새 활동에 대해 becomeCurrent()를 호출합니다.

  • 더 나은 성능을 위해 activity의 "needsSave" 속성을 활용할 수 있습니다.
  • 예를 들어 지도를 볼 때의 위치 및 확대/축소와 같은 빈번한 변경은 매번 업데이트하는 대신 needsSave를 true로 설정할 수 있습니다.

  • needsSave가 설정된 경우, 시스템이 활동을 Quick Note 또는 Handoff로 보낼 때 userActivityWillSave를 호출하여 현재 값으로 업데이트할 수 있습니다.

  • 앱이 업데이트되었을 때, 이전 버전의 링크를 받게 되면 성공적으로 처리되어야 합니다.
  • 또한 새 버전의 링크를 이전 버전에서 받게 되었을 때 정상적으로 실패하는 것도 고려되어야 합니다.

  • 연결된 콘텐츠가 삭제된 경우에는 적절한 오류 메시지를 보여줘야 합니다.
  • 연결된 콘텐츠가 이동한 경우에는 적절하게 리다이렉션 해주어야 합니다.

 

목차: https://nyancoder.tistory.com/2

 

Comments