"사용자가 갖고 있던 클립보드는 이미지, 파일, 리치 텍스트일 수 있어. 전부 빌리고, 전부 도로 줘."
클립보드는 문자열이 아냐
프로브가 클립보드를 빌리니까, 복원은 그걸 충실히 돌려줘야 해 — 그리고 여기 함정: 클립보드는 그냥 평범한 텍스트가 아냐. 어느 순간이든 이미지, 파일, 리치 텍스트, HTML, 아니면 어떤 앱의 커스텀 타입을 쥘 수 있어, 흔히 같은 것의 여러 표현을 한꺼번에. 복원이 평범한 텍스트 문자열만 저장하고 다시 썼으면, 클립보드에 이미지나 파일 세트를 갖고 있던 사용자는 그걸 네 프로브가 조용히 파괴해. '되돌릴 수 있다' 는 텍스트뿐 아니라 실제로 갖고 있던 뭐든에 대해 되돌릴 수 있다는 뜻이어야 해.
모든 항목, 모든 타입을 스냅샷
완전한 캡처는 페이스트보드의 항목들 — 하나 이상일 수 있어 — 을 걷고, 각 항목마다 그것이 광고하는 모든 타입을 그 타입의 데이터와 함께 기록해. 그 항목-대-타입-대-데이터 맵이 진짜 스냅샷이야. 복원은 그 거울상이야: 페이스트보드를 비우고 그 항목들을 모든 타입 온전히 도로 써. 이렇게 하면 이미지는 이미지로, 파일은 파일로, 리치 텍스트는 형식 그대로 살아남아 — 사용자 클립보드가 문자열로 납작해지지 않고 바이트 단위로 돌아와.
순진함 (텍스트 빼고 다 잃음):
저장 pb.string(forType: .string)
...프로브...
복원 pb.setString(saved, forType: .string) // 이미지/파일 사라짐
충실함:
저장 모든 항목 -> 모든 타입 -> 그 데이터
...프로브...
복원 각 항목을 모든 타입과 재구축, 도로 씀
완전히 캡처 못 할 때
정직 체크: 어떤 클립보드 내용은 완전히 스냅샷 못 해 — 약속되거나 게으르게 제공되는 데이터, 소스 앱이 실제 붙여넣기가 일어날 때만 바이트를 넘기는 것. 그런 건 항상 앞에서 캡처 못 해. 보수적 룰은: 페이스트보드 전체를 충실히 스냅샷 못 하면, 파괴적 프로브를 아예 안 돌려 — 다른 방식으로 읽을 수 있던 걸로 폴백하고, 클립보드를 그냥 둬. 선택을 놓치는 게 사용자가 복사한 파일을 먹는 것보다 나아. 보존은 전부-아니면-전무야: 완전한 충실도, 아니면 안 만짐.