Sdílet prostřednictvím


Migrace projektu vazby Xamarin.iOS

Migrace knihovny vazeb Xamarin.iOS do knihovny vazeb .NET pro iOS:

  1. V sadě Visual Studio vytvořte nový projekt knihovny vazeb pro iOS se stejným názvem jako projekt vazby Xamarin.iOS:

    Snímek obrazovky s vytvořením projektu knihovny vazeb pro iOS v sadě Visual Studio

    Otevřete soubor projektu a potvrďte, že máte projekt ve stylu sady .NET SDK:

    <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>
    

    Poznámka:

    Soubor projektu pro knihovnu vazeb pro iOS je podobný souboru projektu pro knihovnu tříd iOS.

  2. Přidejte do projektu nativní knihovnu nebo nativní architekturu jako nativní odkaz. Potom aktualizujte soubor vazby projektu položkou <NativeReference> z projektu vazby Xamarin.iOS:

    <ItemGroup>
        <NativeReference Include="libXMBindingLibraryUniversal.a">
            <Kind>Static</Kind>
            <ForceLoad>True</ForceLoad>
        </NativeReference>
    </ItemGroup>
    
  3. Zkopírujte definici rozhraní API z projektu vazby Xamarin.iOS do projektu vazby .NET pro iOS.

  4. Zkopírujte veškerý další požadovaný kód z projektu vazby Xamarin.iOS do projektu vazby .NET pro iOS.

  5. V projektu vazby .NET pro iOS nahraďte všechna nepodporovaná rozhraní API jejich ekvivalenty .NET pro iOS. Další informace najdete v tématu Nepodporovaná rozhraní API.

Nepodporovaná rozhraní API

Změnila se následující rozhraní API Xamarin.iOS.

System.nint a System.nunit

Typy System.nint a System.nuint typy nejsou k dispozici v .NET pro iOS. Místo toho se nahradí typy nint a nuint typy, které se mapují na System.IntPtr a System.UIntPtr v uvedeném pořadí. Kód, který používá typy a System.nuint které se nebudou System.nint kompilovat a měly by být nahrazeny typynint.nuint Kromě toho kód, který přetíží System.IntPtr a ninta nebude System.UIntPtr nuint kompilován. V tomto scénáři přejmenujte nebo odeberte některé z přetížení.

System.nfloat

Typ System.nfloat není k dispozici v .NET pro iOS. Místo toho se nahradí typem System.Runtime.InteropServices.NFloat . Upravte libovolný kód, který odkazuje na System.nfloat použití nfloat nebo plně kvalifikovaný název typu.

Změna typu NSObject.Handle

V .NET pro iOS NSObject.Handle se typ a INativeObject.Handle vlastnosti změnily z System.IntPtr na ObjCRuntime.NativeHandle strukturu. To znamená, že mnoho parametrů a návratových hodnot bude muset změnit typ. Příklad:

  • Všechny objekty, které dědí z Foundation.NSObject toho, které mají ClassHandle nebo Handle vlastnosti typu IntPtr , by měly změnit jejich typ vlastnosti na ObjCRuntime.NativeHandle.
  • Všechny objekty, které dědí z Foundation.NSObject nebo ObjCRuntime.DisposableObject mají konstruktory, které dříve vzaly System.IntPtr, nebo System.IntPtr a a , boolby měly změnit IntPtr odkazy na ObjcRuntime.NativeHandle.

Existují implicitní převody mezi System.IntPtr a ObjCRuntime.NativeHandler, takže po provedení této změny typu by se většina kódu měla zkompilovat bez dalších změn.

Model.AutoGeneratedName

Vlastnost Model.AutoGeneratedName není k dispozici v .NET pro iOS. V Xamarin.iOS byla tato vlastnost zadána, zda se má automaticky vygenerovat název typu Objective-C pro model. V .NET pro iOS je automatické generování názvu typu Objective-C z modelu výchozí a jediné dostupné chování.