다음을 통해 공유


.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에서 마이그레이션하는 데만 사용됩니다.
  • GridAddWithSpan 지정된 행 및 열 범위가 있는 지정된 행 및 열에 뷰 Grid 를 추가하는 확장 메서드를 가져옵니다.

데스크톱

제스처 인식기

  • 셸 탐색은 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 수 있습니다. 자세한 내용은 테마 리소스 정의 및 소비를 참조 하세요.
  • ColorContentProperty 클래스이므로 SolidColorBrush XAML에서 명시적으로 설정할 필요가 없습니다.

문제 해결

기타

  • 창 관리는 클래스에서 App 분리할 수 있습니다. 자세한 내용은 앱 클래스에서 창 관리 분리를 참조 하세요.
  • Android 앱에서는 여러 시스템 글꼴을 쉽게 사용할 수 있습니다. 자세한 내용은 글꼴 사용을 참조 하세요.
  • iOS에서 MauiUIApplicationDelegate 대리자를 PerformFetch 통해 재정의하거나 사용할 수 있는 메서드를 iOSLifecycle.PerformFetch 가져옵니다. 자세한 내용은 iOS 및 Mac Catalyst 플랫폼 수명 주기 이벤트를 참조 하세요.

형식 사용 중단 및 제거

다음 형식 또는 멤버는 더 이상 사용되지 않습니다.

다음 형식 또는 멤버가 제거되었습니다.

  • 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.DisconnectMicrosoft.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개 영역으로 분류할 수 있습니다.

자세한 내용은 .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을 참조 하세요.

참고 항목