iOS나 macOS 앱의 Core Data 문제를 디버깅하고 있습니다. UI에 표시되는 데이터가 이상해서 실제로 하위 SQLite 파일에 무엇이 저장되어 있는지 확인해야 합니다. Xcode의 Core Data 모델 편집기는 스키마를 보여주지만 실제로 영속화된 데이터를 탐색하게 해주지는 않습니다. 그래서 직접 찾아 나섭니다 — 앱 컨테이너를 찾고, .sqlite 파일을 위치시키고, 터미널을 열어 ZUSER, ZPOST 같은 이름의 테이블에 대해 원시 쿼리를 실행하기 시작합니다. 모든 열 이름은 Z로 시작하고 엔티티 이름과 직관적으로 맞아떨어지지 않습니다.
Core Data의 SQLite 파일은 검사하기 어렵습니다
Core Data는 기본 영속 저장소로 SQLite를 사용하지만 고유의 관례를 추가합니다. 엔티티 이름은 테이블 이름에서 Z 접두사가 붙습니다. 속성은 Z 접두사가 붙은 열 이름을 가집니다. 관계는 즉시 알아보기 어려운 열에 정수 외래 키로 저장됩니다. Core Data가 내부적으로 관리하는 Z_METADATA 테이블과 Z_PRIMARYKEY 테이블도 있습니다.
이 중 어느 것도 수동 검사를 쉽게 만들어주는 방식으로 문서화되어 있지 않습니다. 결국 SELECT * FROM ZUSER; 같은 쿼리를 실행하고 Z 접두사가 붙은 열을 관리 객체 모델과 맞춰보려 애쓰게 됩니다. 구문 강조도 없고 시각적 그리드도 없는 터미널에서는 이 작업이 지루합니다.
Xcode도 여기서는 도움이 안 됩니다. 내장 SQLite 브라우저가 없습니다. Instruments 도구로 Core Data 작업을 프로파일링할 수는 있지만 실제 행 데이터를 보여주지는 않습니다. 별도의 도구가 필요합니다.
Tome으로 Core Data SQLite 파일 탐색하기
Tome은 Core Data의 SQLite 파일을 다른 데이터베이스와 마찬가지로 엽니다. 앱 컨테이너로 이동해 .sqlite 파일을 찾은 뒤 Tome에서 열면, Z 접두사가 붙은 모든 테이블이 사이드바에 나타납니다. 하나를 클릭하면 스크롤 가능한 그리드에서 모든 행과 값을 볼 수 있습니다.
실제 데이터 확인하기
앱이 잘못된 값을 표시할 때, Tome에서 SQLite 파일을 열어 실제로 저장된 데이터를 확인하세요. 데이터베이스 안의 값이 잘못된 것인지, 아니면 가져오기/표시 버그인지 몇 초 만에 답을 얻을 수 있습니다.
관계와 메타데이터 검사하기
Z_PRIMARYKEY 테이블을 탐색해 Core Data가 엔티티 유형과 기본 키를 어떻게 추적하는지 확인하세요. 외래 키 열을 확인해 관계가 올바르게 저장되었는지 검증하세요. Z_METADATA를 검사해 모델 버전 해시를 확인하세요.
진단 쿼리 실행하기
Tome의 SQL 쿼리 편집기를 사용해 Core Data의 Z 접두사 테이블 간 조인을 작성하거나, 특정 레코드를 필터링하거나, 마이그레이션 문제를 나타낼 수 있는 고아 행을 확인하세요. 구문 강조와 자동완성이 터미널에서 원시 쿼리를 실행하는 것보다 훨씬 쉽게 만들어줍니다.
안전하게 검사하고 쉽게 찾기
시뮬레이터의 경우 앱의 SQLite 파일은 ~/Library/Developer/CoreSimulator/ 깊숙한 곳에 있습니다. macOS 앱의 경우 ~/Library/Containers/나 ~/Library/Application Support/를 확인하세요. 파일을 찾았다면 Tome의 Dock 아이콘에 드래그해서 탐색을 시작하세요.