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:
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).
Çözümün tamamını Xamarin.Forms sürüm 1.3'e güncelleştirin.
Xamarin.Forms 1.3.1 NuGet paketini yükleyin.
App
Paylaşılan kodda sınıfını güncelleştirin.AppDelegate
iOS projesinde öğesini güncelleştirin.Android projesinde öğesini
MainActivity
güncelleştirin.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.
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) veFormsApplicationPage
(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 öğesindenApplication
devralı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 OnStart
yaşam döngüsünü yönetmenize yardımcı olmak için , OnSleep
ve 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ğilUIApplicationDelegate
). LoadApplication
yeni bir örneğiyle çağrılırApp
.
[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ğilFormsActivity
). LoadApplication
öğesinin yeni bir örneğiyle çağrılırApp
[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ştirilmelidirxmlns: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ğilPhoneApplicationPage
). LoadApplication
, Xamarin.FormsApp
sınıfının yeni bir örneğiyle çağrılır. Windows Phone'un zaten tanımlanmış kendiApp
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.