简体   繁体   English

如何减少ipa大小Xamarin.ios

[英]How to reduce ipa size Xamarin.ios

I am trying to reduce my ipa size, but cant succeed. 我正在尝试减小ipa大小,但无法成功。 I tried with linking SDK assemblies only but when the app is archived it shows 189 MB of the app store and 75mb for ipa. 我尝试仅链接SDK程序集,但在存档应用程序时,它显示了189 MB的应用程序商店和75mb的ipa。 I tried different options but it never worked. 我尝试了其他选择,但没有成功。

Then I looked into my bin folder and I found out that Xamarin.swift4 is taking about 80 MB of the size, When I removed that package my ipda was reduced to 34mb and playstore size was reduced to 89 MB, but because of this my app crashed instantly after opening. 然后我查看了我的bin文件夹,发现Xamarin.swift4占用了大约80 MB的大小,当我删除该软件包时,我的ipda减小到了34mb,而Playstore的大小减小到了89 MB,但是因为这个我的应用打开后立即坠毁。 So it means that I can not remove Xamarin.swift 4 libraries. 因此,这意味着我无法删除Xamarin.swift 4库。

I have attached my bin folder pic and packages.congifg file, let me know if there is any solution 我已附加我的bin文件夹pic和packages.congifg文件,请告诉我是否有解决方案

在此处输入图片说明

    <?xml version="1.0" encoding="utf-8"?>
<packages>
  <package id="Answers" version="1.4" targetFramework="xamarinios10" />
  <package id="Crashlytics" version="1.4" targetFramework="xamarinios10" />
  <package id="dannycabrera.GetiOSModel" version="1.4.0" targetFramework="xamarinios10" />
  <package id="Fabric" version="1.4" targetFramework="xamarinios10" />
  <package id="iOSCharts" version="3.1.1.2" targetFramework="xamarinios10" />
  <package id="Microsoft.CSharp" version="4.4.1" targetFramework="xamarinios10" />
  <package id="Microsoft.NETCore.Platforms" version="2.0.2" targetFramework="xamarinios10" />
  <package id="Microsoft.Win32.Primitives" version="4.3.0" targetFramework="xamarinios10" />
  <package id="NETStandard.Library" version="2.0.3" targetFramework="xamarinios10" />
  <package id="Newtonsoft.Json" version="11.0.2" targetFramework="xamarinios10" />
  <package id="System.AppContext" version="4.3.0" targetFramework="xamarinios10" />
  <package id="System.Collections" version="4.3.0" targetFramework="xamarinios10" />
  <package id="System.Collections.Concurrent" version="4.3.0" targetFramework="xamarinios10" />
  <package id="System.ComponentModel.TypeConverter" version="4.3.0" targetFramework="xamarinios10" />
  <package id="System.Console" version="4.3.1" targetFramework="xamarinios10" />
  <package id="System.Diagnostics.Debug" version="4.3.0" targetFramework="xamarinios10" />
  <package id="System.Diagnostics.Tools" version="4.3.0" targetFramework="xamarinios10" />
  <package id="System.Diagnostics.Tracing" version="4.3.0" targetFramework="xamarinios10" />
  <package id="System.Globalization" version="4.3.0" targetFramework="xamarinios10" />
  <package id="System.Globalization.Calendars" version="4.3.0" targetFramework="xamarinios10" />
  <package id="System.IO" version="4.3.0" targetFramework="xamarinios10" />
  <package id="System.IO.Compression" version="4.3.0" targetFramework="xamarinios10" />
  <package id="System.IO.Compression.ZipFile" version="4.3.0" targetFramework="xamarinios10" />
  <package id="System.IO.FileSystem" version="4.3.0" targetFramework="xamarinios10" />
  <package id="System.IO.FileSystem.Primitives" version="4.3.0" targetFramework="xamarinios10" />
  <package id="System.Linq" version="4.3.0" targetFramework="xamarinios10" />
  <package id="System.Linq.Expressions" version="4.3.0" targetFramework="xamarinios10" />
  <package id="System.Net.Http" version="4.3.3" targetFramework="xamarinios10" />
  <package id="System.Net.Primitives" version="4.3.0" targetFramework="xamarinios10" />
  <package id="System.Net.Sockets" version="4.3.0" targetFramework="xamarinios10" />
  <package id="System.ObjectModel" version="4.3.0" targetFramework="xamarinios10" />
  <package id="System.Reflection" version="4.3.0" targetFramework="xamarinios10" />
  <package id="System.Reflection.Extensions" version="4.3.0" targetFramework="xamarinios10" />
  <package id="System.Reflection.Primitives" version="4.3.0" targetFramework="xamarinios10" />
  <package id="System.Resources.ResourceManager" version="4.3.0" targetFramework="xamarinios10" />
  <package id="System.Runtime" version="4.3.0" targetFramework="xamarinios10" />
  <package id="System.Runtime.Extensions" version="4.3.0" targetFramework="xamarinios10" />
  <package id="System.Runtime.Handles" version="4.3.0" targetFramework="xamarinios10" />
  <package id="System.Runtime.InteropServices" version="4.3.0" targetFramework="xamarinios10" />
  <package id="System.Runtime.InteropServices.RuntimeInformation" version="4.3.0" targetFramework="xamarinios10" />
  <package id="System.Runtime.Numerics" version="4.3.0" targetFramework="xamarinios10" />
  <package id="System.Runtime.Serialization.Formatters" version="4.3.0" targetFramework="xamarinios10" />
  <package id="System.Runtime.Serialization.Primitives" version="4.3.0" targetFramework="xamarinios10" />
  <package id="System.Security.Cryptography.Algorithms" version="4.3.1" targetFramework="xamarinios10" />
  <package id="System.Security.Cryptography.Encoding" version="4.3.0" targetFramework="xamarinios10" />
  <package id="System.Security.Cryptography.Primitives" version="4.3.0" targetFramework="xamarinios10" />
  <package id="System.Security.Cryptography.X509Certificates" version="4.3.2" targetFramework="xamarinios10" />
  <package id="System.Text.Encoding" version="4.3.0" targetFramework="xamarinios10" />
  <package id="System.Text.Encoding.Extensions" version="4.3.0" targetFramework="xamarinios10" />
  <package id="System.Text.RegularExpressions" version="4.3.0" targetFramework="xamarinios10" />
  <package id="System.Threading" version="4.3.0" targetFramework="xamarinios10" />
  <package id="System.Threading.Tasks" version="4.3.0" targetFramework="xamarinios10" />
  <package id="System.Threading.Timer" version="4.3.0" targetFramework="xamarinios10" />
  <package id="System.Xml.ReaderWriter" version="4.3.1" targetFramework="xamarinios10" />
  <package id="System.Xml.XDocument" version="4.3.0" targetFramework="xamarinios10" />
  <package id="System.Xml.XmlDocument" version="4.3.0" targetFramework="xamarinios10" />
  <package id="UITextFieldShaker" version="2017.10.19" targetFramework="xamarinios10" />
  <package id="Xam.Plugin.Connectivity" version="3.1.1" targetFramework="xamarinios10" />
  <package id="Xamarin.Forms" version="3.0.0.446417" targetFramework="xamarinios10" />
  <package id="ZXing.Net.Mobile" version="2.3.2" targetFramework="xamarinios10" />
  <package id="Xamarin.Swift4" version="4.0.0.0" targetFramework="xamarinios10" />
  <package id="Xamarin.Swift4.Core" version="4.1.0" targetFramework="xamarinios10" />
  <package id="Xamarin.Swift4.CoreAudio" version="4.1.0" targetFramework="xamarinios10" />
  <package id="Xamarin.Swift4.CoreData" version="4.1.0" targetFramework="xamarinios10" />
  <package id="Xamarin.Swift4.CoreFoundation" version="4.1.0" targetFramework="xamarinios10" />
  <package id="Xamarin.Swift4.CoreGraphics" version="4.1.0" targetFramework="xamarinios10" />
  <package id="Xamarin.Swift4.CoreImage" version="4.1.0" targetFramework="xamarinios10" />
  <package id="Xamarin.Swift4.CoreMedia" version="4.1.0" targetFramework="xamarinios10" />
  <package id="Xamarin.Swift4.Darwin" version="4.1.0" targetFramework="xamarinios10" />
  <package id="Xamarin.Swift4.Dispatch" version="4.1.0" targetFramework="xamarinios10" />
  <package id="Xamarin.Swift4.Foundation" version="4.1.0" targetFramework="xamarinios10" />
  <package id="Xamarin.Swift4.Metal" version="4.1.0" targetFramework="xamarinios10" />
  <package id="Xamarin.Swift4.ObjectiveC" version="4.1.0" targetFramework="xamarinios10" />
  <package id="Xamarin.Swift4.OS" version="4.1.0" targetFramework="xamarinios10" />
  <package id="Xamarin.Swift4.QuartzCore" version="4.1.0" targetFramework="xamarinios10" />
  <package id="Xamarin.Swift4.UIKit" version="4.1.0" targetFramework="xamarinios10" />
</packages>

You should remove only the libraries you don't use in your project. 您应该删除项目中不使用的库。 Two weeks ago my ipa file was at almost 200 MB, then I deleted all the Swift libraries that was unnecessary for the project, and now I create smaller ipa files than the previous one (80 MB). 两周前,我的ipa文件将近200 MB,然后删除了该项目不需要的所有Swift库,现在我创建的ipa文件比上一个要小(80 MB)。 So you need to check your application, see if you have unnecessary libraries and delete it, this way you will reduce the ipa size. 因此,您需要检查您的应用程序,查看是否有不必要的库并将其删除,这样可以减小ipa大小。

I would suggest looking into the 'Linker', which you will find in your iOS build options within Visual Studio 我建议您查看“链接器”,您可以在Visual Studio的iOS生成选项中找到该链接器

A brief overview: 简要概述:

  1. Don't Link - all assemblies left untouched (largest ipa size) 不链接-所有组件均保持不变(最大IPA尺寸)
  2. Link SDK assemblies only - reduces size of SDK (Xamarin.iOS) assemblies by removing everything that your application doesn't use 仅链接SDK程序集-通过删除应用程序不使用的所有内容来减小SDK(Xamarin.iOS)程序集的大小
  3. Link all assemblies - reduces size of all assemblies by removing everything that your application doesn't use (smallest ipasize) 链接所有程序集-通过删除应用程序不使用的所有内容来减小所有程序集的大小(最小的ipasize)

Note that 'link all assemblies' can cause issues as the linker can't always determine what is used and can therefore remove code from an assembly that is actually required (think web services, reflection, serialisation). 请注意,“链接所有程序集”可能会导致问题,因为链接器无法始终确定使用的内容,因此可以从程序集中删除实际需要的代码(请考虑Web服务,反射,序列化)。 In such cases you can set a manual mtouch argument to prevent a specific assembly (or assemblies) from having being touched by the linker as below: 在这种情况下,您可以设置一个手动mtouch参数,以防止链接程序触及一个或多个特定程序集,如下所示:

--linkskip=NameOfAssemblyToSkipWithoutFileExtension

or 要么

--linkskip=NameOfFirstAssembly --linkskip=NameOfSecondAssembly

A real use case I've come across where the above is necessary is when using Entity Framework with Xamarin.iOS, as the linker removes code which is then called using reflection which causes the app to crash. 我遇到的一个实际用例是,在Xamarin.iOS上使用Entity Framework时,需要执行上述操作,因为链接器会删除代码,然后使用反射调用该代码,这会导致应用程序崩溃。

The full documentation for the Linker is available here: https://docs.microsoft.com/en-us/xamarin/ios/deploy-test/linker?tabs=vsmac 链接器的完整文档可在以下位置找到: https : //docs.microsoft.com/zh-cn/xamarin/ios/deploy-test/linker?tabs=vsmac

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM