Migración del proyecto de enlace Xamarin.iOS
Para migrar una biblioteca de enlaces de Xamarin.iOS a una biblioteca de enlaces de .NET para iOS:
En Visual Studio, crea un nuevo proyecto de biblioteca de enlaces de iOS con el mismo nombre que el proyecto de enlace Xamarin.iOS:
Abre el archivo de proyecto para confirmar que tienes un proyecto de estilo SDK de .NET:
<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:
El archivo de proyecto de una biblioteca de enlaces de iOS es similar al archivo de proyecto de una biblioteca de clases de iOS.
Agrega la biblioteca nativa o el marco nativo al proyecto como referencia nativa. Después, actualiza el archivo de proyecto de enlace con el elemento
<NativeReference>
del proyecto de enlace Xamarin.iOS:<ItemGroup> <NativeReference Include="libXMBindingLibraryUniversal.a"> <Kind>Static</Kind> <ForceLoad>True</ForceLoad> </NativeReference> </ItemGroup>
Copie la definición de API del proyecto de enlace de Xamarin.iOS al proyecto de enlace de .NET para iOS.
Copie cualquier código necesario adicional desde el proyecto de enlace de Xamarin.iOS al proyecto de enlace de .NET para iOS.
En el proyecto de enlace de .NET para iOS, reemplace las API no admitidas por sus equivalentes de .NET para iOS. Para obtener más información, consulta, API no admitidas.
APIs no admitidas
Las siguientes API de Xamarin.iOS han cambiado.
System.nint y System.nunit
Los tipos System.nint
y System.nuint
no están disponibles en .NET para iOS. En su lugar, se reemplazan por los tipos nint
y nuint
, que se asignan a System.IntPtr
y System.UIntPtr
respectivamente. El código que usa los tipos System.nint
y System.nuint
no se compilará y se debe reemplazar por los tipos nint
y nuint
. Además, el código que sobrecarga en System.IntPtr
y nint
, y System.UIntPtr
y nuint
no se compilará. En este escenario, cambia el nombre o quite una de las sobrecargas.
System.nfloat
El tipo System.nfloat
no está disponible en .NET para iOS. En su lugar, se reemplaza por el tipo System.Runtime.InteropServices.NFloat
. Modifica cualquier código que haga referencia a System.nfloat
para usar nfloat
o al nombre de tipo completo.
Cambio de tipo NSObject.Handle
En .NET para iOS, las propiedades NSObject.Handle
y INativeObject.Handle
han cambiado el tipo de System.IntPtr
a una estructura de ObjCRuntime.NativeHandle
. Esto significa que muchos parámetros y valores devueltos tendrán que cambiar de tipo. Por ejemplo:
- Todos los objetos que heredan de
Foundation.NSObject
que tienen propiedadesClassHandle
oHandle
de tipoIntPtr
deben cambiar de tipo de propiedad aObjCRuntime.NativeHandle
. - Todos los objetos que heredan de
Foundation.NSObject
oObjCRuntime.DisposableObject
que tienen constructores que anteriormente adoptaban un valorSystem.IntPtr
oSystem.IntPtr
,bool
deben cambiar las referenciasIntPtr
referencias aObjcRuntime.NativeHandle
.
Hay conversiones implícitas entre System.IntPtr
y ObjCRuntime.NativeHandler
, por lo que después de realizar este cambio de tipo, la mayor parte del código debe compilarse sin cambios adicionales.
Model.AutoGeneratedName
La propiedad Model.AutoGeneratedName
no está disponible en .NET para iOS. En Xamarin.iOS, esta propiedad especificaba si el nombre de tipo Objective-C para el modelo se debe generar automáticamente. En .NET para iOS, la generación automática del nombre de tipo Objective-C del modelo es el comportamiento predeterminado y solo está disponible.