Миграция проекта привязки Xamarin.iOS

Чтобы перенести библиотеку привязки Xamarin.iOS в библиотеку привязки .NET для iOS:

  1. В Visual Studio создайте проект библиотеки привязки iOS с тем же именем, что и проект привязки Xamarin.iOS:

    Снимок экрана: создание проекта библиотеки привязки iOS в Visual Studio.

    Откройте файл проекта, чтобы убедиться, что у вас есть проект пакета 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.

  2. Добавьте собственную библиотеку или собственную платформу в проект в качестве собственной ссылки. Затем обновите файл проекта привязки с элементом <NativeReference> из проекта привязки Xamarin.iOS:

    <ItemGroup>
        <NativeReference Include="libXMBindingLibraryUniversal.a">
            <Kind>Static</Kind>
            <ForceLoad>True</ForceLoad>
        </NativeReference>
    </ItemGroup>
    
  3. Скопируйте определение API из проекта привязки Xamarin.iOS в проект привязки .NET для iOS.

  4. Скопируйте любой дополнительный обязательный код из проекта привязки Xamarin.iOS в проект привязки .NET для iOS.

  5. В проекте привязки .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 и nintSystem.UIntPtrnuint не компилируется. В этом сценарии переименуйте или удалите одну из перегрузок.

System.nfloat

Тип System.nfloat недоступен в .NET для iOS. Вместо этого он заменен типом System.Runtime.InteropServices.NFloat . Измените любой код, который ссылается на System.nfloat использование nfloat или полное имя типа.

Изменение типа NSObject.Handle

В .NET для iOS NSObject.HandleINativeObject.Handle свойства изменили тип с System.IntPtrObjCRuntime.NativeHandle структуры. Это означает, что для изменения типа потребуется много параметров и возвращаемых значений. Например:

  • Все объекты, наследуемые от Foundation.NSObject этих свойств ClassHandle или Handle свойств, IntPtr должны изменить тип свойства ObjCRuntime.NativeHandleна .
  • Все объекты, наследуемые от Foundation.NSObjectObjCRuntime.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 из модели — это значение по умолчанию и доступное только поведение.