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 :
Dans Visual Studio, créez un projet Bibliothèque de liaison iOS avec le même nom que votre projet de liaison Xamarin.iOS :
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.
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>
Copiez la définition d’API de votre projet de liaison Xamarin.iOS dans votre projet de liaison .NET pour iOS.
Copiez tout autre code nécessaire de votre projet de liaison Xamarin.iOS dans votre projet de liaison .NET pour iOS.
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ésClassHandle
ouHandle
de typeIntPtr
doivent remplacer leur type de propriété parObjCRuntime.NativeHandle
. - Tous les objets héritant de
Foundation.NSObject
ou deObjCRuntime.DisposableObject
qui ont des constructeurs qui prenaient unSystem.IntPtr
, ou unSystem.IntPtr
et unbool
, doivent remplacer les référencesIntPtr
parObjcRuntime.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.