macOS에서 흔적 하나 남기지 않고 PDF 열기 [Devlog #9]

발행: (2026년 4월 23일 PM 08:59 GMT+9)
3 분 소요
원문: Dev.to

Source: Dev.to

배경

모든 테스트는 8년 된 MacBook Air에서 수행되었습니다.
macOS에서 PDF를 열면 운영 체제가 최소 다섯 곳에 파일을 조용히 기록합니다:

  • 최근 문서 (NSDocumentController)
  • Finder의 최근 항목 (LSSharedFileList)
  • 애플리케이션 캐시 디렉터리
  • QuickLook 썸네일 캐시
  • ~/Library/Caches/ 아래의 렌더링 캐시

macOS가 열린 파일을 등록하는 방식

macOS는 NSDocumentController를 통해 열린 파일을 자동으로 등록합니다.
Swift 측에서 이 동작을 오버라이드하면 최근 문서 항목을 억제할 수 있습니다:

@implementation HiyokoSanctuaryDocument

- (void)addToRecentDocuments {
    // intentionally empty
}

+ (BOOL)autosavesInPlace {
    return NO;
}

@end

Sanctuary Viewer – 제로‑트레이스 PDF 뷰어

뷰어는 모든 데이터를 메모리에 보관하고 종료 시 임시 파일을 삭제합니다.

pub struct SanctuaryViewer {
    page_cache: HashMap>, // example cache type
    temp_files: Vec,
}

impl Drop for SanctuaryViewer {
    fn drop(&mut self) {
        // Delete any temp files on close
        for path in &self.temp_files {
            let _ = std::fs::remove_file(path);
        }
        // Zero out in‑memory cache
        self.page_cache.clear();
    }
}

Drop 구현은 뷰어가 닫히는 순간 실행되므로 수동 정리가 필요하지 않습니다.

QuickLook 캐시 방지

macOS는 백그라운드에서 QuickLook을 실행하고 ~/Library/Caches/com.apple.QuickLook.thumbnailcache에 썸네일을 자동으로 기록합니다.
해결 방법은 파일 경로를 QuickLook에 절대 전달하지 않는 것입니다. 모든 렌더링은 메모리 내 내부 Ghost Engine을 통해 수행되므로 파일 경로가 캐시를 트리거하는 macOS API에 전달되지 않습니다.

사용 방법

  1. Sanctuary Viewer로 PDF를 엽니다.
  2. 뷰어를 닫습니다.

macOS 관점에서는 파일이 열리지 않은 것으로 처리됩니다—최근 문서 항목도, Finder 기록도, 썸네일 캐시도 남지 않습니다.

다운로드

Hiyoko PDF Vault


프로젝트를 Twitter에서 팔로우하세요: @hiyoyok

0 조회
Back to Blog

관련 글

더 보기 »