스크린샷만
PhotoKit에서 이미지이면서 스크린샷 속성을 가진 항목만 가져온다. 일반 사진, Live Photo, 화면 녹화는 들어오지 않는다. 가져오기·분석·썸네일 경계에서 같은 검사를 다시 한다.
LETSPETS / PROJECT 02
스크린샷 속 영감을 기기 안에서 정리하는 iPhone 앱
심사가 끝나면 이 자리에 App Store 링크를 답니다. 개인정보 처리 방침은 이 사이트의 처리방침 페이지에서 볼 수 있습니다.

저장만 해두고 다시 찾지 못하는 스크린샷을 화면에 담긴 내용으로 묶어 줍니다. 사진 보관함에서 스크린샷만 골라 오고, 기기에 들어 있는 이미지 모델로 무엇이 찍힌 화면인지 판단해 내용별 폴더와 태그를 붙입니다. 이미지도 인식한 글자도 서버로 보내지 않습니다. 계정도 인터넷 연결도 필요 없고, 사진 앱의 원본과 앨범은 읽기만 합니다. SwiftUI로 만들었고 외부 Swift 패키지를 하나도 쓰지 않습니다.
PhotoKit에서 이미지이면서 스크린샷 속성을 가진 항목만 가져온다. 일반 사진, Live Photo, 화면 녹화는 들어오지 않는다. 가져오기·분석·썸네일 경계에서 같은 검사를 다시 한다.
약 40MB의 TinyCLIP 이미지 모델을 앱에 넣어 두고 화면의 주요 대상과 배경을 직접 점수화한다. 이미지, 인식한 글자, 태그 어느 것도 네트워크로 나가지 않는다. 사진 요청의 네트워크 접근도 꺼 두었다.
폴더와 태그는 이미지 모델이 본 것으로 정한다. 화면 속 글자는 검색에만 쓰고 분류 점수에는 넣지 않는다. 판단이 약하거나 후보가 비슷하면 미분류로 남긴다.
인식한 문장, 태그, 추출한 키워드와 링크로 검색한다. 즐겨찾기와 직접 만든 폴더, 확인이 필요한 목록을 따로 볼 수 있다. 같은 스크린샷이 여러 폴더에 보여도 원본은 복제하지 않는다.
분류·태그·폴더·즐겨찾기를 직접 고치면 다시 분석해도 그대로 유지한다. 사진 앱의 원본과 앨범은 어떤 경로로도 바꾸지 않는다.
iOS 26에서는 정리를 시작할 때 시스템에 실행 시간을 요청해, 허용되면 앱을 나가도 남은 스크린샷을 계속 처리한다. 중지하거나 시간이 끊기면 그때까지 저장한 결과는 보존한다.



MAKING NOTES
화면에 flower라는 단어가 있다고 자연 폴더로 보내면 쇼핑몰 화면이 전부 자연이 된다. 분류는 시각 라벨이 결정하고 OCR 결과는 검색으로만 흘린다. 문서나 스크린샷 같은 매체 라벨도 주제 판단에서 뺀다.
저장 구조체에 기본값을 써 두어도 이전 버전 JSON에 그 키가 없으면 디코딩 자체가 실패한다. 새로 추가하는 저장 필드는 전부 Optional로 넣고, 출시 빌드가 쓴 JSON 원본을 테스트에 고정해 두었다.
저장을 전담하는 actor가 revision 번호를 함께 기록한다. 번호가 밀린 결과는 버려서, 사용자가 방금 고친 태그를 몇 초 전에 시작한 분석이 되돌리지 못하게 했다.
관성 이동 중에 목록이 다시 그려지면 누르려던 카드가 사라진다. 이동이 끝날 때까지 표시 목록을 고정하고 새 추론 시작만 미룬다. 이미 끝난 분석의 저장은 그대로 진행한다.
중지했거나 iCloud에만 있어 읽지 못한 장이 남아도 시스템 작업은 완료로 끝낸다. 실패로 보고하면 다음 요청의 우선순위가 깎인다. 읽지 못한 장수는 앱 안내 문구로 알린다.
스토어용 6장은 UI 테스트를 시뮬레이터에서 돌려 만든다. 상태바를 9:41로 고정하고 샘플 데이터를 띄운 뒤 1320×2868로 내보낸다. 이 페이지의 화면들도 같은 경로에서 나왔다.