flutter build ios --analyze-size
크로스플랫폼 프레임워크인 Flutter로 개발을 하면 하나의 소스코드로 Android와 iOS, 심지어 웹까지 결과물을 만들 수 있기 때문에 최근 유용하게 사용하고 있다. 그런데 하나의 단점이 있었는데 app size (앱 용량)이 너무 크게 나오는 것이었다. 특히 iOS의 결과물이 너무 크게 나왔는데 해결방법을 찾아서 글을 남긴다.
나는 Android Studio를 사용해서 개발을 하는데 New Project를 하는 경우에 아래와 같이 Android language, iOS language 두개에 대해서 선택하는 화면이 나온다.
여기서 iOS language를 Swift로 설정하는 경우 Swift 관련 라이브러리들이 포함되게 되어 용량이 크게 나온다. 한번 Swift와 Objective-C로 프로젝트를 만들어서 처음에 있는 템플릿 앱에 대해서 빌드된 결과물의 사이즈를 비교해보겠다. 참고로, 사용한 플러터의 버전은 3.7.6이다.
혹시 터미널에서 프로젝트를 생성하는 경우에는 아래와 같이 -i option에 objc 또는 swift를 줌으로써 iOS language 설정이 가능하다.
flutter create --org <com.company> -i objc -a kotlin <package_name>
아래 명령을 실행해서 빌드 결과물의 용량이 어떻게 차지되는지 확인을 할 수 있다.
flutter build ios --analyze-size
iOS language를 Swift로 설정해서 프로젝트를 생성한 경우에는 아래와 같이 53MB 정도를 차지하는 것을 볼 수 있다. 아주 간단한 기능만 있는 템플릿 앱인데도 53MB 정도 차지하는 것은 문제가 있어 보인다. 구성을 잘 보면 libswiftCore.dylib가 22MB, libswiftFoundation.dylib가 11MB나 차지하는 것을 확인할 수 있다. 해당 요소는 Swift 언어 지원을 위한 라이브러리로 보이는데, 내가 만드는 Flutter 앱은 거의 dart만 사용해서도 충분히 만들었기 때문에 해당 요소는 필요가 없어보인다.
~/TutorialProjects/test1 ❯ flutter build ios --analyze-size 07:32:45
Building com.example.test1 for device (ios-release)...
Automatically signing iOS for device deployment using specified development team in Xcode project: 357ZP33ZM7
Running Xcode build...
└─Compiling, linking and signing... 3.2s
Xcode build done. 21.1s
▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
Runner.app 53 MB
Runner.app/
_CodeSignature/
CodeResources 17 KB
Runner 94 KB
Base.lproj/
Main.storyboardc 3 KB
LaunchScreen.storyboardc 3 KB
Assets.car 73 KB
AppIcon76x76@2x~ipad.png 1 KB
Frameworks/
libswiftCoreImage.dylib 327 KB
libswiftObjectiveC.dylib 391 KB
libswiftCore.dylib 22 MB
libswiftCoreGraphics.dylib 838 KB
libswiftUIKit.dylib 640 KB
libswiftMetal.dylib 386 KB
libswiftDispatch.dylib 1 MB
libswiftos.dylib 388 KB
libswiftCoreFoundation.dylib 327 KB
Flutter.framework 10 MB
App.framework 4 MB
Dart AOT symbols accounted decompressed size 3 MB
package:flutter 2 MB
dart:core 271 KB
dart:ui 228 KB
dart:typed_data 186 KB
dart:collection 102 KB
dart:async 84 KB
dart:ffi 57 KB
dart:convert 55 KB
dart:io 46 KB
dart:isolate 31 KB
package:vector_math/
vector_math_64.dart 25 KB
dart:developer 7 KB
dart:math 3 KB
package:test1/
main.dart 2 KB
dart:vmservice_io 990 B
package:collection/
src/
priority_queue.dart 854 B
dart:mirrors 601 B
dart:nativewrappers 260 B
Never 60 B
void/
<optimized out> 44 B
libswiftDarwin.dylib 488 KB
libswiftQuartzCore.dylib 330 KB
libswiftCoreAudio.dylib 399 KB
libswiftFoundation.dylib 11 MB
libswiftCoreMedia.dylib 391 KB
embedded.mobileprovision 12 KB
Info.plist 1 KB
▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒
A summary of your iOS bundle analysis can be found at: /Users/seungwoo.jo/.flutter-devtools/ios-code-size-analysis_07.json
To analyze your app size in Dart DevTools, run the following command:
flutter pub global activate devtools; flutter pub global run devtools --appSizeBase=ios-code-size-analysis_07.json
Built /Users/seungwoo.jo/TutorialProjects/test1/build/ios/iphoneos/Runner.app.
~/TutorialProjects/test1 ❯
Objective-C로 설정하는 경우에는 아래와 같이 Swift 관련 라이브러리가 앱에서 빠지게 되어 앱 용량이 13MB로 현저히 줄어드는 것을 확인할 수 있다. Flutter를 사용하면서 Swift를 사용하지 않는다면 프로젝트 구성 시에 iOS language를 Objective-C로 설정하여 앱 용량을 최적화하면 좋을 것 같다.
~/TutorialProjects/test2 ❯ flutter build ios --analyze-size 07:39:56
Building com.example.test2 for device (ios-release)...
Automatically signing iOS for device deployment using specified development team in Xcode project: 357ZP33ZM7
Running Xcode build...
└─Compiling, linking and signing... 3.4s
Xcode build done. 22.3s
▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
Runner.app 13 MB
Runner.app/
_CodeSignature/
CodeResources 13 KB
Runner 71 KB
Base.lproj/
Main.storyboardc 3 KB
LaunchScreen.storyboardc 3 KB
Assets.car 73 KB
AppIcon76x76@2x~ipad.png 1 KB
Frameworks/
Flutter.framework 10 MB
App.framework 4 MB
Dart AOT symbols accounted decompressed size 3 MB
package:flutter 2 MB
dart:core 271 KB
dart:ui 228 KB
dart:typed_data 186 KB
dart:collection 102 KB
dart:async 84 KB
dart:ffi 57 KB
dart:convert 55 KB
dart:io 46 KB
dart:isolate 31 KB
package:vector_math/
vector_math_64.dart 25 KB
dart:developer 7 KB
dart:math 3 KB
package:test2/
main.dart 2 KB
dart:vmservice_io 990 B
package:collection/
src/
priority_queue.dart 854 B
dart:mirrors 601 B
dart:nativewrappers 260 B
Never 60 B
void/
<optimized out> 44 B
embedded.mobileprovision 12 KB
Info.plist 1 KB
▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒
A summary of your iOS bundle analysis can be found at: /Users/seungwoo.jo/.flutter-devtools/ios-code-size-analysis_08.json
To analyze your app size in Dart DevTools, run the following command:
flutter pub global activate devtools; flutter pub global run devtools --appSizeBase=ios-code-size-analysis_08.json
Built /Users/seungwoo.jo/TutorialProjects/test2/build/ios/iphoneos/Runner.app.
Flutter로 만든 iOS 앱들의 용량이 너무 크게 나와서 최근 신경이 많이 쓰였는데 해결방법을 찾아서 다행이다. 참고로 Android 앱으로 Kotlin으로 생성한 경우와 Java로 생성한 경우 또한 비교를 해보았는데 Android 앱의 경우에는 두 가지 경우 모두 6MB의 빌드 결과물이 만들어졌다. Android의 경우에는 어떤 언어를 선택할지에 대해 크게 신경을 쓰지 않아도 괜찮을 것 같다.
'개발관련' 카테고리의 다른 글
PyCharm 예전 버전 UI로 되돌리는 방법 (0) | 2023.06.23 |
---|---|
Xcode 베타 버전 사용 시 주의할 점 (0) | 2023.06.23 |
아이폰에는 왜 백버튼이 없을까? (0) | 2023.06.13 |
[AdMob] Content obscuring Google-served ads 이슈 현상 및 조치 방안 (0) | 2023.05.05 |
[Flutter] Flutter 앱에 Firebase Analytics 추가할 경우, DebugView 사용 방법 및 삽질 경험 공유 (0) | 2023.05.02 |