Aktualisieren vorhandener Xamarin.Forms-Apps
Führen Sie die folgenden Schritte aus, um eine vorhandene Xamarin.Forms-App für die Verwendung der Unified API zu aktualisieren und auf Version 1.3.1 zu aktualisieren.
Wichtig
Da Xamarin.Forms 1.3.1 die erste Version ist, die die Unified-API unterstützt, sollte die gesamte Lösung aktualisiert werden, um die neueste Version gleichzeitig mit der Migration der iOS-App zu Unified zu verwenden. Dies bedeutet, dass Sie zusätzlich zum Aktualisieren des iOS-Projekts für unified-Unterstützung auch Code in allen Projekten in der Lösung bearbeiten müssen.
Das Update wird in zwei Schritten ausgeführt:
Migrieren Sie die iOS-App mit dem Build im Migrationstool Visual Studio für Mac zur einheitlichen API.
Verwenden Sie das Migrationstool, um das Projekt automatisch zu aktualisieren.
Aktualisieren Sie systemeigene iOS-APIs gemäß den Anweisungen zum Aktualisieren von iOS-Apps (insbesondere im benutzerdefinierten Renderer- oder Abhängigkeitsdienstcode).
Aktualisieren Sie die gesamte Lösung auf Xamarin.Forms, Version 1.3.
Installieren Sie das NuGet-Paket "Xamarin.Forms 1.3.1".
Aktualisieren Sie die
App
Klasse im freigegebenen Code.Aktualisieren Sie das
AppDelegate
iOS-Projekt.Aktualisieren Sie das
MainActivity
Im Android-Projekt.Aktualisieren Sie das
MainPage
Windows Phone-Projekt.
1. iOS-App (Einheitliche Migration)
Ein Teil der Migration erfordert ein Upgrade von Xamarin.Forms auf Version 1.3, das die Unified-API unterstützt. Damit die richtigen Assemblyverweise erstellt werden können, müssen wir zuerst das iOS-Projekt aktualisieren, um die Einheitliche API zu verwenden.
Migrationstool
Klicken Sie auf das iOS-Projekt, damit es ausgewählt ist, und wählen Sie dann Project > Migrate to Xamarin.iOS Unified API... aus, und stimmen Sie der angezeigten Warnmeldung zu.
Dies erfolgt automatisch:
- Ändern Sie den Projekttyp, um die Unified 64-Bit-API zu unterstützen.
- Ändern Sie den Frameworkverweis auf Xamarin.iOS (ersetzen Sie den alten Monotouchverweis ).
- Ändern Sie die Namespaceverweise im Code, um das
MonoTouch
Präfix zu entfernen. - Aktualisieren Sie die csproj-Datei , um die richtigen Buildziele für die Unified-API zu verwenden.
Bereinigen und Erstellen des Projekts, um sicherzustellen, dass keine anderen Fehler zu beheben sind. Es sollten keine weiteren Maßnahmen erforderlich sein. Diese Schritte werden in den Unified API-Dokumenten ausführlicher erläutert.
Aktualisieren systemeigener iOS-APIs (falls erforderlich)
Wenn Sie zusätzlichen systemeigenen iOS-Code (z. B. benutzerdefinierte Renderer oder Abhängigkeitsdienste) hinzugefügt haben, müssen Sie möglicherweise zusätzliche manuelle Codefixes ausführen. Kompilieren Sie Ihre App erneut, und lesen Sie die Anweisungen zum Aktualisieren vorhandener iOS-Apps, um weitere Informationen zu Änderungen zu erhalten, die möglicherweise erforderlich sind. Diese Tipps helfen auch bei der Identifizierung von Änderungen, die erforderlich sind.
2. Xamarin.Forms 1.3.1 Update
Nachdem die iOS-App auf die Einheitliche API aktualisiert wurde, muss der Rest der Lösung auf Xamarin.Forms, Version 1.3.1, aktualisiert werden. Dies umfasst:
- Aktualisieren des Xamarin.Forms NuGet-Pakets in jedem Projekt.
- Ändern des Codes für die Verwendung der neuen Xamarin.Forms
Application
-KlassenFormsApplicationDelegate
(iOS),FormsApplicationActivity
(Android) undFormsApplicationPage
(Windows Phone)
Die folgenden Schritte werden erläutert:
2.1 NuGet in allen Projekten aktualisieren
Aktualisieren Sie Xamarin.Forms auf 1.3.1 Vorabversion mithilfe der NuGet-Paket-Manager für alle Projekte in der Lösung: PCL (sofern vorhanden), iOS, Android und Windows Phone. Es wird empfohlen, das Xamarin.Forms NuGet-Paket zu löschen und erneut hinzuzufügen , um auf Version 1.3 zu aktualisieren.
Hinweis
Xamarin.Forms Version 1.3.1 befindet sich derzeit in der Vorabversion. Dies bedeutet, dass Sie die Vorabversionsoption in NuGet (über ein Teilfeld in Visual Studio für Mac oder einer Dropdownliste in Visual Studio) auswählen müssen, um die neueste Vorabversion anzuzeigen.
Wichtig
Wenn Sie Visual Studio verwenden, stellen Sie sicher, dass die neueste Version des NuGet-Paket-Manager installiert ist. Ältere Versionen von NuGet in Visual Studio installieren nicht ordnungsgemäß die Unified-Version von Xamarin.Forms 1.3.1. Wechseln Sie zu Extras > Erweiterungen und Updates... und klicken Sie auf die Liste "Installiert", um zu überprüfen, ob die NuGet-Paket-Manager für Visual Studio mindestens Version 2.8.5 ist. Wenn es älter ist, klicken Sie auf die Liste "Updates ", um die neueste Version herunterzuladen.
Nachdem Sie das NuGet-Paket auf Xamarin.Forms 1.3.1 aktualisiert haben, nehmen Sie die folgenden Änderungen in jedem Projekt vor, um ein Upgrade auf die neue Xamarin.Forms.Application
Klasse durchzuführen.
2.2 Portable Klassenbibliothek (oder freigegebenes Projekt)
Ändern Sie die App.cs Datei so, dass:
- Die
App
Klasse erbt jetzt vonApplication
. - Die
MainPage
Eigenschaft wird auf die erste Inhaltsseite festgelegt, die Sie anzeigen möchten.
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
}
Wir haben die GetMainPage
Methode vollständig entfernt und stattdessen die MainPage
Eigenschaft für die Application
Unterklasse festgelegt.
Diese neue Application
Basisklasse unterstützt außerdem die Überschreibungen OnSleep
und OnResume
Außerkraftsetzungen, mit denen Sie den OnStart
Lebenszyklus Ihrer Anwendung verwalten können.
Die App
Klasse wird dann an eine neue LoadApplication
Methode in jedem App-Projekt übergeben, wie unten beschrieben:
2.3 iOS-App
Ändern Sie die AppDelegate.cs Datei so, dass:
- Die Klasse erbt von
FormsApplicationDelegate
(stattUIApplicationDelegate
zuvor). LoadApplication
wird mit einer neuen Instanz vonApp
aufgerufen.
[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-App
Ändern Sie die MainActivity.cs Datei so, dass:
- Die Klasse erbt von
FormsApplicationActivity
(stattFormsActivity
zuvor). LoadApplication
wird mit einer neuen Instanz vonApp
[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-App
Wir müssen die MainPage aktualisieren – sowohl xaml als auch codebehind.
Ändern Sie die Datei "MainPage.xaml " so, dass:
- Das XAML-Stammelement sollte sein
winPhone:FormsApplicationPage
. - Das
xmlns:phone
Attribut sollte inxmlns:winPhone="clr-namespace:Xamarin.Forms.Platform.WinPhone;assembly=Xamarin.Forms.Platform.WP8"
Nachfolgend sehen Sie ein aktualisiertes Beispiel: Sie sollten diese Dinge nur bearbeiten müssen (die restlichen Attribute sollten gleich bleiben):
<winPhone:FormsApplicationPage
...
xmlns:winPhone="clr-namespace:Xamarin.Forms.Platform.WinPhone;assembly=Xamarin.Forms.Platform.WP8"
...>
</winPhone:FormsApplicationPage>
Ändern Sie die MainPage.xaml.cs Datei so, dass:
- Die Klasse erbt von
FormsApplicationPage
(stattPhoneApplicationPage
zuvor). LoadApplication
wird mit einer neuen Instanz der Xamarin.Forms-KlasseApp
aufgerufen. Möglicherweise müssen Sie diesen Verweis vollständig qualifizieren, da Windows Phone bereits eine eigeneApp
Klasse definiert hat.
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
}
}
Problembehandlung
Gelegentlich wird nach dem Aktualisieren des NuGet-Pakets von Xamarin.Forms ein Fehler wie dieser angezeigt. Es tritt auf, wenn der NuGet-Updater verweise auf ältere Versionen nicht vollständig aus Ihren csproj-Dateien entfernt.
YOUR_PROJECT.csproj: Fehler: Dieses Projekt verweist auf NuGet-Pakete, die auf diesem Computer fehlen. Aktivieren Sie nuGet Package Restore, um sie herunterzuladen. Weitere Informationen finden Sie unter https://go.microsoft.com/fwlink/?LinkID=322105. Die fehlende Datei ist .. /.. /packages/Xamarin.Forms.1.2.3.6257/build/portable-win+net45+wp80+MonoAndroid10+MonoTouch10/Xamarin.Forms.targets. (YOUR_PROJECT)
Um diese Fehler zu beheben, öffnen Sie die Csproj-Datei in einem Text-Editor, und suchen Sie nach <Target
Elementen, die auf ältere Versionen von Xamarin.Forms verweisen, z. B. das unten gezeigte Element. Sie sollten dieses gesamte Element manuell aus der csproj-Datei löschen und die Änderungen speichern.
<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>
Das Projekt sollte erfolgreich erstellt werden, sobald diese alten Verweise entfernt wurden.
Überlegungen
Die folgenden Überlegungen sollten beim Konvertieren eines vorhandenen Xamarin.Forms-Projekts aus der klassischen API in die neue Unified API berücksichtigt werden, wenn diese App auf einer oder mehreren Komponenten oder NuGet-Paketen basiert.
Komponenten
Jede Komponente, die Sie in Ihre Anwendung aufgenommen haben, muss auch auf die Unified-API aktualisiert werden, oder Sie erhalten einen Konflikt, wenn Sie versuchen, die Kompilierung zu kompilieren. Ersetzen Sie für jede enthaltene Komponente die aktuelle Version durch eine neue Version aus dem Xamarin Component Store, die die Unified API unterstützt, und führen Sie einen sauberen Build durch. Jede Komponente, die noch nicht vom Autor konvertiert wurde, zeigt eine 32-Bit-Warnung nur im Komponentenspeicher an.
NuGet-Unterstützung
Wir haben zwar Änderungen an NuGet beigetragen, um mit der Unified API-Unterstützung zu arbeiten, aber es gab keine neue Version von NuGet, sodass wir evaluieren, wie NuGet zur Erkennung der neuen APIs abgerufen wird.
Bis zu diesem Zeitpunkt müssen Sie genau wie die Komponenten jedes NuGet-Paket, das Sie in Ihrem Projekt enthalten haben, zu einer Version wechseln, die die Unified-APIs unterstützt, und anschließend einen sauberen Build durchführen.
Wichtig
Wenn im Formular "Fehler 3 kann nicht sowohl 'monotouch.dll' als auch 'Xamarin.iOS.dll' im selben Xamarin.iOS-Projekt enthalten sein– auf 'Xamarin.iOS.dll' wird explizit verwiesen, während "monotouch.dll" von 'xxx, Version=0.0.000, Culture=neutral, PublicKeyToken=null'" referenziert wird, nachdem Ihre Anwendung in unified APIs konvertiert wurde, liegt es in der Regel daran, dass eine Komponente oder ein NuGet-Paket im Projekt vorhanden ist, das nicht auf die Unified API aktualisiert wurde. Sie müssen die vorhandene Komponente/NuGet entfernen, auf eine Version aktualisieren, die die Unified-APIs unterstützt, und einen sauberen Build durchführen.
Aktivieren von 64-Bit-Builds von Xamarin.iOS-Apps
Für eine mobile Xamarin.iOS-Anwendung, die in die Unified-API konvertiert wurde, muss der Entwickler weiterhin die Erstellung der Anwendung für 64-Bit-Computer über die Optionen der App aktivieren. Ausführliche Anweisungen zum Aktivieren von 64-Bit-Builds von Xamarin.iOS-Apps des 32/64-Bit-Plattformüberlegungsdokuments finden Sie in den Überlegungen zur Aktivierung von 64-Bit-Builds.
Zusammenfassung
Die Xamarin.Forms-Anwendung sollte jetzt auf Version 1.3.1 aktualisiert werden und die iOS-App zur Unified API migriert werden (die 64-Bit-Architekturen auf der iOS-Plattform unterstützt).
Wie oben erwähnt, müssen diese möglicherweise auch aktualisiert werden, wenn Ihre Xamarin.Forms-App nativen Code wie benutzerdefinierte Renderer oder Abhängigkeitsdienste enthält, um die neuen Typen zu verwenden, die in der Unified API eingeführt wurden.