2026년 8월 14일 기준으로 Flutter 3.44는 iOS와 macOS 의존성 관리의 기본값을 Swift Package Manager로 바꿨습니다. Flutter 공식 문서도 CocoaPods를 호환성 목적으로 계속 지원한다고 설명합니다. 따라서 이번 주에는 새 프로젝트와 단순한 기존 프로젝트를 먼저 옮기고, 플러그인이 많거나 Add-to-App인 프로젝트는 CocoaPods를 남긴 두 갈래 검증을 시작하는 것이 안전합니다. (docs.flutter.dev)

마지막 업데이트: 2026년 8월 14일. Flutter 3.44 공식 문서, Swift Package Manager 마이그레이션 문서, Add-to-App 문서, CocoaPods 공식 공지를 기준으로 확인했습니다.

이 글은 Flutter 3.44로 기존 iOS 앱을 올리려는 독립 개발자에게 맞습니다. 원격 맥에서 자동 빌드를 관리하는 소규모 팀, Flutter 플러그인 제작자, 여러 Flavor와 네이티브 타깃을 운영하는 팀도 대상입니다. 단순히 flutter run이 되는지만 확인하려는 글이 아닙니다. 실제 출시 가능한 Archive와 서명 결과까지 판단합니다.

01

프로젝트 유형별로 먼저 결론을 나누십시오

Flutter 3.44 iOS 빌드의 핵심은 CocoaPods를 당장 지우는 데 있지 않습니다. 의존성 해결, 앱 컴파일, Release Archive, 코드 서명과 배포를 각각 통과했는지 확인하는 데 있습니다.

프로젝트 유형 2026년 권장 방향 CocoaPods 처리
새 Flutter 앱 Swift Package Manager 우선 기본 구성을 유지
일반적인 기존 앱 마이그레이션 브랜치에서 검증 통과 전까지 보관
플러그인이 많은 앱 혼합 구성으로 검증 바로 삭제하지 않음
Add-to-App 별도 통합 절차로 확인 기존 연결 방식을 먼저 분리
여러 타깃과 맞춤 스크립트 두 환경을 비교 복구 가능한 상태 유지

Flutter 공식 릴리스 기록에는 Swift Package Manager 기본 활성화, 호환되지 않는 플러그인에 대한 경고, CocoaPods 관련 검사를 경고 수준으로 낮춘 변경이 함께 기록되어 있습니다. 이 조합은 한 번에 모든 프로젝트가 완전히 전환된다는 뜻이 아닙니다. 프로젝트에 따라 Swift Package Manager와 CocoaPods가 함께 남을 수 있다는 뜻입니다. (docs.flutter.dev)

새 프로젝트는 기본 구성을 되돌리지 않는 편이 낫습니다

새로 만든 Flutter 3.44 프로젝트에는 오래된 Podfile, Ruby 버전 문제, 과거 빌드 스크립트가 적습니다. 따라서 특별한 호환성 문제가 없다면 Flutter가 생성한 Swift Package Manager 구성을 유지하는 편이 관리 비용이 낮습니다.

새 플러그인을 추가할 때는 다음 두 가지를 확인하십시오.

  • 플러그인이 iOS 또는 macOS용 Package.swift를 제공하는지 확인합니다.
  • Swift Package Manager를 지원하지 않는 플러그인이 CocoaPods 방식으로 연결되는지 확인합니다.

공식 플러그인 개발 문서는 Swift Package Manager를 기본 전략으로 설명하면서도, 이전 프로젝트와의 호환을 위해 podspec 의존성을 유지할 수 있다고 안내합니다. 그러므로 오래된 튜토리얼을 따라 Podfile을 다시 복원하는 것은 좋은 출발점이 아닙니다. 핵심 플러그인이 명시적으로 CocoaPods만 요구할 때만 예외로 두십시오. (docs.flutter.dev)

일반적인 기존 앱은 별도 브랜치에서 비교하십시오

네이티브 수정이 많지 않고 널리 사용되는 Flutter 플러그인 위주라면 2026년에 전환을 시도할 만합니다. 다만 현재 출시 가능한 커밋을 먼저 고정해야 합니다.

다음 정보를 별도 파일에 남기십시오.

기록 항목 마이그레이션 전 마이그레이션 후
Flutter SDK 현재 출시 커밋 3.44 기준 커밋
패키지 잠금 파일 저장 새 결과 저장
의존성 해결 성공 여부와 경고 성공 여부와 경고
Debug 실행 실제 기기 결과 실제 기기 결과
Release Archive 생성 및 서명 결과 생성 및 서명 결과

시뮬레이터가 실행된 것만으로는 충분하지 않습니다. 실제 기기에서 앱을 열고, Release Archive를 만들고, 서명된 앱 내부의 프레임워크와 확장 타깃을 확인해야 합니다.

CocoaPods를 제거하는 행위는 마이그레이션의 목표가 아닙니다. 출시 가능한 빌드와 복구 가능한 개발 환경을 확보하는 것이 목표입니다.

02

플러그인과 네이티브 타깃이 많다면 두 갈래로 운영하십시오

플러그인 밀도가 높은 앱은 전환 실패 원인이 앱 코드가 아니라 네이티브 의존성일 수 있습니다. 특히 사설 Pod, 맞춤형 Flavor, 위젯 확장, 알림 서비스 확장, 네이티브 테스트 타깃이 함께 있으면 단일 타깃만 확인해서는 안 됩니다.

확인 순서는 다음과 같습니다.

  1. pubspec.yaml에서 모든 Flutter 플러그인을 목록화합니다.
  2. 각 플러그인의 iOS 폴더에 Package.swift가 있는지 확인합니다.
  3. podspec만 제공하는 플러그인과 사설 저장소 의존성을 따로 표시합니다.
  4. 앱 타깃 외에 확장 타깃과 테스트 타깃의 의존성을 확인합니다.
  5. Flavor별 빌드 설정과 스크립트가 같은 패키지를 참조하는지 비교합니다.
  6. Swift Package Manager만 사용하는 빌드와 기존 CocoaPods 빌드를 각각 실행합니다.
  7. 출시 브랜치에는 통과한 경로와 되돌리는 명령을 함께 기록합니다.

Flutter는 네이티브 의존성 설명 파일을 확인한 뒤 Swift Package Manager 또는 CocoaPods 연결을 자동으로 구성할 수 있습니다. 따라서 마이그레이션 결과가 혼합 상태라고 해서 실패로 단정하면 안 됩니다. 반대로 CocoaPods 폴더가 남아 있다는 이유만으로 성공으로 볼 수도 없습니다. 실제 타깃별 빌드 결과가 기준입니다. (docs.flutter.dev)

Add-to-App은 일반 앱과 같은 방식으로 처리하지 마십시오

기존 iOS 앱에 Flutter 모듈을 넣는 Add-to-App 프로젝트는 호스트 Xcode 프로젝트가 중심입니다. Flutter 공식 문서는 iOS 모듈을 Swift Package로 만들어 기존 빌드 시스템에 통합하는 경로를 별도로 제공합니다. 기존 CocoaPods 또는 임베디드 프레임워크 연결을 사용했다면 Swift Package Manager 절차 전에 기존 Flutter 연결을 제거해야 합니다. (docs.flutter.dev)

이 유형에서는 다음 항목을 따로 확인하십시오.

  • 상대 경로로 연결된 Flutter 모듈 위치
  • 호스트 앱의 맞춤형 빌드 설정
  • 앱 타깃과 확장 타깃의 패키지 연결
  • Flutter 엔진 임베드 단계
  • 여러 구성 파일에서 사용하는 스크립트 순서

Add-to-App 공식 문서가 일반 Flutter 앱과 별도의 통합 절차를 제공하는 이유가 여기에 있습니다. 일반 앱에서 자동 마이그레이션이 성공했더라도 호스트 앱의 Archive가 성공한다는 보장은 없습니다. (docs.flutter.dev)

03

Flutter 3.44 iOS 빌드를 깨끗한 환경에서 검증하는 절차

로컬 맥에서만 성공한 빌드는 캐시와 개인 설정에 의존할 가능성이 있습니다. 특히 DerivedData, 패키지 캐시, 저장된 키체인, 이전에 생성된 Pods 폴더가 문제를 숨길 수 있습니다.

1단계: 출시 가능한 커밋을 고정합니다

마이그레이션 전에 현재 앱의 출시 커밋과 Flutter SDK 버전을 기록합니다. 패키지 잠금 파일, Xcode 프로젝트 파일, 빌드 스크립트도 함께 보관합니다.

2단계: 깨끗한 원격 맥에서 저장소를 다시 받습니다

기존 작업 폴더를 복사하지 말고 저장소를 새로 내려받습니다. Flutter SDK와 패키지를 다시 설치합니다. 인증서와 프로비저닝 프로파일도 테스트용과 출시용을 구분해 배치해야 합니다.

VpsMesh의 원격 맥 주문 안내를 이용하면 별도 맥을 구매하지 않고도 이런 분리된 macOS 검증 환경을 만들 수 있습니다. 단기 마이그레이션 테스트라면 상시 빌드 서버보다 임시 환경이 더 합리적일 수 있습니다.

3단계: 의존성 해결 결과를 저장합니다

다음 결과를 로그로 남깁니다.

  • Flutter 패키지 해결 성공 여부
  • Swift Package Manager 패키지 해결 성공 여부
  • CocoaPods로 남은 플러그인 목록
  • 경고와 오류의 구분
  • 생성된 네이티브 파일의 변경 내역

이 단계에서 실패하면 컴파일이나 서명 단계로 넘어가지 마십시오. 의존성 해결 실패를 뒤의 오류로 덮으면 원인을 찾기 어려워집니다.

4단계: Debug와 Release를 따로 빌드합니다

Debug 실행은 개발용 설정과 캐시를 사용할 수 있습니다. Release는 최적화, 링크, 리소스 임베드, 서명 설정이 달라집니다.

따라서 명령줄 빌드와 Xcode Archive를 모두 실행하십시오. Flutter 공식 문서의 iOS 통합 절차도 Flutter 3.44 이상과 Xcode 15 이상 환경을 전제로 안내합니다. (docs.flutter.dev)

5단계: 실제 기기와 모든 타깃을 확인합니다

시뮬레이터에서만 정상인 플러그인은 카메라, 알림, 키체인, 백그라운드 작업에서 실패할 수 있습니다. 실제 기기에서는 다음을 확인하십시오.

  • 앱 실행과 첫 화면 로딩
  • 네이티브 플러그인 호출
  • 푸시 알림과 키체인 접근
  • 앱 확장 실행
  • Flavor별 설정값
  • 백그라운드 작업

6단계: 서명과 업로드 전 검사를 분리합니다

서명된 Archive가 생성됐다는 사실과 App Store 업로드가 가능한 상태라는 사실은 다릅니다. 인증서와 프로비저닝 프로파일이 올바른 타깃에 연결됐는지 확인하고, 업로드 전 검사에서 번들 식별자와 권한 설정을 다시 봅니다.

7단계: 실패 위치를 네 가지로 분류합니다

실패 구간 먼저 볼 항목 되돌림 판단
의존성 해결 플러그인 지원 방식, 저장소 접근 기존 방식 유지
컴파일 Swift 코드, 헤더, 플랫폼 조건 문제 플러그인 격리
Archive 타깃, 리소스, 임베드 단계 두 갈래 유지
서명과 배포 인증서, 프로파일, 권한 출시 브랜치 보류
04

이번 주에 사용할 마이그레이션 판정표

다음 항목을 모두 체크한 뒤 결론을 내리십시오.

  • [ ] 새 프로젝트 또는 별도 마이그레이션 브랜치를 만들었습니다.
  • [ ] 모든 Flutter 플러그인의 Swift Package Manager 지원 여부를 기록했습니다.
  • [ ] CocoaPods만 지원하는 플러그인과 사설 Pod를 분리했습니다.
  • [ ] 앱 타깃, 확장 타깃, 테스트 타깃을 모두 목록화했습니다.
  • [ ] 깨끗한 원격 맥에서 저장소와 의존성을 다시 받았습니다.
  • [ ] Debug 실행과 실제 기기 테스트를 끝냈습니다.
  • [ ] Release Archive를 생성했습니다.
  • [ ] 서명 결과와 업로드 전 검사를 확인했습니다.
  • [ ] 기존 Podfile과 잠금 파일을 복구할 수 있게 보관했습니다.
  • [ ] 실패 시 돌아갈 커밋과 빌드 명령을 문서화했습니다.

체크 결과를 이렇게 해석하면 됩니다.

  • 모든 항목이 통과하면 Swift Package Manager를 기본 경로로 채택합니다.
  • 의존성만 CocoaPods에 남으면 혼합 구성을 유지합니다.
  • Archive나 서명이 실패하면 CocoaPods 삭제를 중단합니다.
  • Add-to-App이나 여러 타깃에서 실패하면 호스트 Xcode 프로젝트부터 다시 검토합니다.
05

CocoaPods의 향후 일정은 과장하지 말고 대비하십시오

CocoaPods 공식 공지는 2026년 12월 2일부터 Trunk를 읽기 전용으로 전환할 계획이라고 밝혔습니다. 동시에 기존 빌드가 즉시 중단되는 것은 아니며, 일정은 조정될 수 있다고 설명합니다. 따라서 현재 Pod가 바로 빌드되지 않는다고 단정하거나, 모든 프로젝트가 특정 날짜에 즉시 고장 난다고 예상해서는 안 됩니다. (blog.cocoapods.org)

현재 상태 지금 할 일 하지 말아야 할 일
새 앱 Swift Package Manager 우선 적용 예전 튜토리얼만 보고 CocoaPods 복원
기존 앱 호환성 브랜치 생성 Podfile 즉시 삭제
오래된 플러그인 대체 경로와 유지 비용 조사 지원 여부를 추측해 강제 전환
사설 Pod 저장소와 배포 절차 확인 사설 저장소를 공개 경로로 변경
지속적 통합 깨끗한 빌드 노드에서 반복 검증 개발 맥의 캐시를 빌드 서버에 복사

플러그인 제작자는 Package.swift, 네이티브 리소스, 플랫폼 버전, 테스트 타깃을 함께 검증해야 합니다. Flutter 공식 플러그인 문서도 Swift Package Manager용 네이티브 의존성 선언과 기존 CocoaPods 호환 설정을 별도로 설명합니다. 하위 호환이 필요한 플러그인이라면 두 경로를 모두 유지하는 기간을 계획해야 합니다. (docs.flutter.dev)

06

기존 장비와 원격 맥 중 어떤 환경이 맞는지 판단하십시오

기존 컴퓨터에서 모든 검증을 처리하면 편하지만, 작업 중인 개발 환경과 출시 검증 환경이 섞입니다. 저장 공간, 키체인, Xcode 설정, 캐시가 서로 영향을 줍니다.

선택지 적합한 상황 단점
현재 사용하는 맥 매일 개발하고 즉시 디버깅해야 할 때 환경 분리가 어렵습니다
임시 원격 맥 마이그레이션 전후를 비교할 때 네트워크와 원격 접속을 확인해야 합니다
상시 원격 맥 지속적 통합과 야간 빌드가 필요할 때 장기 운영과 권한 관리가 필요합니다
새 맥 구매 장기간 무거운 빌드를 계속 처리할 때 초기 비용과 관리 부담이 큽니다

VpsMesh의 맥 미니 렌탈 구성은 임시 검증과 상시 빌드 환경을 분리해 비교할 때 참고할 수 있습니다. 서울이나 도쿄처럼 작업자와 가까운 위치가 필요하다면 지역별 원격 맥 선택 기준도 함께 확인하는 편이 좋습니다.

다만 원격 맥이 모든 팀에 맞는 것은 아닙니다. 물리 아이폰을 계속 연결해야 하거나, 장기간 안정적인 고부하 작업을 수행하거나, 로컬 디버깅 지연을 허용하기 어려운 팀이라면 직접 구매가 더 단순할 수 있습니다.

현재 사용 중인 컴퓨터만으로 마이그레이션하면 캐시가 누락된 의존성, 개인 키체인, 오래된 Pod 파일이 문제를 숨길 수 있습니다. 반대로 VpsMesh의 원격 맥을 임시로 사용하면 깨끗한 macOS 환경에서 Flutter 3.44 iOS 빌드를 복제하고, 통과한 뒤 상시 빌드 환경을 바꿀지 결정할 수 있습니다. 마이그레이션 테스트와 지속적 통합을 분리해야 하는 독립 개발자에게는 이 순서가 장비를 먼저 구매하는 것보다 실패 비용을 줄이는 선택입니다.