切换到Xcode 7后,应用程序大小从9 MB增加到60 MB,有没有修复?

Bli*_*ixt 95 xcode ios swift

我一直在Git历史上倒退找到文件大小变化的原因,但我能找到的唯一真正原因是从Xcode 6切换到Xcode 7 GM.

我发现这些是在Release版本配置.ipaArchive操作中创建的前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
Run Code Online (Sandbox Code Playgroud)

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

问题#1是:为什么Swift核心文件存在两次?(嵌入式内容包含Swift Code设置为No).

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

一些额外的说明:

  • 这个项目完全是Objective-C,但现在主要是Swift." 定义模块"设置设置为" 是".
  • 该项目使用CocoaPods和use_frameworks!set.
  • 我已经在多个设备和iOS版本上确认了TestFlight的实际下载大小,它的范围是30-60 MB(可能是应用程序切片的差异).它曾经是9 MB.

Dav*_*era 26

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

您可以在应用程序和其他目标中禁用BitCode,您应该看到收缩.

  • 现在看,TestFlight的捆绑包为33MB,而AppStore上的自身版本为10.5MB,这表明在TestFlight版本上没有进行精简. (9认同)

Bli*_*ixt 19

我一直在测试很多设置和组合,看起来Xcode 7创建的捆绑包的文件大小差别很大,具体取决于设备和iOS的版本.此外,与以前相比,TestFlight构建现在很大,但好消息是,一旦在App Store上没有大幅增加(尽管我看到捆绑大小增加了1-2 MB与之前相比) .

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

TestFlight,iOS 5上的iPhone 5s
35.6 MB

TestFlight,iOS 6上的iPhone 6
70.1 MB

App Store
11.8 MB

我测试的所有设备上的App Store大小都相同.我还没有在iPhone 6 Plus上测试它,因为它使用@ 3x资产,所以捆绑尺寸很可能会更大.


Ric*_*ard 11

预计swift dylibs和你自己的代码的大小将在.xcarchive中显着增大,并且当你导出商店分发时,由于包含了bitcode.这个额外的大小不会反映在实际传递给用户的内容中,所以它应该不是问题.当您将应用程序提交到商店时,商店将处理它以去除bitcode,并且该处理的IPA版本是您的用户将下载的.

如果您从存档中执行任何类型的导出(商店导出除外)(例如,为临时部署保存),我们将在本地删除bitcode(如果您在导出中选中了该选项,则首先从bitcode重新编译二进制文件工作流程,重新创建商店会发生的事情),这样你就可以看到你的应用程序实际有多大.TestFlight还将为您删除bitcode,并向您显示您真正的应用程序大小.

您还应该知道,您的应用程序的大小也可以通过应用程序细化来减少,您可以在https://developer.apple.com/library/ios/documentation/IDEs/Conceptual/AppDistributionGuide/Introduction/Introduction.html上阅读..您可能希望执行临时导出以查看应用程序的每个精简变体的大小.


Nur*_*tin 5

嵌入式Bitcode是原因.

假设您不想禁用ENABLE_BITCODE,则可以删除调试符号.

请参阅http://oguzbastemur.blogspot.com/2015/09/xcode-7-and-increaded-binary-size.html,因为在嵌入之前剥离调试符号bitcode是您可以执行的选项之一.