Migração do projeto de binding Xamarin.iOS

Para migrar uma biblioteca de binding Xamarin.iOS para uma biblioteca de binding .NET para iOS:

  1. No Visual Studio, crie um novo projeto de Binding Library para iOS com o mesmo nome do seu projeto de binding Xamarin.iOS:

    Captura de ecrã da criação de um projeto de Biblioteca de Binding para iOS no Visual Studio.

    Abra o ficheiro do projeto para confirmar que tem um projeto ao estilo 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>
    

    Observação

    O arquivo de projeto para uma biblioteca de vinculação iOS é semelhante ao arquivo de projeto para uma biblioteca de classes iOS.

  2. Adicione a sua biblioteca nativa, ou framework nativo, ao projeto como referência nativa. Depois atualize o ficheiro do projeto de binding com o item <NativeReference> do seu projeto de binding Xamarin.iOS.

    <ItemGroup>
        <NativeReference Include="libXMBindingLibraryUniversal.a">
            <Kind>Static</Kind>
            <ForceLoad>True</ForceLoad>
        </NativeReference>
    </ItemGroup>
    
  3. Copie a definição da API do seu projeto de ligação Xamarin.iOS para o seu projeto de ligação .NET para iOS.

  4. Copie qualquer código adicional necessário do seu projeto de binding Xamarin.iOS para o seu projeto de binding .NET for iOS.

  5. No seu projeto de ligação .NET para iOS, substitua quaisquer APIs não suportadas pelos equivalentes .NET para iOS. Para mais informações, consulte APIs Não Suportadas.

APIs não suportadas

As seguintes APIs do Xamarin.iOS mudaram.

System.nint e System.nunit

Os tipos System.nint e System.nuint não estão disponíveis em .NET para iOS. Em vez disso, são substituídos pelos tipos nint e nuint, que correspondem respetivamente a System.IntPtr e System.UIntPtr. O código que usa os System.nint tipos e System.nuint não compila e deve ser substituído pelos nint tipos e nuint . Além disso, código que cause sobrecarga com System.IntPtr e nint, e System.UIntPtr e nuint não compila. Neste cenário, renomeia ou remove uma das sobrecargas.

System.nfloat

O System.nfloat tipo não está disponível em .NET para iOS. Em vez disso, é substituído pelo tipo System.Runtime.InteropServices.NFloat. Modificar qualquer código que se refira ao System.nfloat para usar nfloat ou ao nome do tipo totalmente qualificado.

NSObject.Mudança de tipo de identificador

No .NET para iOS, as propriedades NSObject.Handle e INativeObject.Handle mudaram de tipo de System.IntPtr para uma struct ObjCRuntime.NativeHandle. Isto significa que muitos parâmetros e valores de retorno terão de mudar de tipo. Por exemplo:

  • Todos os objetos que herdam de Foundation.NSObject que têm ClassHandle ou Handle propriedades do tipo IntPtr devem mudar o seu tipo de propriedade para ObjCRuntime.NativeHandle.
  • Todos os objetos que herdam de Foundation.NSObject ou ObjCRuntime.DisposableObject que têm construtores que anteriormente tomaram a System.IntPtr, ou a System.IntPtr e a bool, devem alterar as IntPtr referências para ObjcRuntime.NativeHandle.

Existem conversões implícitas entre System.IntPtr e ObjCRuntime.NativeHandler, por isso, após esta alteração de tipo, a maior parte do código deve compilar sem alterações adicionais.

Model.AutoGeneratedName

A Model.AutoGeneratedName propriedade não está disponível em .NET para iOS. No Xamarin.iOS, esta propriedade especificava se o nome do tipo de Objective-C para o modelo deveria ser gerado automaticamente. No .NET para iOS, gerar automaticamente o nome do tipo de Objective-C a partir do modelo é o comportamento padrão e único disponível.