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:
In Visual Studio creare un nuovo progetto libreria di binding iOS con lo stesso nome del progetto di associazione Xamarin.iOS:
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.
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>
Copiare la definizione dell'API dal progetto di associazione Xamarin.iOS al progetto di associazione .NET per iOS.
Copiare qualsiasi codice aggiuntivo necessario dal progetto di associazione Xamarin.iOS al progetto di associazione .NET per iOS.
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 nint
e 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 hannoClassHandle
oHandle
proprietà di tipoIntPtr
devono modificare il tipo di proprietà inObjCRuntime.NativeHandle
. - Tutti gli oggetti che ereditano da
Foundation.NSObject
oObjCRuntime.DisposableObject
che dispongono di costruttori che in precedenza hanno preso unSystem.IntPtr
oggetto o unSystem.IntPtr
e ,bool
devono modificare iIntPtr
riferimenti aObjcRuntime.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.