.NET 8용 .NET MAUI의 새로운 기능
.NET 8에서 .NET MAUI의 초점은 품질입니다. .NET 8에서는 689개의 문제를 종결한 1618개의 끌어오기 요청이 병합되었습니다. 여기에는 .NET MAUI 팀 및 .NET MAUI 커뮤니티의 변경 내용이 포함됩니다. 이러한 변경으로 인해 .NET 8의 품질이 크게 향상되어야 합니다.
Important
Xcode 또는 Android SDK Tools와 같은 기본 외부 종속성으로 인해 .NET 다중 플랫폼 앱 UI(.NET MAUI) 지원 정책은 .NET 및 .NET Core 지원 정책과 다릅니다. 자세한 내용은 .NET MAUI 지원 정책을 참조하세요.
.NET 8에서 .NET MAUI는 .NET 워크로드 및 여러 NuGet 패키지로 제공됩니다. 이 방법의 장점은 프로젝트를 특정 버전에 쉽게 고정하는 동시에 미공개 또는 실험적 빌드를 쉽게 미리 볼 수 있다는 점입니다. 새 .NET MAUI 프로젝트를 만들 때 필요한 NuGet 패키지가 프로젝트에 자동으로 추가됩니다.
이 문서에서는 .NET 8용 .NET MAUI의 새로운 기능을 나열하고 각각에 대한 자세한 정보에 대한 링크를 제공합니다.
.NET 8의 새로운 기능과 관련하여 자세한 내용은 .NET 8의 새로운 기능입니다.
새로운 기능
이 .NET MAUI 릴리스의 초점은 품질이지만 앱에서 새로운 시나리오를 가능하게 하는 몇 가지 새로운 기능도 있습니다.
컨트롤
- 소프트 입력 키보드 숨기기 및 표시를 지원하는 텍스트 입력 게인 확장 메서드를 지원하는 컨트롤입니다. 자세한 내용은 소프트 입력 키보드 숨기기 및 표시를 참조 하세요.
- 클래스는 ContentPage 페이지의 아무 곳이나 탭하면 소프트 입력 키보드가 표시되는 경우 숨겨지는지 여부를 나타내는 속성을 얻 HideSoftInputOnTapped 습니다. 자세한 내용은 ContentPage를 참조 하세요.
- BlazorWebView 속성 StartPath , TryDispatchAsync 메서드 및 향상된 로깅 기능을 가져옵니다. 자세한 내용은 BlazorWebView를 사용하여 .NET MAUI 앱에서 Blazor 웹앱 호스트를 참조하세요.
- WebView 속성을 가져옵니다 UserAgent . 자세한 내용은 WebView를 참조 하세요.
- 그림에서 자동 실행 및 그림을 포함하여 HTML5 비디오의 인라인 미디어 재생은 기본적으로 WebView iOS에서 사용하도록 설정되었습니다. 자세한 내용은 iOS 및 Mac Catalyst에서 미디어 재생 기본 설정 설정을 참조하세요.
Grid.Add
5개의 인수를 허용하는 오버로드가 .NET MAUI에 다시 추가되었습니다. 그러나 이 메서드는 더 이상 사용되지 않으며 Xamarin.Forms에서 마이그레이션하는 데만 사용됩니다.- Grid 는 AddWithSpan 지정된 행 및 열 범위가 있는 지정된 행 및 열에 뷰 Grid 를 추가하는 확장 메서드를 가져옵니다.
데스크톱
- 메뉴 모음 항목 및 상황에 맞는 메뉴 항목은 키보드 가속기라고 하는 바로 가기 키를 통해 호출할 수 있습니다. 자세한 내용은 키보드 가속기를 참조 하세요.
- Windows 앱은 패키지되지 않은 앱으로 게시할 수 있습니다. 자세한 내용은 CLI를 사용하여 Windows용 패키지되지 않은 .NET MAUI 앱 게시를 참조하세요.
제스처 인식기
- PointerGestureRecognizer는 ,, PointerReleasedCommandPointerReleasedCommandParameter 속성 및 PointerPressed PointerReleased 이벤트를 가져옵니다PointerPressedCommand. PointerPressedCommandParameter 자세한 내용은 포인터 제스처 인식을 참조하세요.
- 클래스에서 발생한 포인터 이벤트와 함께 제공되는 개체는 PointerEventArgs PointerGestureRecognizer 형식PlatformPointerEventArgs의 속성을 얻 PlatformArgs 습니다. 이 속성은 포인터 제스처 이벤트에 대한 플랫폼별 인수에 대한 액세스를 제공합니다. 자세한 내용은 포인터 제스처 인식을 참조하세요.
- DragStartingEventArgs끌어서 놓기 제스처 이벤트와 함께 제공되는 , DragEventArgs, DropEventArgs및 DropCompletedEventArgs 개체는 각각 속성을 얻습니다
PlatformArgs
. 이 속성은 끌어서 놓기 이벤트에 대한 플랫폼별 인수에 대한 액세스를 제공합니다. 자세한 내용은 끌어서 놓기 제스처 인식(Recognize)을 참조하세요. - 또는 개체에서 메서드 DragEventArgsDragStartingEventArgsDropEventArgs 를 호출하여 끌어서 놓기 제스처가 GetPosition 발생한 위치를 가져올 수 있습니다. 자세한 내용은 끌어서 놓기 제스처 인식(Recognize)을 참조하세요.
- 이 클래스는 TapGestureRecognizer Android에서 보조 탭을 처리하는 기능을 얻습니다. 자세한 내용은 탭 제스처 인식을 참조하세요.
탐색
- 셸 탐색은 GoToAsync 단일 사용 탐색 데이터를 전달할 수 있는 오버로드를 얻게 되며, 탐색이 발생한 후에는 개체로 ShellNavigationQueryParameters 지워질 수 있습니다. 자세한 내용은 Pass Single Use 개체 기반 탐색 데이터를 참조 하세요.
플랫폼 통합
- 앱이 Geolocation 포그라운드에 있을 때 클래스에서 위치 변경을 수신 대기할 수 있습니다. 자세한 내용은 위치 변경 내용 수신 대기를 참조 하세요.
- Flashlight 는 장치에서 IsSupportedAsync 손전등을 사용할 수 있는지 여부를 결정하는 메서드를 가져옵니다. 자세한 내용은 손전등을 참조 하세요.
- SensorSpeed 간격은 모든 플랫폼에서 통합되었습니다. 자세한 내용은 디바이스 센서 액세스를 참조 하세요.
- 이 클래스는 Permissions Bluetooth 디바이스를 찾고, 현재 디바이스를 다른 Bluetooth 디바이스에서 검색할 수 있도록 하고, 이미 페어링된 Bluetooth 디바이스와 통신할 수 있는 Android 12 권한인 권한을 얻 Permissions.Bluetooth 습니다. 자세한 내용은 사용 권한을 참조하세요.
- 이 클래스는 Permissions 근처의 WiFi 디바이스에 액세스하기 위한 Android 13 권한인 권한을 얻 Permissions.NearbyWifiDevices 습니다. 자세한 내용은 사용 권한을 참조하세요.
XAML
x:ClassModifier
어셈블리에서 생성된 클래스의 액세스 수준을 제어하기 위해 XAML 클래스에 특성을 지정할 수 있습니다. 자세한 내용은 클래스 한정자를 참조 하세요.- 태그 확장을 사용하여 정의된 ResourceDictionary 리소스도 사용할
AppThemeBinding
DynamicResource
수 있습니다. 자세한 내용은 테마 리소스 정의 및 소비를 참조 하세요. - Color 는
ContentProperty
클래스이므로 SolidColorBrush XAML에서 명시적으로 설정할 필요가 없습니다.
문제 해결
- 문제 해결을 위해 리소스 생성을 사용하지 않도록 설정할 수 있습니다. 자세한 내용은 이미지 패키징 사용 안 함, 시작 화면 패키징 사용 안 함, 글꼴 패키징 사용 안 함 및 자산 파일 패키징 사용 안 함을 참조하세요.
- 문제 해결을 위해 빈 시작 화면을 생성할 수 있습니다. 자세한 내용은 빈 시작 화면 생성을 참조 하세요.
- Resizeter는 중복된 이미지 파일 이름을 확인합니다. 자세한 내용은 중복 이미지 파일 이름 오류를 참조 하세요.
기타
- 창 관리는 클래스에서
App
분리할 수 있습니다. 자세한 내용은 앱 클래스에서 창 관리 분리를 참조 하세요. - Android 앱에서는 여러 시스템 글꼴을 쉽게 사용할 수 있습니다. 자세한 내용은 글꼴 사용을 참조 하세요.
- iOS에서
MauiUIApplicationDelegate
대리자를PerformFetch
통해 재정의하거나 사용할 수 있는 메서드를iOSLifecycle.PerformFetch
가져옵니다. 자세한 내용은 iOS 및 Mac Catalyst 플랫폼 수명 주기 이벤트를 참조 하세요.
형식 사용 중단 및 제거
다음 형식 또는 멤버는 더 이상 사용되지 않습니다.
- ClickGestureRecognizer는 사용되지 않습니다.
AutomationProperties.Name
,AutomationProperties.HelpText
및AutomationProperties.LabeledBy
연결된 속성은 더 이상 사용되지 않습니다.- 더 FocusChangeRequested 이상 사용되지 않습니다. 대신 이 메서드를 Focus() 사용하여 뷰에 포커스를 설정하려고 시도합니다.
다음 형식 또는 멤버가 제거되었습니다.
Application.Properties
속성 및Application.SavePropertiesAsync
메서드가 제거되었습니다. 앱 속성 데이터를 .NET MAUI로 마이그레이션하려면 Xamarin.Forms 앱 속성 사전에서 .NET MAUI 기본 설정으로 데이터 마이그레이션을 참조하세요.PhoneDialer.Current
속성이 제거되었습니다. 대신PhoneDialer.Default
를 사용하세요.OpenGLView
가 제거되었습니다.
동작 변경
이전 릴리스에서 변경된 동작은 다음과 같습니다.
- 이제 XAML에서 컨트롤을 Map 사용하려면 다음
xmlns
네임스페이스 선언xmlns:maps="http://schemas.microsoft.com/dotnet/2021/maui/maps"
이 필요합니다. - 메서드를 사용하여 스트림에서 이미지를 로드할 때 Android에서 이미지 캐싱을
ImageSource.FromStream
사용할 수 없습니다. 이는 적절한 캐시 키를 만들 데이터가 없기 때문입니다. - iOS에서는 소프트 입력 키보드가 텍스트 입력 필드를 덮을 때 페이지가 자동으로 스크롤되므로 필드가 소프트 입력 키보드 위에 있습니다. 네임스페이스에서 메서드
KeyboardAutoManagerScroll.Disconnect
를Microsoft.Maui.Platform
호출하여 이 기본 동작을 사용하지 않도록 설정할 수 있습니다. 메서드를KeyboardAutoManagerScroll.Connect
호출하여 비활성화된 후 동작을 다시 사용하도록 설정할 수 있습니다. - 일부 플랫폼에서는 셸 앱에서 탭의 색이 설정되는 방식이 변경되었습니다. 자세한 내용은 탭 모양을 참조하세요.
- 앱의 프로젝트 파일에서 빌드 속성의
$(ApplicationIdGuid)
값을 지정할 필요는 없습니다. .NET MAUI Windows 앱은 더 이상 GUID를 앱 ID로 요구하지 않고 대신 빌드 속성의$(ApplicationId)
값을 앱 ID로 사용하기 때문입니다. 따라서 이제 com.mycompany.myapp과 같은 모든 플랫폼에서 동일한 역방향 도메인 형식 앱 ID가 사용됩니다. - .NET MAUI Mac Catalyst 앱은 더 이상 메뉴 모음에서 50개의 메뉴 항목으로 제한되지 않습니다.
PlatformImage.FromStream
이제 네임스페이Microsoft.Maui.Graphics
스의 메서드를 사용하여 클래스를 사용하는W2DImageLoadingService
대신 Windows에서 이미지를 로드할 수 있습니다.- Android에서 애니메이션은 시스템 애니메이션 설정을 준수합니다. 자세한 내용은 기본 애니메이션을 참조 하세요.
성능
.NET MAUI 8에는 많은 성능 변경이 있습니다. 이러한 변경 내용은 다음 5개 영역으로 분류할 수 있습니다.
- 새로운 기능
- 빌드 및 내부 루프 성능
- 성능 또는 앱 크기 개선
- 구조체 및
IEquatable
.NET MAUI - 에서 성능 문제 해결
{AppThemeBinding}
- 주소
CA1307
및CA1309
성능 - 성능에 대한 주소
CA1311
- Android에서 사용하지
ViewAttachedToWindow
않는 이벤트 제거 - 다음을 위해 불필요한
System.Reflection
제거{Binding}
- 사용
StringComparer.Ordinal
대상Dictionary
및HashSet
- Android에서
MauiDrawable
Java interop 줄이기 - Android의
Label
레이아웃 성능 향상 - .NET MAUI에서 컨트롤에 대한 Java interop 호출 줄이기
- Android의
Entry.MaxLength
성능 향상 - Windows의
CollectionView
메모리 사용량 향상 - Apple 플랫폼에서 사용
UnmanagedCallersOnlyAttribute
- Android에서 문자열에 대한 더 빠른 Java interop
- Android에서 C# 이벤트에 대한 더 빠른 Java interop
- JNI에 함수 포인터 사용
- 제거
Xamarin.AndroidX.Legacy.Support.V4
- iOS 및 macOS에서 제네릭 중복 제거
- iOS와 유사한 플랫폼에서 구현 수정
System.Linq.Expressions
- iOS 및 Catalyst용으로 설정
DynamicCodeSupport=false
- 구조체 및
- 메모리 누수
- 도구 및 설명서
자세한 내용은 .NET MAUI의 .NET 8 성능 향상을 참조 하세요.
.NET 7에서 .NET 8로 업그레이드
프로젝트를 .NET 7에서 .NET 8로 업그레이드하려면 Visual Studio 17.8 이상 또는 독립 실행형 설치 관리자 및 명령을 사용하여 .NET 8 및 .NET MAUI 워크로드를 dotnet workload install maui
설치합니다.
그런 다음.csproj 파일을 열고 TFM(대상 프레임워크 모니커)을 7에서 8로 변경합니다. TFM net7.0-ios13.6
을 사용하는 경우 플랫폼 버전과 일치하거나 완전히 제거해야 합니다. 다음 예제에서는 .NET 7 프로젝트의 TFM을 보여 줍니다.
<TargetFrameworks>net7.0-android;net7.0-ios;net7.0-maccatalyst;net7.0-tizen</TargetFrameworks>
<TargetFrameworks Condition="$([MSBuild]::IsOSPlatform('windows'))">$(TargetFrameworks);net7.0-windows10.0.19041.0</TargetFrameworks>
다음 예제에서는 .NET 8 프로젝트의 TFM을 보여 줍니다.
<TargetFrameworks>net8.0-android;net8.0-ios;net8.0-maccatalyst;net8.0-tizen</TargetFrameworks>
<TargetFrameworks Condition="$([MSBuild]::IsOSPlatform('windows'))">$(TargetFrameworks);net8.0-windows10.0.19041.0</TargetFrameworks>
다음 .NET MAUI NuGet 패키지에 대한 명시적 패키지 참조도 .csproj 파일에 추가해야 합니다.
<ItemGroup>
<PackageReference Include="Microsoft.Maui.Controls" Version="$(MauiVersion)" />
<PackageReference Include="Microsoft.Maui.Controls.Compatibility" Version="$(MauiVersion)" />
</ItemGroup>
변수는 $(MauiVersion)
설치한 .NET MAUI 버전에서 참조됩니다. 빌드 속성을 .csproj 파일에 추가하여 재정의 $(MauiVersion)
할 수 있습니다.
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFrameworks>net8.0-android;net8.0-ios;net8.0-maccatalyst</TargetFrameworks>
<UseMaui>True</UseMaui>
<MauiVersion>8.0.3</MauiVersion>
</PropertyGroup>
</Project>
이는 야간 피드에서 임시 빌드를 사용하거나 끌어오기 요청에서 다운로드한 빌드를 사용할 때 유용할 수 있습니다.
또한 빌드 속성은 $(ApplicationIdGuid)
.NET 8의 .csproj 파일에서 제거할 수 있습니다. 자세한 내용은 동작 변경 내용을 참조 하세요.
업그레이드된 앱을 처음으로 빌드하기 전에 폴더 및 obj
폴더를 bin
삭제합니다.
참고 항목
.NET 8의 .NET MAUI 앱에 대한 프로젝트 템플릿을 사용하면 빌드 속성을 사용하여 프로젝트에 대해 nullable 컨텍스트를 $(Nullable)
사용할 수 있습니다. 자세한 내용은 Nullable을 참조 하세요.
참고 항목
.NET MAUI