Freigeben über


Migration des Xamarin.iOS-Bindungsprojekts

So migrieren Sie eine Xamarin.iOS-Bindungsbibliothek zu einer .NET für iOS-Bindungsbibliothek:

  1. Erstellen Sie in Visual Studio ein neues iOS-Bindungsbibliotheksprojekt mit demselben Namen wie Ihr Xamarin.iOS-Bindungsprojekt:

    Screenshot des Erstellens eines Projekts für eine iOS-Bindungsbibliothek in Visual Studio.

    Ö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.

  2. 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>
    
  3. Kopieren Sie die API-Definition aus Ihrem Xamarin.iOS-Bindungsprojekt in Ihr .NET für iOS-Bindungsprojekt.

  4. Kopieren Sie die API-Definition und weiteren erforderlichen Code aus Ihrem Xamarin.iOS-Bindungsprojekt in Ihr .NET für iOS-Bindungsprojekt.

  5. 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, die ClassHandle- oder Handle-Eigenschaften des Typs IntPtr aufweisen, sollten ihren Eigenschaftstyp in ObjCRuntime.NativeHandle ändern.
  • Alle Objekte, die von Foundation.NSObject oder ObjCRuntime.DisposableObject stammen und Konstruktoren aufweisen, die zuvor einen System.IntPtr, oder einen System.IntPtr und einen bool verwendeten, sollten die IntPtr-Verweise in ObjcRuntime.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.