【发布时间】:2015-09-15 14:32:01
【问题描述】:
我一直在追溯 Git 历史,寻找文件大小发生巨大变化的原因,但我能找到的唯一真正原因是从 Xcode 6 切换到 Xcode 7 GM。
我发现这些是.ipa 中文件大小的前 10 大贡献者,该文件是通过 Release 构建配置上的 Archive 操作创建的:
$ 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 核心文件会出现两次? (Embedded Content Contains Swift Code 设置为 No)。
问题 #2 是:发生了什么?为什么 Swift 核心大小增加了 15 MB?这是永久的吗?
一些补充说明:
- 这是一个完全是 Objective-C 但现在主要是 Swift 的项目。 Defines Module 设置设为Yes。
- 该项目使用设置了
use_frameworks!的CocoaPods。 - 我已经在多个设备和 iOS 版本上确认了来自 TestFlight 的实际下载大小,它在 30–60 MB 的范围内(可能差异是由于应用程序切片造成的)。以前是 9 MB。
【问题讨论】:
-
Xcode 7 使用应用切片,下载大小很可能会有所不同,甚至可能会减小。我不会担心这个。
-
@Adam:事实并非如此。部署的版本确实因设备而异,但到目前为止,我在 iPhone 5s 上看到了 30 MB,在 iPhone 6 上看到了 60 MB。安装时间明显增加。当它曾经是 9 MB 时,这绝对是值得担心的事情。
-
实际上 30 和 60 MB 的差异很可能是因为 iPhone 5s 是 iOS 9.1 而 iPhone 6 是 iOS 8。但即使所有应用程序用户都升级到 iOS 9,30 MB与 9 MB 相比仍然有很大的增长。
-
您是通过 TestFlight 部署的吗?应用瘦身是在 Apple 服务器上完成的,所以除非你通过 TestFlight/iTunes 安装,否则我认为你将看不到减小的大小。
-
上传到TestFlight后,我的app大小从74MB减少到9.6MB,不用担心