티스토리 뷰
What’s new in Flutter 3.7
Material 3 updates, iOS improvements, and much more!
medium.com
이전 글에서는 Flutter 3.7의 메모리 관리 최적화 및 성능 개선 내용을 살펴보았다.
이번 글에서는 macOS 지원 변경, toImageSync API 추가, 커스텀 셰이더 개선, 폰트 핫 리로드, iOS 애니메이션 개선 등을 소개하겠다.
1. macOS 10.11 ~ 10.13 지원 종료
Flutter 3.7부터 macOS 10.11(El Capitan), 10.12(Sierra), 10.13(High Sierra) 지원이 공식적으로 종료되었다.
즉, 이제 Flutter 앱을 실행하려면 최소 macOS 10.14(Mojave) 이상이 필요하다.
🔹 macOS 10.13 지원 종료 이유
- 구버전 macOS 사용자 수가 적음 → 유지 보수 부담 감소
- 코드베이스 단순화 → 최신 macOS 기능 활용 가능
- Metal 렌더링 강제 적용 → OpenGL 백엔드 제거
특히, iOS 및 macOS에서 Metal을 기본 렌더러로 사용하도록 변경되면서,
OpenGL 백엔드가 완전히 제거되었다.
이로 인해 Flutter 엔진 크기가 약 100KB 줄어드는 효과도 얻을 수 있었다.
2. toImageSync API 추가
Flutter 3.7에서는 Picture.toImageSync와 Scene.toImageSync API가 추가되었다.
이 API는 기존 toImage(비동기)와 달리, 동기 방식으로 이미지를 생성할 수 있다.
🔹 toImageSync 활용 예시
✅ 고해상도 이미지 스냅샷을 여러 프레임에서 재사용
✅ 멀티 패스 필터를 적용한 후 최종 결과를 이미지로 변환
✅ 커스텀 셰이더 적용 후 최적화된 이미지 생성
final picture = recorder.endRecording();
final image = picture.toImageSync(100, 100);
🔹 성능 개선 효과
기존 toImage는 GPU 컨텍스트에서 이미지를 동기화하지 않아 성능 저하가 발생했지만,
toImageSync는 백그라운드에서 이미지를 GPU 메모리에 유지하여,
페이지 전환 애니메이션의 래스터화(rasterization) 속도를 절반 수준으로 감소시킨다.
덕분에 90Hz~120Hz 주사율을 지원하는 기기에서 더욱 부드러운 애니메이션을 구현할 수 있다.
3. 커스텀 셰이더 지원 개선
Flutter 3.7에서는 커스텀 셰이더(Shader) 기능이 대폭 개선되었다.
🔹 주요 변경 사항
✅ 셰이더 컴파일러 기본 내장 → pubspec.yaml에서 GLSL 셰이더를 정의할 수 있음
✅ 셰이더 핫 리로드 지원 → 개발 중 셰이더 수정 즉시 반영 가능
✅ Skia & Impeller 렌더러 모두 커스텀 셰이더 지원
이제 Flutter에서 GLSL(오픈GL 셰이딩 언어)로 작성한 셰이더를 직접 적용할 수 있으며,
iOS와 Android에서도 커스텀 셰이더를 쉽게 활용할 수 있다.
flutter:
shaders:
- shaders/my_shader.frag
커스텀 셰이더를 사용하면 고급 그래픽 효과(그라데이션, 블러, 입자 효과 등)를 더욱 쉽게 구현할 수 있다.
4. 폰트 핫 리로드(Font Asset Hot Reload)
기존 Flutter에서는 pubspec.yaml에 새로운 폰트를 추가할 경우 앱을 재빌드해야 반영되었다.
하지만 이제 폰트 핫 리로드 기능이 지원되면서,
앱을 다시 실행하지 않고도 새로운 폰트를 즉시 적용 가능하다.
🔹 폰트 핫 리로드 적용 방법
flutter:
fonts:
- family: CustomFont
fonts:
- asset: fonts/CustomFont.ttf
폰트 추가 후 flutter run 상태에서 변경하면 즉시 반영된다.
이를 통해 디자인 작업 시 빠르게 폰트를 적용하고 확인하는 것이 가능하다.
5. iOS 애니메이션 지연(jank) 감소
Flutter 3.7에서는 iOS 애니메이션 성능이 개선되었다.
특히, 120Hz 주사율을 지원하는 iPhone(iPhone 13 이상)에서 더욱 부드러운 애니메이션을 제공한다.
🔹 개선된 사항
✅ CADisplayLink 더미(dummy) 추가 → 터치 제스처 시 최대 주사율 유지
✅ 키보드 애니메이션 최적화 → CADisplayLink 주사율을 Flutter 엔진과 동기화
이제 iOS에서 터치 제스처 및 키보드 애니메이션이 더욱 부드럽게 작동하며,
Flutter 앱의 UI/UX가 개선될 것으로 기대된다.
마치며
이번 Flutter 3.7 업데이트에서는
✅ macOS 10.11~10.13 지원 종료 및 OpenGL 제거
✅ 동기식 이미지 렌더링(toImageSync) 추가
✅ 커스텀 셰이더 핫 리로드 및 GLSL 지원 강화
✅ 폰트 핫 리로드 지원
✅ iOS 애니메이션 지연(jank) 감소
등의 기능이 추가되었다.
특히 렌더링 성능 및 iOS UI/UX 개선이 두드러지는 업데이트였다.
이제 원문에서 소개된 내용은 모두 훑어봤는데 개인적으로는 iOS 관련 업데이트가 많은 부분을 차지한 것 같다.
아무래도 iOS 버전이 빨리빨리 업데이트 되다보니 iOS 버전 점유율만 살펴봐도 17~18버전을 많이 쓰는터라,
이전 버전을 계속 지원해봤자 의미도 없고 새로운 SwiftAPI 도입마다 대응하는 것도 쉽지 않기 때문에.. 그런것같다.
Swift 네이티브 iOS 개발을 아직 못 놓고 있다보니 ㅋㅋ iOS 관련 내용이 많아서 읽는 재미가 있었다.
현재(2025.02.15)기준 마지막 릴리즈는 3.29.0 이다..!
어쩌다 3.7 업데이트 글을 먼저 보게되어서 이때 시점부터 살펴보기 시작했는데
영어 원문으로 직접 읽다보니 번역하면서 기록해두는 게 좋을 것 같아서 글을 쓰게 되었다.
이제 3.10.0 이후 버전들도 살펴보면서 그동안 플러터는 어떤 업데이트를 지원해왔는지 살펴 볼 예정이다!
- Total
- Today
- Yesterday
- 플러터
- jsonkey
- 오블완챌린지
- flutter_lints
- 티스토리챌린지
- 다트문법
- 플러터네이티브
- llm 설치
- ios
- 오블완
- flutter 3.7
- flutter3.7
- slivers
- flutter updates
- swiftmigration
- fromjson()
- 렌더링최적화
- lints
- SWIFT
- tojson()
- analysis_options
- sliver
- 개발신입
- sliverlist
- 플러터 업데이트
- flutter
- 플러터업데이트
- 플러터ios애니메이션
- 낙관적 업데이트 패턴
- jsonserializable
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |