Migration des Xamarin.iOS-Bindungsprojekts
So migrieren Sie eine Xamarin.iOS-Bindungsbibliothek zu einer .NET für iOS-Bindungsbibliothek:
Erstellen Sie in Visual Studio ein neues iOS-Bindungsbibliotheksprojekt mit demselben Namen wie Ihr Xamarin.iOS-Bindungsprojekt:
Öffnen Sie die Projektdatei, um zu bestätigen, dass Sie über ein .NET SDK-Formatprojekt verfügen:
<Project Sdk="Microsoft.NET.Sdk"> <PropertyGroup> <TargetFramework>net8.0-ios</TargetFramework> <Nullable>enable</Nullable> <ImplicitUsings>true</ImplicitUsings> <IsBindingProject>true</IsBindingProject> </PropertyGroup> <ItemGroup> <ObjcBindingApiDefinition Include="ApiDefinition.cs" /> <ObjcBindingCoreSource Include="StructsAndEnums.cs" /> </ItemGroup> </Project>
Hinweis
Die Projektdatei für eine iOS-Bindungsbibliothek ähnelt der Projektdatei für eine iOS-Klassenbibliothek.
Fügen Sie dem Projekt ihre systemeigene Bibliothek oder das systemeigene Framework als nativen Verweis hinzu. Aktualisieren Sie dann die Bindungsprojektdatei mit dem
<NativeReference>
-Element aus Ihrem Xamarin.iOS-Bindungsprojekt:<ItemGroup> <NativeReference Include="libXMBindingLibraryUniversal.a"> <Kind>Static</Kind> <ForceLoad>True</ForceLoad> </NativeReference> </ItemGroup>
Kopieren Sie die API-Definition aus Ihrem Xamarin.iOS-Bindungsprojekt in Ihr .NET für iOS-Bindungsprojekt.
Kopieren Sie die API-Definition und weiteren erforderlichen Code aus Ihrem Xamarin.iOS-Bindungsprojekt in Ihr .NET für iOS-Bindungsprojekt.
Ersetzen Sie in Ihrem .NET für iOS-Bindungsprojekt alle nicht unterstützten APIs durch ihre .NET für iOS-Entsprechungen. Weitere Informationen finden Sie unter Unterstützte APIs.
Nicht unterstützte APIs
Die folgenden Xamarin.iOS-APIs wurden geändert.
System.nint und System.nunit
Die Typen System.nint
und System.nuint
sind in .NET für iOS nicht verfügbar. Stattdessen werden sie durch die Typen nint
und nuint
ersetzt, die System.IntPtr
und System.UIntPtr
zugeordnet sind. Code, der die Typen System.nint
und System.nuint
verwendet, wird nicht kompiliert und sollte durch die Typen nint
und nuint
ersetzt werden. Darüber hinaus wird Code, der in System.IntPtr
und nint
sowie in System.UIntPtr
und nuint
überladen wird, nicht kompiliert. Benennen Sie in diesem Szenario eine der Überladungen um, oder entfernen Sie sie.
System.nfloat
Der Typ System.nfloat
ist in .NET für iOS nicht verfügbar. Stattdessen wird er durch den Typ System.Runtime.InteropServices.NFloat
ersetzt. Ändern Sie jeden Code, der auf nfloat
oder die Verwendung von System.nfloat
oder den vollqualifizierten Typnamen verweist.
NSObject.Handle-Typänderung
In .NET für iOS wurden die Eigenschaften NSObject.Handle
und INativeObject.Handle
von System.IntPtr
in eine ObjCRuntime.NativeHandle
-Struktur geändert. Dies bedeutet, dass viele Parameter und Rückgabewerte den Typ ändern müssen. Zum Beispiel:
- Alle Objekte, die von
Foundation.NSObject
stammen, dieClassHandle
- oderHandle
-Eigenschaften des TypsIntPtr
aufweisen, sollten ihren Eigenschaftstyp inObjCRuntime.NativeHandle
ändern. - Alle Objekte, die von
Foundation.NSObject
oderObjCRuntime.DisposableObject
stammen und Konstruktoren aufweisen, die zuvor einenSystem.IntPtr
, oder einenSystem.IntPtr
und einenbool
verwendeten, sollten dieIntPtr
-Verweise inObjcRuntime.NativeHandle
ändern.
Es gibt implizite Konvertierungen zwischen System.IntPtr
und ObjCRuntime.NativeHandler
, sodass nach der Änderung dieses Typs die meisten Codes ohne weitere Änderungen kompiliert werden sollten.
Model.AutoGeneratedName
Die Eigenschaft Model.AutoGeneratedName
ist in .NET für iOS nicht verfügbar. In Xamarin.iOS hat diese Eigenschaft angegeben, ob der Objective-C-Typname für das Modell automatisch generiert werden soll. In .NET für iOS ist das automatische Generieren des Objective-C-Typnamens aus dem Modell das Standardverhalten und das einzig verfügbare Verhalten.