Xamarin.iOS バインド プロジェクトの移行

Xamarin.iOS バインディング ライブラリを .NET for iOS ライブラリに移行するには、次の手順を行います。

  1. Visual Studio で、Xamarin.iOS バインド プロジェクトと同じ名前の新しい iOS バインド ライブラリ プロジェクトを作成します。

    Visual Studio で 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 クラス ライブラリのプロジェクト ファイルに似ています。

  2. ネイティブ ライブラリまたはネイティブ フレームワークをネイティブ参照としてプロジェクトに追加します。 次に、Xamarin.iOS バインド プロジェクトの <NativeReference> 項目でバインド プロジェクト ファイルを更新します。

    <ItemGroup>
        <NativeReference Include="libXMBindingLibraryUniversal.a">
            <Kind>Static</Kind>
            <ForceLoad>True</ForceLoad>
        </NativeReference>
    </ItemGroup>
    
  3. API 定義を Xamarin.iOS バインディング プロジェクトから .NET for iOS バインディング プロジェクトにコピーします。

  4. 必要な追加コードを Xamarin.iOS バインディング プロジェクトから .NET for iOS バインディング プロジェクトにコピーします。

  5. .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.IntPtrSystem.UIntPtr にマッピングされます。 System.nint 型と System.nuint 型を使ったコードはコンパイルされないため、nint 型と nuint 型に置き換える必要があります。 さらに、System.IntPtrnintSystem.UIntPtrnuint でオーバーロードするコードはコンパイルされません。 このシナリオでは、いずれかのオーバーロードの名前の変更または削除を行います。

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.IntPtrbool を受け取っていたコンストラクターをもつ Foundation.NSObject または ObjCRuntime.DisposableObject から継承するすべてのオブジェクトで、IntPtr の参照を ObjcRuntime.NativeHandle に変更する必要があります。

System.IntPtrObjCRuntime.NativeHandler の間には暗黙的な変換があるため、この型の変更の後、ほとんどのコードはそれ以上変更せずにコンパイルする必要があります。

Model.AutoGeneratedName

Model.AutoGeneratedName プロパティは、.NET for iOS では使用できません。 Xamarin.iOS では、このプロパティは、モデルの Objective-C 型名を自動的に生成するかどうかを指定していました。 .NET for iOS では、既定でモデルから Objective-C 型名が自動的に作成され、これが、使用できる唯一の動作です。