Миграция проекта привязки Xamarin.iOS
Чтобы перенести библиотеку привязки Xamarin.iOS в библиотеку привязки .NET для iOS:
В Visual Studio создайте проект библиотеки привязки iOS с тем же именем, что и проект привязки Xamarin.iOS:
Откройте файл проекта, чтобы убедиться, что у вас есть проект пакета SDK для .NET:
<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.
Добавьте собственную библиотеку или собственную платформу в проект в качестве собственной ссылки. Затем обновите файл проекта привязки с элементом
<NativeReference>
из проекта привязки Xamarin.iOS:<ItemGroup> <NativeReference Include="libXMBindingLibraryUniversal.a"> <Kind>Static</Kind> <ForceLoad>True</ForceLoad> </NativeReference> </ItemGroup>
Скопируйте определение API из проекта привязки Xamarin.iOS в проект привязки .NET для iOS.
Скопируйте любой дополнительный обязательный код из проекта привязки Xamarin.iOS в проект привязки .NET для iOS.
В проекте привязки .NET для iOS замените все неподдерживаемые API своими эквивалентами .NET для iOS. Дополнительные сведения см. в разделе "Неподдерживаемые API".
Неподдерживаемые API
Следующие API Xamarin.iOS изменились.
System.nint и System.nunit
System.nint
Типы и System.nuint
типы недоступны в .NET для iOS. Вместо этого они заменяются и nuint
типами, которые сопоставляются nint
с System.IntPtr
и System.UIntPtr
соответственно. Код, использующий System.nint
и System.nuint
типы, не компилируются и должны быть заменены nint
на типы и nuint
типы. Кроме того, код, который перегружен System.IntPtr
и nint
System.UIntPtr
nuint
не компилируется. В этом сценарии переименуйте или удалите одну из перегрузок.
System.nfloat
Тип System.nfloat
недоступен в .NET для iOS. Вместо этого он заменен типом System.Runtime.InteropServices.NFloat
. Измените любой код, который ссылается на System.nfloat
использование nfloat
или полное имя типа.
Изменение типа NSObject.Handle
В .NET для iOS NSObject.Handle
INativeObject.Handle
свойства изменили тип с System.IntPtr
ObjCRuntime.NativeHandle
структуры. Это означает, что для изменения типа потребуется много параметров и возвращаемых значений. Например:
- Все объекты, наследуемые от
Foundation.NSObject
этих свойствClassHandle
илиHandle
свойств,IntPtr
должны изменить тип свойстваObjCRuntime.NativeHandle
на . - Все объекты, наследуемые от
Foundation.NSObject
ObjCRuntime.DisposableObject
конструкторов, которые ранее использовалиSystem.IntPtr
или аSystem.IntPtr
,bool
должны изменитьIntPtr
ссылкиObjcRuntime.NativeHandle
на .
Между ними ObjCRuntime.NativeHandler
существуют неявные преобразования, поэтому после внесения этого изменения типа большинство кодов System.IntPtr
должны компилироваться без дальнейших изменений.
Model.AutoGeneratedName
Свойство Model.AutoGeneratedName
недоступно в .NET для iOS. В Xamarin.iOS это свойство указывает, следует ли автоматически создавать имя типа Objective-C для модели. В .NET для iOS автоматическое создание имени типа Objective-C из модели — это значение по умолчанию и доступное только поведение.