Partager via


Migration de projets de liaison Xamarin.iOS

Pour migrer une bibliothèque de liaison Xamarin.iOS vers une bibliothèque de liaison .NET pour iOS :

  1. Dans Visual Studio, créez un projet Bibliothèque de liaison iOS avec le même nom que votre projet de liaison Xamarin.iOS :

    Capture d’écran de la création d’un projet Bibliothèque de liaison iOS dans Visual Studio.

    Ouvrez le fichier projet pour vérifier que vous disposez d’un projet de style SDK .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>
    

    Remarque

    Le fichier projet d’une bibliothèque de liaison iOS est identique au fichier projet d’une bibliothèque de classes iOS.

  2. Ajoutez votre bibliothèque native, ou framework natif, au projet en tant que référence native. Ensuite, mettez à jour le fichier projet de liaison avec l’élément <NativeReference> à partir de votre projet de liaison Xamarin.iOS :

    <ItemGroup>
        <NativeReference Include="libXMBindingLibraryUniversal.a">
            <Kind>Static</Kind>
            <ForceLoad>True</ForceLoad>
        </NativeReference>
    </ItemGroup>
    
  3. Copiez la définition d’API de votre projet de liaison Xamarin.iOS dans votre projet de liaison .NET pour iOS.

  4. Copiez tout autre code nécessaire de votre projet de liaison Xamarin.iOS dans votre projet de liaison .NET pour iOS.

  5. Dans votre projet de liaison .NET pour iOS, remplacez toutes les API non prises en charge par leur équivalent .NET pour iOS. Pour plus d’informations, consultez API non prises en charge.

API non prises en charge

Les API Xamarin.iOS suivantes ont changé.

System.nint et System.nunit

Les types System.nint et System.nuint ne sont pas disponibles dans .NET pour iOS. Ils sont remplacés par les types nint et nuint, qui correspondent respectivement à System.IntPtr et à System.UIntPtr. Le code qui utilise les types System.nint et System.nuint n’est pas compilé et les types doivent être remplacés par les types nint et nuint. De plus, le code qui est surchargé sur System.IntPtr et nint, et sur System.UIntPtr et nuint, n’est pas compilé. Dans ce scénario, renommez ou supprimez l’une des surcharges.

System.nfloat

Le type System.nfloat n’est pas disponible dans .NET pour iOS. Il est remplacé par le type System.Runtime.InteropServices.NFloat. Modifiez tout code faisant référence à System.nfloat pour utiliser nfloat ou le nom de type complet.

Changement du type NSObject.Handle

Dans .NET pour iOS, les propriétés NSObject.Handle et INativeObject.Handle ont changé de type : System.IntPtr a été remplacé par un struct ObjCRuntime.NativeHandle. Cela signifie qu’un grand nombre de paramètres et de valeurs de retour doivent changer de type. Par exemple :

  • Tous les objets héritant de Foundation.NSObject qui ont des propriétés ClassHandle ou Handle de type IntPtr doivent remplacer leur type de propriété par ObjCRuntime.NativeHandle.
  • Tous les objets héritant de Foundation.NSObject ou de ObjCRuntime.DisposableObject qui ont des constructeurs qui prenaient un System.IntPtr, ou un System.IntPtr et un bool, doivent remplacer les références IntPtr par ObjcRuntime.NativeHandle.

Il existe des conversions implicites entre System.IntPtr et ObjCRuntime.NativeHandler. Par conséquent, après avoir effectué ce changement de type, le code devrait pouvoir être compilé sans autre modification dans la plupart des cas.

Model.AutoGeneratedName

La propriété Model.AutoGeneratedName n’est pas disponible dans .NET pour iOS. Dans Xamarin.iOS, cette propriété spécifiait si le nom de type Objective-C du modèle devait être généré automatiquement. Dans .NET pour iOS, la génération automatique du nom de type Objective-C à partir du modèle est le comportement par défaut et le seul disponible.