Flutter 앱에서 네이티브 카메라 기능 연동하며 겪은 문제

문제 상황

회사 프로젝트에서 사용자가 사진을 찍어 업로드하는 기능을 구현해야 했다. Flutter의 image_picker 플러그인(0.7.5)을 사용했는데, 개발 환경에서는 잘 작동했지만 실제 디바이스에서 권한 에러가 발생했다.

Android 설정

Android는 AndroidManifest.xml에 권한을 추가해야 했다.

<uses-permission android:name="android.permission.CAMERA"/>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>

Android 10 이상에서는 android:requestLegacyExternalStorage="true" 속성도 추가했다.

iOS 설정

iOS는 Info.plist에 사용 목적 문구를 명시해야 한다.

<key>NSCameraUsageDescription</key>
<string>사진 촬영을 위해 카메라 접근이 필요합니다</string>
<key>NSPhotoLibraryUsageDescription</key>
<string>사진 선택을 위해 갤러리 접근이 필요합니다</string>

이 문구를 누락하면 앱이 크래시되므로 주의해야 한다.

권한 처리

런타임 권한 처리를 위해 permission_handler 플러그인(8.1.0)을 함께 사용했다.

import 'package:permission_handler/permission_handler.dart';

Future<void> requestCameraPermission() async {
  final status = await Permission.camera.request();
  if (status.isDenied) {
    // 권한 거부 처리
  }
}

결과

플랫폼별 설정을 완료한 후 양쪽 모두에서 정상 작동을 확인했다. Flutter는 크로스 플랫폼이지만 네이티브 기능 사용 시 각 플랫폼의 권한 체계를 이해해야 한다는 점을 다시 느꼈다.

Flutter 앱에서 네이티브 카메라 기능 연동하며 겪은 문제