실기기에서 Flutter 앱이 혼자 안 돌 때: iOS는 JIT, Android는 옛 APK (feat. RN 비교)
앞서 vision camera 얼굴 인식을 Flutter로 재구현한 글의 마지막 과제가 실기기 검증 이었다. iOS·Android 둘 다에서 "앱이 혼자 안 돈다"는 같은 증상 을 만났는데, 파보니 원인이 서로 달랐다. 게다가 "RN…
12 posts
앞서 vision camera 얼굴 인식을 Flutter로 재구현한 글의 마지막 과제가 실기기 검증 이었다. iOS·Android 둘 다에서 "앱이 혼자 안 돈다"는 같은 증상 을 만났는데, 파보니 원인이 서로 달랐다. 게다가 "RN…
예전에 React Native + 로 얼굴 인식 카메라를 만들면서 성능 최적화를 한 적이 있다. 전체 프레임에서 얼굴을 찾으니까 연산이 너무 무거워서, ROI(관심 영역)로 인식 범위를 잘라내고 프레임 처리 빈도를 500ms로 thr…
시리즈 '웹뷰·네이티브 연동' 1편. 회사 앱은 상당 부분이 웹(피키 웹뷰)으로 굴러간다. 앱 껍데기는 Flutter, 알맹이는 웹. 이 구조에서 제일 많이 터진 게 웹↔네이티브 경계였다. 앱을 하다 보면 "이거 그냥 웹뷰로 감싸면 …
RN → Flutter 전환 시리즈의 크래시 편. 스토어 나가고 나서 Crashlytics에 쌓인 상위 크래시 두 개 — WebView dispose 시 , 그리고 scheme 누락 링크로 가 터지는 문제 — 를 어떻게 막았는지 적는…
Shorebird 배포 편에서 이어지는 버전 관리 편. OTA 코드푸시를 굴리다 보면 "이 사용자가 지금 정확히 어떤 버전 + 몇 번 패치를 쓰고 있나"가 미궁이 된다. 버전 문자열을 앱에 노출하고, versionCode를 어떻게 계…
RN → Flutter 전환 시리즈의 배포 편. RN 시절 CodePush로 하던 "스토어 심사 없이 Dart 코드만 갈아끼우는" 배포를 Flutter에서는 Shorebird로 옮겼다. release/patch 분리, dev/prod…
시리즈 '웹뷰·네이티브 연동' 2편. 딥링크는 "링크 누르면 앱 열리는 거" 아니냐고 쉽게 보다가 제일 오래 잡은 버그였다. 특히 앱이 완전히 꺼진 상태(cold start)에서 링크로 진입하는 케이스. 딥링크는 상태가 세 가지다. …
RN → Flutter 전환 시리즈. 딥링크가 실제로 어떻게 라우팅되는지(cold start 처리 등)는 다른 글에서 다룬다. 이 글은 그 앞단, AndroidManifest에서 딥링크가 앱으로 들어오는 입구를 어떻게 구성했는가 에 …
RN → Flutter 전환 시리즈. Shorebird 배포 파이프라인을 만들면서 CI에서 두 플랫폼의 코드 서명을 세팅해야 했다. iOS와 Android가 서명을 대하는 방식이 근본부터 달라서, 한 번 정리해두면 두고두고 도움이 된…
RN에서 Flutter로 넘어오는 시리즈 중 라우팅 편. 초반에 만들어 쓰던 "글로벌 바텀시트 컨트롤러"를 결국 걷어내고 push/pop + 로 돌아온 과정을 적는다. 처음엔 커스텀 컨트롤러였다 Flutter로 앱을 새로 짜면서 바텀…
시리즈 '웹뷰·네이티브 연동' 번외. 웹뷰 얘기는 아니지만, 커뮤니티 글쓰기처럼 네이티브 폼이 웹뷰와 섞여 도는 화면에서 만난 UX 버그다. "바텀시트를 열었는데 키보드가 안 내려간다"는 사소해 보이는 오류가, 결국 Flutter 버…
회사 앱을 React Native에서 Flutter로 새로 쓴 기록을 시리즈로 남긴다. 이 글은 그 시작. 왜 갈아엎었고, 무엇을 각오했는지에 대한 이야기다. RN 시절의 우리 원래 회사 앱은 React Native로 만들어져 있었다…