멀티플랫폼 포팅 실전 기록: iOS 앱 → Flutter 전환과 AI 협업

멀티플랫폼 포팅 실전 기록: iOS 앱 → Flutter 전환과 AI 협업

여행자 사이먼 / 2026-02-05 / 안드로이드 앱 개발

📝 3줄 요약

  1. UIKit + Realm 기반 iOS 앱을 Flutter로 포팅해 iOS/Android/macOS 빌드까지 성공했다. 다만 UI는 크게 깨져 재설계가 필요했다.

  2. 분석/설계는 Claude CLI, 구현/테스트는 Codex Extension이 주도하는 분업 구조로 진행했다.

  3. 작업기간은 2026-02-04 09:53:41 ~ 15:37:00(총 5시간 43분 19초), 빌드는 성공했지만 UI가 많이 깨져 체감 79점이었다.

이런 분들께 도움돼요

  • iOS 앱을 Flutter로 멀티플랫폼 포팅하려는 분

  • AI를 “분석/설계”와 “실행”으로 역할 분리해 협업하고 싶은 분

  • Realm 기반 앱의 데이터 정합성과 마이그레이션을 안전하게 다루고 싶은 분

이 글을 쓰게 된 계기

기존 앱은 UIKit + Realm 기반의 계층형 할 일 관리 앱이었다. iOS 전용 구조를 Flutter로 옮겨 iOS/Android/macOS까지 확장하려 했고, 포팅 규모가 커서 AI 협업을 구조화해 생산성을 높이는 방식으로 접근했다.

준비물

Step-by-Step 과정 (4단계 요약)

  1. 분석(09:53–11:35) 빌드 에러 원인부터 추적했다. NextGrowingTextView 사용 위치, iOS deployment target, Podfile/Podspec/Xcode 설정을 조사했고, 이후 전체 코드 구조를 전수 분석해 ANALYSIS_FOR_FLUTTER_MIGRATION.md에 정리했다. 이 단계에서 데이터 정합성 규칙과 핵심 동작 요구사항을 확정했다.

  2. 계획(12:02–12:14) plan.mdtodo.md를 확정했다. 듀얼 필드 마이그레이션(dueDateString → dueDateAt), Quick Axing 자동 이동, 복제 시 편집 팝업, case-insensitive 검색, Post‑MVP 알람 등을 명시해 구현 기준을 고정했다.

  3. 구현/테스트(14:19–14:35) Codex가 MapType 확장 규칙, 이동/복사, 정렬, repository 쿼리 수정 등을 수행했다. in-memory Realm 테스트를 추가하고 flutter test 통과로 정합성 규칙을 “테스트로 고정”했다.

  4. 빌드/디버깅(14:40–15:37) Android 빌드와 iPhone 실기기 실행을 확인했다. Android 빈 화면 문제는 schemaVersion 불일치와 seed DB 로드 흐름으로 추적했고, iOS는 CocoaPods 설치 누락과 Runner.xcworkspace 오픈 문제로 정리했다.

삽질 기록 & 해결 방법 (결과 포함)

  • iOS 빌드 실패: Podfile/Deployment Target 충돌 → Podfile post_install + pbxproj 타깃 정리 → iOS 빌드 재시도 경로 확보

  • Android 빈 화면: schemaVersion 불일치 + seed DB 로드 누락 → schemaVersion 6 통일 + Reset DB 도입 → 초기 데이터 표시 가능

  • CocoaPods 미설치: pod install 누락 → pod install 실행 + Runner.xcworkspace로 열기 → iOS 의존성 정상 연결

  • Realm 임시파일 증가: .management, .lock 생성 → flutter clean + build 폴더 정리 → 빌드 캐시 정상화

포팅 화면

  • 원본(아이폰)

분할 탱크로 생활이 편리해집니다. - 스크린샷

  • 포팅한 화면(안드로이드폰/아이폰)

<안드로이드>

휴대폰의 Lighthouse 앱 스크린샷

<아이폰>

핵심 인사이트

  • 분석/설계는 Claude, 실행은 Codex로 하였는데 서로 협업하는 것이 효율적이었다.

  • “문서 → 구현 → 테스트” 파이프라인이 명확할수록 협업 품질이 안정됐다.

  • 포팅 성공 여부는 UI보다 데이터 정합성과 마이그레이션 안정성이 먼저다.

마무리

iOS/Android/macOS 빌드까지 성공했고, UI는 재작업 중이다.

참고로 이 사례글을 쓰기 위해 Rose’s 플러그인으로 Claude 응답 시점마다 자동 스크린샷을 남겼고, 일부 잘못 찍힌 컷은 삭제하고 나머지 54장을 codex에게 읽고 요약을 시켜 전체 맥락을 복원했다.

Rose’s 플러그인으로 남긴 스크린샷 덕분에, 포팅 과정의 중요한 프롬프트와 AI 응답을 역으로 추적해 정리할 수 있었다. 전체 작업시간은 5시간 43분 19초, 체감 성과는 79점. “분석은 Claude, 구현은 Codex” 분업이 가장 큰 생산성 포인트였다.

Q&A

Q. UI는 완성됐나요? A. 빌드는 성공했지만 UIKit → Flutter 전환 과정에서 레이아웃/폰트/컴포넌트가 재해석되어 디자인이 깨졌고, UI 재설계를 진행 중이다.

Q. 왜 Claude CLI와 Codex를 분리해서 썼나요? A. Claude는 분석/설계·문서화에 강했고, Codex는 구현·수정·테스트 자동화에 강했다. 무엇보다도 Codex는 pro요금제라 토큰이 넘쳐나서 주로 모든 잡일을 시키고 혼자하는것 보다 다른 agent와 협업을 시키면 빈틈을 많이 줄여준다.

Q. Windows 빌드는 어떻게 하나요? A. 일반적으로 flutter build windows로 빌드하면 build/windows/runner/Release에 exe가 생성된다. 안타깝게도 내 노트북이 맥북이라 윈도우 빌드는 못해보았음.

이미지(대표 컷 + 설명)

  • session_20260204_111410_531.png — 정합성 규칙과 핵심 요구사항 보강

  • session_20260204_120248_912.pngplan.md로 포팅 로드맵 확정

중국어와 중국어가 포함된 컴퓨터 화면의 스크린샷
  • session_20260204_121227_450.pngtodo.md 백로그 한국어 정리

  • session_20260204_150050_611.png — Android 빈 화면 원인 분석과 seed DB 대응

다양한 항목이 포함된 컴퓨터 화면의 스크린샷
  • session_20260204_152112_061.png — iOS Pod install 및 Runner.xcworkspace 안내

도움 받은 글

이 글은 벨라님의 아래 글에서 착안하여 codex에게 사례글을 만들라고 시켜서 이 글을 작성하였습니다. 벨라님 감사해요.
https://www.gpters.org/llm-service/post/how-nondevelopers-can-write-ClZvzw1fd5WtPud


2
1개의 답글

뉴스레터 무료 구독

👉 이 게시글도 읽어보세요