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 산출물 연결은 별도 작업.