---
type: note
kind: Recipe
title: Chrome 외부 앱 딥링크 "항상 열기" 해제
description: 설정 UI에 항목이 없는 커스텀 스킴 자동 실행 허용을, origin 단위로 되돌리는 순서.
tags: ['chrome', 'deep-link', 'troubleshooting', 'macos']
status: release
ctime: 2026-09-01
mtime: 2026-09-01
generated: { by: claude/opus-5, at: 2026-09-01T00:00:00Z }
---

**언제** — 커스텀 스킴(`myapp://`) 다이얼로그에서 "항상 열기 허용"을 실수로 체크해 되돌리고 싶을 때. **설정 UI 에는 항목이 없고** 실제 상태는 프로필의 JSON 에 origin 단위로 저장된다.

- 체크는 `Preferences` 의 `protocol_handler.allowed_origin_protocol_pairs` 에 `{ "origin": { "scheme": true } }` 로 저장된다.
- `chrome://settings/handlers` 는 **웹 프로토콜 핸들러**(`mailto:` 등 사이트가 등록한 것)만 다룬다. 외부 앱 실행 허용과는 별개다.
- **Chrome 은 종료 시 메모리 상태를 `Preferences` 에 덮어쓴다 — 실행 중에 파일을 고치면 되돌아간다.**
- MAC 해시로 보호되는 pref 는 `Secure Preferences` 에 들어가며 손으로 고치면 무시·초기화된다.

```
다이얼로그를 다시 띄우고 싶다
 ├─ R1 사이트 데이터 삭제 ─── 해결? → 끝
 ├─ Chrome 완전 종료
 ├─ R2 Preferences 편집 ─── protocol_handler 있음? → 편집 → 끝
 ├─ R3 grep 추적 ─┬─ 다른 프로필/브라우저? → 경로 바꿔 R2
 │                ├─ Secure Preferences? → R1
 │                └─ chrome://policy → R4
 └─ macOS 인데 여전히 안 뜸 → R5 (Launch Services)
```

---

## R1. 사이트 데이터 삭제 (가장 안전, 우선 시도)

`chrome://settings/content/all` → 해당 사이트 검색 → 항목 클릭 → "데이터 및 권한 삭제".

외부 프로토콜 허용이 origin 단위 사이트 데이터에 묶여 있어 함께 초기화되는 경우가 많다.

---

## R2. Preferences 직접 편집

R1 로 안 될 때. **반드시 Chrome 을 완전히 종료**(백그라운드 프로세스 포함)한 뒤 진행한다.

| OS | 경로 |
|---|---|
| macOS | `~/Library/Application Support/Google/Chrome/<Profile>/Preferences` |
| Windows | `%LOCALAPPDATA%\Google\Chrome\User Data\<Profile>\Preferences` |
| Linux | `~/.config/google-chrome/<Profile>/Preferences` |

`<Profile>` 은 보통 `Default` 또는 `Profile 1`… 정확한 값은 `chrome://version` 의 "프로필 경로"에서 본다.

한 줄로 압축된 JSON 이라 `jq` 가 편하다.

```bash
jq '.protocol_handler.allowed_origin_protocol_pairs' Preferences            # 확인

jq 'del(.protocol_handler.allowed_origin_protocol_pairs["https://example.com"])' \
  Preferences > tmp && mv tmp Preferences                                   # 특정 origin

jq 'del(.protocol_handler.allowed_origin_protocol_pairs)' \
  Preferences > tmp && mv tmp Preferences                                   # 전체 초기화
```

**확인** — Chrome 재시작 후 다이얼로그가 다시 뜬다. `excluded_schemes` 에 `true` 로 들어간 스킴은 "차단" 상태이니 반대로 차단을 풀고 싶을 때 같이 본다.

---

## R3. 안 보일 때 추적

`protocol_handler` 가 비어 보이거나 없을 때.

```bash
grep -l "myapp" Preferences "Secure Preferences" "Local State" 2>/dev/null
grep -o '.\{200\}myapp.\{200\}' Preferences     # 한 줄 JSON이라 주변 컨텍스트째로
```

체크리스트 — **다른 프로필**(`Default` 가 아닐 수 있다, `chrome://version` 재확인) / **다른 브라우저**(Beta·Canary·Chromium·Edge 는 완전히 별도 디렉터리) / **`Secure Preferences` 에 있으면** 파일 편집을 포기하고 R1 로 / **검색 실패**는 Chrome 실행 중이라 덮어써졌거나 한 줄 JSON 에서 눈으로 놓친 것.

---

## R4. 정책으로 걸린 경우

`chrome://policy` 에서 `AutoLaunchProtocolsFromOrigins` 를 본다. 값이 있으면 사용자가 체크한 게 아니라 **관리 정책으로 처음부터 다이얼로그가 억제된 것**이라 로컬 편집으로 못 지운다. 회사 관리 기기면 IT/MDM 쪽 문제다.

반대로 스킴 자체를 막고 싶으면 `URLBlocklist` 에 `myapp://*` 를 넣는다.

---

## R5. macOS — Chrome 밖일 가능성

Chrome 이 아니라 OS(Launch Services)가 스킴을 확인 없이 넘기는 경우.

```bash
/System/Library/Frameworks/CoreServices.framework/Frameworks/LaunchServices.framework/Support/lsregister \
  -dump | grep -B5 -A5 "myapp:"
```

앱이 스킴 핸들러로 등록돼 있으면 여기서 확인된다.
