3DS 저장 지점이 업데이트를 건너는 법
Azahar를 연결하면서 저장 지점을 설치별로 서명했습니다. 같은 기기의 저장 지점이 앱 업데이트만으로 닫히지 않도록 기준을 다시 나눈 과정을 소개합니다.
1.9.0에서 Azahar를 연결해 Nintendo 3DS와 New Nintendo 3DS가 들어왔습니다. 직접 덤프해 복호화한 게임을 가져오고, 업데이트와 DLC는 CIA로 따로 관리합니다. 화면에는 두 스틱과 ZL, ZR을 놓았고 게임이 문자를 물으면 기기 키보드를 엽니다. Android는 JIT를 쓰지만 iOS는 인터프리터로 실행합니다.
3DS 저장 지점은 게임 안 저장과 다릅니다. 실행 중인 기계의 상태를 풀어 엔진 안에 다시 만드는 자료라서, 외부에서 받은 파일을 그대로 읽히게 둘 수 없었습니다. 2026년 10월 19일에는 설치마다 다른 키로 서명하고 확인을 통과한 자료만 여는 방식을 정했습니다. 다른 기기에서 가져왔거나 앱을 다시 설치한 뒤의 저장 지점은 열리지 않습니다. 게임 안 저장은 기기 사이를 옮길 수 있습니다.
그런데 처음에는 저장 형식의 신원에 앱과 컴파일러의 변경까지 들어갔습니다. PS1을 등록하며 공용 헤더가 바뀌는 것만으로도 3DS 이어하기가 거부되는 구조였습니다. 같은 기기에 그대로 남은 저장 지점이 게임과 관계없는 변경 때문에 열리지 않는다면, 설치별 보호와 업데이트 호환성을 잘못 묶은 셈입니다.
1.10.0에서는 저장 형식의 신원을 Azahar 소스와 패치, 실행 플랫폼, JIT 구성과 저장 형식 번호에 묶었습니다. 컴파일러와 나머지 앱 코드는 빼고 설치별 서명은 유지했습니다. 아이폰의 1.9.0 저장 지점도 해당 엔진 소스가 같을 때만 읽도록 따로 연결했습니다. 업데이트를 위해 인증을 느슨하게 하지는 않았습니다.
이제 앱을 업데이트해도 같은 설치의 이어하기와 저장 지점을 계속 열 수 있습니다. 엔진 소스나 저장 형식 자체가 바뀌는 경우는 별개입니다. 그때는 게임 안에서 먼저 저장해야 합니다. 저장 지점을 모든 기기에 옮기는 편의보다 확인된 자료만 엔진에 넘기는 보호를 지키면서, 평소의 앱 업데이트가 플레이를 끊지 않도록 기준을 나눴습니다.
함께 읽을 개발 이야기
- 개발 이야기v1.10.0클로즈 베타 테스트
BIOS 파일 없이 넣는 PlayStation 디스크
여러 BIN을 한 게임으로 합치고 CHD와 여러 장짜리 디스크를 다루는 방법, 가장 느린 기준 Android 기기에서 확인한 뒤 JIT를 켜지 않은 결정을 소개합니다.
- 개발 이야기v0.5.1초기 개발
저장 데이터를 파일로 보관하기
Google Drive를 연결하지 않아도 저장 데이터를 파일로 보관하거나 다른 기기로 옮길 수 있습니다.