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

1.7 KiB

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 빌드가 깨진다.

빌드 · 검증

dotnet build VideoDownloader.Mobile -f net10.0-android
  • MAUI 워크로드가 없으면 실패한다. 없는 환경이면 Mobile.Core 만 고치고 UI 결선은 워크로드가 있는 환경에서 확인하도록 사용자에게 알린다.
  • 화면 동작을 바꿨으면 에뮬레이터에 배포해 확인한 내용을 보고에 적는다. 단위 테스트만으로 "됐다"고 하지 않는다.