Aracılığıyla paylaş


Mevcut Xamarin.Forms Uygulamalarını Güncelleştirme

Var olan bir Xamarin.Forms uygulamasını Birleşik API'yi kullanacak şekilde güncelleştirmek ve 1.3.1 sürümüne güncelleştirmek için bu adımları izleyin

Önemli

Xamarin.Forms 1.3.1 Birleşik API'yi destekleyen ilk sürüm olduğundan, çözümün tamamı iOS uygulamasını Unified'e geçirmeyle aynı anda en son sürümü kullanacak şekilde güncelleştirilmelidir. Bu, Birleşik destek için iOS projesini güncelleştirmeye ek olarak çözümdeki tüm projelerde de kod düzenlemeniz gerektiği anlamına gelir.

Güncelleştirme iki adımda gerçekleştirilir:

  1. Mac için Visual Studio derleme geçiş aracını kullanarak iOS uygulamasını Birleşik API'ye geçirin.

    • Projeyi otomatik olarak güncelleştirmek için geçiş aracını kullanın.

    • iOS uygulamalarını güncelleştirme yönergelerinde açıklandığı gibi iOS yerel API'lerini güncelleştirin (özel işleyici veya bağımlılık hizmeti kodunda).

  2. Çözümün tamamını Xamarin.Forms sürüm 1.3'e güncelleştirin.

    1. Xamarin.Forms 1.3.1 NuGet paketini yükleyin.

    2. App Paylaşılan kodda sınıfını güncelleştirin.

    3. AppDelegate iOS projesinde öğesini güncelleştirin.

    4. Android projesinde öğesini MainActivity güncelleştirin.

    5. Windows Phone projesinde öğesini MainPage güncelleştirin.

1. iOS Uygulaması (Birleşik Geçiş)

Geçişin bir parçası olarak, Xamarin.Forms'un Birleşik API'yi destekleyen 1.3 sürümüne yükseltilmesi gerekir. Doğru derleme başvurularının oluşturulması için öncelikle iOS projesini Birleşik API'yi kullanacak şekilde güncelleştirmemiz gerekir.

Geçiş Aracı

Seçili olması için iOS projesine tıklayın, ardından Proje > Xamarin.iOS Birleştirilmiş API'ye Geçir... öğesini seçin ve görüntülenen uyarı iletisini kabul edin.

Proje > Xamarin.iOS Birleşik API'sine Geçir... seçeneğini belirleyin. ve görüntülenen uyarı iletisini kabul edin

Bu otomatik olarak:

  • Birleştirilmiş 64 bit API'yi desteklemek için proje türünü değiştirin.
  • Çerçeve başvuruyu Xamarin.iOS olarak değiştirin (eski monotouch başvuruyu değiştirerek).
  • Ön eki kaldırmak için koddaki ad alanı başvurularını MonoTouch değiştirin.
  • Csproj dosyasını, Birleşik API için doğru derleme hedeflerini kullanacak şekilde güncelleştirin.

Düzeltecek başka hata olmadığından emin olmak için projeyi temizleyin ve derleyin . Başka eyleme gerek yoktur. Bu adımlar Birleşik API belgelerinde daha ayrıntılı olarak açıklanmıştır.

Yerel iOS API'lerini güncelleştirme (gerekirse)

Ek iOS yerel kodu (özel işleyiciler veya bağımlılık hizmetleri gibi) eklediyseniz, el ile ek kod düzeltmeleri gerçekleştirmeniz gerekebilir. Uygulamanızı yeniden derleyin ve gerekli olabilecek değişiklikler hakkında ek bilgi için Mevcut iOS Uygulamalarını Güncelleştirme yönergelerine bakın. Bu ipuçları , gerekli değişiklikleri tanımlamaya da yardımcı olur.

2. Xamarin.Forms 1.3.1 Güncelleştirmesi

iOS uygulaması Birleşik API'ye güncelleştirildikten sonra çözümün geri kalanının Xamarin.Forms sürüm 1.3.1'e güncelleştirilmesi gerekir. Buna aşağıdakiler dahildir:

  • Her projede Xamarin.Forms NuGet paketini güncelleştirme.
  • Kodu yeni Xamarin.Forms Application, FormsApplicationDelegate (iOS), FormsApplicationActivity (Android) ve FormsApplicationPage (Windows Phone) sınıflarını kullanacak şekilde değiştirme.

Bu adımlar aşağıda açıklanmıştır:

2.1 Tüm Projelerde NuGet'i Güncelleştirme

Çözümdeki tüm projeler için NuGet Paket Yöneticisi kullanarak Xamarin.Forms'u 1.3.1 sürümüne güncelleştirin: PCL (varsa), iOS, Android ve Windows Phone. Xamarin.Forms NuGet paketini silip yeniden 1.3 sürümüne güncelleştirmeniz önerilir.

Not

Xamarin.Forms sürüm 1.3.1 şu anda ön sürümdedir. Bu, en son yayın öncesi sürümü görmek için NuGet'te yayın öncesi seçeneğini (Mac için Visual Studio'daki bir onay kutusu veya Visual Studio'daki bir açılan liste aracılığıyla) seçmeniz gerektiği anlamına gelir.

Önemli

Visual Studio kullanıyorsanız NuGet Paket Yöneticisi'nin en son sürümünün yüklendiğinden emin olun. Visual Studio'daki NuGet'in eski sürümleri Xamarin.Forms 1.3.1'in Birleşik sürümünü doğru yüklemez. Araçlar > Uzantıları ve Güncelleştirmeleri... bölümüne gidin ve Visual Studio için NuGet Paket Yöneticisi en az 2.8.5 sürümü olup olmadığını denetlemek için Yüklü listesine tıklayın. Daha eskiyse, en son sürümü indirmek için Güncelleştirmeler listesine tıklayın.

NuGet paketini Xamarin.Forms 1.3.1 olarak güncelleştirdikten sonra, yeni Xamarin.Forms.Application sınıfa yükseltmek için her projede aşağıdaki değişiklikleri yapın.

2.2 Taşınabilir Sınıf Kitaplığı (veya Paylaşılan Proje)

App.cs dosyasını değiştirerek:

  • App sınıfı artık öğesinden Applicationdevralınır.
  • MainPage özelliği, görüntülemek istediğiniz ilk içerik sayfasına ayarlanır.
public class App : Application // superclass new in 1.3
{
    public App ()
    {
        // The root page of your application
        MainPage = new ContentPage {...}; // property new in 1.3
    }

Yöntemini tamamen kaldırdık GetMainPage ve bunun yerine alt sınıfta Application özelliğini ayarladık MainPage .

Bu yeni Application temel sınıf, uygulamanızın OnStartyaşam döngüsünü yönetmenize yardımcı olmak için , OnSleepve OnResume geçersiz kılmalarını da destekler.

Ardından App sınıfı, aşağıda açıklandığı gibi her uygulama projesinde yeni LoadApplication bir yönteme geçirilir:

2.3 iOS Uygulaması

AppDelegate.cs dosyasını değiştirerek:

  • sınıfı öğesinden FormsApplicationDelegate devralır (daha önce değil UIApplicationDelegate ).
  • LoadApplication yeni bir örneğiyle çağrılır App.
[Register ("AppDelegate")]
public partial class AppDelegate :
    global::Xamarin.Forms.Platform.iOS.FormsApplicationDelegate // superclass new in 1.3
{
    public override bool FinishedLaunching (UIApplication app, NSDictionary options)
    {
        global::Xamarin.Forms.Forms.Init ();

        LoadApplication (new App ());  // method is new in 1.3

        return base.FinishedLaunching (app, options);
    }
}

2.3 Android Uygulaması

MainActivity.cs dosyasını değiştirerek:

  • sınıfı öğesinden FormsApplicationActivity devralır (daha önce değil FormsActivity ).
  • LoadApplication öğesinin yeni bir örneğiyle çağrılır App
[Activity (Label = "YOURAPPNAM", Icon = "@drawable/icon", MainLauncher = true,
ConfigurationChanges = ConfigChanges.ScreenSize | ConfigChanges.Orientation)]
public class MainActivity :
    global::Xamarin.Forms.Platform.Android.FormsApplicationActivity // superclass new in 1.3
{
    protected override void OnCreate (Bundle bundle)
    {
        base.OnCreate (bundle);

        global::Xamarin.Forms.Forms.Init (this, bundle);

        LoadApplication (new App ()); // method is new in 1.3
    }
}

2.4 Windows Phone Uygulaması

Hem XAML hem de codebehind olan MainPage'i güncelleştirmemiz gerekiyor.

MainPage.xaml dosyasını şu şekilde değiştirin:

  • Kök XAML öğesi olmalıdır winPhone:FormsApplicationPage.
  • xmlns:phone özniteliği olarak değiştirilmelidir xmlns:winPhone="clr-namespace:Xamarin.Forms.Platform.WinPhone;assembly=Xamarin.Forms.Platform.WP8"

Aşağıda güncelleştirilmiş bir örnek gösterilmektedir; yalnızca bu öğeleri düzenlemeniz gerekir (özniteliklerin geri kalanı aynı kalmalıdır):

<winPhone:FormsApplicationPage
   ...
   xmlns:winPhone="clr-namespace:Xamarin.Forms.Platform.WinPhone;assembly=Xamarin.Forms.Platform.WP8"
    ...>
</winPhone:FormsApplicationPage>

MainPage.xaml.cs dosyasını değiştirerek:

  • sınıfı öğesinden FormsApplicationPage devralır (daha önce değil PhoneApplicationPage ).
  • LoadApplication , Xamarin.Forms App sınıfının yeni bir örneğiyle çağrılır. Windows Phone'un zaten tanımlanmış kendi App sınıfı olduğundan bu başvuruya tam olarak uymanız gerekebilir.
public partial class MainPage : global::Xamarin.Forms.Platform.WinPhone.FormsApplicationPage // superclass new in 1.3
{
    public MainPage()
    {
        InitializeComponent();
        SupportedOrientations = SupportedPageOrientation.PortraitOrLandscape;

        global::Xamarin.Forms.Forms.Init();
        LoadApplication(new YOUR_APP_NAMESPACE.App()); // new in 1.3
    }
 }

Sorun giderme

Bazen Xamarin.Forms NuGet paketini güncelleştirdikten sonra buna benzer bir hata görürsünüz. NuGet güncelleştiricisi csproj dosyalarınızdan eski sürümlere yapılan başvuruları tamamen kaldırmadığında oluşur.

YOUR_PROJECT.csproj: Hata: Bu proje, bu bilgisayarda eksik olan NuGet paketlerine başvurur. NuGet Paketi Geri Yükleme'yi etkinleştirerek bunları indirin. Daha fazla bilgi için bkz. https://go.microsoft.com/fwlink/?LinkID=322105. Eksik dosya.. /.. /packages/Xamarin.Forms.1.2.3.6257/build/portable-win+net45+wp80+MonoAndroid10+MonoTouch10/Xamarin.Forms.targets. (YOUR_PROJECT)

Bu hataları düzeltmek için <Target csproj dosyasını bir metin düzenleyicisinde açın ve aşağıda gösterilen öğe gibi Xamarin.Forms'un eski sürümlerine başvuran öğeleri arayın. Bu öğenin tamamını csproj dosyasından el ile silmeniz ve değişiklikleri kaydetmeniz gerekir.

  <Target Name="EnsureNuGetPackageBuildImports" BeforeTargets="PrepareForBuild">
    <PropertyGroup>
      <ErrorText>This project references NuGet package(s) that are missing on this computer. Enable NuGet Package Restore to download them.  For more information, see https://go.microsoft.com/fwlink/?LinkID=322105. The missing file is {0}.</ErrorText>
    </PropertyGroup>
    <Error Condition="!Exists('..\..\packages\Xamarin.Forms.1.2.3.6257\build\portable-win+net45+wp80+MonoAndroid10+MonoTouch10\Xamarin.Forms.targets')" Text="$([System.String]::Format('$(ErrorText)', '..\..\packages\Xamarin.Forms.1.2.3.6257\build\portable-win+net45+wp80+MonoAndroid10+MonoTouch10\Xamarin.Forms.targets'))" />
  </Target>

Bu eski başvurular kaldırıldıktan sonra proje başarıyla derlenmelidir.

Dikkat edilmesi gereken noktalar

Mevcut bir Xamarin.Forms projesi Klasik API'den yeni Birleşik API'ye dönüştürülürken bu uygulama bir veya daha fazla Bileşen veya NuGet Paketi kullanıyorsa aşağıdaki noktalar dikkate alınmalıdır.

Bileşenler

Uygulamanıza dahil ettiğiniz tüm bileşenlerin de Birleşik API'ye güncelleştirilmiş olması gerekir, aksi takdirde derlemeye çalıştığınızda bir çakışmayla karşılaşırsınız. Dahil edilen bileşenler için geçerli sürümü, Birleşik API'yi destekleyen Xamarin Bileşen Deposu'ndan yeni bir sürümle değiştirin ve temiz bir derleme yapın. Henüz yazar tarafından dönüştürülmemiş tüm bileşenler, bileşen deposunda yalnızca 32 bit uyarı görüntüler.

NuGet Desteği

Birleştirilmiş API desteğiyle çalışmak için NuGet'de değişikliklere katkıda bulunmamıza rağmen, NuGet'in yeni bir sürümü olmadığından NuGet'in yeni API'leri tanımasını sağlamayı değerlendiriyoruz.

Bu zamana kadar, bileşenlerde olduğu gibi, projenize eklediğiniz tüm NuGet Paketini Birleşik API'leri destekleyen bir sürüme geçirmeniz ve daha sonra temiz bir derleme yapmanız gerekir.

Önemli

"Hata 3 Aynı Xamarin.iOS projesine hem 'monotouch.dll' hem de 'Xamarin.iOS.dll' eklenemiyor şeklinde bir hatanız varsa , 'Xamarin.iOS.dll' açıkça başvurulur, 'monotouch.dll', uygulamanızı Birleştirilmiş API'lere dönüştürdükten sonra 'xxx, Version=0.0.000, Culture=neutral, PublicKeyToken=null' tarafından başvurulsa da, bunun nedeni genellikle projede Birleştirilmiş API'ye güncelleştirilmemiş bir bileşenin veya NuGet Paketinin bulunmasıdır. Mevcut bileşeni/NuGet'i kaldırmanız, Birleşik API'leri destekleyen bir sürüme güncelleştirmeniz ve temiz bir derleme yapmanız gerekir.

Xamarin.iOS Uygulamalarının 64 Bit Derlemelerini Etkinleştirme

Birleşik API'ye dönüştürülmüş bir Xamarin.iOS mobil uygulaması için geliştiricinin uygulamanın Seçenekler bölümünden 64 bit makineler için uygulamanın oluşturulmasını etkinleştirmesi gerekir. 64 bit derlemeleri etkinleştirme hakkında ayrıntılı yönergeler için lütfen 32/64 bit PlatformDa Dikkat Edilmesi Gerekenler belgesinin Xamarin.iOS Uygulamalarının 64 Bit Derlemelerini Etkinleştirme belgesine bakın.

Özet

Xamarin.Forms uygulaması artık 1.3.1 sürümüne güncelleştirilmelidir ve iOS uygulaması Birleşik API'ye geçirilmelidir (iOS platformunda 64 bit mimarileri destekler).

Yukarıda da belirtildiği gibi, Xamarin.Forms uygulamanız özel işleyiciler veya bağımlılık hizmetleri gibi yerel kod içeriyorsa, Birleşik API'de sunulan yeni Türleri kullanmak için bunların da güncelleştirilmesi gerekebilir.