Xamarin.iOS バインド プロジェクトの移行
Xamarin.iOS バインディング ライブラリを .NET for iOS ライブラリに移行するには、次の手順を行います。
Visual Studio で、Xamarin.iOS バインド プロジェクトと同じ名前の新しい iOS バインド ライブラリ プロジェクトを作成します。
プロジェクト ファイルを開き、.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>
Note
iOS バインド ライブラリのプロジェクト ファイルは、iOS クラス ライブラリのプロジェクト ファイルに似ています。
ネイティブ ライブラリまたはネイティブ フレームワークをネイティブ参照としてプロジェクトに追加します。 次に、Xamarin.iOS バインド プロジェクトの
<NativeReference>
項目でバインド プロジェクト ファイルを更新します。<ItemGroup> <NativeReference Include="libXMBindingLibraryUniversal.a"> <Kind>Static</Kind> <ForceLoad>True</ForceLoad> </NativeReference> </ItemGroup>
API 定義を Xamarin.iOS バインディング プロジェクトから .NET for iOS バインディング プロジェクトにコピーします。
必要な追加コードを Xamarin.iOS バインディング プロジェクトから .NET for iOS バインディング プロジェクトにコピーします。
.NET for iOS バインディング プロジェクトで、サポートされていない API を .NET for iOS の同等の API に置き換えます。 詳細については、「サポートされていない API」をご覧ください。
サポートされていない API
次の Xamarin.iOS API が変更されました。
System.nint と System.nunit
System.nint
型と System.nuint
型は、.NET for iOS では使用できません。 その代わりに、nint
型と nuint
型に置き換えられ、それぞれ System.IntPtr
と System.UIntPtr
にマッピングされます。 System.nint
型と System.nuint
型を使ったコードはコンパイルされないため、nint
型と nuint
型に置き換える必要があります。 さらに、System.IntPtr
と nint
、System.UIntPtr
と nuint
でオーバーロードするコードはコンパイルされません。 このシナリオでは、いずれかのオーバーロードの名前の変更または削除を行います。
System.nfloat
System.nfloat
型は、.NET for iOS では使用できません。 代わりに、System.Runtime.InteropServices.NFloat
型に置き換えられます。 System.nfloat
を参照するすべてのコードを、nfloat
または完全修飾型名を使用するように修正します。
NSObject.Handle 型の変更
.NET for iOS では、NSObject.Handle
プロパティと INativeObject.Handle
プロパティの型が System.IntPtr
から ObjCRuntime.NativeHandle
構造体に変更されました。 そのため、多くのパラメーターと戻り値の型の変更が必要になります。 次に例を示します。
IntPtr
型のClassHandle
またはHandle
プロパティがあるFoundation.NSObject
を継承するすべてのオブジェクトは、プロパティ型をObjCRuntime.NativeHandle
に変更する必要があります。- 以前に
System.IntPtr
またはSystem.IntPtr
とbool
を受け取っていたコンストラクターをもつFoundation.NSObject
またはObjCRuntime.DisposableObject
から継承するすべてのオブジェクトで、IntPtr
の参照をObjcRuntime.NativeHandle
に変更する必要があります。
System.IntPtr
と ObjCRuntime.NativeHandler
の間には暗黙的な変換があるため、この型の変更の後、ほとんどのコードはそれ以上変更せずにコンパイルする必要があります。
Model.AutoGeneratedName
Model.AutoGeneratedName
プロパティは、.NET for iOS では使用できません。 Xamarin.iOS では、このプロパティは、モデルの Objective-C 型名を自動的に生成するかどうかを指定していました。 .NET for iOS では、既定でモデルから Objective-C 型名が自動的に作成され、これが、使用できる唯一の動作です。
.NET MAUI