2016-08-01 102 views
2

我正在尋找方法來減少我的App Store應用程序大小。我在PCL中使用Xamarin Forms。在我的應用的AppStore構建輸出(../obj/iPhone/AppStore/mtouch-cache)中看到的一件事是System.Xml.dll.armv7.oSystem.Xml.dll.arm64.o共約12mb。在mscorlib之後,這是我構建輸出的最大組件。見截圖:減少AppStore應用程序大小:刪除System.Xml?

ls -laS *.o

我的應用程序不使用XML做任何事情,所以我想如果可能的話,以消除這種依賴性引用。我嘗試從我的項目中刪除對System.Xml的所有引用,但這似乎沒有改變任何內容。我可以通過某種方式刪除它嗎?爲什麼System.Xml在我的構建輸出中?

我的項目的源代碼可以在這裏找到:https://github.com/bitwarden/mobile

回答

1

爲什麼在的System.Xml我生成輸出?

託管鏈接器(除非禁用)將從您的應用程序中刪除任何非必需的程序集。如果仍然看到System.Xml.dll它要麼意味着:

  • 鏈接設置爲不要鏈接,對於設備的默認是鏈接SDK;

  • 某些其他程序集(例如第三方)正在使用System.Xml,並且無法從應用程序中刪除它。

我可以刪除一些這方面的辦法嗎?

是的。您可以使用組裝瀏覽器查看第三方組件的參考。一旦被確定,您可以:

  • 從您的項目中刪除的依賴關係和的東西,不依賴於System.Xml更換。這可能很容易或很難;或

  • 將鏈接器設置爲鏈接全部以查看它是否可以消除來自第三方的XML引用。請注意,您可能需要在您的(和其他第三方代碼)上添加[Preserve]以涵蓋反射(鏈接器無法使用靜態分析檢測到)等情況;

上Xamarin的網站上的文檔旁邊,你可以看我的Advanced iOS Build mechanics演講中,我在Evolve 2013給的視頻。它涵蓋了大多數設置的優點和缺點。

+0

我確實打開了完整的鏈接器。從我可以告訴的唯一包,我有利用'System.Xml'是Json.NET和Xamarin.Forms。我沒有使用調用System.Xml的Json.NET的功能。由於Xamarin.Forms,需要'System.Xml'嗎? – kspearrin

+0

此外,我看到有問題從Assembly Browser中獲取任何有用的信息。我沒有看到其中列出的任何第三方庫。有沒有關於如何使用此功能的信息?一個快速谷歌並沒有太多。 – kspearrin