Aktualisieren vorhandener Mac-Apps
Das Aktualisieren einer vorhandenen App zur Verwendung der Unified API erfordert Änderungen an der Projektdatei selbst sowie an den Namespaces und APIs, die im Anwendungscode verwendet werden.
Der Weg zu 64 Bits
Die neuen Unified-APIs sind erforderlich, um 64-Bit-Gerätearchitekturen aus einer Xamarin.Mac-Anwendung zu unterstützen. Ab dem 1. Februar 2015 erfordert Apple, dass alle neuen App-Übermittlungen an den Mac App Store 64-Bit-Architekturen unterstützen.
Xamarin bietet Tools für Visual Studio für Mac und Visual Studio zum Automatisieren des Migrationsprozesses von der klassischen API in die Unified-API, oder Sie können die Projektdateien manuell konvertieren. Obwohl die Verwendung der automatischen Tools sehr vorgeschlagen wird, behandelt dieser Artikel beide Methoden.
Bevor Sie beginnen...
Bevor Sie Ihren vorhandenen Code auf die Einheitliche API aktualisieren, wird dringend empfohlen, alle Kompilierungswarnungen zu beseitigen. Viele Warnungen in der klassischen API werden zu Fehlern, sobald Sie zu Unified migriert wurden. Das Beheben dieser Elemente vor dem Start ist einfacher, da die Compilermeldungen aus der klassischen API häufig Hinweise auf das Update bieten.
Automatische Aktualisierung
Nachdem die Warnungen behoben wurden, wählen Sie ein vorhandenes Mac-Projekt in Visual Studio für Mac oder Visual Studio aus, und wählen Sie im Menü "Projekt" die Option "Zu Xamarin.Mac Unified API migrieren" aus. Beispiel:
Sie müssen dieser Warnung zustimmen, bevor die automatisierte Migration ausgeführt wird (offensichtlich sollten Sie sicherstellen, dass Sie Sicherungen/Quellcodeverwaltung haben, bevor Sie dieses Abenteuer starten):
Es gibt zwei unterstützte Target Framework-Typen, die bei Verwendung der Unified API in einer Xamarin.Mac-Anwendung ausgewählt werden können:
- Xamarin.Mac Mobile Framework – Dies ist das gleiche abgestimmte .NET Framework, das von Xamarin.iOS und Xamarin.Android verwendet wird, das eine Teilmenge des vollständigen Desktopframeworks unterstützt. Dies ist das empfohlene Framework, da es kleinere durchschnittliche Binärdateien aufgrund eines überlegenen Verknüpfungsverhaltens bereitstellt.
- Xamarin.Mac .NET 4.5 Framework – Dieses Framework ist wieder eine Teilmenge des Desktopframeworks . Es entfernt jedoch weit weniger vom vollständigen Desktopframework als das Mobile-Framework und sollte mit den meisten NuGet-Paketen oder Drittanbieterbibliotheken "nur funktionieren" . Auf diese Weise kann der Entwickler standardmäßige Desktopassemblys verwenden, während weiterhin ein unterstütztes Framework verwendet wird, aber diese Option erzeugt größere Anwendungsbündel. Dies ist das empfohlene Framework, in dem .NET-Assemblys von Drittanbietern verwendet werden, die nicht mit dem Xamarin.Mac Mobile Framework kompatibel sind. Eine Liste der unterstützten Assemblys finden Sie in unserer Assemblys-Dokumentation .
Ausführliche Informationen zu Target Frameworks und den Auswirkungen der Auswahl eines bestimmten Ziels für Ihre Xamarin.Mac-Anwendung finden Sie in unserer Target Frameworks-Dokumentation .
Das Tool automatisiert im Wesentlichen alle Im Abschnitt "Manuell aktualisieren" beschriebenen Schritte und ist die vorgeschlagene Methode zum Konvertieren eines vorhandenen Xamarin.Mac-Projekts in die Einheitliche API.
Schritte zum manuellen Aktualisieren
Nachdem die Warnungen behoben wurden, führen Sie die folgenden Schritte aus, um Xamarin.Mac-Apps manuell zu aktualisieren, um die neue Unified API zu verwenden:
1. Projekttyp und Buildziel aktualisieren
Ändern Sie den Projektgeschmack in Ihren csproj-Dateien von 42C0BBD9-55CE-4FC1-8D90-A7348ABAFB23
zu A3F8F2AB-B479-4A4A-A458-A89E7DC349F1
. Bearbeiten Sie die Csproj-Datei in einem Text-Editor, und ersetzen Sie das erste Element im <ProjectTypeGuids>
Element wie gezeigt:
Ändern Sie das Import-Element , das wie gezeigt enthält Xamarin.Mac.targets
Xamarin.Mac.CSharp.targets
:
Fügen Sie die folgenden Codezeilen nach dem <AssemblyName>
Element hinzu:
<TargetFrameworkVersion>v2.0</TargetFrameworkVersion>
<TargetFrameworkIdentifier>Xamarin.Mac</TargetFrameworkIdentifier>
Beispiel:
2. Aktualisieren von Projektverweise
Erweitern Sie den Knoten "Verweise" des Mac-Anwendungsprojekts. Zunächst wird ein *broken- XamMac-Verweis wie dieser Screenshot angezeigt (da wir gerade den Projekttyp geändert haben):
Klicken Sie auf das Zahnradsymbol neben dem XamMac-Eintrag , und wählen Sie "Löschen" aus, um den fehlerhaften Verweis zu entfernen.
Klicken Sie dann im Projektmappen-Explorer mit der rechten Maustaste auf den Ordner "Verweise", und wählen Sie "Verweise bearbeiten" aus. Scrollen Sie zum Ende der Liste der Verweise, und platzieren Sie neben Xamarin.Mac einen Check.
Drücken Sie 'OK ', um die Änderungen der Projektverweise zu speichern.
3. Entfernen von MonoMac aus Namespaces
Entfernen Sie das MonoMac-Präfix aus Namespaces in using
Anweisungen oder unabhängig davon, wo ein Klassenname vollständig qualifiziert wurde (z. B. MonoMac.AppKit
wird nur AppKit
).
4. Neuzuordnungstypen
Systemeigene Typen wurden eingeführt, die einige Typen ersetzen, die zuvor verwendet wurden, z. B. Instanzen von System.Drawing.RectangleF
"durch CoreGraphics.CGRect
" (z. B.). Die vollständige Liste der Typen finden Sie auf der Seite mit nativen Typen .
5. Fix-Methodenüberschreibungen
Einige AppKit
Methoden haben ihre Signatur geändert, um die neuen systemeigenen Typen zu verwenden (z nint
. B. ). Wenn benutzerdefinierte Unterklassen diese Methoden außer Kraft setzen, stimmen die Signaturen nicht mehr überein und führen zu Fehlern. Beheben Sie diese Methodenüberschreibungen, indem Sie die Unterklasse so ändern, dass sie mit systemeigenen Typen mit der neuen Signatur übereinstimmt.
Überlegungen
Die folgenden Überlegungen sollten beim Konvertieren eines vorhandenen Xamarin.Mac-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 sauber 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 sauber Build ausführen.
Wichtig
Wenn ein Fehler in der Form "Fehler 3 Kann nicht sowohl 'monomac.dll' als auch 'Xamarin.Mac.dll' im gleichen Xamarin.Mac-Projekt enthalten - auf 'Xamarin.Mac.dll' wird explizit verwiesen, während "monomac.dll" von 'xxx, Version=0.0.000, Culture=neutral, PublicKeyToken=null'" referenziert wird, nachdem Sie Ihre Anwendung in die Unified-APIs konvertiert haben, liegt es in der Regel daran, dass 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 Unified-APIs unterstützt, und einen sauber Build ausführen.
Aktivieren von 64-Bit-Builds von Xamarin.Mac-Apps
Für eine mobile Xamarin.Mac-Anwendung, die in die Unified-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.Mac-Apps finden Sie im Dokument "Überlegungen zur 32/64-Bit-Plattform".
Fertigstellen
Unabhängig davon, ob Sie die automatische oder manuelle Methode verwenden, um Ihre Xamarin.Mac-Anwendung aus dem Klassischen in die Unified-APIs zu konvertieren, gibt es mehrere Instanzen, die weitere manuelle Eingriffe erfordern. Informationen zum Aktualisieren von Code in das Unified API-Dokument finden Sie in unserem Tipps für bekannte Probleme und Umgehungen.