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는 크로스 플랫폼이지만 네이티브 기능 사용 시 각 플랫폼의 권한 체계를 이해해야 한다는 점을 다시 느꼈다.