기존 Flutter Android 앱의 iOS 미동작 원인을 분석하고,
카메라 실시간 스캔·갤러리 스캔·히스토리·플래시를 추가한
iOS 전용 TFLite 파이프라인으로 완전 재구현했습니다.
.tflite 모델 파일을 iOS 포드에 넘기면 런타임 크래시 또는 silent fail로 스캔 콜백이 전혀 호출되지 않습니다.
수정 방법은 tflite_flutter 패키지로 교체하는 것입니다 — tflite_flutter는 iOS에서도 TFLite 모델을 직접 로드할 수 있습니다.
단, 640×640 입력 버퍼(~4.9 MB)와 ~50 MB 모델을 동시에 올릴 때 OOM 위험이 있어,
CoreML 컴파일 전에 Dart 힙에서 버퍼를 먼저 선점하는 패턴을 적용했습니다.
sdk: ^3.8.1로 선언되어 있으나, 의존성 해결 결과 실제로는 Dart 3.9.0+ / Flutter 3.32.1+가 필요합니다.
개발 환경이 이 요건에 못 미치면 flutter pub get 단계부터 실패합니다.
iPhone SE 3세대(A15 Bionic, iOS 17)에서 Flutter 앱을 직접 빌드·설치해 검증했습니다. CoreML(Apple Neural Engine) 위임 모드로 추론이 동작하며 Android CPU delegate와 다른 클래스 분포를 보이는 것을 로그로 확인했습니다.
| 항목 | 결과 | 비고 |
|---|---|---|
| Flutter 빌드 (iOS 14.0+) | ✅ 성공 | CocoaPods 1.16.2, Xcode 16 |
| YOLO TFLite 모델 로드 | ✅ 성공 | tflite_flutter 0.12, CoreML 위임 |
| 카메라 실시간 추론 | ✅ 동작 | CoreML(ANE) max_conf 0.97+ |
| TwinCode 디코딩 (정상 조명) | ✅ 성공 | 2회 이내 안정 디코딩 |
| 갤러리 이미지 스캔 | ✅ 성공 | image_picker 권한 포함 |
| 원본 iOS 미동작 원인 확인 | ✅ 정적분석·수정 | 소스코드 정적 분석으로 ultralytics_yolo CoreML-only 원인 특정 후 수정 |
원본 5단계 오류 복구 전략에 Pass 6·7을 추가해 7단계 다중 패스 아키텍처로 확장했습니다. CoreML 추론의 클래스 혼동 패턴을 실측 로그에서 분석하고 혼동 맵으로 정리해 패스마다 순서 있게 후보를 확장합니다.