Aktualizowanie istniejących aplikacji platformy Xamarin.Forms
Wykonaj następujące kroki, aby zaktualizować istniejącą aplikację platformy Xamarin.Forms do korzystania z ujednoliconego interfejsu API i zaktualizować go do wersji 1.3.1
Ważne
Ponieważ platforma Xamarin.Forms 1.3.1 jest pierwszą wersją, która obsługuje ujednolicony interfejs API, całe rozwiązanie powinno zostać zaktualizowane w celu korzystania z najnowszej wersji w tym samym czasie co migracja aplikacji systemu iOS do ujednoliconej. Oznacza to, że oprócz aktualizowania projektu systemu iOS pod kątem obsługi ujednoliconej należy również edytować kod we wszystkich projektach w rozwiązaniu.
Aktualizacja jest wykonywana w dwóch krokach:
Przeprowadź migrację aplikacji systemu iOS do ujednoliconego interfejsu API przy użyciu narzędzia Visual Studio dla komputerów Mac do migracji.
Użyj narzędzia do migracji, aby automatycznie zaktualizować projekt.
Zaktualizuj natywne interfejsy API systemu iOS zgodnie z instrukcjami aktualizowania aplikacji systemu iOS (w szczególności w niestandardowym kodzie usługi renderowania lub zależności).
Zaktualizuj całe rozwiązanie do zestawu narzędzi Xamarin.Forms w wersji 1.3.
Zainstaluj pakiet NuGet platformy Xamarin.Forms 1.3.1.
Zaktualizuj klasę
App
w kodzie udostępnionym.Zaktualizuj element
AppDelegate
w projekcie systemu iOS.Zaktualizuj element
MainActivity
w projekcie systemu Android.Zaktualizuj element
MainPage
w projekcie systemu Windows Phone.
1. Aplikacja systemu iOS (ujednolicona migracja)
Część migracji wymaga uaktualnienia zestawu narzędzi Xamarin.Forms do wersji 1.3, która obsługuje ujednolicony interfejs API. Aby można było utworzyć poprawne odwołania do zestawów, najpierw musimy zaktualizować projekt systemu iOS w celu korzystania z ujednoliconego interfejsu API.
Narzędzie do migracji
Kliknij projekt systemu iOS, aby został wybrany, a następnie wybierz pozycję Project Migrate to Xamarin.iOS Unified API... (Migrowanie projektu > do ujednoliconego interfejsu API platformy Xamarin.iOS) i zaakceptuj wyświetlony komunikat ostrzegawczy.
Spowoduje to automatyczne:
- Zmień typ projektu, aby obsługiwał ujednolicony 64-bitowy interfejs API.
- Zmień odwołanie do platformy Xamarin.iOS (zastępując stare odwołanie monotouch ).
- Zmień odwołania do przestrzeni nazw w kodzie, aby usunąć
MonoTouch
prefiks. - Zaktualizuj plik csproj, aby używał poprawnych celów kompilacji dla ujednoliconego interfejsu API.
Wyczyść i skompiluj projekt, aby upewnić się, że nie ma żadnych innych błędów do naprawienia. Nie należy podejmować żadnych dalszych działań. Te kroki zostały szczegółowo wyjaśnione w dokumentacji ujednoliconego interfejsu API.
Aktualizowanie natywnych interfejsów API systemu iOS (jeśli jest to wymagane)
Jeśli dodano dodatkowy kod natywny dla systemu iOS (taki jak niestandardowe programy renderowania lub usługi zależności), może być konieczne wykonanie dodatkowych ręcznych poprawek kodu. Ponownie skompiluj aplikację i zapoznaj się z instrukcjami Dotyczącymi aktualizowania istniejących aplikacji systemu iOS, aby uzyskać dodatkowe informacje na temat zmian, które mogą być wymagane. Te porady pomogą również zidentyfikować wymagane zmiany.
2. Aktualizacja zestawu narzędzi Xamarin.Forms 1.3.1
Po zaktualizowaniu aplikacji systemu iOS do ujednoliconego interfejsu API pozostała część rozwiązania musi zostać zaktualizowana do zestawu narzędzi Xamarin.Forms w wersji 1.3.1. Obejmuje to:
- Aktualizowanie pakietu NuGet platformy Xamarin.Forms w każdym projekcie.
- Zmiana kodu na używanie nowych klas Xamarin.Forms
Application
,FormsApplicationDelegate
(iOS),FormsApplicationActivity
(Android) iFormsApplicationPage
(Windows Phone).
Poniższe kroki zostały wyjaśnione:
2.1 Aktualizowanie pakietu NuGet we wszystkich projektach
Zaktualizuj program Xamarin.Forms do wersji wstępnej 1.3.1 przy użyciu Menedżer pakietów NuGet dla wszystkich projektów w rozwiązaniu: PCL (jeśli istnieje), iOS, Android i Windows Phone. Zaleca się usunięcie i ponowne dodanie pakietu NuGet platformy Xamarin.Forms w celu zaktualizowania do wersji 1.3.
Uwaga
Zestaw narzędzi Xamarin.Forms w wersji 1.3.1 jest obecnie w wersji wstępnej. Oznacza to, że musisz wybrać opcję wersji wstępnej w programie NuGet (za pośrednictwem pola wyboru w Visual Studio dla komputerów Mac lub listy rozwijanej w programie Visual Studio), aby wyświetlić najnowszą wersję wstępną.
Ważne
Jeśli używasz programu Visual Studio, upewnij się, że zainstalowano najnowszą wersję Menedżer pakietów NuGet. Starsze wersje pakietu NuGet w programie Visual Studio nie zainstalują poprawnie ujednoliconej wersji zestawu narzędzi Xamarin.Forms 1.3.1. Przejdź do pozycji Rozszerzenia narzędzi > i aktualizacje... i kliknij listę Zainstalowane, aby sprawdzić, czy Menedżer pakietów NuGet dla programu Visual Studio jest co najmniej w wersji 2.8.5. Jeśli jest starsza, kliknij listę Aktualizacje , aby pobrać najnowszą wersję.
Po zaktualizowaniu pakietu NuGet do platformy Xamarin.Forms 1.3.1 wprowadź następujące zmiany w każdym projekcie w celu uaktualnienia do nowej Xamarin.Forms.Application
klasy.
2.2 Przenośna biblioteka klas (lub udostępniony projekt)
Zmień plik App.cs, tak aby:
- Klasa
App
dziedziczy teraz zApplication
klasy . - Właściwość jest ustawiona
MainPage
na pierwszą stronę zawartości, którą chcesz wyświetlić.
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
}
Całkowicie usunęliśmy metodę GetMainPage
i zamiast tego ustawiliśmy MainPage
właściwość w podklasie Application
.
Ta nowa Application
klasa bazowa obsługuje OnStart
również przesłonięcia , OnSleep
i OnResume
ułatwiają zarządzanie cyklem życia aplikacji.
App
Klasa jest następnie przekazywana do nowej LoadApplication
metody w każdym projekcie aplikacji, zgodnie z poniższym opisem:
2.3 Aplikacja systemu iOS
Zmień plik AppDelegate.cs, tak aby:
- Klasa dziedziczy z
FormsApplicationDelegate
(zamiastUIApplicationDelegate
poprzednio). LoadApplication
jest wywoływana z nowym wystąpieniemApp
klasy .
[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 Aplikacja dla systemu Android
Zmień plik MainActivity.cs, tak aby:
- Klasa dziedziczy z
FormsApplicationActivity
(zamiastFormsActivity
poprzednio). LoadApplication
jest wywoływana z nowym wystąpieniemApp
[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 Aplikacja systemu Windows Phone
Musimy zaktualizować stronę MainPage — zarówno kod XAML, jak i kodbehind.
Zmień plik MainPage.xaml tak, aby:
- Głównym elementem XAML powinien być
winPhone:FormsApplicationPage
. - Atrybut
xmlns:phone
należy zmienić naxmlns:winPhone="clr-namespace:Xamarin.Forms.Platform.WinPhone;assembly=Xamarin.Forms.Platform.WP8"
Poniżej przedstawiono zaktualizowany przykład — należy edytować tylko te elementy (pozostałe atrybuty powinny pozostać takie same):
<winPhone:FormsApplicationPage
...
xmlns:winPhone="clr-namespace:Xamarin.Forms.Platform.WinPhone;assembly=Xamarin.Forms.Platform.WP8"
...>
</winPhone:FormsApplicationPage>
Zmień plik MainPage.xaml.cs, tak aby:
- Klasa dziedziczy z
FormsApplicationPage
(zamiastPhoneApplicationPage
poprzednio). LoadApplication
jest wywoływana z nowym wystąpieniem klasy Xamarin.FormsApp
. Może być konieczne pełne kwalifikowanie tego odwołania, ponieważ system Windows Phone ma już zdefiniowaną własnąApp
klasę.
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
}
}
Rozwiązywanie problemów
Czasami po zaktualizowaniu pakietu NuGet platformy Xamarin.Forms zostanie wyświetlony błąd podobny do tego. Występuje, gdy aktualizator NuGet nie usuwa całkowicie odwołań do starszych wersji z plików csproj .
YOUR_PROJECT.csproj: Błąd: ten projekt odwołuje się do brakujących pakietów NuGet na tym komputerze. Włącz przywracanie pakietów NuGet, aby je pobrać. Aby uzyskać więcej informacji, zobacz https://go.microsoft.com/fwlink/?LinkID=322105. Brakujący plik to .. /.. /packages/Xamarin.Forms.1.2.3.6257/build/portable-win+net45+wp80+MonoAndroid10+MonoTouch10/Xamarin.Forms.targets. (YOUR_PROJECT)
Aby naprawić te błędy, otwórz plik csproj w edytorze tekstów i poszukaj <Target
elementów odwołujących się do starszych wersji zestawu narzędzi Xamarin.Forms, takich jak element pokazany poniżej. Należy ręcznie usunąć ten cały element z pliku csproj i zapisać zmiany.
<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>
Projekt powinien zostać pomyślnie skompilowany po usunięciu tych starych odwołań.
Kwestie wymagające rozważenia
Podczas konwertowania istniejącego projektu platformy Xamarin.Forms z klasycznego interfejsu API na nowy ujednolicony interfejs API należy wziąć pod uwagę następujące zagadnienia, jeśli ta aplikacja korzysta z co najmniej jednego składnika lub pakietu NuGet.
Składniki
Każdy składnik uwzględniony w aplikacji będzie również musiał zostać zaktualizowany do ujednoliconego interfejsu API lub wystąpi konflikt podczas próby skompilowania. W przypadku dowolnego dołączonego składnika zastąp bieżącą wersję nową wersją ze sklepu składników Xamarin, który obsługuje ujednolicony interfejs API, i wykonaj czystą kompilację. Każdy składnik, który nie został jeszcze przekonwertowany przez autora, wyświetli ostrzeżenie tylko 32-bitowe w magazynie składników.
Pomoc techniczna narzędzia NuGet
Chociaż wprowadziliśmy zmiany w usłudze NuGet do pracy z obsługą ujednoliconego interfejsu API, nie wprowadzono nowej wersji narzędzia NuGet, dlatego oceniamy, jak umożliwić nuGet rozpoznawanie nowych interfejsów API.
Do tego czasu, podobnie jak w przypadku składników, musisz przełączyć dowolny pakiet NuGet uwzględniony w projekcie do wersji obsługującej ujednolicone interfejsy API i wykonać czystą kompilację później.
Ważne
Jeśli wystąpi błąd w formularzu "Błąd 3 Nie można dołączyć zarówno "monotouch.dll" jak i "Xamarin.iOS.dll" w tym samym projekcie platformy Xamarin.iOS — "Xamarin.iOS.dll" jest jawnie przywołyny. Podczas gdy element "monotouch.dll" jest przywołyany przez element "xxx, Version=0.0.000, Culture=neutral, PublicKeyToken=null" po przekonwertowaniu aplikacji na ujednolicone interfejsy API, zwykle wynika to z posiadania składnika lub pakietu NuGet w projekcie, który nie został zaktualizowany do ujednoliconego interfejsu API. Musisz usunąć istniejący składnik/NuGet, zaktualizować go do wersji obsługującej ujednolicone interfejsy API i wykonać czystą kompilację.
Włączanie 64-bitowych kompilacji aplikacji platformy Xamarin.iOS
W przypadku aplikacji mobilnej platformy Xamarin.iOS, która została przekonwertowana na ujednolicony interfejs API, deweloper nadal musi włączyć tworzenie aplikacji dla 64-bitowych maszyn z opcji aplikacji. Szczegółowe instrukcje dotyczące włączania kompilacji 64-bitowych aplikacji platformy Xamarin.iOS znajdują się w dokumencie 32/64 bitowych zagadnień dotyczących platformy, aby uzyskać szczegółowe instrukcje dotyczące włączania kompilacji 64-bitowych.
Podsumowanie
Aplikacja platformy Xamarin.Forms powinna zostać zaktualizowana do wersji 1.3.1 i aplikacji systemu iOS zmigrowanej do ujednoliconego interfejsu API (który obsługuje architektury 64-bitowe na platformie iOS).
Jak wspomniano powyżej, jeśli aplikacja platformy Xamarin.Forms zawiera kod natywny, taki jak niestandardowe programy renderowania lub usługi zależności, może również wymagać aktualizacji, aby korzystać z nowych typów wprowadzonych w ujednoliconym interfejsie API.