26P by xguru 13일전 | favorite | 댓글 4개
  • Tauri는 모든 주요 데스크톱(macOS, Linux, Windows)과 모바일(iOS, Android) 플랫폼을 위한 작고 빠른 바이너리를 구축하기 위한 프레임워크
  • HTML, JavaScript, CSS로 컴파일되는 모든 프론트엔드 프레임워크를 통합할 수 있고, 필요할 때 백엔드 로직을 위해 Rust, Swift, Kotlin 같은 언어를 활용할 수 있음
  • 광범위한 JavaScript API를 제공하여, 대부분의 경우 Rust, Swift, Kotlin으로 코드를 작성할 필요는 없음

언제 Tauri를 사용해야 하는가?

  • 모든 플랫폼을 위한 단일 UI 코드베이스를 원하는 경우
  • 가능한 한 많은 사용자에게 그들의 플랫폼(예: Windows, macOS, Linux, Android, iOS)에서 접근
  • 프론트엔드 웹 개발자이고 네이티브 애플리케이션을 작성하고 싶은 경우
  • Rust 개발자이고 Rust로도 작성할 수 있는 옵션을 가진 멋진 UI로 애플리케이션을 작성하고 싶은 경우
  • 웹 개발자 팀이 있고 낮은 초기 투자로 네이티브 애플리케이션 시장으로 확장하고 싶은 경우
  • Rust개발자 팀이 있고 모든 것을 Rust로 작성하고 싶은 경우

2.0의 장점 및 개선점

시작하기 경험 개선

  • 개발자 경험(DX)을 중요시하며, 이 초기 프로세스를 최종 애플리케이션을 구축하고 배포하는 것만큼 원활하게 만들려고 노력함
  • create-tauri-app(CTA)이라는 프로젝트를 만들어 개발자가 처음부터 시작하여 몇 시간이 아닌 몇 분 만에 실행 중인 Tauri 앱을 얻을 수 있음

Hot-Module Replacement

  • 1.x에서 이미 개발 프로세스를 개선하기 위해 고려했던 핫 모듈 교체(HMR)를 모바일 장치 및 에뮬레이터로 확장함
  • 애플리케이션의 프론트엔드에 대한 모든 변경 사항은 전체 애플리케이션을 다시 빌드할 필요가 없으며 개발 중인 장치나 운영 체제에서 어떻게 보일지 실시간으로 미리 볼 수 있음

플러그인

  • Tauri 2.0에서 더 발전된 플러그인 시스템을 구축함. 이전 기능의 많은 부분을 공식 플러그인으로 이전하여 커뮤니티가 Tauri에 더 쉽게 기여할 수 있도록 함
  • 플러그인 시스템은 모바일 플러그인도 지원함. iOS에서는 Swift로, Android에서는 Kotlin으로 네이티브 코드를 작성하거나 재사용하고 주석(@Command on Android)을 사용하거나 하위 클래스(YourPluginClass: Plugin on iOS)를 구현하거나 Rust 기반 Tauri 명령에서 Swift 또는 Kotlin 코드를 호출하여 Tauri 프론트엔드에 직접 함수를 노출할 수 있음
  • 제공되는 공식 플러그인은 Tauri의 주요 버전을 따름
    • Autostart: 시스템 시작 시 앱 자동 실행
    • Barcode Scanner: 모바일 앱에서 QR코드, EAN-13 등의 바코드 스캔
    • Biometric: Android와 iOS에서 생체 인증 프롬프트
    • Clipboard: 시스템 클립보드 읽기 및 쓰기
    • Command Line Interface (CLI): 명령줄 인터페이스에서 인수 구문 분석
    • Deep Linking: Tauri 애플리케이션을 URL의 기본 처리기로 설정
    • Dialog: 파일 열기 및 저장, 메시지 대화상자를 위한 네이티브 시스템 대화상자
    • File System: 파일 시스템 접근
    • Global Shortcut: 전역 단축키 등록
    • HTTP Client: Rust로 작성된 HTTP 클라이언트 접근
    • Localhost: 프로덕션 앱에서 로컬호스트 서버 사용
    • Logging: 구성 가능한 로깅
    • NFC: Android 및 iOS에서 NFC 태그 읽기 및 쓰기
    • Notifications: 사용자에게 네이티브 알림 전송
    • OS Information: 운영 체제에 대한 정보 읽기
    • Persisted Scope: 파일 시스템에 런타임 범위 변경사항 유지
    • Positioner: 창을 일반적인 위치로 이동
    • Process: 현재 프로세스에 접근
    • Shell: 기본 응용 프로그램을 사용하여 파일 및 URL을 관리하고 자식 프로세스를 생성하기 위해 시스템 셸에 접근
    • Single Instance: 한 번에 Tauri 앱의 단일 인스턴스만 실행되도록 보장
    • SQL: sqlx를 통해 프론트엔드가 SQL 데이터베이스와 통신할 수 있는 인터페이스를 제공하는 Tauri 플러그인
    • Store: 영구 키-값 스토리지
    • Stronghold: 암호화된 안전한 데이터베이스
    • System Tray
    • Updater: Tauri 애플리케이션의 인앱 업데이트
    • Upload: HTTP를 통한 파일 업로드
    • Websocket: JavaScript에서 Rust 클라이언트를 사용하여 WebSocket 연결 열기
    • Window Customization
    • Window State: 창 크기와 위치 유지

Allowlist의 죽음, Allowlist 만세

  • allowlist는 더 이상 존재하지 않음. 이 시스템의 한계에 빠르게 도달했기 때문
  • Tauri 핵심 기능에 대해서만 독점적으로 만들었지만 Tauri의 모든 API를 다루지는 않았음
  • 새로운 시스템은 Tauri의 모든 핵심 API 표면을 다룰 뿐만 아니라 앱과 플러그인 개발자가 통합된 접근 방식으로 자체 액세스 제어와 범위 지정을 구현할 수 있도록 지원함
  • permissions - "Tauri 명령에 대한 On-off 토글", scopes - "Tauri 명령에 대한 매개변수 유효성 검사", capabilities - *"Windows와 WebView에 권한과 범위 연결"*을 사용하여 유연하면서도 사용하기 쉬운 액세스 제어 시스템을 만듦
  • 이름이 지정된 권한 또는 범위 지정 파일을 만들고 다른 이름이 지정된 권한 또는 범위와 재사용 및 결합할 수 있음
  • 이를 통해 여러 단순하거나 복잡한 권한과 범위를 포함하는 더 세분화된 설명적 집합을 구축 가능
  • 이 추가 기능으로 인해 Tauri 코어는 이제 프론트엔드 WebView에서 명령 호출 메시지가 명령 함수에 도달하도록 허용되는지 여부를 이해할 수 있음

프로세스 간 통신(IPC) 재작성

  • IPC 계층을 재작성하여 이제 Raw Payload라는 오랫동안 원했던 기능을 지원하고 내부적으로 작동 방식을 변경함
  • 이전에는 모든 IPC 페이로드가 json으로 직렬화되고 역직렬화되어 오버헤드가 발생했음. 이는 프론트엔드와 백엔드 간에 몇 킬로바이트 이상이 전송되면 눈에 띄게 나타났음
  • 새로운 시스템은 Raw Request를 지원함. 이는 원시 바이트를 직접 사용하거나 자체 (역)직렬화 프로세스(예: bson, protobuf, avro 등)를 사용하여 백엔드에서 프론트엔드로, 또는 그 반대로 대량의 데이터 전송 속도를 높임

배포 가이드

  • Tauri 2.0에서는 모바일 생태계와 커뮤니티 기여로 인해 배포 다양성이 크게 증가함
  • Apple Appstore, Google Play, Microsoft Store, CrabNebula Cloud, Flathub, Snapcraft, AUR 및 기타 배포 형식에 배포하는 방법에 대한 공식 가이드가 배포 문서에 포함

https://github.com/DioxusLabs/dioxus

러스트로만 개발한다면, 이게 더 나아보이네요. 방금알았음. Tauri 에 집중할랴고 했으나, rust 한언어로만으로 전부 개발할수있다고 하니 요걸로~* IPC보다 빠른 native 로 바로 접근이 가능하다고함.

Dioxus - React에서 영향받은 Rust용 UI 라이브러리
예전에 제가 함 올렸을때는 0.3 버전이라 그런지 난관이 좀 있다는 댓글이 있었습니다.

Dioxus 0.5: 러스트로 개발하는 웹, 데스크톱, 모바일 앱
지금은 0.5 니까 달라졌을지도 모르겠네요.

세상에 정말 놀라운 소식입니다. Windows용 네이티브 앱 개발에도 유용할 것 같고, 모바일에서도 정말 유용하게 잘 쓰여질 것 같습니다.

IPC 재작성이라니.... 영상 같은 큰 데이터 보내기 좋겠네요.