PlayGuard

문제 해결

이 페이지는 최신 릴리스인 v1.3.0를 설명합니다. 개발 중인 버전

잠긴 본체를 다시 쓰는 방법, 자주 있는 문제, 버그 신고, 개발자 모드를 설명합니다.

이 페이지의 내용

본체가 잠겼나요?

PlayGuard는 자신이 실행 중인 시스템의 자녀 보호 기능만 볼 수 있습니다. emuMMC와 sysMMC는 각각 자녀 보호 기능이 따로 있습니다(한쪽에서 삭제한 PIN이 다른 쪽에는 그대로 남아 있습니다). 고쳐야 하는 시스템마다 PlayGuard를 실행하세요.

중고 본체

PIN은 알지만 이전 소유자의 스마트폰 앱이 아직 연동되어 있는 경우입니다(연동 해제가 실패하거나, 초기화할 때 이전 소유자의 계정을 요구합니다).

보안 › 스마트폰 앱 연동 해제를 하고, 자녀 보호 기능을 아예 쓰지 않으려면 자녀 보호 기능 모두 삭제를 하세요. 둘 다 오프라인에서, emuMMC와 sysMMC 모두에서 작동합니다.

PIN을 잊어버렸을 때

PIN 표시는 PIN 자체를 요구하므로 여기서는 도움이 되지 않습니다. 복구 sysmodule을 설치해 두었다면(아래 참고) RESCUE 파일을 넣고 다시 시작하세요. 복구 화면에서 새 PIN을 정할 수 있습니다(이전 PIN은 절대 보여 주지 않습니다). 복구 sysmodule이 없다면 자녀 보호 기능 모두 삭제로 처음부터 다시 시작합니다(먼저 설정 백업이 저장되며, 백업에는 PIN이 절대 들어가지 않습니다). PIN으로 PlayGuard 보호가 켜져 있다면(기본값은 변경하기 전) 먼저 SD 카드를 컴퓨터에 넣고 sd:/config/playguard/config.json에서 "pin_lock"을 "off"로 바꾸세요.

플레이 타이머가 모든 것을 막고(0분 제한) PIN도 잊어버렸을 때

이때는 PlayGuard 자체가 시작되지 않습니다. 선택 사항인 복구 sysmodule(playguard-rescue.zip)을 미리 설치해 두세요. 잠겼을 때 SD 카드에 빈 config/playguard/RESCUE 파일을 넣고 부팅하면 본체의 잠금이 풀려 PlayGuard를 열 수 있습니다. sysmodule/README.md(영어)를 참고하세요.

이 모듈은 PlayGuard 버전에 맞춰야 합니다. PlayGuard를 업데이트할 때마다 그 버전의 playguard-rescue.zip을 다시 압축 해제하고(또는 알림 벨의 복구 sysmodule이 최신이 아닙니다에서 업데이트), 본체를 다시 시작하세요. 오래된 모듈이 남긴 보고서는 PlayGuard가 확인할 수 없습니다. 이때 복구 화면은 아무것도 제안하지 않고 모듈이 오래되었다고 알려 주며, 모듈을 업데이트할 때까지는 RESCUE를 다시 해도 결과가 같습니다.

Homebrew 메뉴 잠김

본체 › 포워더 › Homebrew 메뉴 잠그기를 하면 앨범이나 R을 누른 채 시작한 게임에서 Homebrew 메뉴가 열리지 않습니다. PlayGuard의 포워더와 보호된 메뉴가 둘 다 없어졌다면(본체 설정에서 삭제했거나, 다른 시스템에 있는 경우. 잠금은 SD 카드에 있어 sysMMC와 emuMMC 모두 읽습니다):

  • 컴퓨터에서: SD 카드의 atmosphere/config/override_config.ini를 삭제하고(또는 원래 파일인 config/playguard/override_config.ini.backup을 되돌려 놓고) 본체를 다시 시작하세요.
  • 복구 sysmodule을 설치해 두었다면(선택 사항): SD 카드에 빈 config/playguard/RESCUE 파일을 넣고 다시 시작하세요. sysmodule이 부팅할 때 잠금을 풀고, PlayGuard가 다음에 시작할 때 그렇다고 알려 줍니다. 잠근 뒤 Atmosphère를 업데이트해도 같은 방식으로 잠금이 풀립니다.

개조하지 않은 본체

PlayGuard로는 도울 수 없습니다. Atmosphère가 필요합니다. 공식적인 방법은 닌텐도 고객 지원의 마스터 키 절차입니다.

자주 있는 문제

남은 시간이 줄지 않음

약 90초 동안 움직이지 않으면 오늘에 지금 본체가 플레이 시간을 계산하지 않고 있습니다라고 표시됩니다. 가능한 원인은 다음과 같습니다.

  • 네트워크 시계를 한 번도 맞추지 않았습니다. 본체 › 네트워크 시계 › 시간 차이 측정을 한 뒤 시계를 맞추세요(네트워크 시계).
  • 시계를 뒤로 돌렸습니다. 뒤로 돌린 뒤에는 시계가 이전 시각을 지날 때까지 계산이 멈춥니다. 따로 할 일은 없습니다.
  • 방금 제한을 기록했습니다. 게임을 1분 정도 실행한 뒤 다시 확인하세요.
  • 자녀 보호 기능이 일시 해제되어 있습니다. 이때는 플레이 시간이 계산되지 않을 수 있습니다. 오늘 › 다시 켜기를 누르세요(머리글의 라벨을 눌러도 됩니다).

제한이 저절로 바뀌었음

  • 스마트폰 앱이 아직 연동되어 있습니다. 다음 동기화 때 PlayGuard에서 정한 것을 덮어씁니다. 보안 › 스마트폰 앱 연동 해제를 하세요.
  • 다른 도구, 또는 프로필. PlayGuard가 마지막으로 본 것과 다른 제한이면 오늘에 호박색 카드가 표시되고, 변경 기록 › PlayGuard로 변경한 내용에 PlayGuard 밖에서 감지된 변경이 하나씩 표시됩니다. 그중 하나에서 Ⓐ를 누르면 이전 값으로 되돌립니다.
  • 예약된 프로필이 적용되었거나, 기간이 끝나 원래 제한으로 되돌아갔습니다(플레이 타이머 › 프로필 › 예약된 프로필).

아이가 제한을 넘어 플레이했음

  • 본체가 알림만 합니다. 플레이 타이머 › 시간이 다 되면에서 소프트웨어 일시 정지를 고르세요.
  • 자녀 보호 기능이 해제된 채였습니다. 해제된 동안에는 오늘의 제한이 일시 중지되며, 머리글의 라벨이 모든 탭에서 이를 알려 주며, 라벨을 누르면 오늘 › 다시 켜기로 갑니다. 본체를 다시 시작해도 잠깁니다.
  • 시계를 뒤로 돌렸습니다. 시계가 이전 시각을 지날 때까지 계산이 멈춥니다(계산되는 것).
  • 다른 시스템. emuMMC와 sysMMC는 각각 자녀 보호 기능이 따로 있습니다. 두 시스템 모두에 설정하거나 hekate 부팅 메뉴를 숨기세요(호환성).

오늘 제한 시간 전체를 다시 쓸 수 있게 됨

시계(네트워크 시계 또는 본체 시계)를 바꾸면 오늘의 플레이 시간이 처음부터 다시 계산됩니다. 시계는 아이가 플레이한 뒤가 아니라 플레이하기 전에 맞추세요.

PlayGuard가 읽기 전용으로 열림

본체에서 테스트한 가장 새로운 펌웨어보다 새 펌웨어가 실행 중입니다. PlayGuard는 그 펌웨어를 지원하는 새 버전이 있는지 확인하고 업데이트를 제안합니다(더 새로운 펌웨어). 제목 오른쪽의 줄 그은 연필은 앱이 읽기 전용이라는 표시이며, 누르면 펌웨어 화면이 열립니다.

PlayGuard가 PIN을 계속 묻거나, 전혀 묻지 않음

보안 › PIN으로 PlayGuard 보호: 변경하기 전(기본값)은 첫 변경 전에 한 번 묻고, PIN은 PlayGuard를 닫을 때까지 유효합니다. 5분 후 PIN 다시 요구는 5분 뒤 다시 묻습니다. PIN 표시는 항상 묻습니다.

게임이 시작되지 않거나, HOME 메뉴에 "!"가 표시됨

본체 › 설치된 게임이 게임마다 무엇이 문제이고 무엇을 해야 하는지 알려 줍니다. 세이브 데이터는 항상 남습니다(설치된 게임).

보호된 포워더에 오류 2347-0100이 표시됨

게이트(config/playguard/gate-….nro)가 더 이상 포워더를 만들 때의 파일이 아닙니다. SD 카드에서 바뀌었거나 교체되었으므로 포워더가 게이트를 시작하지 않습니다. PlayGuard 자체의 포워더로 PlayGuard를 여세요. 시작할 때 게이트를 다시 씁니다. 본체 › 포워더 › 모두 다시 설치를 하면 모든 포워더를 그 게이트로 다시 만듭니다.

보호된 포워더가 바로 닫힘("오류가 발생했습니다")

PlayGuard 화면이 나오기 전에 오류 코드 없이 닫힙니다(atmosphere/crash_reports/의 Atmosphère 보고서에 forwarder 모듈, 결과 2000-0000이 적혀 있습니다). 게이트가 에셋 없이 빌드된 PlayGuard로 만든 포워더이며, 포워더의 로더가 이를 거부했습니다. PlayGuard를 업데이트한 뒤 다시 만드세요. 이전 로더로 만든 모든 포워더에 대해 벨과 본체 › 포워더에서 다시 만들기를 제안합니다.

보호된 포워더가 PIN 입력 뒤에도 게이트 화면에 머묾

PIN이 받아들여졌는데도 Homebrew 아이콘이 있는 화면이 그대로이고 더 이상 아무 일도 일어나지 않습니다. 게이트가 그 화면을 단일 버퍼로 그린 뒤, 다음 화면을 그리기를 끝없이 기다린 것입니다. PlayGuard를 업데이트한 뒤 다시 만드세요. 이전 게이트로 만든 모든 포워더에 대해 벨과 본체 › 포워더에서 다시 만들기를 제안합니다.

포워더에 "소프트웨어를 시작할 수 없습니다"가 표시됨

본체가 시작을 거부했습니다. 서명 검사가 아직 남아 있습니다. 확인할 순서는 다음과 같습니다.

  • sys-patch 옆의 sigpatch 파일. sys-patch가 작동하는 동안 atmosphere/kip_patches/fs_patches, loader_patches 또는 atmosphere/exefs_patches/es_patches에 .ips 파일이 있는 경우입니다. 두 도구가 같은 검사를 패치하는 것으로, GBAtemp의 sys-patch와 sigpatch 스레드에서 가장 많이 꼽히는 원인입니다. 본체 › 게임 패치가 이를 경고하며, 거기서 Ⓐ를 누르면 따로 옮겨 둡니다(config/playguard/sigpatches-aside/로 옮기기만 하고 삭제하지 않음. hekate의 bootloader/patches.ini는 그대로). 본체를 다시 시작하세요.
  • sys-patch가 적용하지 않은 패턴. 포워더에는 모듈마다 하나가 아니라, sys-patch가 이 펌웨어용으로 가진 fs와 loader의 모든 패턴(noncasigchk_17.0.0+, nocntchk_19.0.0+, noacidsigchk_10.0.0+)이 필요합니다. 정보 › 도움말 및 진단 › 진단 보고서 내보내기의 game patches 줄에 sys-patch 버전과 빠진 각 패턴이 나옵니다. sd:/config/sys-patch/log.ini에도 같은 내용이 있습니다. config/sys-patch/config.ini가 이 시스템을 패치하도록(emuMMC에서는 patch_emummc=1) 되어 있고 어느 것도 끄지 않았는지 확인하세요. sys-patch 관리자 본인에 따르면 23.0.x에는 1.6.2.3보다 새로운 sys-patch가 필요하지 않습니다.
  • 패치가 바뀐 뒤 다시 시작하지 않음. sys-patch는 부팅할 때 패치합니다.
  • 이전 PlayGuard로 만든 포워더. 벨과 본체 › 포워더에서 이전 로더로 만든 포워더를 다시 만들도록 제안합니다.

벨이나 탭에 호박색 배지가 표시됨

확인이 필요한 것이 있습니다. Ⓨ로 목록을 열고, 항목에서 Ⓐ를 누르면 바로 해결하거나 해결하는 곳을 엽니다(알림).

버그 신고

오류가 나면 시스템 코드(예: 0x0001088E)와 그 코드에 대해 알려진 내용이 표시됩니다. 의미가 문서화된 코드는 해야 할 일을 알려 주고, 그렇지 않은 코드는 보고서가 도움이 됩니다.

  1. 정보 › 도움말 및 진단 › 진단 보고서 내보내기로 sd:/config/playguard/logs/reports/에 텍스트 파일을 저장합니다. 펌웨어, Atmosphère 버전, 시작에 걸린 시간과 느린 화면에 걸린 시간(변경 기록, 모든 게임, 설치된 게임 확인, 스스로 새로 고치는 탭), 시계, 저장소, 시리얼 번호 숨김과 게임 패치 상태, Atmosphère의 DNS 리디렉션이 닌텐도의 자녀 보호 기능 서버와 시간 서버를 어떻게 처리하는지(네트워크 테스트가 아니라 SD 카드의 hosts 파일에서 읽으며, Atmosphère 자체의 atmosphere/logs/dns_mitm_startup.log 끝부분도 함께), 자녀 보호 기능 조회 결과 원본 전체, 그리고 로그가 들어 있습니다. 로그에는 마지막 실행이 어떻게 끝났는지, 남은 메모리와 SD 카드 공간, 최근 충돌 파일, 마지막 80줄의 기록이 있습니다. PIN이나 시리얼 번호는 절대 들어가지 않습니다.
  2. 이슈를 열고 보고서를 첨부하세요.

보고서 온라인으로 보내기

본체가 온라인이라면 정보 › 도움말 및 진단 › 보고서 보내기…(개발자 모드에서는 진단 보고서에서 Ⓧ)로, 보낼 내용을 정확히 알려 준 뒤 GitHub 계정의 비밀 gist로 보고서를 보냅니다. 이전에 logs/reports/에 저장한 보고서도 같은 방법으로 보낼 수 있습니다.

  • 보내는 것: 보고서와 각 파일은 각각 별도 파일로 보냅니다.
  • 최근 충돌 보고서: logs/crashes/에 있는 PlayGuard의 최근 3개, 그리고 sd:/atmosphere/crash_reports/에 있는 지난 1주일 동안의 홈브루 충돌 중 Atmosphère의 최근 2개(다른 홈브루의 충돌이 섞일 수 있으며, 보내기 전에 표시되는 목록에서 알 수 있습니다).
  • 이번 실행과 그 이전 실행의 로그(logs/sessions/. 긴 로그는 시작 부분과 마지막 64 KiB).
  • 디버그 파일: 플레이 타이머 블록 기준, 플레이 타이머 기록이 켜져 있으면 플레이 타이머 기록의 끝부분, 변경 기록의 최근 20개 변경(게임, 사용자, 프로필 이름 없이 날짜만), PlayGuard의 설정.
  • 로그인: 로그인하지 않았다면 먼저 로그인을 제안합니다. 로그인하면 바로 아래에 나타나는 GitHub 계정에서 로그아웃합니다. GitHub가 gist를 거부하면 PlayGuard가 다시 로그인하도록 제안합니다.
  • 보낸 뒤: QR 코드 2개를 표시하며, 첫 번째 아래에는 링크와, 읽어 주거나 입력하기 쉽도록 네 글자씩 나눈 그 ID가 나옵니다. 첫 번째는 이미 도와주고 있는 사람을 위한 보고서이고, 두 번째는 버그를 신고할 때 스캔하는 버그 신고 양식으로, 링크, 버전, PlayGuard를 실행한 방법(게임 위에서, HOME 메뉴 아이콘에서 또는 앨범에서. 메뉴는 직접 추가하세요), 시스템(sysMMC 또는 emuMMC)이 미리 채워져 있습니다. 링크는 알림에도 남으며, 각 링크는 logs/uploads/에 인터넷 바로 가기(.url)로 보관되며, 컴퓨터에서 열면 브라우저로 열립니다.

GitHub에서 gist를 삭제할 때까지 링크가 있는 사람은 누구나 보고서를 읽을 수 있고, 이 링크로 연 버그 신고는 공개됩니다. 확인 화면에서도 이를 알려 줍니다.

PlayGuard가 SD 카드에 남기는 것

모두 sd:/config/playguard/logs/에 있으며, 컴퓨터에서 열 수 있는 일반 텍스트입니다.

  • sessions/session_<date>.txt — 실행할 때마다 파일 하나입니다. PlayGuard가 기록한 모든 내용(예전에는 nxlink로 PC에만 전달되던 내용)이 줄마다 시각과 수준(E 오류, W 경고, I 정보)과 함께 들어 있고, 마지막 줄에는 실행이 어떻게 끝났는지가 적힙니다. === end: clean exit ===(정상 종료) 또는 === end: crash, see logs/crashes/… ===(충돌)입니다. 파일은 1 MiB에서 더 커지지 않습니다.
  • crashes/crash_<date>.txt — 충돌할 때마다 파일 하나이며, 첫 줄에 무슨 일이 있었는지 적힙니다.
  • CPU 예외(잘못된 포인터, 정의되지 않은 명령, 스택 오버플로): 오류 종류와 접근한 주소, 백트레이스, 레지스터. 주소는 playguard.nro 안의 오프셋(playguard+0x1a2b3c)이며, 해당 빌드의 링커 맵(그 CI 실행의 -linker-map 아티팩트)에서 함수를 찾을 수 있습니다. 그 뒤 PlayGuard는 이전과 같이 종료됩니다. 본체의 오류 화면이 뜨고, Atmosphère 자체 보고서가 sd:/atmosphere/crash_reports/에 남습니다.
  • 처리되지 않은 예외: 예외 종류와 메시지, 백트레이스.
  • 끝나지 않은 실행: 다음 시작 때, 지난 실행의 세션 파일에 끝 줄이 없으면 발견됩니다(PlayGuard가 잡지 못한 충돌, 멈춘 상태에서 HOME 메뉴로 닫음, 본체 전원 꺼짐). 그 실행의 마지막 60줄이 함께 들어갑니다.

PlayGuard가 실행 중에 잡은 충돌 파일은 충돌 직전에 기록된 마지막 80줄로 끝납니다. - reports/, uploads/, play_timer/ — 저장한 보고서, 온라인으로 보낸 보고서의 링크, 플레이 타이머 기록.

보고서, 충돌 파일, 세션 로그, 링크를 몇 개 보관할지는 정보 › 도움말 및 진단에서 정합니다(폴더마다 따로. 가장 최근 것은 항상 남습니다).

개발자 모드(새 펌웨어 조사)

정보 › 버전에서 Ⓨ를 일곱 번 누르세요. 정보 › 도움말 및 진단 맨 아래에 개발자 도구가 나타납니다. 다음이 추가됩니다.

  • 읽기 전용 스위치 — 켜면 앱이 아무것도 바꿀 수 없습니다. 새 펌웨어를 안전하게 조사하는 방법입니다(펌웨어 화면에서 바로 제안합니다).
  • 화면에서 보는 진단 보고서(Ⓨ로 저장, Ⓧ로 온라인 전송)와, 플레이 타이머 탭에서 보고서를 내보내는 바로 가기.
  • 본체 자체 테스트: 본체 체크리스트(영어)를 직접 하나씩 확인하기 전에 PlayGuard가 이 본체에서 스스로 확인하는 것입니다. PIN, 서명 패치, 데이터 폴더, PlayGuard로 만든 각 포워더(HOME 메뉴에 있는지, 보호되었는지, 게이트를 거쳐 작동하는 것이 확인되었는지), SD 카드의 게이트, Atmosphère가 읽는 Homebrew 메뉴 잠금, 돌아오는 길, 복구 sysmodule. 아무것도 바꾸지 않으며, 결과를 Markdown으로 config/playguard/self-test.md에 써 두므로 풀 리퀘스트에 붙여 넣을 수 있습니다.
  • 출시 전에 수정 사항을 시험해 보기 위해 그 자리에서 다른 빌드 설치(아래).
  • 플레이 타이머 블록 비교(스마트폰 앱이 연동되어 있고 동기화할 수 있는 동안만 사용 가능. 닌텐도를 차단하는 hosts 파일이 있으면 사용할 수 없음. 보안에도 있음)로 PlayGuard가 아직 표시하지 않는 설정을 해독합니다. 원본 블록을 기준으로 저장하고, 스마트폰 앱에서 설정 하나를 바꾼 뒤 돌아오면 PlayGuard가 바뀐 값을 보여 줍니다(요청하면 logs/reports/에 저장). 스마트폰 앱에서 설정하는 요일별 취침 시간도 이렇게 확인할 수 있습니다. 그 파일을 이슈에 첨부하거나 보고서와 함께 보내세요(보고서 보내기…).
  • 플레이 타이머 기록: PlayGuard가 열려 있는 동안 30초마다 플레이 타이머가 보고하는 내용(남은 시간, 사용한 시간, 원본 설정 블록 등)을 한 줄씩 logs/play_timer/log.csv에 기록합니다. 스프레드시트에서 바로 열 수 있는 파일입니다. PlayGuard가 변경을 할 때마다 바로 뒤에 무엇을 바꿨는지 한 줄을 더하고(마지막 열 event), 지난 시간보다 시계가 더 많이 움직였으면 메모를 남깁니다. 자정을 넘기거나 시간이 다 될 때까지 열어 두면, 보고서 하나로는 알 수 없는 것을 보여 줍니다. 사용한 시간이 언제 초기화되는지, 끝날 무렵 본체가 무엇을 표시하는지입니다. 스위치 상태는 기억되며, 개발자 모드에서만 기록합니다. 지금까지 알려진 내용은 parental-controls.md(영어)에 있습니다.
  • 캐시 비우기와 로그 파일 삭제는 각각 파일 수와 용량을 알려 주는 확인 뒤에 진행됩니다. 캐시(cache/와 각 시스템의 nand/<system>/cache/: 게임 이름과 아이콘, 플레이 기록의 마지막 수치, 빌드 목록)는 필요할 때 본체에서 다시 읽습니다. 로그 파일은 충돌 파일, 세션 로그(아직 기록 중인 이번 실행의 로그는 제외), 저장한 보고서, 플레이 타이머 기록이며, uploads/(온라인으로 보낸 보고서의 삭제 링크)와 블록 기준은 남습니다. 설정, 변경 기록, 백업, 프로필, 내보내기 파일은 절대 건드리지 않습니다.
  • 마이그레이션 다시 실행: 이전 배치에서의 이동(.nro 옆에 있던 데이터 폴더, 하위 폴더가 생기기 전의 로그, 모든 시스템이 함께 쓰던 것)이 한 줄씩 나오며 체크하거나 해제할 수 있습니다(처음에는 모두 체크됨, A로 하나씩 전환). 이어서 선택한 N개 실행을 누르면 각각이 무엇을 옮기는지 보여 주는 확인이 나옵니다. migrations.json의 기록과 관계없이 바로 실행됩니다(평소에는 그것이 필요한 빌드를 처음 시작할 때 한 번만 실행되며, 기록된 단계는 절대 낮아지지 않습니다). 이미 제자리에 있는 파일은 절대 바꾸지 않습니다. 옮긴 항목 수는 대화 상자에 나오고, 각 단계는 세션 로그에 남습니다.
  • 프레임 통계: logs/frame_stats.txt에 1초마다 한 줄씩, 화면을 그리는 데 걸린 시간과 늦게 온 프레임을 기록합니다. 본체에서 화면끼리 비교하기 위한 것입니다. 배경 광채는 화면 뒤의 은은한 빛을 끄며(이때 줄의 모드 끝에 -noglow가 붙습니다), 그 부담을 측정할 수 있게 합니다.

다른 빌드 설치

다른 빌드 설치는 출시 전에 수정 사항을 시험해 보기 위해 PlayGuard 자신의 .nro 자리에 빌드를 설치합니다.

목록에 나오는 것은 종류마다 탭이 따로 있습니다(탭 양쪽에 표시되는 Ⓛ / Ⓡ로 이동. 화면은 설치된 빌드의 탭에서 열리며, 각 탭의 이름 뒤에는 반짝이 표시와 설치된 빌드보다 새로운 빌드의 수가 있습니다).

  • 최근 20개 버전 중 하나(사전 릴리스 포함, 태그 표시)
  • main의 최근 20개 커밋 중 하나
  • 이 저장소의 브랜치에서 연 풀 리퀘스트의 최신 빌드(포크에서 온 것은 절대 안 됩니다. 그 코드는 아직 검토되지 않았습니다). 풀 리퀘스트 탭이 표시되어 있을 때 A를 누르면 반대 순서로 정렬합니다(최신 빌드 순 또는 번호순). A의 버튼 안내에 어느 쪽인지 표시됩니다.

각 빌드에는 제목(커밋 또는 풀 리퀘스트의 제목. 커밋의 전체 메시지가 설명입니다)과 그 아래 태그가 표시됩니다. 변경 종류(새 기능, 수정, 문서 등)와 범위, 호환성 깨짐, 커밋이 나온 풀 리퀘스트, 검사 결과(CI OK, CI 실패, CI 진행 중), 사전 릴리스, 설치된 빌드이면 체크 표시, 더 새로우면 반짝이 표시이며, 오른쪽에는 얼마나 지났는지(분, 시간, 그다음 일 단위)와 커밋이 표시됩니다. 빌드를 고르면 먼저 그 페이지가 열립니다. 태그(종류, 검사, 체크 표시 또는 반짝이 표시), 정보 카드(빌드 날짜, 크기, 커밋, 체크섬, GitHub가 삭제하는 날짜), 설치, GitHub에서 보기(스마트폰용 QR 코드), 검사가 아직 진행 중이면 경고, 그리고 버전의 릴리스 노트나 풀 리퀘스트의 설명이 GitHub의 Markdown(제목, 목록, 체크 박스, 코드, 인용과 알림, 표)에서 그려집니다.

안전하게 읽기: GitHub에서 온 모든 내용은 일반 텍스트로 표시됩니다. 링크는 열리지 않고, HTML이나 스크립트는 실행되지 않으며, 제목을 위장할 수 있는 보이지 않는 문자(오른쪽에서 왼쪽 방향 재정의, 폭이 없는 문자, 제어 문자, 잘못된 UTF-8)는 제거됩니다.

로그인. 버전은 아무것도 필요 없습니다. 나머지는 빌드 워크플로의 아티팩트로, GitHub는 로그인한 사용자에게만 줍니다. GitHub 계정에서 코드와 스마트폰으로 스캔할 QR 코드로 로그인합니다. 요청하는 권한은 빌드 워크플로 파일 읽기(Actions)와, 보고서 보내기…를 위한 gist 만들기뿐입니다. 그 외에 토큰은 공개된 것만 읽을 수 있습니다. 토큰은 github_token에 보관되며 보고서와 함께 보내지 않고, GitHub 계정에서 로그아웃합니다. 로그인한 상태에서 Ⓨ(검색)에 풀 리퀘스트 번호(열림 또는 닫힘)나 커밋(16진수 7~40자리)을 입력하면 그 빌드를 찾습니다. 이 저장소의 브랜치에서 온 것만 찾습니다.

설치: PlayGuard는 빌드를 내려받아 확인하고(크기, GitHub가 기록한 SHA-256, NRO 헤더) 자신의 .nro를 교체한 뒤 그 빌드로 다시 시작합니다(PIN이 설정되어 있으면 먼저 PIN을 묻습니다). 창에는 지금 어느 단계인지, 다운로드 크기와 속도, 어떤 빌드를 교체하는지가 표시됩니다. 빌드를 제자리에 놓기 시작하면 취소는 사라집니다.

  • 목록은 10분 동안 보관되고 바로 표시되며, 얼마나 지났는지도 표시됩니다(Ⓧ로 다시 가져오며, 빌드의 검사가 진행 중인 동안에는 화면도 3분마다 다시 가져옴). 가져오는 동안에는 머리글 오른쪽에 진행률 막대가 표시됩니다. 설치하면 무엇을 하는지는 화면 아래쪽에 표시됩니다.
  • 중간에 끊긴 다운로드(네트워크 끊김)는 다음에 같은 빌드를 설치할 때 멈춘 곳부터 이어집니다.
  • 아티팩트는 90일 후 만료됩니다.

돌아가기. 교체된 빌드는 보관됩니다(playguard.nro.previous). 같은 목록의 이전 빌드로 돌아가기로 PIN을 입력한 뒤 다시 맞바꿉니다. 그 빌드는 버전, 풀 리퀘스트, 커밋으로 표시됩니다. 여기서 설치한 빌드(또는 업데이트 방법을 PlayGuard에서로 해서 설치한 빌드)가 첫 화면 전에 충돌하면, PlayGuard는 다음 시작 때 다른 것을 불러오기 전에 단순한 텍스트 화면에서 이전 빌드로 돌아갈지 묻습니다(A는 돌아가기, B는 그대로 시작). PIN이 설정되어 있으면 돌아갈 때 본체 자체의 PIN 화면에서 PIN을 묻습니다(충돌의 원인일 수 있는 PlayGuard의 잠금 화면이 아닙니다). PIN 없이는 설치한 빌드가 시작됩니다. 같은 목록에서 언제든 어느 버전으로든 돌아갈 수 있습니다.

실행 중인 빌드: 개발자 모드에서는 정보 › 버전에 커밋이 표시됩니다. 모든 화면의 머리글에는 제목 옆에 실행 중인 버전이 표시됩니다. 정식 버전은 회색 태그(1.2.0)로, 그 밖의 빌드는 호박색 태그와 커밋으로 표시되므로 테스트 빌드를 정식 버전으로 착각하지 않습니다.

GitHub에서 보기