티스토리 뷰

 

 

What’s new in Flutter 3.7

Material 3 updates, iOS improvements, and much more!

medium.com


이전 글에서는 Flutter 3.7의 UI 및 성능 개선 내용을 살펴보았다.
이번 글에서는 Swift 플러그인 마이그레이션, Bitcode 지원 종료 및 iOS 개발자를 위한 새로운 리소스 등을 소개하겠다.


1. Swift 플러그인 마이그레이션(Swift Migration for Plugins)

Apple이 Swift 기반 API를 적극 활용하면서, Flutter 플러그인도 Swift로 전환하는 작업이 진행되고 있다.
그 일환으로 quick_actions 플러그인이 Objective-C에서 Swift로 마이그레이션되었다.

🔹 왜 Swift로 전환해야 할까?

  • Apple의 공식 지원 방향: 최신 iOS API가 Swift에 최적화됨
  • 가독성과 유지보수성 향상: Swift 코드가 더 간결하고 유지보수가 쉬움
  • Swift Concurrency 활용 가능: async/await 및 Combine 같은 최신 비동기 처리 지원

🔹 기존 Objective-C 기반 플러그인 변환 예제

Objective-C에서 Swift로 마이그레이션하려면 기존 @objc 기반의 Objective-C 코드를 Swift로 변환해야 한다.

✅ 기존 Objective-C 코드

#import <Flutter/Flutter.h>

@interface QuickActionsPlugin : NSObject<FlutterPlugin>
@end

✅ Swift로 변환한 코드

import Flutter

public class QuickActionsPlugin: NSObject, FlutterPlugin {
  public static func register(with registrar: FlutterPluginRegistrar) {
    let channel = FlutterMethodChannel(name: "quick_actions", binaryMessenger: registrar.messenger())
    let instance = QuickActionsPlugin()
    registrar.addMethodCallDelegate(instance, channel: channel)
  }
}

이제 새로운 Flutter 플러그인을 개발할 때 Swift로 작성하는 것이 권장된다.
Flutter 공식 문서 참고

 

 iOS 개발자를 위한 리소스

이번 업데이트에서는 iOS 개발자가 Flutter에 적응하기 쉽게 다양한 문서와 자료가 제공되었다.

특히, SwiftUI를 사용하던 개발자가 Flutter의 위젯 시스템을 쉽게 이해할 수 있도록 안내하는 자료가 추가되었다.
SwiftUI와 Flutter의 기본 개념을 비교해보면 다음과 같다.

SwiftUI Flutter
View Widget
StateObject StatefulWidget
@Binding InheritedWidget
NavigationView Navigator

 


2. Bitcode 지원 종료 (Bitcode Deprecation)

Apple이 Xcode 14부터 Bitcode 지원을 중단하면서, Flutter도 이에 맞춰 Bitcode 지원을 제거했다.
이제 Bitcode 설정이 필요하지 않으며, App Store에서도 Bitcode를 허용하지 않는다.

🔹 Bitcode란?

Bitcode는 LLVM IR(Intermediate Representation) 형태의 코드로,
Apple이 최적화하여 빌드할 수 있도록 제공했던 기능이다.

하지만, Apple이 Bitcode의 필요성을 줄이며 지원을 중단하면서,
Flutter에서도 관련 설정을 제거하게 되었다.

🔹 Bitcode가 제거되면 어떤 영향을 받을까?

iOS 앱 크기 감소 (Bitcode 관련 메타데이터 제거)
빌드 속도 향상 (추가적인 Bitcode 변환 과정 생략)
Xcode 14 이후, Bitcode를 설정하면 App Store 제출 불가

대부분의 Flutter 프로젝트는 Bitcode를 활성화하지 않으므로, 큰 영향을 받지 않을 것이다.
그러나, 수동으로 Bitcode를 활성화한 경우 아래 설정을 변경해야 한다.

🔹 Bitcode 비활성화 방법

  1. Xcode에서 프로젝트 열기
    ios/Runner.xcworkspace를 Xcode에서 연다.
  2. Bitcode 설정 변경
    Enable Bitcode 옵션을 No로 변경

📌 Flutter Add-to-App 개발자의 경우, 호스트 프로젝트에서도 동일한 설정을 적용해야 한다.

 

 


3. iOS PlatformView에서 BackdropFilter 지원

Flutter 3.7에서는 iOS 네이티브 뷰에서도 블러 효과를 적용할 수 있도록 BackdropFilter 지원이 추가되었다.
이제 UiKitView 위젯을 BackdropFilter 안에 감싸면, iOS 네이티브 뷰도 Flutter 위젯과 동일한 블러 효과를 가질 수 있다.

이전에는 Flutter 위젯에는 BackdropFilter를 적용할 수 있었지만, 네이티브 iOS 뷰에는 불가능했다.
하지만 이제 iOS 네이티브 뷰도 블러 처리가 가능해지면서, Flutter와 네이티브 iOS UI가 더욱 자연스럽게 융합될 수 있다.

BackdropFilter(
  filter: ImageFilter.blur(sigmaX: 10.0, sigmaY: 10.0),
  child: UiKitView(
    viewType: 'native-view',
  ),
);

 

 

 


4. 메모리 관리 최적화 (Memory Management)

이번 업데이트에서는 Flutter의 메모리 관리가 최적화되었다.
이를 통해 GC(Garbage Collection)로 인한 프레임 지연을 줄이고, CPU 사용량과 메모리 점유율을 낮추는 효과를 기대할 수 있다.

 

 

🔹 주요 개선 사항

GC로 인한 애니메이션 지연 감소
CPU 사용량 최적화 (불필요한 백그라운드 GC 제거)
Flutter 앱의 메모리 사용량 절감

🔹 불필요한 네이티브 리소스 해제

기존에는 Dart VM이 객체를 GC 할 때까지 네이티브 리소스(예: GPU 버퍼, 텍스트 레이아웃 등)가 유지되었다.
하지만, Flutter 3.7에서는 Vertices, Paragraph, ImageShader 같은 객체의 네이티브 리소스를 명시적으로 해제할 수 있다.

이를 통해, 90% 이상의 프레임 빌드 시간이 최대 30% 이상 단축되었으며,
이는 더 부드러운 애니메이션과 적은 잔상(jank)으로 이어진다.

🔹 GPU 메모리 최적화

또한, Dart VM이 GPU 이미지의 메모리 크기를 추적하지 않도록 변경되었다.
기존에는 GPU 메모리를 Dart VM이 감시하면서 불필요한 GC가 발생하는 문제가 있었는데,
이를 제거하면서 GC로 인해 발생하는 불필요한 성능 저하를 방지했다.

final vertices = Vertices(VertexMode.triangles, points);
vertices.dispose(); // 사용 후 메모리 해제

🔹 Flutter 애니메이션 최적화 (RAIL API 적용)

Flutter 3.7부터 Dart VM의 RAIL 스타일 API를 활용하여 애니메이션 시 GC를 지연시킨다.
예를 들어, 화면 전환 애니메이션 중 GC가 발생하지 않도록 조정하여, 보다 부드러운 UI를 제공한다.

이러한 최적화로 인해, Flutter 3.7은 이전 버전보다 더욱 원활한 UX를 제공한다.

 

 


마치며

이번 Flutter 3.7 업데이트에서는
 Swift 기반 플러그인 전환 가이드 제공
 Bitcode 지원 종료 및 최적화
iOS 네이티브 뷰에서 BackdropFilter 블러 효과 지원
Flutter 메모리 관리 최적화 및 애니메이션 성능 개선
등의 기능이 추가되었다.


특히 나같이 iOS 개발자가 Flutter로 전환할 때 필요한 리소스 제공이 반가운 소식이다!

이미 플러터 공부를 거의 마쳤는데.. 그래도 iOS 개발자를 위한 Flutter 동시성 관련 문서는 한번 더 보면 좋을 것 같다.