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>
注意
iOS 绑定库的项目文件类似于 iOS 类库的项目文件。
将本机库或本机框架作为本机引用添加到项目。 然后使用 Xamarin.iOS 绑定项目中的
<NativeReference>
项更新绑定项目文件:<ItemGroup> <NativeReference Include="libXMBindingLibraryUniversal.a"> <Kind>Static</Kind> <ForceLoad>True</ForceLoad> </NativeReference> </ItemGroup>
将 Xamarin.iOS 绑定项目中的 API 定义复制到 .NET for iOS 绑定项目。
将 Xamarin.iOS 绑定项目中的任何其他必需代码复制到 .NET for iOS 绑定项目。
在 .NET for iOS 绑定项目中,将任何不受支持的 API 替换为其 .NET for iOS 对等项。 有关详细信息,请参阅不支持的 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
结构。 这意味着许多参数和返回值都需要更改类型。 例如:
- 从
Foundation.NSObject
继承的所有对象,如果具有IntPtr
类型的ClassHandle
或Handle
属性,则应当将其属性类型更改为ObjCRuntime.NativeHandle
。 - 从
Foundation.NSObject
或ObjCRuntime.DisposableObject
继承的所有对象,如果具有之前采用System.IntPtr
或System.IntPtr
以及bool
的构造函数,则应当将IntPtr
引用更改为ObjcRuntime.NativeHandle
。
System.IntPtr
与 ObjCRuntime.NativeHandler
之间存在隐式转换,因此在进行此类型更改后,大多数代码都应编译,而无需进一步更改。
Model.AutoGeneratedName
Model.AutoGeneratedName
属性在 .NET for iOS 中不可用。 在 Xamarin.iOS 中,此属性指定是否应自动生成模型的 Objective-C 类型名称。 在 .NET for iOS 中,从模型自动生成 Objective-C 类型名称是默认的行为,也是唯一可用的行为。