Parse Xamarin SDK极大地膨胀了iOS应用的应用大小



我使用Xamarin来构建我的应用程序。在我将Parse集成到我的应用程序之前,我的二进制大小(发布构建,所有优化,LLVM, armv7和arm64)是23MB。我将Parse Xamarin SDK(使用Xamarin组件)添加到我的应用程序中,然后添加一个.cs文件来表示Parse上的模型。在此之后,我的应用大小几乎翻了一番,达到42MB(即每个架构大约增加10MB)。

我的问题:

    为什么会有这么大的应用膨胀?
  1. 有没有办法让我把应用的大小降到一个合理的水平?

更多细节:

我使用symbols从二进制中获取关于哪些符号使用了这个额外空间的信息。(注意:这只适用于一个体系结构)

从System命名空间获取所有函数:

symbols TestApp |grep FUNC | grep 'System' | grep -v 'Xamarin' | awk '{ print $3; }' | sed 's/)$//' | awk 'BEGIN{sum = 0} { val = sprintf("%dn", $0); sum += val; } END {print sum; }'

添加解析dll之前: 963KB

添加parse dll后: 4.5MB

Parse.ios.dll只有212K。但是,在编译时,它会在最终二进制文件中添加3.6MB的代码:

symbols TestApp |grep FUNC | egrep 'Parse|[PF' |  awk '{ print $3; }' | sed 's/)$//' | awk 'BEGIN{sum = 0} { val = sprintf("%dn", $0); sum += val; } END {print sum; }'
3639308

添加的函数是下列内容:

0x000104f4 (0x260)System_Array_InternalArray__ICollection_CopyTo_T_T___int[函数,LENGTH, NameDwarfMIPSLinkage, MangledNameNList, Merged, NList, Dwarf,0x000108f8 (0x64c)System_Collections_Generic_Dictionary_2_intptr_System_WeakReference_System_Collections_ICollection_CopyTo_System_Array_int[FUNC, LENGTH, NameDwarfMIPSLinkage, MangledNameNList, Merged, NList,矮,FunctionStarts]

所以看起来很多代码是由于泛型被编译为本机代码。是否有一些方法可以减少由泛型引起的代码膨胀?

为所有程序集启用托管链接器。

在项目的iOS Build选项中,将"Link behavior"设置为"All assemblies"

关于链接器的更多信息:http://developer.xamarin.com/guides/ios/advanced_topics/linker/

更一般的构建信息(包括如何最小化应用程序大小)在这里解释:高级iOS构建机制

最新更新