2016-08-01 9 views
2

Ich suche nach Möglichkeiten, um meine App Store App Größe zu reduzieren. Ich verwende Xamarin Forms mit PCL. Eines der Dinge, die ich in der AppStore Build-Ausgabe (in ../obj/iPhone/AppStore/mtouch-cache) meiner App sehen, ist System.Xml.dll.armv7.o und System.Xml.dll.arm64.o insgesamt ~ 12 MB. Nach mscorlib ist dies die größte Komponente für meine Build-Ausgabe. Screenshot sehen:Reduzieren AppStore App Größe: Entfernen Sie System.Xml?

ls -laS *.o

Meine Anwendung nichts mit Xml tut, so will ich diese Abhängigkeit Bezug zu entfernen, wenn möglich. Ich habe versucht, alle Referenzen auf System.Xml aus meinen Projekten zu entfernen, aber das scheint nichts zu ändern. Kann ich das irgendwie entfernen? Warum ist System.Xml in meiner Build-Ausgabe?

Mein Projekt Quelle auf GitHub hier: https://github.com/bitwarden/mobile

Antwort

1

Warum ist System.Xml in meiner Build-Ausgabe?

Der verwaltete Linker (sofern nicht deaktiviert) entfernt alle nicht benötigten Assemblys aus Ihrer Anwendung. Wenn Sie noch System.Xml.dll sehen entweder es bedeutet:

  • der Linker an nicht gesetzt ist verknüpfen Sie, der Standard für Geräte ist Link-SDK;

  • Einige andere Baugruppen (z. B. Drittanbieter) verwenden System.Xml und können nicht aus Ihrer Anwendung entfernt werden.

Kann ich entfernen das irgendwie?

Ja. Sie können den Assembly-Browser verwenden, um Referenzen von Drittanbieter-Assemblys anzuzeigen. Sobald sie identifiziert sind, können Sie:

  • die Abhängigkeiten aus Ihrem Projekt entfernen und ersetzen sie durch etwas, das nicht auf System.Xml abhängt. Das kann ganz einfach oder sehr schwer sein; oder

  • Setzen Sie den Linker auf Verknüpfen Sie alle, um zu sehen, ob es die XML-Referenzen von der dritten Partei beseitigen kann. Beachten Sie, dass Sie möglicherweise [Preserve] auf Ihrem (und anderen 3rd-Party-Code) hinzufügen müssen, um Fälle wie Reflektion zu behandeln (die der Linker mit statischer Analyse nicht erkennen kann);

Neben der Dokumentation auf Xamarin-Website können Sie das Video meiner Advanced iOS Build mechanics Gespräch sehe ich bei Evolve 2013 gab. Es deckt die Vor- und Nachteile der meisten Einstellungen ab.

+0

Ich habe den vollständigen Linker eingeschaltet. Von dem, was ich sagen kann, sind die einzigen Pakete, die ich 'System.Xml' verwende, Json.NET und Xamarin.Forms. Ich verwende nicht die Funktionen von Json.NET, die System.Xml aufrufen. Ist 'System.Xml' wegen Xamarin.Forms erforderlich? – kspearrin

+0

Auch habe ich gesehen, Probleme zu haben, etwas nützliches aus dem Assembly Browser zu bekommen.Ich sehe keine meiner Drittanbieter-Bibliotheken darin aufgeführt. Gibt es Informationen zur Verwendung dieser Funktion? Ein schneller Google ist nicht viel aufgetaucht. – kspearrin