切换到Xcode 7后,应用程序大小从9 MB增加到60 MB,是否可以解决?


96

我一直在Git历史中倒退,以查找导致文件大小变化巨大的原因,但是我能找到的唯一真正的原因是从Xcode 6切换到Xcode 7 GM。

我发现这些是在Release构建配置中.ipa通过Archive操作创建的10个最大文件大小贡献者:

$ unzip -lv Roger\ Release.ipa | sort -k +3nr | head
41802768  Defl:N 16887199  60%  09-14-15 23:47  dc24cdc1  Payload/Roger.app/Frameworks/libswiftCore.dylib
41802400  Defl:N 16886076  60%  09-06-15 18:33  f939ea6a  SwiftSupport/iphoneos/libswiftCore.dylib
11184032  Defl:N  5915625  47%  09-14-15 23:48  6ceac4a2  Payload/Roger.app/Roger
 6399584  Defl:N  2670275  58%  09-14-15 23:47  0ac52d3f  Payload/Roger.app/Frameworks/libPhoneNumber_iOS.framework/libPhoneNumber_iOS
 5410384  Defl:N  2334189  57%  09-14-15 23:47  7a8cb03f  Payload/Roger.app/Frameworks/Alamofire.framework/Alamofire
 4521904  Defl:N  2292789  49%  09-14-15 23:47  95da0882  Payload/Roger.app/Frameworks/FBSDKCoreKit.framework/FBSDKCoreKit
 4731552  Defl:N  1926357  59%  09-14-15 23:48  e05337de  Payload/Roger.app/Frameworks/libswiftFoundation.dylib
 4731168  Defl:N  1925355  59%  09-06-15 18:33  19a5c3c4  SwiftSupport/iphoneos/libswiftFoundation.dylib
 2659232  Defl:N  1232897  54%  09-14-15 23:47  1a53a401  Payload/Roger.app/Frameworks/AFNetworking.framework/AFNetworking
 1196624  Defl:N   545343  54%  09-14-15 23:47  19a063cb  Payload/Roger.app/Frameworks/Bolts.framework/Bolts

到目前为止,最大的文件是两个(略有不同)libswiftCore.dylib文件,总计超过32 MB。在Xcode 6构建的捆绑软件中,这两个文件总共只有3 MB。

所以问题1是:为什么Swift核心文件在那里存在两次?(嵌入的包含Swift代码的内容设置为No)。

问题2是:发生了什么事?为什么Swift核心大小增加了15 MB?这是永久的吗?

一些附加说明:

  • 这个项目完全是Objective-C,但是现在主要是Swift。“ 定义模块”设置设置为“ 是”
  • 该项目使用带有use_frameworks!set的CocoaPods 。
  • 我已经确认了在多个设备和iOS版本上从TestFlight实际下载的大小,并且在30-60 MB范围内(可能是由于应用程序切片造成的)。以前是9 MB。

4
Xcode 7使用应用程序切片,下载大小很可能会有所不同,甚至可能会减少。我不会为此担心。
亚当

6
@亚当:事实并非如此。部署的版本确实会因设备而异,但是到目前为止,我已经看到iPhone 5s上有30 MB,iPhone 6上有60 MB。安装时间明显增加了。以前是9 MB时,绝对值得担心。
Blixt 2015年

3
实际上,由于iPhone 5s在iOS 9.1和iPhone 6在iOS 8上,最有可能出现30 MB与60 MB的差异。但是,即使所有应用程序用户都升级到iOS 9,30 MB仍然比9增加了很多。 MB。
Blixt 2015年

2
您是否通过TestFlight进行部署?该应用程序的精简是在Apple服务器上完成的,因此,我认为除非通过TestFlight / iTunes安装,否则您将看不到减小的尺寸。
MirekE 2015年

2
上传到TestFlight之后,我的应用大小从74MB减少到9.6MB,所以请放心
Gintama

Answers:


27

我最有可能是由BitCode引起的,但我看到了同样的增长,但是一旦从App Store部署后,应用程序的大小实际上并没有增加。

您可以在应用程序和其他目标中禁用BitCode,并且应该会缩小。


我已经确认从Apple TestFlight下载的应用程序大小为30至60 MB,而不是9 MB。我认为它一旦在App Store上就不会改变,因为他们大概使用了相同的分发机制。我将尝试禁用位码。
Blixt

在构建和发布步骤中禁用位码和调试符号以及存档构建版本仍然包括完全相同的两个libswiftCore.dylib文件,每个文件的大小分别约为40 MB(压缩后约为16 MB)。我还没有通过TestFlight确认整个部署,但是由于这些大文件仍然是.ipa的一部分,我怀疑它们对文件大小的贡献是否会改变。总体大小减少了约10 MB,这大概是因为删除了崩溃符号支持。
Blixt

1
我正要关个人的经验,我.xcarchive的很多大,现在比前Xcode7但是App Store下载仍然是相同的大小,如果不略小由于资源变薄等
大卫·路德

10
现在来看,来自TestFlight的捆绑包为33MB,对于AppStore上相同的内部版本为10.5MB,这表明未对TestFlight内部版本进行细化。
大卫·罗瑟拉

好的,很高兴知道。我将把该应用程序运行到App Store,并希望一切顺利!
Blixt

19

我已经测试了许多设置和组合,并且Xcode 7创建的捆绑包的文件大小似乎在很大程度上取决于设备和iOS版本。此外,TestFlight版本现在比以前更庞大,但是好消息是,一旦在App Store上,并没有太大的增长(尽管我发现捆绑包的大小比以前增加了1-2 MB) 。

以下是一些示例,显示了TestFlight,App Store和设备之间的差异:

TestFlight,iOS 9.1上的iPhone 5s
35.6 MB

TestFlight,iOS 6上的iPhone 6 8.4.1
70.1 MB

App Store
11.8 MB

我测试过的所有设备上的App Store大小均相同。不过我还没有在iPhone 6 Plus上进行过测试,由于它使用@ 3x资产,因此很有可能捆绑的尺寸会更大。


11

由于包含了位码,因此期望在.xcarchive中以及在导出以进行商店分发时,快速dylib的大小和您自己的代码会大大变大。这个额外的大小不会反映在实际交付给用户的内容上,因此这不成问题。当您将应用程序提交给商店时,商店将对其进行处理以去除位码,并且IPA的已处理版本就是您的用户将下载的版本。

如果您从档案库中进行除商店出口以外的任何类型的出口(例如,保存以进行临时部署),我们将在本地剥离位码(甚至在出口中选中该选项的情况下,甚至首先从位码重新编译二进制文件)工作流程,以重新创建商店中要发生的事情),这样您就可以了解您的应用实际的规模。TestFlight还将为您去除位码并显示您的真实应用大小。

您还应该注意,还可以通过应用程序精简来减小应用程序的大小,您可以在https://developer.apple.com/library/ios/documentation/IDEs/Conceptual/AppDistributionGuide/Introduction/Introduction.html上进行了解。。无论如何,您可能希望执行临时导出以查看应用程序每个精简版本的大小。



By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.