Migracja projektu powiązania platformy Xamarin.iOS
Aby przeprowadzić migrację biblioteki powiązań platformy Xamarin.iOS do biblioteki powiązań platformy .NET dla systemu iOS:
W programie Visual Studio utwórz nowy projekt biblioteka powiązań systemu iOS o takiej samej nazwie jak projekt powiązania platformy Xamarin.iOS:
Otwórz plik projektu, aby potwierdzić, że masz projekt w stylu zestawu SDK platformy .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>
Uwaga
Plik projektu dla biblioteki powiązań systemu iOS jest podobny do pliku projektu dla biblioteki klas systemu iOS.
Dodaj bibliotekę natywną lub platformę natywną do projektu jako odwołanie natywne. Następnie zaktualizuj plik projektu powiązania za
<NativeReference>
pomocą elementu z projektu powiązania platformy Xamarin.iOS:<ItemGroup> <NativeReference Include="libXMBindingLibraryUniversal.a"> <Kind>Static</Kind> <ForceLoad>True</ForceLoad> </NativeReference> </ItemGroup>
Skopiuj definicję interfejsu API z projektu powiązania platformy Xamarin.iOS do projektu powiązania platformy .NET dla systemu iOS.
Skopiuj dowolny dodatkowy wymagany kod z projektu powiązania platformy Xamarin.iOS do projektu powiązania platformy .NET dla systemu iOS.
W projekcie powiązania platformy .NET dla systemu iOS zastąp wszystkie nieobsługiwane interfejsy API ich odpowiednikami platformy .NET dla systemu iOS. Aby uzyskać więcej informacji, zobacz Nieobsługiwane interfejsy API.
Nieobsługiwane interfejsy API
Następujące interfejsy API platformy Xamarin.iOS uległy zmianie.
System.nint i System.nunit
Typy System.nint
i System.nuint
nie są dostępne na platformie .NET dla systemu iOS. Zamiast tego są zastępowane typami nint
i nuint
, które są mapowe odpowiednio na System.IntPtr
i System.UIntPtr
. Kod używający System.nint
typów i System.nuint
nie zostanie skompilowany i powinien zostać zastąpiony typami nint
i nuint
. Ponadto kod, który przeciąża System.IntPtr
elementy i nint
, i System.UIntPtr
nuint
nie zostanie skompilowany. W tym scenariuszu zmień nazwę lub usuń jedno z przeciążeń.
System.nfloat
Typ System.nfloat
nie jest dostępny na platformie .NET dla systemu iOS. Zamiast tego jest zastępowany typem System.Runtime.InteropServices.NFloat
. Zmodyfikuj dowolny kod, który odnosi się do System.nfloat
użycia nfloat
lub w pełni kwalifikowanej nazwy typu.
Zmiana typu NSObject.Handle
Na platformie .NET dla systemu iOS NSObject.Handle
właściwości i INativeObject.Handle
zmieniły typ z System.IntPtr
na ObjCRuntime.NativeHandle
strukturę. Oznacza to, że wiele parametrów i zwracanych wartości będzie musiało zmienić typ. Na przykład:
- Wszystkie obiekty dziedziczone z
Foundation.NSObject
tego typu lubClassHandle
Handle
właściwościIntPtr
typu powinny zmienić typ właściwości naObjCRuntime.NativeHandle
. - Wszystkie obiekty dziedziczone z
Foundation.NSObject
lub z konstruktorami, które wcześniej miałySystem.IntPtr
element , lub iSystem.IntPtr
bool
, powinny zmienićIntPtr
odwołania naObjcRuntime.NativeHandle
ObjCRuntime.DisposableObject
.
Istnieją niejawne konwersje między System.IntPtr
i ObjCRuntime.NativeHandler
, więc po wprowadzeniu tej zmiany typu większość kodu powinna zostać skompilowana bez dalszych zmian.
Model.AutoGeneratedName
Właściwość Model.AutoGeneratedName
nie jest dostępna na platformie .NET dla systemu iOS. W środowisku Xamarin.iOS ta właściwość określa, czy nazwa typu Objective-C dla modelu powinna być generowana automatycznie. Na platformie .NET dla systemu iOS automatyczne generowanie nazwy typu Objective-C z modelu jest ustawieniem domyślnym i jedynym dostępnym zachowaniem.