releases/README.md
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

92 lines
4.9 KiB
Markdown

# VideoDownloader
브라우저를 내장한 데스크톱 영상 다운로더와, 같은 엔진을 공유하는 모바일 컴패니언 앱.
앱 안의 브라우저로 사이트를 열면 재생되는 미디어(HLS `.m3u8` / DASH `.mpd` / MP4 직링크)를
자동으로 감지해 목록에 띄우고, 쿠키·Referer 를 그대로 물려 받아 내려받는다.
받은 영상은 내장 서버를 통해 같은 네트워크의 휴대폰에서 바로 재생하거나 저장할 수 있다.
## 저장소 구조
| 프로젝트 | TFM | 역할 |
|---|---|---|
| `VideoDownloader.Core` | net8.0 | **다운로드 엔진.** HLS/DASH 파싱, AES-128 복호화, 병렬·이어받기, 미디어 감지, ffmpeg 리먹스, 플랫폼 추상화 |
| `VideoDownloader.Browser` | net8.0-windows | WebView2 탭 컴포넌트 (응답 가로채기·쿠키 공급) |
| `VideoDownloader.App` | net8.0-windows | **메인 WPF 앱.** 브라우저 셸 + 다운로드 UI + 서버 호스팅 |
| `VideoDownloader.Server` | net8.0 | ASP.NET 라이브러리. App 안에서 기동되어 모바일/웹 컴패니언에 라이브러리·스트리밍 API 제공 |
| `VideoDownloader.Mobile` | net10.0-android (+ios on macOS) | MAUI 컴패니언 앱 |
| `VideoDownloader.Mobile.Core` | net8.0 | 모바일 공용 로직. UI 없이 테스트 가능하도록 분리 |
| `VideoDownloader.Avalonia` | net8.0 | macOS/Linux 크로스플랫폼 셸 (진행 중 — `docs/DEPLOYMENT_PLAN.md` Gate #1' 참고) |
| `VideoDownloader.Cli` | net8.0 | 엔진 검증용 개발 도구 (`--dashparse` 등) |
| `VideoDownloader.Tests` | net8.0-windows | xUnit 전체 테스트 (Core/App/Server/Mobile.Core + E2E) |
그 밖에:
- `build/` — 배포 스크립트. `publish.ps1`(Windows 설치자), `installer.iss`(Inno Setup), `remote/`(맥·리눅스 원격 빌드)
- `docs/` — 기획·감사 문서
- `.env.example` — 배포/원격빌드 자격 증명 템플릿. `.env` 로 복사해 채운다 (`.env` 는 커밋되지 않음)
## 개발 환경
- **.NET 8 SDK** + **.NET 10 SDK** (모바일 및 Avalonia 12 가 10 을 요구)
- Windows 11 (데스크톱 앱은 WPF + WebView2 기반이라 Windows 전용)
- **ffmpeg** — PATH 에 있으면 자동 인식. 없으면 리먹스 단계에서 실패
- 모바일 빌드 시: `dotnet workload install maui-android` (iOS 는 macOS 빌드머신에서만)
## 자주 쓰는 명령
```powershell
# 테스트 — 가장 먼저 이걸로 상태 확인 (Mobile 제외 전 영역 커버)
dotnet test VideoDownloader.Tests
# 데스크톱 앱 빌드 / 실행
dotnet build VideoDownloader.App
dotnet run --project VideoDownloader.App
# 엔진 단독 검증
dotnet run --project VideoDownloader.Cli -- --dashparse "https://.../manifest.mpd"
# 모바일 (Android 워크로드 필요)
dotnet build VideoDownloader.Mobile -f net10.0-android
```
> 솔루션 전체 빌드(`dotnet build VideoDownloader.slnx`)는 MAUI 워크로드가 설치돼 있어야 통과한다.
> 워크로드 없이 작업할 때는 프로젝트를 개별 지정한다.
## 배포
```powershell
# Windows 설치자 (x64 + arm64) → out/MediaBrowser-Setup-{arch}.exe
./build/publish.ps1 -Config Release -Version 1.0.0
# macOS / Linux 원격 빌드 (.env 의 빌드머신 자격 증명 사용) → out/remote/<rid>/
bash build/remote/build-remote.sh all
```
`out/`, `publish/` 는 산출물 디렉터리라 커밋되지 않는다.
### CI (GitHub 공개 후)
`.github/workflows/release.yml` — 태그(`v*`) 푸시 시 테스트 관문 통과 후
Windows 설치자(x64/arm64)·Linux/macOS tar.gz·Android APK 를 빌드해 **Draft Release** 로 올린다
(QA 후 수동 Publish). macOS 서명·공증(D4)과 iOS TestFlight(D5)는 Apple Developer Program
가입 + 시크릿 등록 후 활성화한다 — 상세는 `docs/DEPLOYMENT_PLAN.md` §5·§7.
Android 자동 업데이트는 [Obtainium](https://github.com/ImranR98/Obtainium) 을 지원한다:
저장소 공개 후 `build/obtainium.json` 의 `<owner>/<repo>` 를 치환하고, 폰에서
`obtainium://add/https://github.com/<owner>/<repo>` 링크 한 번으로 등록된다.
앱 내 업데이트 확인(데스크톱)은 설정 → "앱 업데이트"에 GitHub 저장소(`owner/repo`)를
넣으면 GitHub Releases 최신 태그와 비교해 릴리스 페이지를 열어 준다.
## 문서
| 문서 | 내용 |
|---|---|
| [AGENTS.md](AGENTS.md) | AI 코딩 에이전트 작업 계약 — 명령·규약·완료 기준 (사람이 읽어도 온보딩 문서) |
| [docs/HARNESS.md](docs/HARNESS.md) | 개발 하네스 운영법 — 자동 검증 게이트, 규칙/스킬 구조 |
| [docs/BROWSER_FEATURES_PLAN.md](docs/BROWSER_FEATURES_PLAN.md) | 데스크톱 브라우저 기능 계획 (v2) |
| [docs/MOBILE_PLAN.md](docs/MOBILE_PLAN.md) | 모바일 앱 + PC↔모바일 연동 계획 (v1) |
| [docs/DEPLOYMENT_PLAN.md](docs/DEPLOYMENT_PLAN.md) | Win/macOS/Linux/모바일 배포 체계 |
| [docs/IMPLEMENTATION_AUDIT.md](docs/IMPLEMENTATION_AUDIT.md) | 계획 대비 구현 감사 |
| [docs/BACKLOG.md](docs/BACKLOG.md) | 작업 이력 및 백로그 |