diff --git a/desktop/src/bridge/updater.ts b/desktop/src/bridge/updater.ts index 77d0265..b3813c7 100644 --- a/desktop/src/bridge/updater.ts +++ b/desktop/src/bridge/updater.ts @@ -69,6 +69,9 @@ async function formatUpdateError(e: unknown): Promise { : '업데이트 서명 검증에 실패했습니다. PC 프로그램 탭에서 exe를 다시 받아 주세요.'; } if (/invalid symbol|offset \d+|replace_with/.test(lower)) { + if (onWin) { + return '이 버전(v0.1.1 이전/초기 exe)에는 자동 업데이트 키가 없습니다. 웹 PC 프로그램 탭에서 최신 exe 설치 파일을 받아 다시 설치해 주세요. 이후부터는 자동 업데이트가 됩니다.'; + } return '이 버전(v0.1.1 이전/초기 dmg)에는 자동 업데이트 키가 없습니다. 웹 PC 프로그램 탭에서 최신 dmg를 받아 Applications에 다시 설치해 주세요. 이후부터는 자동 업데이트가 됩니다.'; } if (/404|not found/.test(lower)) { diff --git a/frontend/src/components/DesktopUpdateModal.tsx b/frontend/src/components/DesktopUpdateModal.tsx index 05e91f1..7ba0bfa 100644 --- a/frontend/src/components/DesktopUpdateModal.tsx +++ b/frontend/src/components/DesktopUpdateModal.tsx @@ -9,6 +9,7 @@ import { type DesktopUpdatePhase, type DesktopUpdateProgress, } from '../utils/desktopBridge'; +import { isMacDesktop, isWindowsDesktop } from '../utils/platform'; interface Props { open: boolean; @@ -161,8 +162,22 @@ const DesktopUpdateModal: React.FC = ({ open, onClose, autoStart = true } {phase === 'error' && (

- 자동 업데이트가 설정되지 않았을 수 있습니다. 웹 PC 프로그램 탭에서 - macOS는 dmg, Windows는 exe 설치 파일을 받아 다시 설치해 주세요. + {isWindowsDesktop() ? ( + <> + 자동 업데이트가 설정되지 않았을 수 있습니다. 웹 PC 프로그램 탭에서 + exe 설치 파일을 받아 다시 설치해 주세요. + + ) : isMacDesktop() ? ( + <> + 자동 업데이트가 설정되지 않았을 수 있습니다. 웹 PC 프로그램 탭에서 + dmg를 받아 Applications에 다시 설치해 주세요. + + ) : ( + <> + 자동 업데이트가 설정되지 않았을 수 있습니다. 웹 PC 프로그램 탭에서 + macOS는 dmg, Windows는 exe 설치 파일을 받아 다시 설치해 주세요. + + )}

)} diff --git a/frontend/src/utils/platform.ts b/frontend/src/utils/platform.ts index 1b00330..f6bcff4 100644 --- a/frontend/src/utils/platform.ts +++ b/frontend/src/utils/platform.ts @@ -24,3 +24,15 @@ export function getRuntimePlatform(): RuntimePlatform { export function isWeb(): boolean { return getRuntimePlatform() === 'web'; } + +/** Tauri 데스크톱 — Windows WebView2 */ +export function isWindowsDesktop(): boolean { + if (!isDesktop()) return false; + return typeof navigator !== 'undefined' && /win/i.test(navigator.userAgent); +} + +/** Tauri 데스크톱 — macOS */ +export function isMacDesktop(): boolean { + if (!isDesktop()) return false; + return typeof navigator !== 'undefined' && /mac/i.test(navigator.userAgent); +}