我一直在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
Run Code Online (Sandbox Code Playgroud)
到目前为止,最大的文件是两个(略有不同)的libswiftCore.dylib
文件,总共超过32 MB.在Xcode 6构建的捆绑包中,这两个文件总共只有3 MB.
问题#1是:为什么Swift核心文件存在两次?(嵌入式内容包含Swift Code设置为No).
问题#2是:发生了什么?为什么Swift核心大小增加了15 MB?这是永久性的吗?
一些额外的说明:
use_frameworks!
set.Dav*_*era 26
最有可能是由BitCode引起的,我看到了相同的增长,但是一旦从App Store部署,应用程序的大小实际上并没有增长.
您可以在应用程序和其他目标中禁用BitCode,您应该看到收缩.
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上阅读..您可能希望执行临时导出以查看应用程序的每个精简变体的大小.
嵌入式Bitcode是原因.
假设您不想禁用ENABLE_BITCODE,则可以删除调试符号.
请参阅http://oguzbastemur.blogspot.com/2015/09/xcode-7-and-increaded-binary-size.html,因为在嵌入之前剥离调试符号bitcode是您可以执行的选项之一.