目的
本文是为了比较在iOS上比较流行的应用解决方案的原始空工程所占用的体积:
- Objective-C
- Swift
- ReactNative
- Flutter
实验环境
- macOS High Sierra v10.13.2
- Xcode v9.2
- Flutter channel alpha 2017-12-12
实验步骤
- 建立工程
- 打包(Archive)
- 比较App Thinning Size Report.txt
建立工程
- OC
使用[File] -> [New] -> [Project…] 建立选择Tabbed App
Language选择Objective-C
- Swift
Swift工程建立的方法和OC保持一致, 只是Language选择Swift
- ReactNative
安装好ReactNative环境后, 终端下执行:
react-native init <工程名>
- Flutter
安装好Flutter环境后, 在终端下执行:
flutter create <工程名>
注意: Flutter可以选择使用Swift还是Objective-C构建, 为了比较,这里用了Objective-C来构建.
打包步骤
请参考 https://developer.apple.com/library/content/qa/qa1795/_index.html
主要是为了生成 App Thinning Size Report.txt
比较和总结
- Objective-C: 解压缩后 115KB
- Swift: 解压缩后 7.2MB
- ReactNative 解压缩后 3.2MB
- Flutter 解压缩后可能是
29MB10.1MB (Flutter Beta Version)
Swift比较大的原因是Swift的运行时所需要的动态库在应用中. Flutter目前还不稳定, 和Xcode9.0+上的ipatool存在兼容问题, 所以只能通过ipa猜测其大小. Flutter beta版已经修复了之前的兼容问题.
Q&A
Flutter还在开发中, 如果在Xcode9.1+上遇到Export问题, 请参考这里:
https://github.com/flutter/flutter/issues/13070