티스토리 뷰

 

 

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 이후 버전들도 살펴보면서 그동안 플러터는 어떤 업데이트를 지원해왔는지 살펴 볼 예정이다!