프로젝트 소개
SwiftTUI Web은 터미널 셀에 그려지는 SwiftUI 의미론을 가진 SwiftTUI 앱을 브라우저로 가져오는 두 개의 npm 패키지를 제공합니다. App을 한 번 작성하고 동일한 View 트리, @State, @FocusState를 웹 페이지에 배포할 수 있으며, Canvas 또는 DOM을 통해 렌더링되고 의미론적 접근성 트리를 갖추며, 재작성이나 xterm.js와 같은 터미널 에뮬레이터 없이 사용할 수 있습니다.
SwiftTUI 앱은 wasm32-wasi로 컴파일되어 구조화된 래스터 표면을 스트리밍합니다. @swifttui/web 패키지는 DOM 또는 캔버스 엔진을 통해 해당 표면을 페이지에 그리며 실제 ARIA 접근성 트리를 마운트합니다. ARIA 트리는 단방향 의미론적 표현 미리보기입니다: 읽기 순서, 이름, 역할, 숨김 상태, 알림 및 런타임 기원 포커스가 표시되지만, 보조 기술 기원 포커스, 활성화, 조정 및 편집은 SwiftTUI로 다시 라우팅되지 않습니다.
이 저장소에는 SwiftTUI의 다섯 호스트 중 두 개가 포함되어 있습니다: 정적 WASI 번들 및 localhost WebHost. 프레임워크 자체는 SwiftTUI/swift-tui에 있습니다. 이 분할은 빌드 타임 Swift 프로세스와 파일 시스템 작업을 브라우저 안전 런타임에서 분리하여 모든 번들러가 런타임을 가져올 수 있게 합니다.
패키지:
- @swifttui/web: 브라우저 런타임—씬 매니페스트 로딩, DOM + 캔버스 렌더링, ARIA 마운팅, WebSocket + WASI 씬 브리지.
- @swifttui/build: 빌드 도구—매니페스트 생성, Swift WASI 빌드, wasm 검증 및 swifttui-web CLI.
설치: 두 패키지 모두 번들된 TypeScript 선언과 함께 ESM으로 npm에 게시됩니다. Bun 또는 TypeScript 도구 체인이 필요하지 않습니다. 컴파일된 dist/ JavaScript 및 선언이 포함되어 있습니다. npm 또는 GitHub 릴리스 타르볼에서 설치할 수 있습니다.
기본 사용법: `npx swifttui-web build --package-path ./TerminalApp --app MyApp`으로 SwiftTUI 앱을 WASI로 빌드한 다음, createWebHostApp 및 createWasmSceneRuntimeFactory를 사용하여 브라우저 런타임에서 결과 매니페스트와 wasm을 마운트합니다. WASI 런타임은 SharedArrayBuffer 기반 stdin을 위해 호스트 페이지가 Cross-Origin-Opener-Policy: same-origin 및 Cross-Origin-Embedder-Policy: require-corp 헤더를 제공해야 합니다. 헤더가 없으면 캔버스가 비어 있습니다.
상태: 베타; 공개 API는 변경될 수 있습니다. 라이브 데모는 https://swifttui.sh/webexample에서 실행됩니다. 문서 및 API 참조는 https://swifttui.sh/docs/documentation/에 있습니다. 다른 호스트로는 터미널(기본 SwiftTUI 가져오기), 네이티브 SwiftUI(swift-tui-swiftui) 및 Jetpack Compose(swift-tui-android)가 있습니다. 라이선스: MIT.
Comments
0 Rating appears after 10 ratings
Sign in to join the discussion.