Compartir a través de


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:

  1. En Visual Studio, crea un nuevo proyecto de biblioteca de enlaces de iOS con el mismo nombre que el proyecto de enlace Xamarin.iOS:

    Captura de pantalla de la creación de un proyecto de biblioteca de enlaces de iOS en Visual Studio.

    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.

  2. 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>
    
  3. Copie la definición de API del proyecto de enlace de Xamarin.iOS al proyecto de enlace de .NET para iOS.

  4. Copie cualquier código necesario adicional desde el proyecto de enlace de Xamarin.iOS al proyecto de enlace de .NET para iOS.

  5. 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 propiedades ClassHandle o Handle de tipo IntPtr deben cambiar de tipo de propiedad a ObjCRuntime.NativeHandle.
  • Todos los objetos que heredan de Foundation.NSObject o ObjCRuntime.DisposableObject que tienen constructores que anteriormente adoptaban un valor System.IntPtr o System.IntPtr, booldeben cambiar las referencias IntPtr referencias a ObjcRuntime.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.