releases/build/publish.ps1
Yun Chan 02995f4153 MEDIABROWSER 개명·업데이트 채널 전환·아이콘 tofu 근본 수정 (BACKLOG 13차) — ①개명: installer.iss AppName/출력 MediaBrowser-Setup-*(AppId·exe·데이터 경로 유지로 업그레이드 호환), 워크플로 산출물명(mediabrowser-*.tar.gz, MediaBrowser-<ver>-arm64.apk), 창 타이틀·모바일 표시명·obtainium.json·README. ②UpdateChecker: apiBase 주입(기본=자체 Forgejo /api/v1, GitHub 는 apiBase 로 호환), osx 자산 tar.gz 허용(기존 dmg 만 → mac 영원히 자산 없음 결함 수정), AppConfig 기본 UpdateRepo=Video-Downloader/releases+UpdateApiBase — 테스트 4건. ③아이콘 tofu(사용자 보고 "절대 안고쳐지네") 근본 원인: Shared.xaml 암시적 TextBlock 스타일의 FontFamily=UiFont 강제가 버튼 ContentPresenter 자동 TextBlock 의 IconFont 상속을 덮어 모든 PUA 글리프가 notdef — 폰트 설치/글리프 존재/HW·SW 렌더/RTB/DPI/런타임 8·10/자체포함·공유 전부 배제 후 실창 픽셀 비교로 격리, 콘텐츠 TextBlock 의 실폰트가 Pretendard 체인임을 테스트로 실증. 수정: 암시 스타일 FontFamily 제거(창 루트 상속으로 통일, PairingWindow/PlayerWindow 는 SetResourceReference), PUA+텍스트 혼합 콘텐츠 7곳+코드 1곳 정리, 순수 글리프 2곳 IconFont 명시. 회귀 방어: IconGlyphXamlTests(정적 스캔)·IconContentFontTests(실창 폰트 단정)·IconGlyphRenderTests(픽셀 비교) — 462/462 GREEN, 수정 전후 실창 캡처로 글리프 렌더 확인
2026-08-18 07:13:18 +09:00

52 lines
2.4 KiB
PowerShell

# MediaBrowser(구 VideoDownloader) 다중 아키텍처 설치자 빌드
# 사용: ./build/publish.ps1 [-Config Release] [-Version 1.0.0]
# 결과: out/MediaBrowser-Setup-x64.exe, out/MediaBrowser-Setup-arm64.exe
param(
[string]$Config = "Release",
[string]$Version = "1.0.0",
[string[]]$Archs = @("x64", "arm64")
)
$ErrorActionPreference = "Stop"
$root = Split-Path -Parent $PSScriptRoot # 레포 루트
$app = Join-Path $root "VideoDownloader.App\VideoDownloader.App.csproj"
$iss = Join-Path $PSScriptRoot "installer.iss"
$outDir = Join-Path $root "out"
# --- ISCC(=Inno Setup 컴파일러) 위치 해결 ---
$iscc = $null
foreach ($cand in @(
"${env:ProgramFiles(x86)}\Inno Setup 6\ISCC.exe",
"$env:ProgramFiles\Inno Setup 6\ISCC.exe",
"$env:LOCALAPPDATA\Programs\Inno Setup 6\ISCC.exe",
"$env:LOCALAPPDATA\Programs\Inno Setup 6.7\ISCC.exe"
)) {
if ($cand -and (Test-Path $cand)) { $iscc = $cand; break }
}
if (-not $iscc) { $iscc = (Get-Command ISCC.exe -ErrorAction SilentlyContinue).Source }
if (-not $iscc) {
throw "Inno Setup(ISCC) 를 찾을 수 없습니다. 설치: winget install --id JRSoftware.InnoSetup -e"
}
Write-Host "ISCC: $iscc" -ForegroundColor DarkGray
New-Item -ItemType Directory -Force -Path $outDir | Out-Null
foreach ($arch in $Archs) {
$rid = "win-$arch"
$pub = Join-Path $root "publish\$arch"
Write-Host ""
Write-Host "==== [$arch] publish ($rid, self-contained) ====" -ForegroundColor Cyan
if (Test-Path $pub) { Remove-Item $pub -Recurse -Force }
# WPF 멀티플랫폼: Platform 축을 RID 와 일치시켜 빌드.
dotnet publish $app -c $Config -r $rid -p:Platform=$arch --self-contained -o $pub
if ($LASTEXITCODE -ne 0) { throw "publish 실패: $rid (exit $LASTEXITCODE). arm64 는 yt-dlp/WebView2 런타임 관련 처음 빌드 시 이슈가 있을 수 있습니다." }
Write-Host "==== [$arch] Inno Setup 컴파일 ====" -ForegroundColor Cyan
& $iscc /Q "/DAPP_VERSION=$Version" "/DARCH=$arch" "/DPUBLISH_DIR=$pub" $iss
if ($LASTEXITCODE -ne 0) { throw "ISCC 실패: $arch (exit $LASTEXITCODE)" }
Write-Host "완료: out\MediaBrowser-Setup-$arch.exe" -ForegroundColor Green
}
Write-Host ""
Write-Host "설치자 생성 완료:" -ForegroundColor Green
Get-ChildItem (Join-Path $outDir "MediaBrowser-Setup-*.exe") |
ForEach-Object { Write-Host (" {0,-38} {1:N1} MB" -f $_.Name, ($_.Length / 1MB)) }