Condividi tramite


Migrazione del progetto di associazione Xamarin.iOS

Per eseguire la migrazione di una libreria di binding Xamarin.iOS a una libreria di binding .NET per iOS:

  1. In Visual Studio creare un nuovo progetto libreria di binding iOS con lo stesso nome del progetto di associazione Xamarin.iOS:

    Screenshot della creazione di un progetto libreria di binding iOS in Visual Studio.

    Aprire il file di progetto per verificare di avere un progetto di tipo .NET SDK:

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

    Nota

    Il file di progetto per una libreria di binding iOS è simile al file di progetto per una libreria di classi iOS.

  2. Aggiungere la libreria nativa o il framework nativo al progetto come riferimento nativo. Aggiornare quindi il file di progetto di associazione con l'elemento <NativeReference> dal progetto di associazione Xamarin.iOS:

    <ItemGroup>
        <NativeReference Include="libXMBindingLibraryUniversal.a">
            <Kind>Static</Kind>
            <ForceLoad>True</ForceLoad>
        </NativeReference>
    </ItemGroup>
    
  3. Copiare la definizione dell'API dal progetto di associazione Xamarin.iOS al progetto di associazione .NET per iOS.

  4. Copiare qualsiasi codice aggiuntivo necessario dal progetto di associazione Xamarin.iOS al progetto di associazione .NET per iOS.

  5. Nel progetto di associazione .NET per iOS sostituire qualsiasi API non supportata con i relativi equivalenti .NET per iOS. Per altre informazioni, vedere API non supportate.

API non supportate

Le API Xamarin.iOS seguenti sono state modificate.

System.nint e System.nunit

I System.nint tipi e System.nuint non sono disponibili in .NET per iOS. Vengono invece sostituiti con i tipi enuint, rispettivamente, a cui viene System.UIntPtr eseguito il nint mappingSystem.IntPtr. Il codice che usa i System.nint tipi e System.nuint non verrà compilato e deve essere sostituito con i nint tipi e nuint . Inoltre, il codice che esegue l'overload su System.IntPtr e ninte nuint System.UIntPtr non verrà compilato. In questo scenario rinominare o rimuovere uno degli overload.

System.nfloat

Il System.nfloat tipo non è disponibile in .NET per iOS. Viene invece sostituito con il System.Runtime.InteropServices.NFloat tipo . Modificare qualsiasi codice che fa riferimento all'uso System.nfloat nfloat o al nome completo del tipo.

Modifica del tipo NSObject.Handle

In .NET per iOS le NSObject.Handle proprietà e INativeObject.Handle sono state modificate dal System.IntPtr tipo a uno ObjCRuntime.NativeHandle struct. Ciò significa che molti parametri e valori restituiti dovranno modificare il tipo. Ad esempio:

  • Tutti gli oggetti che ereditano da Foundation.NSObject che hanno ClassHandle o Handle proprietà di tipo IntPtr devono modificare il tipo di proprietà in ObjCRuntime.NativeHandle.
  • Tutti gli oggetti che ereditano da Foundation.NSObject o ObjCRuntime.DisposableObject che dispongono di costruttori che in precedenza hanno preso un System.IntPtroggetto o un System.IntPtr e , booldevono modificare i IntPtr riferimenti a ObjcRuntime.NativeHandle.

Esistono conversioni implicite tra System.IntPtr e ObjCRuntime.NativeHandler, quindi dopo aver apportato questa modifica al tipo la maggior parte del codice deve essere compilata senza ulteriori modifiche.

Model.AutoGeneratedName

La Model.AutoGeneratedName proprietà non è disponibile in .NET per iOS. In Xamarin.iOS questa proprietà specifica se il nome del tipo Objective-C per il modello deve essere generato automaticamente. In .NET per iOS, la generazione automatica del nome del tipo Objective-C dal modello è il comportamento predefinito e disponibile solo.