Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Meet Transferable #26

Closed
TaekH opened this issue Jul 14, 2022 · 0 comments
Closed

Meet Transferable #26

TaekH opened this issue Jul 14, 2022 · 0 comments

Comments

@TaekH
Copy link
Collaborator

TaekH commented Jul 14, 2022

Transferable 프로토콜이란?

공유, 드래그 앤 드롭, 복사/붙여넣기 및 앱의 기타 기능을 쉽게 지원할 수 있는 모델 계층 프로토콜

image

- 앱에서 앱으로 이미지, 텍스트, 동영상 등을 전달한다고 해보자

image

- 앱과 앱간의 공유과정에서 모든 이진 데이터가 교차된다.

이때 어떤 데이터를 보낼지와 그 데이터 유형을 정한다.

이미지, 텍스트, 비디오 등등 어떤 데이터를 보낼지 정한다면 그 다음은
로드, 전송, 수신할 데이터 유형을 나타내는 UTType을 정한다.

image

- 다른 앱과 공유하기 위해서는 바이너리 데이터 변환 방법과 데이터의 구조에 해당하는 콘텐츠 유형을 제공해야한다.

여기서 콘텐츠 유형이란 고유 식별자로 .jpg와 같은 확장명이라 할 수 있다.
그러나 Apple 에서는 사용자 지정 고유 식별자로 사용자가 직접 원하는 확장명을 정의할 수도 있다.

사용자 지정 식별자를 선언하는 방법에는 info.plist 파일을 이용하거나 코드를 이용하는 방법이 있다.

image

- info.plist를 이용하는 방법은 Info -> Exported Type Identifiers 에서 추가할 수 있다.

image

- 코드를 이용한 방법은 UTType에 identifier를 추가하여 새로운 확장자를 추가할 수 있다.

이제 Transferable 프로토콜을 살펴보자

먼저 좋은 소식은 다양한 데이터 타입들이 이미 Transferable을 준수한다는 것이다.
image

따라서 우리는 드래그앤드랍, 복사/붙여넣기 등을 위한 데이터의 준비를 몇줄의 코드로 구현할 수 있다.

Profile을 예로 들은 코드를 보자

image

profile의 모델은 이렇게 구성되있고 Cordable 프로토콜을 준수한다.

Cordable 프로토콜은 인코더와 디코더를 활용해 바이너리 데이터로 변환한다.

image

코드를 확인하면
image

  • profile을 사용자 지정 형식이기 때문에 UTType 안에 지정한 새로운 확장자로 CordableRepresentation 에 넣어줬다.

Transfer Representations

  • 항목을 가져오고 내보내는 것에 사용되는 표현이다.

CodableRepresentation

DataRepresentation

FileRepresentation

이 있으며 표현이 사용되는 과정은
image

먼저 모델이 코드화 가능 적합성을 가지고 있는지 확인 후 있다면 CodableRepresentation을 사용한다.
아니라면 메모리 또는 디스크에 모델이 저장되어 있는지를 확인 후 저장되어 있다면
DataRepresentation 을 사용한다.
저장되어 있지 않거나 비디오 같이 메모리에 로드하기 너무 큰 모델이라면 FileRepresentation 사용하여 URL 을 전송한다.

앞선 프로필을 공유할 수 있도록 만드는 과정에서는 Profile 모델이 Codable 프로토콜을 준수하므로 가능했다.

이렇듯 Transferable 프로토콜을 활용하면 앱에서 앱, 워치OS 등으로 데이터를 변환해서 전달할 준비를 할 수 있다.

🔗

https://developer.apple.com/documentation/coretransferable/transferable?changes=latest_major&language=obj_8

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

2 participants