Xamarin.iOS bağlama projesi geçişi

Xamarin.iOS bağlama kitaplığını iOS için .NET bağlama kitaplığına geçirmek için:

  1. Visual Studio'da Xamarin.iOS bağlama projenizle aynı ada sahip yeni bir iOS Bağlama Kitaplığı projesi oluşturun:

    Visual Studio'da iOS Bağlama Kitaplığı projesi oluşturma işleminin ekran görüntüsü.

    .NET SDK stilinde bir projeniz olduğunu onaylamak için proje dosyasını açın:

    <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>
    

    Not

    iOS bağlama kitaplığının proje dosyası, iOS sınıf kitaplığının proje dosyasına benzer.

  2. Yerel kitaplığınızı veya yerel çerçevenizi projeye yerel başvuru olarak ekleyin. Ardından bağlama proje dosyasını Xamarin.iOS bağlama projenizdeki öğeyle <NativeReference> güncelleştirin:

    <ItemGroup>
        <NativeReference Include="libXMBindingLibraryUniversal.a">
            <Kind>Static</Kind>
            <ForceLoad>True</ForceLoad>
        </NativeReference>
    </ItemGroup>
    
  3. Xamarin.iOS bağlama projenizdeki API tanımını iOS için .NET bağlama projenize kopyalayın.

  4. Xamarin.iOS bağlama projenizdeki ek gerekli kodları iOS için .NET bağlama projenize kopyalayın.

  5. iOS için .NET bağlama projenizde desteklenmeyen API'leri iOS için .NET eşdeğerleriyle değiştirin. Daha fazla bilgi için bkz . Desteklenmeyen API'ler.

Desteklenmeyen API'ler

Aşağıdaki Xamarin.iOS API'leri değişti.

System.nint ve System.nunit

System.nint ve System.nuint türleri iOS için .NET'te kullanılamaz. Bunun yerine, sırasıyla ve ile eşlenen System.IntPtr ve nuintSystem.UIntPtr türleriyle nint değiştirilirler. ve System.nuint türlerini kullanan System.nint kod derlenmez ve ve nuint türleriyle nint değiştirilmelidir. Buna ek olarak, ve nintüzerinde System.IntPtr aşırı yükleyen ve System.UIntPtrnuint derlenmez. Bu senaryoda, aşırı yüklemelerden birini yeniden adlandırın veya kaldırın.

System.nfloat

Bu System.nfloat tür iOS için .NET'te kullanılamaz. Bunun yerine türüyle System.Runtime.InteropServices.NFloat değiştirilir. Kullanmak veya tam tür adını kullanmak nfloat için System.nfloat başvuruda bulunan tüm kodları değiştirin.

NSObject.Handle tür değişikliği

iOS NSObject.Handle için .NET'te ve INativeObject.Handle özellikleri türü System.IntPtr bir ObjCRuntime.NativeHandle yapı olarak değiştirildi. Bu, birçok parametrenin ve dönüş değerinin türünü değiştirmesi gerektiği anlamına gelir. Örneğin:

  • türünde veya Handle özelliklerine IntPtr sahip ClassHandle olan nesnelerden Foundation.NSObject devralan tüm nesneler, özellik türlerini olarak ObjCRuntime.NativeHandledeğiştirmelidir.
  • veya öğesinden Foundation.NSObject devralınan ve ObjCRuntime.DisposableObject daha önce bir System.IntPtrveya System.IntPtr bir ve boolalmış oluşturucuları olan tüm nesneler başvuruları olarak ObjcRuntime.NativeHandledeğiştirmelidirIntPtr.

ile ObjCRuntime.NativeHandlerarasında System.IntPtr örtük dönüştürmeler vardır, bu nedenle bu tür değişikliği yaptıktan sonra çoğu kod daha fazla değişiklik yapmadan derlenmelidir.

Model.AutoGeneratedName

Model.AutoGeneratedName özelliği iOS için .NET'te kullanılamaz. Xamarin.iOS'ta bu özellik model için Objective-C tür adının otomatik olarak oluşturulup oluşturulmayacağını belirtti. iOS için .NET'te, modelden Objective-C tür adını otomatik hale getirme varsayılan ve yalnızca kullanılabilir davranıştır.