https://developer.apple.com/documentation/foundation/nsitemprovider
"An item provider for conveying data or a file between processes during drag and drop or copy/paste activities, or from a host app to an app extension."
드래그 앤 드롭, 복사 붙여넣기 동작, 호스트 앱으로부터 앱 확장이 진행되는 동안 처리 단계 사이에서 데이터 혹은 파일을 전달하는 아이템 프로바이더입니다.
class NSItemProvider : NSObject
iOS 11을 시작으로 아이템 프로바이더는 드래그 앤 드롭, 복사 붙여넣기에서 중요한 역할을 하고 있습니다. 앱 확장 역시 그렇습니다.
NSItemProvider
클래스에서 사용되는 모든 컴플리션 블록은 내부적 큐에서 시스템에 의해 호출됩니다. 드래그 앤 드롭에서 아이템 프로바이더를 사용하는 경우 메인 큐에서 발생하는 UI 업데이트를 확인해야 합니다.
DispatchQueue.main.async {
// work that impacts the user interface
}
앱 확장은 NSExtensionItem
의 attachments
속성을 조사할 때 아이템 프로바이더를 마주칩니다. 이 조사가 수행되는 동안 확장은 인식하게 되는 데이터를 찾기 위해 hasItemConformingToTypeIdentifier(_:)
메소드를 사용할 수 있습니다. 아이템 프로바이더는 유니폼 타입 아이덴티파이어(UTI) 값을 사용해 포함하고 있는 데이터를 확인합니다. 확장이 사용할 수 있는 데이터의 타입을 찾운 후 실제 데이터를 로드하기 위해 loadItem(forTypeIdentifier:options:completionHandler:)
메소드를 호출합니다. 이 실제 데이터는 제공된 컴플리션 핸들러에 전달되는 데이터입니다.
아이템 프로바이더를 생성함으로써 데이터를 다른 프로세스에 전달할 수 있습니다. 기존 데이터 아이템을 수정하는 확장은 호스트 앱에 다시 보낼 새로운 NSItemProvider
를 생성할 수 있습니다. 데이터 아이템 생성 시, 데이터 객체 및 해당 객체의 타입을 구체화해야 합니다. 선택적으로 데이터에 대한 프리뷰 이미지를 생성하기 위해 previewImageHandler
속성을 사용할 수 있습니다.
단일 아이템 프로바이더는 다른 형식에서 데이터를 제공하기 위해 커스텀 블록을 사용할 것입니다. 아이템 프로바이더를 설정할 때, 블록과 형식 지원을 등록하기 위해 registerItem(forTypeIdentifier:loadHandler:)
메소드를 사용하시기 바랍니다. 클라이언트가 특정 형식에서 데이터를 요청할 때, 아이템 프로바이더는 상응하는 블록을 수행할 것이며, 블록은 데이터를 적합한 타입으로 강제하고 클라이언트에 반환할 책임을 갖습니다.