CrownyBrowser v0.2 — Daily Driver (탭/기록/북마크/시작페이지)
개요
macOS 네이티브 브라우저 (Cocoa + WKWebView, 순수 Objective-C)에 멀티탭·히스토리·북마크·시작페이지를 추가하여 실제 데일리 드라이버로 사용 가능한 수준으로 끌어올렸다.
무엇을 했는가
1. 멀티탭 (Multi-tab)
CrownyTab 모델 객체 (WKWebView + 제목 + URL + 테마)
- 상단 탭바: 각 탭을 클릭 가능한
NSView + 닫기 × 버튼
- 새 탭
+ 버튼
- 모든 탭이 공유
WKUserContentController와 스킴 핸들러 사용 → CSS 주입·스킴 처리가 모든 탭에서 일관
- 우클릭으로 탭 닫기
- ⌘T 새 탭, ⌘W 닫기, ⌘⇧] 다음, ⌘⇧[ 이전, ⌘L URL 포커스
2. 기록 (History)
- 모든 커밋된 네비게이션을
{url, title, timestamp, theme} 형태로 기록
~/Library/Application Support/CrownyBrowser/history.json 에 저장
- 10000개 상한 — 초과 시 가장 오래된 항목부터 제거
- ⌘Y → 기록 창 (NSTableView, 더블클릭으로 열기)
- 크라우니 내부 시작페이지(
crowny-internal://start)는 기록하지 않음
3. 북마크 (Bookmarks)
- ⌘D → 현재 페이지를 북마크에 추가 (중복 방지)
~/Library/Application Support/CrownyBrowser/bookmarks.json 영속화
- 첫 실행 시 6개 프리뷰 페이지 자동 생성 (bank/int/market/play/mind/security)
- 북마크 바: URL 바 아래 얇은 행에 상위 10개 북마크 버튼
- ⌘B → 북마크 관리 창 (NSTableView)
4. 시작 페이지 (Start Page)
- 새 탭 / 빈 URL 시
crowny-internal://start/index.html 로드
/Users/ef/CrownyBrowser/bundle/start/index.html (8KB)
- 섹션: 빠른 링크 그리드(6), 북마크 타일, 최근 기록
- 6 테마 모두 지원 (CSS 변수 +
data-theme)
- 네이티브가 탭 로드 후
window.crownyStartData 주입 → 북마크·기록 섹션 동적 채움
5. URL 바 개선
CrownyURLField (NSTextField 서브클래스) — 포커스 시 전체 선택
- 스킴 없는 입력: 도메인처럼 보이면
https:// 우선, 실패 시 http:// 폴백 (didFailProvisionalNavigation)
. 없는 입력은 Google 검색으로
- 테마 인디케이터 점 — URL 바 왼쪽에 현재 페이지
data-theme 색상 표시
6. 6 테마 크롬 동기화
- 모든 UI 요소 (창·탭바·북마크바·URL바) 활성 탭의 테마에 맞춰 색상 전환
- JS → 네이티브는
crownyTheme 메시지 핸들러로 변경 감지
관련 파일 경로
/Users/ef/CrownyBrowser/native/crowny-browser.m (55KB, 850줄)
/Users/ef/CrownyBrowser/native/crowny-browser.한선 (15KB, 동반 문서)
/Users/ef/CrownyBrowser/native/Makefile (변경 없음)
/Users/ef/CrownyBrowser/bundle/start/index.html (신규)
/Users/ef/CrownyBrowser/bundle/design/premium-v1.css (기존)
~/Library/Application Support/CrownyBrowser/history.json (런타임 생성)
~/Library/Application Support/CrownyBrowser/bookmarks.json (런타임 생성)
빌드
bashcd /Users/ef/CrownyBrowser/native && make
# → CrownyBrowser (arm64 Mach-O, 약 127KB)
./CrownyBrowser
잔여 이슈 / 향후 작업
- 탭 드래그 리오더 미구현 (현재는 생성 순서 고정)
- 개인 정보 보호 모드(프라이빗 탭) 없음 — 모든 탭이 동일 cookiestore
- 다운로드 매니저 없음
- 찾기(⌘F) UI 없음 — WKWebView 기본 API로 추가 가능
- 북마크 폴더/검색 없음 (플랫 리스트)
- 기록 창 검색 필터 없음
- 홈 버튼/단축 URL 바 자동완성 미구현