releases/.claude/rules/mobile-maui.md

40 lines
1.7 KiB
Markdown

---
paths:
- "VideoDownloader.Mobile/**"
- "VideoDownloader.Mobile.Core/**"
---
# MAUI 모바일 영역 규칙
## 로직은 Mobile.Core 로
`VideoDownloader.Mobile` 은 `net10.0-android`(macOS 에서는 +`net10.0-ios`)이라
`VideoDownloader.Tests`(net8.0-windows)가 참조할 수 없다. **테스트 가능한 로직은
`VideoDownloader.Mobile.Core`(net8.0)에 둔다.** UI 프로젝트에는 화면 결선만 남긴다.
새 기능을 UI 프로젝트에 통째로 넣으면 검증할 방법이 사라진다.
## 링커 함정
Release/링커 트리밍에서 참조가 정적으로 안 보이는 타입은 통째로 잘려나가고,
**런타임 `FileNotFoundException` 으로만** 드러난다. 빌드는 통과한다.
실제 사례: 모달 `NavigationPage` 가 크래시 → `Xamarin.AndroidX.LocalBroadcastManager` 를
csproj 에 명시 참조해 해결. 리플렉션·XAML 로만 참조되는 타입을 쓸 때 이 함정을 의심한다.
## 플랫폼 분기
TFM 조건은 `$([MSBuild]::GetTargetPlatformIdentifier('$(TargetFramework)')) == 'android'`
형식으로 쓴다(csproj 기존 패턴). Windows 개발머신에는 iOS 워크로드가 없으므로
iOS TFM 은 macOS 조건부로만 켠다 — 이 조건을 무조건부로 바꾸면 Windows 빌드가 깨진다.
## 빌드 · 검증
```powershell
dotnet build VideoDownloader.Mobile -f net10.0-android
```
- MAUI 워크로드가 없으면 실패한다. 없는 환경이면 `Mobile.Core` 만 고치고
UI 결선은 워크로드가 있는 환경에서 확인하도록 사용자에게 알린다.
- 화면 동작을 바꿨으면 에뮬레이터에 배포해 확인한 내용을 보고에 적는다.
단위 테스트만으로 "됐다"고 하지 않는다.