feat: Phase 1 mobile tablet — Jenkins APK, PC tab, in-app update
Capacitor 확장으로 git push 시 Mobile Jenkins 빌드, PC 탭 Android/iPad 다운로드, 앱 내 APK 업데이트, iOS TestFlight API 및 Capacitor ios 프로젝트를 추가한다. Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
@@ -1506,3 +1506,37 @@ export async function fetchTrendSearchDetail(
|
||||
return request<TrendSearchResultDto>(`/trend-search/detail?${params}`);
|
||||
}
|
||||
|
||||
// ── 모바일 앱 배포 ─────────────────────────────────────────────────────────────
|
||||
|
||||
export interface MobileAppReleaseInfoDto {
|
||||
available: boolean;
|
||||
fileName?: string;
|
||||
version?: string;
|
||||
sizeBytes?: number;
|
||||
updatedAt?: string;
|
||||
downloadUrl?: string;
|
||||
installPageUrl?: string;
|
||||
iosAvailable?: boolean;
|
||||
iosTestFlightUrl?: string;
|
||||
}
|
||||
|
||||
export async function loadMobileAppReleaseInfo(): Promise<MobileAppReleaseInfoDto | null> {
|
||||
return request<MobileAppReleaseInfoDto>('/mobile-app/info');
|
||||
}
|
||||
|
||||
/** semver 유사 비교 — remote > local 이면 true */
|
||||
export function isRemoteVersionNewer(local: string, remote: string): boolean {
|
||||
const parse = (v: string) =>
|
||||
v.trim().replace(/^v/i, '').split(/[.-]/).map(p => parseInt(p, 10)).map(n => (Number.isFinite(n) ? n : 0));
|
||||
const a = parse(local);
|
||||
const b = parse(remote);
|
||||
const len = Math.max(a.length, b.length);
|
||||
for (let i = 0; i < len; i += 1) {
|
||||
const av = a[i] ?? 0;
|
||||
const bv = b[i] ?? 0;
|
||||
if (bv > av) return true;
|
||||
if (bv < av) return false;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user