Migrering av Xamarin.iOS-bindningsprojekt

Så här migrerar du ett Xamarin.iOS-bindningsbibliotek till ett .NET för iOS-bindningsbibliotek:

  1. I Visual Studio skapar du ett nytt iOS-bindningsbiblioteksprojekt med samma namn som ditt Xamarin.iOS-bindningsprojekt:

    Skärmbild av hur du skapar ett iOS-bindningsbiblioteksprojekt i Visual Studio.

    Öppna projektfilen för att bekräfta att du har ett .NET SDK-liknande projekt:

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

    Anmärkning

    Projektfilen för ett iOS-bindningsbibliotek liknar projektfilen för ett iOS-klassbibliotek.

  2. Lägg till ditt interna bibliotek, eller ditt interna ramverk, i projektet som en intern referens. Uppdatera sedan bindningsprojektfilen med <NativeReference> objektet från ditt Xamarin.iOS-bindningsprojekt:

    <ItemGroup>
        <NativeReference Include="libXMBindingLibraryUniversal.a">
            <Kind>Static</Kind>
            <ForceLoad>True</ForceLoad>
        </NativeReference>
    </ItemGroup>
    
  3. Kopiera API-definitionen från ditt Xamarin.iOS-bindningsprojekt till ditt .NET för iOS-bindningsprojekt.

  4. Kopiera eventuell ytterligare nödvändig kod från ditt Xamarin.iOS-bindningsprojekt till ditt .NET för iOS-bindningsprojekt.

  5. I ditt .NET for iOS-bindningsprojekt ersätter du eventuella API:er som inte stöds med deras .NET för iOS-motsvarigheter. Mer information finns i API:er som inte stöds.

API:er som inte stöds

Följande Xamarin.iOS-API:er har ändrats.

System.nint och System.nunit

Typerna System.nint och System.nuint är inte tillgängliga i .NET för iOS. I stället ersätts de med typerna nint och nuint som mappas till System.IntPtrSystem.UIntPtr respektive. Kod som använder typerna System.nint och System.nuint kompileras inte och bör ersättas med typerna nint och nuint . Dessutom kommer kod som överbelastar på System.IntPtr och nint, och på System.UIntPtr och nuint inte att kompileras. I det här scenariot byter du namn på eller tar bort en av överladdningarna.

System.nfloat

Typen System.nfloat är inte tillgänglig i .NET för iOS. I stället ersätts den med System.Runtime.InteropServices.NFloat typen . Ändra all kod som refererar till System.nfloat för att använda nfloat eller det fullständigt kvalificerade typnamnet.

Ändring av NSObject.Handle-typ

I .NET för iOS har NSObject.Handle och INativeObject.Handle egenskaperna ändrat typ från System.IntPtr till en ObjCRuntime.NativeHandle struktur. Det innebär att många parametrar och returvärden måste ändra typ. Som exempel:

  • Alla objekt som ärver från Foundation.NSObject som har ClassHandle eller Handle egenskaper av typen IntPtr bör ändra egenskapstypen till ObjCRuntime.NativeHandle.
  • Alla objekt som ärver från Foundation.NSObject eller ObjCRuntime.DisposableObject som har konstruktorer som tidigare tog en System.IntPtr, eller en System.IntPtr och en bool, bör ändra referenserna IntPtr till ObjcRuntime.NativeHandle.

Det finns implicita konverteringar mellan System.IntPtr och ObjCRuntime.NativeHandler, så när du har gjort den här typändringen bör den mesta koden kompileras utan ytterligare ändringar.

Modell.AutogenereratNamn

Egenskapen Model.AutoGeneratedName är inte tillgänglig i .NET för iOS. I Xamarin.iOS angav den här egenskapen om Objective-C typnamn för modellen ska genereras automatiskt. I .NET för iOS är automatisk generering av Objective-C typnamn från modellen det enda och standardbeteende som är tillgängligt.