Teilen über


Aktualisieren vorhandener Xamarin.Forms-Apps

Führen Sie die folgenden Schritte aus, um eine vorhandene Xamarin.Forms-App für die Verwendung der einheitlichen API zu aktualisieren und auf Version 1.3.1 zu aktualisieren.

Wichtig

Da Xamarin.Forms 1.3.1 das erste Release ist, das die Einheitliche 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-Support auch Code in allen Projekten in der Projektmappe bearbeiten müssen.

Das Update erfolgt in zwei Schritten:

  1. Migrieren Sie die iOS-App mithilfe des Migrationstools von Visual Studio für Mac zur einheitlichen API.

    • Verwenden Sie das Migrationstool, um das Projekt automatisch zu aktualisieren.

    • Aktualisieren Sie native iOS-APIs, wie in den Anweisungen zum Aktualisieren von iOS-Apps beschrieben (insbesondere in benutzerdefiniertem Renderer- oder Abhängigkeitsdienstcode).

  2. Aktualisieren Sie die gesamte Projektmappe auf Xamarin.Forms Version 1.3.

    1. Installieren Sie das NuGet-Paket Xamarin.Forms 1.3.1.

    2. Aktualisieren Sie die App -Klasse im freigegebenen Code.

    3. Aktualisieren Sie im AppDelegate iOS-Projekt.

    4. Aktualisieren Sie im MainActivity Android-Projekt.

    5. Aktualisieren Sie im MainPage projekt Windows Phone.

1. iOS-App (einheitliche Migration)

Ein Teil der Migration erfordert ein Upgrade von Xamarin.Forms auf Version 1.3, die die Einheitliche API unterstützt. Damit die richtigen Assemblyverweise erstellt werden, müssen wir zunächst das iOS-Projekt aktualisieren, um die Einheitliche API zu verwenden.

Migrationstool

Klicken Sie auf das iOS-Projekt, damit es ausgewählt ist, wählen Sie dann Project > Migrate to Xamarin.iOS Unified API... aus, und stimmen Sie der angezeigten Warnmeldung zu.

Wählen Sie Project > Migrate to Xamarin.iOS Unified API ... aus. und stimmen der angezeigten Warnmeldung zu.

Dadurch wird automatisch Folgendes ausgeführt:

  • Ändern Sie den Projekttyp, um die einheitliche 64-Bit-API zu unterstützen.
  • Ändern Sie den Frameworkverweis in Xamarin.iOS (ersetzen Sie die alte Monotouch-Referenz ).
  • Ä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 einheitliche API zu verwenden.

Bereinigen Sie das Projekt, und erstellen Sie es, um sicherzustellen, dass keine anderen Fehler zu beheben sind. Es sollten keine weiteren Maßnahmen erforderlich sein. Diese Schritte werden in der Dokumentation zur einheitlichen API ausführlicher erläutert.

Aktualisieren nativer iOS-APIs (falls erforderlich)

Wenn Sie zusätzlichen nativen iOS-Code hinzugefügt haben (z. B. benutzerdefinierte Renderer oder Abhängigkeitsdienste), müssen Sie möglicherweise zusätzliche manuelle Codekorrekturen durchführen. Kompilieren Sie Ihre App neu, und lesen Sie die Anweisungen zum Aktualisieren vorhandener iOS-Apps , um weitere Informationen zu möglicherweise erforderlichen Änderungen zu erhalten. Diese Tipps helfen auch dabei, erforderliche Änderungen zu identifizieren.

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 schließt Folgendes ein:

  • Aktualisieren des Xamarin.Forms-NuGet-Pakets in jedem Projekt.
  • Ändern des Codes, um die neuen Klassen Xamarin.FormsApplication, FormsApplicationDelegate (iOS), FormsApplicationActivity (Android) und FormsApplicationPage (Windows Phone) zu verwenden.

Im Folgenden werden die folgenden Schritte erläutert:

2.1 Aktualisieren von NuGet in allen Projekten

Aktualisieren Sie Xamarin.Forms auf die Vorabversion 1.3.1 mit dem NuGet-Paket-Manager für alle Projekte in der Projektmappe: PCL (falls 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 auswählen müssen (über ein Häkchen in Visual Studio für Mac oder eine Dropdownliste in Visual Studio), um die neueste Vorabversion anzuzeigen.

Wichtig

Wenn Sie Visual Studio verwenden, stellen Sie sicher, dass die neueste Version des NuGet-Paket-Managers installiert ist. Ältere Versionen von NuGet in Visual Studio installieren die einheitliche Version von Xamarin.Forms 1.3.1 nicht ordnungsgemäß. Wechseln Sie zu Extras > Erweiterungen und Updates... und klicken Sie auf die Liste Installiert, um zu überprüfen, ob der NuGet-Paket-Manager für Visual Studio mindestens Version 2.8.5 aufweist. 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 auf die neue Xamarin.Forms.Application Klasse zu aktualisieren.

2.2 Portable Klassenbibliothek (oder freigegebenes Projekt)

Ändern Sie die Datei App.cs so, dass:

  • Die App -Klasse erbt jetzt von Application.
  • Die MainPage -Eigenschaft ist 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 auch die OnStartAußerkraftsetzungen , OnSleepund OnResume , um Den Lebenszyklus Ihrer Anwendung zu verwalten.

Die App -Klasse wird dann wie unten beschrieben an eine neue LoadApplication Methode in jedem App-Projekt übergeben:

2.3 iOS-App

Ändern Sie die Datei AppDelegate.cs so, dass:

  • Die -Klasse erbt von FormsApplicationDelegate (anstelle von UIApplicationDelegate zuvor).
  • LoadApplicationwird mit einer neuen instance von Appaufgerufen.
[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 Datei MainActivity.cs so, dass:

  • Die -Klasse erbt von FormsApplicationActivity (anstelle von FormsActivity zuvor).
  • LoadApplicationwird mit einer neuen instance von aufgerufen.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 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 in geändert werden. xmlns:winPhone="clr-namespace:Xamarin.Forms.Platform.WinPhone;assembly=Xamarin.Forms.Platform.WP8"

Unten wird ein aktualisiertes Beispiel gezeigt. Sie sollten nur diese Dinge 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 Datei MainPage.xaml.cs so, dass:

  • Die -Klasse erbt von FormsApplicationPage (anstelle von PhoneApplicationPage zuvor).
  • LoadApplicationwird mit einer neuen instance der Xamarin.Forms-Klasse App aufgerufen. Möglicherweise müssen Sie diesen Verweis vollständig qualifizieren, da Windows Phone bereits eine eigene App 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 Xamarin.Forms-NuGet-Pakets ein Fehler ähnlich dem folgenden angezeigt. Dies 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 die NuGet-Paketwiederherstellung, 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 <Target Sie nach 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 von der klassischen API in die neue einheitliche API berücksichtigt werden, wenn diese App auf einem oder mehreren Komponenten- oder NuGet-Paketen basiert.

Komponenten

Jede Komponente, die Sie in Ihre Anwendung aufgenommen haben, muss ebenfalls auf die einheitliche API aktualisiert werden, andernfalls tritt beim Kompilieren ein Konflikt auf. Ersetzen Sie für jede enthaltene Komponente die aktuelle Version durch eine neue Version aus dem Xamarin-Komponentenspeicher, die die einheitliche API unterstützt, und führen Sie einen sauber Build durch. Jede Komponente, die noch nicht vom Autor konvertiert wurde, zeigt eine 32-Bit-Warnung im Komponentenspeicher an.

NuGet-Unterstützung

Obwohl wir Änderungen an NuGet für die Arbeit mit der Unterstützung der einheitlichen API beigesteuert haben, gibt es keine neue Version von NuGet, sodass wir bewerten, wie NuGet die neuen APIs erkennt.

Bis zu diesem Zeitpunkt müssen Sie genau wie die Komponenten jedes NuGet-Paket, das Sie in Ihrem Projekt enthalten haben, auf eine Version umstellen, die die einheitlichen APIs unterstützt, und anschließend einen sauber Build durchführen.

Wichtig

Wenn der Fehler "Fehler 3 kann nicht sowohl "monotouch.dll" als auch "Xamarin.iOS.dll" im selben Xamarin.iOS-Projekt enthalten sein, wird explizit auf "Xamarin.iOS.dll" verwiesen, während "monotouch.dll" nach dem Konvertieren ihrer Anwendung in die einheitlichen APIs von "xxx, Version=0.0.000, Culture=neutral, PublicKeyToken=null" referenziert wird , liegt dies in der Regel daran, dass entweder eine Komponente oder ein NuGet-Paket im Projekt vorhanden ist, das nicht auf die einheitliche API aktualisiert wurde. Sie müssen die vorhandene Komponente/NuGet entfernen, auf eine Version aktualisieren, die die einheitlichen APIs unterstützt, und einen sauber Build ausführen.

Aktivieren von 64-Bit-Builds von Xamarin.iOS-Apps

Für eine mobile Xamarin.iOS-Anwendung, die in die einheitliche API konvertiert wurde, muss der Entwickler weiterhin das Erstellen 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 finden Sie im Dokument Überlegungen zur 32/64-Bit-Plattform .

Zusammenfassung

Die Xamarin.Forms-Anwendung sollte jetzt auf Version 1.3.1 aktualisiert werden, und die iOS-App sollte zur einheitlichen API migriert werden (die 64-Bit-Architekturen auf der iOS-Plattform unterstützt).

Wie oben erwähnt, muss Ihre Xamarin.Forms-App nativen Code wie benutzerdefinierte Renderer oder Abhängigkeitsdienste enthält, möglicherweise auch diese aktualisiert werden, um die neuen Typen zu verwenden, die in der einheitlichen API eingeführt wurden.