스트리밍은 대부분의 브라우저와
Developer 앱에서 사용할 수 있습니다.
-
잠금 화면 카메라 캡처 경험을 멋지게 빌드하기
LockedCameraCapture API로 캡처 애플리케이션의 중요 정보를 잠금 화면에 바로 가져오는 방법을 확인해 보세요. 해당 API의 기능 및 사용 목적을 살펴보고, 캡처 확장 프로그램을 제작하는 방법을 알아보고, 이러한 확장 프로그램이 기기가 잠겼을 때 어떤 동작을 하는지 확인해 보세요.
챕터
- 0:00 - Introduction
- 1:39 - Great capture experiences
- 3:33 - Lifecycle of a capture extension
- 4:49 - Running on a locked device
- 10:48 - Capturing from the Lock Screen
- 18:31 - Working with captures in your app
리소스
- Creating a camera experience for the Lock Screen
- Creating controls to perform actions across the system
- Forum: Photos & Camera
- Human Interface Guidelines: Controls
관련 비디오
WWDC24
-
다운로드
안녕하세요, iOS System Experience 팀의 엔지니어 Adam입니다 오늘은 잠금 화면에 대해 멋진 카메라 캡처 경험을 빌드하는 방법을 보여 드리겠습니다 iPhone으로 멋진 순간을 아주 쉽게 캡처할 수 있어서 마음에 듭니다 iPhone을 주머니에서 꺼내면 잠금 해제할 필요도 없이 동작 버튼, 제어 센터 또는 잠금 화면에서 카메라를 실행할 수 있습니다 순식간에 저는 멋진 사진을 찍고 있습니다 오늘 Apple Park에서 찍은 이 사진처럼요 iOS 18의 새로운 기능으로 iPhone과 iPad 모두의 잠금 화면에서 곧바로 카메라를 경험할 수 있습니다 이 유형의 캡처 경험은 iOS 18에 도입되는 새로운 프레임워크로 활성화됩니다 바로 LockedCameraCapture 프레임워크입니다 LockedCameraCapture 프레임워크에는 잠금 화면에서 실행되는 멋진 카메라 캡처 경험을 빌드하기 위한 구성 요소들이 포함되어 있습니다 이 캡처 경험을 빌드할 수 있도록 LockedCameraCapture로 도입된 한 가지 주요 구성요소는 새로운 확장 프로그램 유형인 Locked Camera Capture Extension입니다
이 세션에서는 멋진 카메라 캡처 경험의 특징을 알아보고 캡처 확장 프로그램의 라이프 사이클을 안내한 다음 잠긴 기기에서 실행하기 위한 몇 가지 중요한 고려 사항에 대해 설명하겠습니다 잠금 화면에서 멋진 사진과 비디오를 캡처하는 방법에 대해 더 자세히 알아보겠습니다 마지막으로, 잠금 화면에서 캡처한 콘텐츠를 다시 애플리케이션에 통합하는 방법을 살펴보겠습니다
먼저, 멋진 캡처 경험의 특징을 알아보는 것으로 시작하겠습니다 iOS의 카메라 앱은 iPhone 또는 iPad에서 멋진 캡처 경험을 제공합니다 기기가 잠겨 있는 경우에도 카메라 제어기를 눌러 잠금 화면에서 카메라에 빠르고 쉽게 접근할 수 있습니다 제어기를 누르면 사진 캡처를 시작할 뷰파인더로 바로 연결되죠
음량 올리기 버튼을 눌러 사진을 캡처하고 이 버튼을 길게 눌러 비디오 촬영을 시작할 수 있습니다
사진이나 비디오를 찍은 후 이미지 저장소를 탭해 확인할 수 있습니다 제 기기는 여전히 잠겨 있고 카메라는 카메라를 표시한 동안 캡처한 사진과 비디오만 보여 주는 방식으로 개인정보를 보호합니다 콘텐츠와 더 긴밀히 상호작용하려고 하면 휴대폰에서 기기를 잠금 해제하라고 요청한 다음 계속 진행할 수 있게 허용합니다 앱에 대해 이러한 유형의 경험을 활성화하려면 새로운 유형의 앱 확장 프로그램을 생성할 수 있습니다 바로, Locked Camera Capture Extension입니다 앱 확장 프로그램은 별개 대상으로 애플리케이션에 임베드됩니다 이는 맞춤형 기능과 콘텐츠를 앱 외부로 확장하여 사람들이 다른 앱이나 시스템과 상호작용하는 동안 이를 사용할 수 있도록 합니다 이 새로운 유형의 앱 확장 프로그램은 잠금 화면에서 실행되므로 사람들이 기기가 잠긴 경우에도 애플리케이션에서 동일한 친숙한 UI를 사용해 빠르고 쉽게 접근하고 사진과 비디오를 찍을 수 있게 해 주는 캡처 경험을 빌드할 수 있습니다
이제 이 새로운 확장 프로그램의 라이프 사이클을 살펴보죠 라이프 사이클의 첫 단계는 확장 프로그램을 실행하는 것입니다 이 확장 프로그램은 제어 센터의 제어기에서 실행할 수 있습니다 동작 버튼에 할당된 제어기에서 또는 잠금 화면의 제어기에서 실행할 수 있죠
확장 프로그램이 실행되면 멋진 사진과 비디오 콘텐츠를 캡처할 수 있으며 앱에서 사용하는 것과 동일한 익숙한 UI를 사용하게 됩니다 캡처 확장 프로그램은 사진 및 비디오 애셋을 사진 보관함에 직접 추가하거나 캡처를 나타내는 데 필요한 모든 데이터를 파일 시스템에서 제공된 디렉토리에 저장할 수 있습니다 일부 콘텐츠를 캡처한 후 해당 콘텐츠로 더 심층적인 작업을 하고 싶어 할 수도 있습니다 예를 들면, 소셜 네트워크에 공유하거나 이미지 애셋이 필요한 필터를 적용하여 스타일을 연출합니다 이러한 유형의 상호작용의 경우 확장 프로그램은 부모 애플리케이션을 열어서 해당 기기를 사용하는 사람을 인증하도록 요청할 수 있습니다 이렇게 하면 확장 프로그램에서 앱으로 매끄럽게 전환하고 확장 프로그램에서 중단한 위치로 곧바로 이동할 수 있습니다 마지막으로, 애플리케이션으로 전환하거나 누군가가 위로 스와이프해 잠금 화면으로 돌아가면 캡처 확장 프로그램이 종료됩니다 이 경우, 시스템이 캡처된 콘텐츠를 부모 애플리케이션이 접근할 수 있는 위치로 이동합니다 앱에 런타임이 있을 경우 확장 프로그램이 다른 콘텐츠를 사용하는 동안 앱이 캡처된 콘텐츠를 통합할 수 있습니다 이 비디오의 뒷부분에서 이 프로세스를 더 자세히 살펴보죠 이제 캡처 확장 프로그램의 라이프 사이클에 알아봤으니 잠긴 기기에서 실행하기 위한 중요한 고려 사항을 살펴보죠 전 세계 사람들은 매일 iOS가 높은 수준의 개인정보 보호 기능을 제공해 주기를 기대합니다 기기가 잠겨 있으면 연락처 이메일, 사진, 비디오 등이 잠금 화면 너머에서 안전하게 보호되며 이에 접근하려면 기기를 잠금 해제해야 한다고 안심할 수 있습니다 LockedCameraCapture 프레임워크를 개발하면서 보안과 개인정보 보호에 의도적으로 중점을 두고 기기에 저장된 콘텐츠 보호를 지속적으로 고려했습니다 이 새로운 확장 프로그램 유형은 잠금 화면에서 실행되므로 기기가 잠긴 상태에서도 사진이나 비디오를 캡처할 수 있죠 캡처 경험을 통해서요 개인정보를 보호하고 기기의 보안을 유지하기 위해 이 새로운 경험에 대해 몇 가지 제한을 적용했습니다 확장 프로그램은 애플리케이션에서와 동일한 캡처 경험을 제공해야 하며 실행 후 즉시 카메라 뷰파인더를 표시해야 합니다 확장 프로그램이 실행 시, 카메라 뷰파인더를 표시하지 않으면 해당 확장 프로그램은 시스템에 의해 종료됩니다 휴대폰의 하드웨어 버튼을 사용해 사진이나 비디오를 캡처하는 것은 사람들이 최대한 빠르게 촬영할 수 있는 멋진 방법이라고 생각합니다 따라서 확장 프로그램은 AVCaptureEventInteraction으로 시스템 하드웨어 버튼의 이벤트를 처리해야 합니다 해당 경험은 기기가 잠긴 동안 접근할 수 있으므로 이 캡처 확장 프로그램은 네트워크 리소스 사용이 제한됩니다 애플리케이션이나 다른 확장 프로그램을 위한 공유 그룹 컨테이너에서 읽거나 쓸 수 없으며 애플리케이션을 위한 공유 환경설정에 접근할 수 없습니다
걱정하지 마세요, 확장 프로그램과 애플리케이션 간에 중요한 상태를 공유할 수 있으니까요 잠시 후에 방법을 설명하겠습니다 먼저, 확장 프로그램으로 캡처할 때, 캡처에 대한 데이터가 어떻게 유지될 수 있는지 살펴보죠 PhotoKit을 사용해 확장 프로그램에서 캡처한 사진 및 비디오 애셋을 저장하는 것이 좋습니다 PhotoKit을 사용하면 확장 프로그램에서 캡처된 사진과 비디오를 사진 보관함에 추가할 수 있습니다 기기가 잠긴 경우에도요 PhotoKit은 기기가 잠겨 있을 때 사진 보관함의 개인 사진과 비디오를 보호하도록 설계됩니다 잠긴 기기에서 사진 보관함을 읽을 때는 현재 캡처 세션 중에 기록한 사진과 비디오만 읽을 수 있습니다 기기가 잠금 해제되어 있고 확장 프로그램이 사진 보관함에 대한 올바른 권한을 가지고 있는 경우 현재 캡처 세션 중에 캡처한 콘텐츠뿐만 아니라 접근 권한이 부여된 모든 사진과 비디오를 읽을 수 있습니다 또한 PhotoKit은 사진 보관함 접근 권한을 세부적으로 지원합니다 쓰기 전용 접근 권한 제한된 보관함 지원 등입니다 따라서 누군가가 접근할 수 있는 사진 세트를 선택할 수 있습니다 확장 프로그램은 앱에서 사진 권한을 가져옵니다 따라서 확장 프로그램은 사진 보관함 접근 권한 수준을 처리할 수 있도록 준비되어야 합니다 확장 프로그램에서 사진에 대한 추가 권한이 필요한 경우 애플리케이션으로 전환하여 권한을 요청할 수 있습니다 그 방법은 이 비디오 뒷부분에서 다루겠습니다 PhotoKit 작업에 대한 자세한 내용은 이와 같은 이전 WWDC의 비디오를 확인하실 수 있습니다 일부 캡처 경험은 PhotoKit이 지원하지 않는 다른 데이터를 저장해야 할 수도 있습니다 LockedCameraCapture 프레임워크도 확장 프로그램에서 찍은 캡처에 필요할 수 있는 모든 데이터 저장을 지원합니다 이 기능이 어떻게 작동하는지 살펴보죠 이 상자는 왼쪽의 확장 프로그램과 오른쪽의 애플리케이션에서 캡처한 사진 및 비디오의 파일 시스템 저장 공간을 나타냅니다 실행 시 확장 프로그램에는 세션 객체로 콘텐츠 경로가 제공되죠 이 예제에서 어떤 사람이 콘텐츠를 캡처하면 확장 프로그램이 제공된 세션 콘텐츠 디렉토리에 데이터를 쓸 수 있습니다 PhotoKit을 사용해 캡처된 사진과 비디오를 수집할 수도 있죠 사진 보관함에 직접 추가됩니다
확장 프로그램 컨테이너의 다른 위치에 추가 데이터를 저장하고 싶을 수도 있습니다 하지만 이는 권장되지 않습니다 언제든지 누군가가 해당 확장 프로그램을 종료할 수 있습니다 확장 프로그램이 종료되면 제공된 세션 콘텐츠 디렉토리가 애플리케이션의 컨테이너로 마이그레이션되고 확장 프로그램의 컨테이너는 지워서 보안을 보장하고 기기 소유자의 개인정보를 보호합니다 확장 프로그램 내에서 이전 세션의 콘텐츠에 접근할 수 없습니다 제공된 세션 이후에도 유지하려는 모든 데이터는 제공된 세션 콘텐츠 디렉토리에 유지하세요 예기치 않게 종료되는 경우에도 시스템은 계속해서 이 디렉토리의 콘텐츠를 복사하여 데이터 복구를 시도할 수 있도록 합니다 누군가가 확장 프로그램을 다시 실행하면 새로운 세션 객체를 수신하며 여기에는 파일을 쓸 수 있는 새로운 세션 콘텐츠 디렉토리가 포함됩니다 다시 한 번, 확장 프로그램은 세션 콘텐츠 디렉토리에 기록하며 누군가가 확장 프로그램을 종료하면 해당 콘텐츠는 또 다시 앱의 컨테이너에 별개의 세션 콘텐츠 디렉토리로 이동하죠 애플리케이션에 런타임이 있으면 캡처된 콘텐츠를 검색하고 적절하게 처리할 수 있습니다 예를 들면, 앱의 다른 캡처된 콘텐츠와 함께 통합할 수 있습니다 애플리케이션이 단일 세션 디렉토리의 콘텐츠 처리를 완료하면 해당 디렉토리를 호출하여 무효화할 수 있습니다 이때 시스템에 해당 디렉토리를 파일 시스템에서 안전하게 지울 수 있음을 알려 줍니다 반복하자면 언제든지 누군가가 확장 프로그램을 종료할 수 있으며, 이 경우 세션 콘텐츠 디렉토리의 콘텐츠만 애플리케이션의 컨테이너에 복사됩니다 다음에 확장 프로그램을 실행할 때 이전 실행 시의 컨테이너 콘텐츠에 접근할 수 없습니다 확장 프로그램 컨테이너의 데이터가 지워지기 때문입니다 기기가 잠겨 있는 동안 실행하는 동작에 주로 중점을 두었지만 확장 프로그램은 기기의 잠금 상태에 관계없이 잠금 화면에서 실행됩니다 잠긴 경우와 잠금 해제된 경우 모두 동작과 제한 사항은 동일하게 유지됩니다 잠긴 기기에서 실행할 때의 주의 사항을 살펴봤습니다 이제 잠금 화면에서 바로 콘텐츠를 캡처하는 경험 빌드하기에 대해 알아보겠습니다 제 동료 Jon과 저는 최근에 ClownTown이라는 앱의 업데이트 작업을 진행해 왔습니다 어릿광대들이 스스로 프로필을 추가하여 해당 지역의 다른 어릿광대들과 교류할 수 있도록 하는 내용입니다 프로필용 사진을 찍을 수 있는 기능을 추가하면 좋을 것 같습니다 ClownTown 앱에 대한 업데이트를 캡처 확장 프로그램과 나머지 캡처 경험의 빌드 과정을 안내하는 예제로 사용하겠습니다 시작하시는 데 도움이 되도록 Xcode는 Locked Camera Capture Extension을 위한 편리한 템플릿을 제공합니다 이 템플릿에는 카메라 뷰파인더와 셔터 버튼 등 곧바로 빌드하고 실행하는 데 필요한 모든 것이 포함되어 있죠 여기 제 예제에서는 LockedCameraCaptureExtension을 따르는 확장 프로그램을 정의합니다 그런 다음 해당 struct 내에서 확장 프로그램 장면이 본문에 대해 구현되고 해당 장면이 맞춤형 뷰 콘텐츠를 반환합니다 이 확장 프로그램의 UI는 사진과 비디오를 캡처하기 위한 카메라 뷰파인더를 표시하는 데 초점을 맞춰야 합니다 확장 프로그램은 사람들이 동일하고 익숙한 UI 요소를 사용해 애플리케이션에서 얻는 것과 동일한 일관된 캡처 경험도 제공해야 합니다 확장 프로그램은 카메라 앱과 사진 앱 접근을 위한 권한을 애플리케이션에서 가져옵니다 확장 프로그램은 카메라 앱과 사진 앱에 대한 모든 권한 수준을 처리할 수 있게 준비되어야 합니다 권한이 부여되지 않아서 앱이 카메라 앱을 사용할 수 없으면 시스템은 기기의 잠금 해제를 요청하며 인증이 성공한 후 해당 사례를 처리하기 위해 확장 프로그램 대신에 앱을 실행합니다 LockedCameraCaptureUIScene에 대한 이니셜라이저는 단일 매개변수인 LockedCameraCaptureSession의 인스턴스를 제공합니다 이 세션 객체가 무엇을 제공하는지 살펴보겠습니다
이 세션 객체는 몇 가지 중요한 용도로 사용됩니다 캡처 세션은 sessionContentURL을 제공하며 이는 확장 프로그램 컨테이너의 디렉토리 경로입니다 이를 사용하여 캡처된 사진과 비디오에 대한 모든 데이터와 보존하고 싶은 기타 모든 관련 데이터를 유지할 수 있습니다 캡처된 사진과 비디오를 캡처 확장 프로그램에서 PhotoKit으로 직접 유지할 수도 있습니다 기기가 잠겨 있어도 사진 보관함에 콘텐츠를 쓸 수 있습니다 하지만 기기가 잠겨 있는 경우 기록한 사진과 비디오만 읽을 수 있습니다 잠금이 해제되면 확장 프로그램이 읽기 권한이 있는 모든 사진을 읽을 수 있고, 여기에는 현재 캡처 세션 외부의 사진도 포함됩니다 예를 들어 PhotoKit에 콘텐츠를 저장한 경우 sessionContentURL 디렉토리에 쓴 데이터 사용을 마치면 invalidateSessionContent를 호출하여 해당 디렉토리의 콘텐츠를 지울 수 있습니다 이 함수를 호출한 후에도 디렉토리에 계속 쓸 수 있지만 무효화 호출 이전에 쓴 모든 콘텐츠는 지워집니다 이 세션은 애플리케이션 열기를 요청하는 함수도 제공합니다 이 함수는 UI와 상호작용하는 사람에 대한 반응으로만 호출해야 합니다 예를 들어, 누군가가 버튼을 탭하여 공유 시트를 통해 사진을 공유하는 경우입니다 콘텐츠를 공유하려면 네트워크 접근이 필요하고 캡처 확장 프로그램에서는 해당 요청을 이행할 수 없으므로 openApplication을 호출할 수 있습니다 그러면 기기 잠금 해제용 프롬프트가 표시되며 성공적으로 잠금 해제되면 애플리케이션이 열립니다 이 비디오 뒷부분에서 이 함수의 사용 방법을 좀 더 자세히 살펴보겠습니다 앞서 확장 프로그램의 라이프 사이클을 살펴보면서 제어 센터의 제어기, 동작 버튼에 설정된 제어기 또는 잠금 화면의 제어기에서 확장 프로그램을 실행할 수 있다고 했죠 누군가가 캡처 경험을 실행할 수 있게 허용하려면 맞춤형 제어기를 생성해야 합니다 이 제어기는 또 다른 확장 프로그램인 WidgetKit으로 빌드할 수 있는 위젯 확장 프로그램의 일부입니다 이 제어기는 구체적으로 캡처 경험을 실행하기 위한 것이므로 iOS 18에 도입되는 새로운 유형의 시스템 인텐트인 CameraCaptureIntent를 구현해야 합니다 기기가 잠금 화면, 홈 화면 중 어디에 있는지 등의 조건에 따라 시스템이 CameraCaptureIntent를 사용해 캡처 확장 프로그램과 애플리케이션 중 어느 것을 실행할지를 결정합니다 이 인텐트를 사용해 앱 또는 확장 프로그램이 실행되면 이는 실행 시 누군가를 캡처 경험으로 곧바로 데려와야 할 단서입니다 이 인텐트로 확장 프로그램 또는 애플리케이션 실행할 수 있도록 하려면 인텐트가 제어기에서 사용되게 할 위젯 확장 프로그램 확장 프로그램, 애플리케이션 등 3개 대상 모두에 CameraCaptureIntent를 포함해야 합니다
카메라 캡처 인텐트는 앱 맥락을 정의합니다 이 맥락은 애플리케이션과 확장 프로그램 간에 공유되며 서로 간에 쓸 수 있습니다 이 맥락을 사용해 사용자 환경설정이나 확장 프로그램의 캡처 경험과 애플리케이션의 캡처 경험 간에 공유할 설정을 저장해야 합니다 예를 들어, 애플리케이션에서 수행한 앱 구입을 나타내는 데이터를 저장할 수 있습니다 앱 맥락을 업데이트하려면 updateAppContext 함수를 호출하여 유지하려는 새로운 앱 맥락에 전달합니다 앱 맥락은 크기가 제한된다는 점에 유의해야 합니다 맥락이 너무 큰 경우 유지되지 않으며 캡처 경험의 동작에 영향을 미칠 수 있으므로 앱 맥락에 쓰는 양을 인지하고 있어야 합니다 CameraCaptureIntent의 구현을 여기서 볼 수 있습니다 앱 맥락에 대한 고유한 유형인 ClownTownContext를 정의했는데 그 맥락은 다음과 같습니다 어릿광대라고 언제든 어릿광대 사진을 찍을 준비가 돼있진 않겠죠 항상 분장을 하고 있지는 않으니까요 자동으로 어릿광대 분장을 추가하는 버튼을 만들었습니다 언제든지 완벽한 어릿광대 프로필 사진을 찍을 수 있습니다 해당 설정을 나타내는 하나의 bool을 정의했습니다 어릿광대 분장과 어릿광대 코를 추가할지 여부를 지정할 수 있죠 인텐트에 대한 수행 함수를 구현했으며 여기에 나와 있습니다 제가 어떻게 맥락을 읽고 사용하여 인터페이스 상태를 설정하는지 확인하세요 캡처 경험에 항상 최신 상태가 반영될 수 있도록요 앱을 사용할 때 어릿광대 분장을 추가했는지 여부를 나타냅니다 제 캡처 경험에서 버튼 코드의 코드 스니펫이 여기 나와 있습니다 제가 어릿광대 분장 설정을 켜고 끄기 위해 버튼 누르기를 어떻게 처리하고 있는지 보여 줍니다 작업이 트리거되면 이 설정으로 앱 맥락을 업데이트하게 호출하여 앱과 확장 프로그램 모두에서 읽을 수 있도록 합니다 마지막으로, ClownTown의 제어기 위젯입니다 이것은 위젯 확장 프로그램에 통합됩니다 ClownTownCaptureIntent의 인스턴스를 제어기에 수행할 작업으로 전달합니다
요약하자면, 앱에 위젯 확장 프로그램을 추가하고 제어기를 정의합니다 이와 함께 카메라 캡처 인텐트도 구현하여 제어기에 제공할 뿐만 아니라 앱 및 확장 프로그램 대상에도 포함합니다 제어기를 빌드하여 캡처 경험을 실행하는 방법에 대한 자세한 내용은 제 동료 Cliff의 비디오인 ’나만의 제어기 생성하기’를 시청하고 AppIntent 작업에 대한 자세한 내용은 다음 비디오를 참고하세요 ’앱 인텐트로 사용자에게 앱의 핵심 기능 제공하기’ 캡처 경험을 위한 마지막 한 가지 요구 사항은 확장 프로그램과 애플리케이션 모두 카메라 앱을 위한 개인정보 보호 사용 설명을 포함해야 한다는 것입니다 이는 카메라를 사용해 사진과 비디오를 캡처하려고 한다는 것을 시스템에 알리고 시스템에서 해당 설명을 표시하여 캡처 경험에서 카메라를 사용하려는 이유를 알려 줄 수 있도록 하려는 것입니다 이제 캡처 경험을 실행할 제어기를 빌드했으니 앱에서 캡처된 콘텐츠를 사용하는 방법을 살펴보겠습니다 잠금 화면에서 캡처 경험을 실행하는 동안 누군가가 캡처 확장 프로그램에서 사용할 수 있는 것 이상의 권한을 요구하는 작업을 수행하려고 합니다 예를 들어 누군가가 캡처된 사진을 소셜 네트워크에 게시하려는데 이를 위해서는 네트워크 접근이 필요합니다 또는 애플리케이션의 공유 그룹 컨테이너의 리소스를 요구하는 기능을 사용하고자 할 수 있습니다 이러한 유형의 상호작용을 처리하려면 확장 프로그램이 앞서 다뤘듯이 LockedCameraCaptureSession에서 openApplication function 함수를 호출할 수 있습니다 이 함수는 단일 매개변수 NSUserActivity를 사용합니다 편의상 LockedCameraCapture는 새로운 NSUserActivity 유형인 NSUserActivityType LockedCameraCapture도 노출합니다 이 새로운 사용자 활동 유형은 openApplication 함수와 함께 애플리케이션에 대해 캡처 확장 프로그램에서 실행되었음을 나타내는 신호로 사용됩니다 openApplication 함수를 호출하면 누군가에게 필요하면 기기를 잠금 해제하고 애플리케이션을 열라는 프롬프트를 표시하며 그러면 NSUserActivity의 지속을 처리하라는 호출을 수신합니다 이렇게 하면 애플리케이션이 어떤 사람이 중단했던 UI 위치로 매끄럽게 전환할 수 있습니다
ClownTown 캡처 확장 프로그램의 경우 누군가가 프로필 사진을 업데이트하려고 하면 앱을 열고 네트워크를 사용해 이를 서버로 보내도록 하려고 합니다 사용자가 적절한 버튼을 탭하면 LockedCameraCapture에 대한 새로운 유형인 NSUserActivity를 사용해 애플리케이션을 열도록 호출합니다 userInfo에 일부 맥락을 전달해 애플리케이션이 ’update profile photo’ 흐름을 계속 진행하도록 나타냅니다 userInfo와 사용자 활동 유형을 사용해 애플리케이션이 확장 프로그램에서 매끄러운 전환을 수행할 수 있는 충분한 맥락을 확보합니다 애플리케이션 내에서 LockedCameraCaptureManager를 사용해 캡처 확장 프로그램에서 캡처된 콘텐츠로 작업할 수 있습니다 LockedCameraCaptureManager는 필요에 따라 애플리케이션 전반에서 사용할 수 있는 공유 인스턴스를 노출합니다 관리자는 sessionContentURLs 속성을 노출하며 이는 URL의 배열을 제공하는데, 이는 각각 캡처 확장 프로그램에서 캡처된 콘텐츠의 디렉토리를 가리키죠 관리자는 sessionContentUpdates의 AsyncSequence도 노출합니다 이 시퀀스는 현재 세션 콘텐츠 디렉토리를 나타내는 URL로 시작되며 현재의 모습을 나타내는 앱 콘텐츠 디렉토리 추가되거나 제거된 세션 콘텐츠 디렉토리도 계속 포함됩니다 확장 프로그램의 캡처된 콘텐츠를 비동기식 처리하는 데 사용됩니다 일부 경우, 확장 프로그램에서 애플리케이션으로 전환 시 가장 최근에 캡처된 세션 콘텐츠 디렉토리는 애플리케이션 실행 후 사용 가능해질 수 있습니다 이 비동기식 시퀀스를 사용하여 세션 콘텐츠를 사용 가능해지는 즉시 처리할 수 있도록 하는 것이 좋습니다 마지막으로, 관리자가 무효화 함수를 노출합니다 이 함수는 제공된 URL의 세션 콘텐츠가 처리된 후 해당 세션 콘텐츠가 더 이상 필요하지 않을 때 호출되어야 합니다 이 함수를 호출하면 제공된 URL에서 세션 콘텐츠를 삭제합니다 따라서 이 함수는 해당 세션 콘텐츠 사용을 완전히 마친 후에만 호출해야 합니다 제공된 URL의 세션 콘텐츠를 무효화하면 해당 세션 콘텐츠 디렉토리의 제거를 위해 세션 콘텐츠 업데이트도 발생합니다 ClownTown 앱에서는 sessionContentUpdates 속성을 사용해 초기의 기존 캡처된 콘텐츠를 처리하고 새로운 세션 콘텐츠를 대기하다가 수신되면 애플리케이션에서 처리할 수 있습니다
LockedCameraCapture는 멋진 캡처 경험을 빌드하는 데 필요한 모든 구성요소를 제공하고 잠금 화면에서 해당 경험에 쉽게 접근할 수 있게 만들 수 있습니다 앱으로 전환하여 추가 접근 권한이 필요한 주요 워크플로를 완료하는 동시에 사람들이 잠금 화면에서 사진과 비디오를 캡처할 때 기대하는 개인정보 보호 및 보안을 유지할 수 있습니다
여러분이 빌드하실 멋진 콘텐츠가 정말 기대됩니다 시청해 주셔서 감사합니다
-
-
찾고 계신 콘텐츠가 있나요? 위에 주제를 입력하고 원하는 내용을 바로 검색해 보세요.
쿼리를 제출하는 중에 오류가 발생했습니다. 인터넷 연결을 확인하고 다시 시도해 주세요.