Kommentar
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
Så här migrerar du ett Xamarin.iOS-bindningsbibliotek till ett .NET för iOS-bindningsbibliotek:
I Visual Studio skapar du ett nytt iOS-bindningsbiblioteksprojekt med samma namn som ditt Xamarin.iOS-bindningsprojekt:
Öppna projektfilen för att bekräfta att du har ett .NET SDK-liknande projekt:
<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>Anmärkning
Projektfilen för ett iOS-bindningsbibliotek liknar projektfilen för ett iOS-klassbibliotek.
Lägg till ditt interna bibliotek, eller ditt interna ramverk, i projektet som en intern referens. Uppdatera sedan bindningsprojektfilen med
<NativeReference>objektet från ditt Xamarin.iOS-bindningsprojekt:<ItemGroup> <NativeReference Include="libXMBindingLibraryUniversal.a"> <Kind>Static</Kind> <ForceLoad>True</ForceLoad> </NativeReference> </ItemGroup>Kopiera API-definitionen från ditt Xamarin.iOS-bindningsprojekt till ditt .NET för iOS-bindningsprojekt.
Kopiera eventuell ytterligare nödvändig kod från ditt Xamarin.iOS-bindningsprojekt till ditt .NET för iOS-bindningsprojekt.
I ditt .NET for iOS-bindningsprojekt ersätter du eventuella API:er som inte stöds med deras .NET för iOS-motsvarigheter. Mer information finns i API:er som inte stöds.
API:er som inte stöds
Följande Xamarin.iOS-API:er har ändrats.
System.nint och System.nunit
Typerna System.nint och System.nuint är inte tillgängliga i .NET för iOS. I stället ersätts de med typerna nint och nuint som mappas till System.IntPtrSystem.UIntPtr respektive. Kod som använder typerna System.nint och System.nuint kompileras inte och bör ersättas med typerna nint och nuint . Dessutom kommer kod som överbelastar på System.IntPtr och nint, och på System.UIntPtr och nuint inte att kompileras. I det här scenariot byter du namn på eller tar bort en av överladdningarna.
System.nfloat
Typen System.nfloat är inte tillgänglig i .NET för iOS. I stället ersätts den med System.Runtime.InteropServices.NFloat typen . Ändra all kod som refererar till System.nfloat för att använda nfloat eller det fullständigt kvalificerade typnamnet.
Ändring av NSObject.Handle-typ
I .NET för iOS har NSObject.Handle och INativeObject.Handle egenskaperna ändrat typ från System.IntPtr till en ObjCRuntime.NativeHandle struktur. Det innebär att många parametrar och returvärden måste ändra typ. Som exempel:
- Alla objekt som ärver från
Foundation.NSObjectsom harClassHandleellerHandleegenskaper av typenIntPtrbör ändra egenskapstypen tillObjCRuntime.NativeHandle. - Alla objekt som ärver från
Foundation.NSObjectellerObjCRuntime.DisposableObjectsom har konstruktorer som tidigare tog enSystem.IntPtr, eller enSystem.IntPtroch enbool, bör ändra referensernaIntPtrtillObjcRuntime.NativeHandle.
Det finns implicita konverteringar mellan System.IntPtr och ObjCRuntime.NativeHandler, så när du har gjort den här typändringen bör den mesta koden kompileras utan ytterligare ändringar.
Modell.AutogenereratNamn
Egenskapen Model.AutoGeneratedName är inte tillgänglig i .NET för iOS. I Xamarin.iOS angav den här egenskapen om Objective-C typnamn för modellen ska genereras automatiskt. I .NET för iOS är automatisk generering av Objective-C typnamn från modellen det enda och standardbeteende som är tillgängligt.