Compartilhar via


Migração do projeto de vinculação do Xamarin.iOS

Para migrar uma Biblioteca de Associação do Xamarin.iOS para uma Biblioteca de Associação do .NET para iOS:

  1. No Visual Studio, crie um projeto de Biblioteca de Associação do iOS com o mesmo nome do seu projeto de associação do Xamarin.iOS:

    Captura de tela da criação de um projeto de Biblioteca de Associação do iOS no Visual Studio.

    Abra o arquivo de projeto para confirmar que você tem um projeto no estilo do SDK do .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 de uma Biblioteca de Associação do iOS é semelhante ao arquivo de projeto de uma biblioteca de classes do iOS.

  2. Adicione sua biblioteca nativa, ou estrutura nativa, ao projeto como uma referência nativa. Em seguida, atualize o arquivo de projeto de associação com o item <NativeReference> de seu projeto de associação do Xamarin.iOS:

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

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

  5. Em seu projeto de associação do .NET para iOS, substitua todas as APIs sem suporte por seus equivalentes do .NET para iOS. Para obter mais informações, consulte APIs sem suporte.

APIs sem suporte

As seguintes APIs do Xamarin.iOS foram alteradas.

System.nint e System.nunit

Os tipos System.nint e System.nuint não estão disponíveis no .NET para iOS. Em vez disso, eles foram substituídos pelos tipos nint e nuint, que mapeiam para System.IntPtr e System.UIntPtr, respectivamente. O código que usa os tipos System.nint e System.nuint não será compilado e deverá ser substituído pelos tipos nint e nuint. Além disso, o código que sobrecarrega System.IntPtr e nint, e System.UIntPtr e nuint não será compilado. Nesse cenário, renomeie ou remova uma das sobrecargas.

System.nfloat

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

Alteração do tipo NSObject.Handle

No .NET para iOS, as propriedades NSObject.Handle e INativeObject.Handle alteraram o tipo, passando de System.IntPtr para um struct ObjCRuntime.NativeHandle. Isso significa que muitos parâmetros e valores de retorno precisarão alterar o tipo. Por exemplo:

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

Há conversões implícitas entre System.IntPtr e ObjCRuntime.NativeHandler, portanto, depois de fazer essa alteração de tipo, a maior parte do código deverá ser compilada sem outras alterações.

Model.AutoGeneratedName

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