diff --git a/src/components/AppVersionInfo.tsx b/src/components/AppVersionInfo.tsx index 342813d..320d149 100644 --- a/src/components/AppVersionInfo.tsx +++ b/src/components/AppVersionInfo.tsx @@ -1,5 +1,5 @@ -import React, { useCallback, useEffect, useState, useRef, useMemo } from 'react'; -import { getAppVersionInfo, isAndroidPlatform, isIOSPlatform } from '@/utils/platform'; +import React, { useEffect, useState } from 'react'; +import { isAndroidPlatform, isIOSPlatform } from '@/utils/platform'; import { Label } from '@/components/ui/label'; import { Capacitor } from '@capacitor/core'; @@ -27,192 +27,30 @@ const AppVersionInfo: React.FC = ({ showDevInfo = true, editable = false }) => { - // 저장된 버전 정보 가져오기 (localStorage) - const savedInfo = useMemo(() => { - try { - if (typeof localStorage !== 'undefined') { - // localStorage 초기화 - 저장된 오래된 버전 정보 제거 - localStorage.removeItem('app_version_info'); - - const saved = localStorage.getItem('app_version_info'); - return saved ? JSON.parse(saved) : null; - } - return null; - } catch (e) { - console.error('localStorage 접근 오류:', e); - return null; - } - }, []); + // 하드코딩된 버전 정보 - 빌드 스크립트에서 설정한 값과 일치시켜야 함 + const hardcodedVersionInfo: VersionInfo = { + versionName: '1.1.1.3', + buildNumber: 7, + versionCode: 7, + platform: Capacitor.getPlatform(), + defaultValuesUsed: false + }; - // 기본 버전 정보를 useMemo로 생성하여 불필요한 재계산 방지 - const defaultInfo = useMemo(() => { - const platform = Capacitor.getPlatform(); - const isWeb = platform === 'web'; - - // 항상 최신 버전 정보 사용 - const defaultVersionInfo: VersionInfo = { - versionName: isWeb ? '1.1.1.3' : '1.0.0', // 최신 버전으로 업데이트 - buildNumber: isWeb ? 7 : 1, // 최신 빌드 번호로 업데이트 - versionCode: isWeb ? 7 : 1, // 최신 버전 코드로 업데이트 - platform: platform, - defaultValuesUsed: true - }; - - console.log('사용할 기본 정보:', defaultVersionInfo); - - if (isWeb && typeof localStorage !== 'undefined') { - try { - localStorage.setItem('app_version_info', JSON.stringify(defaultVersionInfo)); - console.log('localStorage에 초기 버전 정보 저장됨'); - } catch (e) { - console.error('localStorage에 초기 버전 정보 저장 실패:', e); - } - } - - return defaultVersionInfo; - }, []); - - const [versionInfo, setVersionInfo] = useState(defaultInfo); - const [loading, setLoading] = useState(true); - const [error, setError] = useState(false); - const [retries, setRetries] = useState(0); - - const fetchVersionInfo = useCallback(async () => { - setLoading(true); - setError(false); - try { - console.log('앱 버전 정보 요청 시작... (retries:', retries, ')'); - console.log('현재 플랫폼은', - isAndroidPlatform() ? 'Android' : isIOSPlatform() ? 'iOS' : '웹'); - - if (retries > 0) { - await new Promise(resolve => setTimeout(resolve, 300)); - } - - const info = await getAppVersionInfo(); - console.log('받은 앱 버전 정보:', info); - - if (!info || typeof info !== 'object') { - throw new Error('유효하지 않은 응답 형식'); - } - - const parseVersionInfo = (data: Record): VersionInfo => { - let buildNumber: number = defaultInfo.buildNumber; - if (typeof data.buildNumber === 'number') { - buildNumber = data.buildNumber; - } else if (typeof data.buildNumber === 'string') { - const parsed = parseInt(data.buildNumber, 10); - if (!isNaN(parsed)) buildNumber = parsed; - } - - let versionCode: number | undefined = defaultInfo.versionCode; - if (typeof data.versionCode === 'number') { - versionCode = data.versionCode; - } else if (typeof data.versionCode === 'string') { - const parsed = parseInt(data.versionCode as string, 10); - if (!isNaN(parsed)) versionCode = parsed; - } - - return { - versionName: typeof data.versionName === 'string' && data.versionName.trim() !== '' - ? data.versionName as string - : defaultInfo.versionName, - buildNumber, - versionCode, - platform: data.platform as string || defaultInfo.platform, - pluginResponse: typeof data.pluginResponse === 'string' - ? data.pluginResponse - : JSON.stringify(data), - timestamp: typeof data.timestamp === 'number' ? data.timestamp : Date.now(), - defaultValuesUsed: false - }; - }; - - const newVersionInfo = parseVersionInfo(info); - - try { - if (typeof localStorage !== 'undefined') { - localStorage.setItem('app_version_info', JSON.stringify(newVersionInfo)); - console.log('버전 정보가 localStorage에 저장됨:', newVersionInfo); - } - } catch (e) { - console.warn('버전 정보 저장 실패:', e); - } - - setVersionInfo(newVersionInfo); - setLoading(false); - console.log('앱 버전 정보 표시 준비 완료'); - } catch (error) { - console.error('버전 정보 가져오기 실패:', error); - setError(true); - setLoading(false); - } - }, [retries, defaultInfo]); - - const handleRetry = useCallback(() => { - setRetries(prev => prev + 1); - fetchVersionInfo(); - }, [fetchVersionInfo]); - - const initialLoadAttemptedRef = useRef(false); - - useEffect(() => { - let isMounted = true; - - const loadVersionInfo = async () => { - console.log('앱 버전 정보 로딩 시작'); - - try { - const newVersionInfo = await getAppVersionInfo(); - - if (!isMounted) return; - - console.log('불러온 버전 정보:', newVersionInfo); - - try { - if (typeof localStorage !== 'undefined') { - localStorage.setItem('app_version_info', JSON.stringify(newVersionInfo)); - console.log('버전 정보가 localStorage에 저장됨:', newVersionInfo); - } - } catch (e) { - console.warn('버전 정보 저장 실패:', e); - } - - if (isMounted) { - setVersionInfo(newVersionInfo); - setLoading(false); - console.log('앱 버전 정보 표시 준비 완료'); - } - } catch (error) { - console.error('버전 정보 가져오기 실패:', error); - - if (isMounted) { - const fallbackInfo = defaultInfo; - console.log('오류 발생으로 대체 정보 사용:', fallbackInfo); - setVersionInfo(fallbackInfo); - setLoading(false); - } - } - }; - - loadVersionInfo(); - - return () => { - isMounted = false; - }; - }, [defaultInfo]); + const [versionInfo, setVersionInfo] = useState(hardcodedVersionInfo); + const [loading, setLoading] = useState(false); + // 개발자 정보 표시 const renderDevInfo = () => { if (versionInfo && showDevInfo) { return ( -
-
- 앱 플랫폼: {versionInfo.platform || 'unknown'} -
- {versionInfo.defaultValuesUsed && ( -
- ⚠️ 기본값 사용 중: 실제 버전 정보를 가져오지 못했습니다 -
+
+

+ {versionInfo.versionCode ? `버전 코드: ${versionInfo.versionCode}` : ''} + {versionInfo.buildNumber ? `, 빌드: ${versionInfo.buildNumber}` : ''} + {versionInfo.platform ? ` (${versionInfo.platform})` : ''} +

+ {versionInfo.errorMessage && ( +

오류: {versionInfo.errorMessage}

)}
); @@ -222,44 +60,17 @@ const AppVersionInfo: React.FC = ({ return (
- {loading ? ( -
-

버전 정보 로딩 중...

-
- ) : error ? ( -
-

빌드 정보 로딩 오류

- -
- ) : ( -
-

- 버전: {versionInfo.versionName} -

-

- 빌드: {versionInfo.buildNumber} -

- {showDevInfo && versionInfo.versionCode && ( -

- versionCode: {versionInfo.versionCode} -

+
+ +

+ {loading ? ( + "버전 정보 로딩 중..." + ) : ( + versionInfo.versionName || "알 수 없음" )} - {showDevInfo && versionInfo.platform && ( -

- 플랫폼: {versionInfo.platform} -

- )} - {editable && ( -

ZELLYY CLOUD

- )} - {renderDevInfo()} -
- )} +

+ {renderDevInfo()} +
); };