Udostępnij za pośrednictwem


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:

  1. W programie Visual Studio utwórz nowy projekt biblioteka powiązań systemu iOS o takiej samej nazwie jak projekt powiązania platformy Xamarin.iOS:

    Zrzut ekranu przedstawiający tworzenie projektu biblioteki powiązań systemu iOS w programie Visual Studio.

    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.

  2. 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>
    
  3. Skopiuj definicję interfejsu API z projektu powiązania platformy Xamarin.iOS do projektu powiązania platformy .NET dla systemu iOS.

  4. Skopiuj dowolny dodatkowy wymagany kod z projektu powiązania platformy Xamarin.iOS do projektu powiązania platformy .NET dla systemu iOS.

  5. 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 lub ClassHandle Handle właściwości IntPtr typu powinny zmienić typ właściwości na ObjCRuntime.NativeHandle.
  • Wszystkie obiekty dziedziczone z Foundation.NSObject lub z konstruktorami, które wcześniej miały System.IntPtrelement , lub i System.IntPtr bool, powinny zmienić IntPtr odwołania na ObjcRuntime.NativeHandleObjCRuntime.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.