共用方式為


Xamarin.iOS 系結專案移轉

若要將 Xamarin.iOS 系結連結庫移轉至適用於 iOS 的 .NET 系結連結庫:

  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>
    

    注意

    iOS 系結連結庫的項目檔類似於 iOS 類別庫的項目檔。

  2. 將原生連結庫或原生架構新增至專案作為原生參考。 然後使用 Xamarin.iOS 系結專案中的專案來更新系結項目檔 <NativeReference>

    <ItemGroup>
        <NativeReference Include="libXMBindingLibraryUniversal.a">
            <Kind>Static</Kind>
            <ForceLoad>True</ForceLoad>
        </NativeReference>
    </ItemGroup>
    
  3. 將 API 定義從 Xamarin.iOS 系結專案複製到適用於 iOS 的 .NET 系結專案。

  4. 將 Xamarin.iOS 系結專案的任何其他必要程式代碼複製到適用於 iOS 系結專案的 .NET。

  5. 在適用於 iOS 的 .NET 系結專案中,將任何不支援的 API 取代為其適用於 iOS 的 .NET 對等專案。 如需詳細資訊,請參閱 不支援的 API

不支援的 API

下列 Xamarin.iOS API 已變更。

System.nint 和 System.nunit

System.nint System.nuint 類型不適用於 iOS 的 .NET。 相反地,它們會取代為 nint 分別對應至 System.IntPtrSystem.UIntPtr 的和 nuint 型別。 使用 System.nintSystem.nuint 類型的程式代碼不會編譯,且應該取代為 nintnuint 類型。 此外,在和上System.IntPtr多載且 nintSystem.UIntPtr 不會編譯的程序nuint代碼。 在此案例中,請重新命名或移除其中一個多載。

System.nfloat

iOS System.nfloat 版 .NET 中無法使用此類型。 相反地,它會取代為 System.Runtime.InteropServices.NFloat 類型。 修改參考 System.nfloat 的任何程序代碼,以使用 nfloat 或完整類型名稱。

NSObject.Handle 類型變更

在適用於 iOS 的 .NET 中 NSObject.Handle ,和 INativeObject.Handle 屬性已將 型別從 System.IntPtr 變更為 ObjCRuntime.NativeHandle 結構。 這表示許多參數和傳回值都需要變更類型。 例如:

  • 繼承自 Foundation.NSObject 具有 ClassHandleHandle 屬性 IntPtr 的所有物件都應該將其屬性類型變更為 ObjCRuntime.NativeHandle
  • 繼承自 Foundation.NSObject 或 且具有先前取得 System.IntPtr、 或 System.IntPtr ObjCRuntime.DisposableObjectbool建構函式的所有物件,都應該變更 對 ObjcRuntime.NativeHandleIntPtr參考。

ObjCRuntime.NativeHandler之間System.IntPtr有隱含轉換,因此在進行此類型變更之後,大部分程式代碼都應該編譯而不需進一步變更。

Model.AutoGeneratedName

. Model.AutoGeneratedName NET for iOS 中無法使用 屬性。 在 Xamarin.iOS 中,此屬性指定是否應該自動產生模型的 Objective-C 類型名稱。 在適用於 iOS 的 .NET 中,從模型自動產生 Objective-C 類型名稱是預設且唯一可用的行為。