Xamarin.iOS 系結專案移轉
若要將 Xamarin.iOS 系結連結庫移轉至適用於 iOS 的 .NET 系結連結庫:
在 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>
注意
iOS 系結連結庫的項目檔類似於 iOS 類別庫的項目檔。
將原生連結庫或原生架構新增至專案作為原生參考。 然後使用 Xamarin.iOS 系結專案中的專案來更新系結項目檔
<NativeReference>
:<ItemGroup> <NativeReference Include="libXMBindingLibraryUniversal.a"> <Kind>Static</Kind> <ForceLoad>True</ForceLoad> </NativeReference> </ItemGroup>
將 API 定義從 Xamarin.iOS 系結專案複製到適用於 iOS 的 .NET 系結專案。
將 Xamarin.iOS 系結專案的任何其他必要程式代碼複製到適用於 iOS 系結專案的 .NET。
在適用於 iOS 的 .NET 系結專案中,將任何不支援的 API 取代為其適用於 iOS 的 .NET 對等專案。 如需詳細資訊,請參閱 不支援的 API。
不支援的 API
下列 Xamarin.iOS API 已變更。
System.nint 和 System.nunit
和 System.nint
System.nuint
類型不適用於 iOS 的 .NET。 相反地,它們會取代為 nint
分別對應至 System.IntPtr
和 System.UIntPtr
的和 nuint
型別。 使用 System.nint
和 System.nuint
類型的程式代碼不會編譯,且應該取代為 nint
和 nuint
類型。 此外,在和上System.IntPtr
多載且 nint
System.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
具有ClassHandle
或Handle
屬性IntPtr
的所有物件都應該將其屬性類型變更為ObjCRuntime.NativeHandle
。 - 繼承自
Foundation.NSObject
或 且具有先前取得System.IntPtr
、 或System.IntPtr
ObjCRuntime.DisposableObject
和bool
建構函式的所有物件,都應該變更 對ObjcRuntime.NativeHandle
的IntPtr
參考。
和 ObjCRuntime.NativeHandler
之間System.IntPtr
有隱含轉換,因此在進行此類型變更之後,大部分程式代碼都應該編譯而不需進一步變更。
Model.AutoGeneratedName
. Model.AutoGeneratedName
NET for iOS 中無法使用 屬性。 在 Xamarin.iOS 中,此屬性指定是否應該自動產生模型的 Objective-C 類型名稱。 在適用於 iOS 的 .NET 中,從模型自動產生 Objective-C 類型名稱是預設且唯一可用的行為。