← 목록
브라우저 2026-06-29 4KB 읽기 5분

CrownyBrowser 전용(크라우니전용) 컴파일타임 모드 — WebKit 0 풀UX 빌드

개요

native/crowny-browser.m(3857줄, 항상 WebKit 링크하던 하이브리드 소스)에 컴파일타임 "전용" 모드를 추가. 같은 소스를 WebKit 없이 컴파일해, 전용 빌드가 범용과 동일한 풀 UX(멀티탭·북마크·히스토리·듀얼탭·테마)를 갖되 WebKit 심볼 0이 되게 함. 축소본 crowny-browser-standalone.m(778줄)을 대체 가능.

무엇을 했는지

  • -DCROWNY_HYBRID 정의 = 범용(기존 동작 그대로, WKWebView). 미정의 = 전용(WebKit 미링크).
  • 모든 WK 타입/메서드/프로퍼티/프로토콜적합성/#import <WebKit/WebKit.h>
#ifdef CROWNY_HYBRID 로 가드. crowny://app/*(네이티브 CrownyAppView)·듀얼탭·테마· 북마크·히스토리는 전용 빌드에서도 그대로 작동. http(s)·crowny://web 은 폴백 처리.
  • 제품 매크로에 #elif defined(CROWNY_PRODUCT_CROWNY) 분기 추가
(CB_PRODUCT_NAME=@"CrownyBrowser Crowny", CB_EDITION=@"크라우니전용", CB_FIRST_TAB=kCrownyTabURL).
  • Makefile crownyonly 타깃 추가 (-DCROWNY_PRODUCT_CROWNY, WebKit/Network/HYBRID/VM_WEBKIT 제외).

가드 삽입 영역 (crowny-browser.m)

  • import: <WebKit/WebKit.h> + <Network/Network.h> (nw_ 프록시는 makeWebView 내부뿐)
  • CrownySchemeHandler 클래스 전체
  • CrownyTab.webView 프로퍼티
  • CrownyBrowserDelegate 프로토콜 적합성 (WKNavigationDelegate/WKUIDelegate/WKScriptMessageHandler)
  • ivar _sharedUCC / _sharedScheme / _sharedVMScheme
  • didFinishLaunching 의 sharedScheme/UCC/UserScript 셋업
  • makeWebView (전체), tabForWebView (전체), userContentController:didReceiveScriptMessage (전체)
  • KVO observeValueForKeyPath ~ WKUIDelegate createWebView 까지 연속 블록 1개로 가드
  • 혼합 메서드 부분 가드: createTabWithURL(전용=런처 폴백), activateTabAtIndex, closeTabAtIndex,
configureTab, applySessionToAllTabs, doLogin/doLogout reload, addCurrentPageToBookmarks, submitFeedback, goBack/goForward/reload, chromeCanGoBack/Forward, navigateActiveTabTo(crowny://web 폴백), loadPureModeURL(전용=NO 반환), dealloc
  • 전용빌드 전용 미사용 경고 4건 → __attribute__((unused)) 로 정리
(CrownyCurrentUA, kCrownyProxyPort, renderPureHTML, pureSamplePathForKey)

보조 파일 (이미 가드됨, 수정 불요)

  • crowny_vm_bridge.m: WK 코드 #if defined(CROWNY_VM_WEBKIT) (전용빌드 미정의)
  • crowny_browser_vm.m: CrownyAppSchemeHandler #if defined(CROWNY_VM_WEBKIT)
  • crowny_tier.m: 실제 WK 심볼 없음 (주석만)

검증 결과

  • make CrownyBrowser (범용/hybrid): 에러 0 · 경고 0 · WebKit링크 1 — 회귀 없음
  • make crownyonly (전용): 에러 0 · 경고 0 · WebKit링크 0 · 177K
  • make public/make universal: 클린 · WebKit링크 각 1 (회귀 없음)
  • 전용 바이너리 실행: 크래시 없이 창 기동, 3초 생존, 정상 종료. 링크 프레임워크=Cocoa/
ApplicationServices/Foundation/AppKit/CoreFoundation/CoreGraphics (WebKit·Network 없음)

관련 파일

  • /Users/ef/CrownyBrowser/native/crowny-browser.m (가드 추가)
  • /Users/ef/CrownyBrowser/native/Makefile (crownyonly 타깃)

잔여 이슈

  • 전용 빌드에서 crowny://web 순수모드는 현재 구현이 WKWebView loadHTMLString 의존이라
미지원(loadPureModeURL=NO). crowny://app 네이티브 경로는 정상. 순수모드를 전용에서 살리려면 CrownyAppView/PPM 경로로 재배선 필요(후속).
  • 전용 .app 패키징(package-variants.sh)에 crownyonly 산출물 연결은 별도 작업.