# Paca **[홈페이지](https://mediabrowser.chanpaca.net/) · [다운로드](https://mediabrowser.chanpaca.net/releases.html) · [사용 안내](https://mediabrowser.chanpaca.net/guide.html)** 브라우저를 내장한 데스크톱 영상 다운로더와, 같은 엔진을 공유하는 모바일 컴패니언 앱. 앱 안의 브라우저로 사이트를 열면 재생되는 미디어(HLS `.m3u8` / DASH `.mpd` / MP4 직링크)를 자동으로 감지해 목록에 띄우고, 쿠키·Referer 를 그대로 물려 받아 내려받는다. 받은 영상은 내장 서버를 통해 같은 네트워크의 휴대폰에서 바로 재생하거나 저장할 수 있다. ## 저장소 구조 | 프로젝트 | TFM | 역할 | |---|---|---| | `Paca.Core` | net8.0 | **다운로드 엔진.** HLS/DASH 파싱, AES-128 복호화, 병렬·이어받기, 미디어 감지, ffmpeg 리먹스, 플랫폼 추상화 | | `Paca.Browser` | net8.0-windows | WebView2 탭 컴포넌트 (응답 가로채기·쿠키 공급) | | `Paca.App` | net8.0-windows | **메인 WPF 앱.** 브라우저 셸 + 다운로드 UI + 서버 호스팅 | | `Paca.Server` | net8.0 | ASP.NET 라이브러리. App 안에서 기동되어 모바일/웹 컴패니언에 라이브러리·스트리밍 API 제공 | | `Paca.Mobile` | net10.0-android (+ios on macOS) | MAUI 컴패니언 앱 | | `Paca.Mobile.Core` | net8.0 | 모바일 공용 로직. UI 없이 테스트 가능하도록 분리 | | `Paca.Avalonia` | net8.0 | macOS/Linux 크로스플랫폼 셸 (진행 중 — `docs/DEPLOYMENT_PLAN.md` Gate #1' 참고) | | `Paca.Cli` | net8.0 | 엔진 검증용 개발 도구 (`--dashparse` 등) | | `Paca.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 Paca.Tests # 데스크톱 앱 빌드 / 실행 dotnet build Paca.App dotnet run --project Paca.App # 엔진 단독 검증 dotnet run --project Paca.Cli -- --dashparse "https://.../manifest.mpd" # 모바일 (Android 워크로드 필요) dotnet build Paca.Mobile -f net10.0-android ``` > 솔루션 전체 빌드(`dotnet build Paca.slnx`)는 MAUI 워크로드가 설치돼 있어야 통과한다. > 워크로드 없이 작업할 때는 프로젝트를 개별 지정한다. ## 배포 ```powershell # Windows 설치자 (x64 + arm64) → out/Paca-Setup-{arch}.exe ./build/publish.ps1 -Config Release -Version 1.0.0 # macOS / Linux 원격 빌드 (.env 의 빌드머신 자격 증명 사용) → out/remote// 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` 의 `/` 를 치환하고, 폰에서 `obtainium://add/https://github.com//` 링크 한 번으로 등록된다. 앱 내 업데이트 확인(데스크톱)은 설정 → "앱 업데이트"에 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) | 작업 이력 및 백로그 | | [docs/GROWTH_PLAN.md](docs/GROWTH_PLAN.md) | 성장·홍보·바이럴 실행 계획 (검색/AEO/GEO 심화, 런치 시퀀스) | | [docs/promo/](docs/promo/README.md) | 사이트 홍보 키트 — 채널별 게시문·디렉터리 제출 데이터 |