macOS에서 흔적 하나 남기지 않고 PDF 열기 [Devlog #9]
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에 전달되지 않습니다.
사용 방법
- Sanctuary Viewer로 PDF를 엽니다.
- 뷰어를 닫습니다.
macOS 관점에서는 파일이 열리지 않은 것으로 처리됩니다—최근 문서 항목도, Finder 기록도, 썸네일 캐시도 남지 않습니다.
다운로드
프로젝트를 Twitter에서 팔로우하세요: @hiyoyok