flutter 소스를 맥북에서 빌드하기 위해 윈도우에서 작업한 플러터 소스를 맥북으로 옮겼는데 몇가기 문제가 발생하여 기록함
맥북에서 빌드하기 위해서는 기본적으로 XCode, CocoaPods는 이미 설치 되어 있어야 한다.
flutted와 XCode, CocoaPods 관계는 다음글 참고
flutter, XCode, CocoaPods 관계 알아보기
flutter, XCode, CocoaPods 관계 알아보겠습니다. 내가 헷갈려서 정리 하는 차원. flutter는 코드를 작성하는 구글이 만든 앱 크로스 플랫폼XCode는 맥용 IDE, 빌더, 인증담당CocoaPods는 맥에서 라이브러리 관
dtbb.tistory.com
flutter 윈도우에서 작업한 소스 맥북에서 빌드시 체크할 부분
1. 경로 체크
윈도우의 경로와 맥북에서의 경로 안맞아서 Podfile에서 에러가 발생함,
프로젝트폴더/ios/Flutter 폴더 아래에 2개의 파일에서 경로 수정
- Generated.xcconfig
- flutter_export_environment.sh
FLUTTER_ROOT=/Users/사용자id/development/flutter
FLUTTER_APPLICATION_PATH=/Users/사용자id/Desktop/work/Flutter/프로젝트폴더
위 2개의 항목을 각각의 파일에서 찾아 올바른 경로로 셋팅한다. FLUTTER_ROOT는 설치된 플러터경로, FLUTTER_APPLICATION_PATH는 프로젝트경로 이다.
// === Generated.xcconfig ===
// This is a generated file; do not edit or check into version control.
FLUTTER_ROOT=/Users/jskang/development/flutter
FLUTTER_APPLICATION_PATH=/Users/jskang/Desktop/work/Flutter/ibalance
COCOAPODS_PARALLEL_CODE_SIGN=true
FLUTTER_TARGET=lib/main.dart
FLUTTER_BUILD_DIR=build
FLUTTER_BUILD_NAME=1.0.0
FLUTTER_BUILD_NUMBER=1
EXCLUDED_ARCHS[sdk=iphonesimulator*]=i386
EXCLUDED_ARCHS[sdk=iphoneos*]=armv7
DART_OBFUSCATION=false
TRACK_WIDGET_CREATION=true
TREE_SHAKE_ICONS=false
PACKAGE_CONFIG=.dart_tool/package_config.json
-----------------------------------------------------------------------------------
// === flutter_export_environment.sh ===
#!/bin/sh
# This is a generated file; do not edit or check into version control.
export "FLUTTER_ROOT=/Users/jskang/development/flutter"
export "FLUTTER_APPLICATION_PATH=/Users/jskang/Desktop/work/Flutter/ibalance"
export "COCOAPODS_PARALLEL_CODE_SIGN=true"
export "FLUTTER_TARGET=lib/main.dart"
export "FLUTTER_BUILD_DIR=build"
export "FLUTTER_BUILD_NAME=1.0.0"
export "FLUTTER_BUILD_NUMBER=1"
export "DART_OBFUSCATION=false"
export "TRACK_WIDGET_CREATION=true"
export "TREE_SHAKE_ICONS=false"
export "PACKAGE_CONFIG=.dart_tool/package_config.json"
2. 플러터 라이브러리 설치 및 CocoaPod로 iOS용 플러그인 설치
cd 프로젝트 폴더
flutter clean
flutter pub get
cd ios
pod install
- flutter clean 실행 (모든 것을 처음부터 시작)
- flutter pub get 실행 (패키지 재설치)
- cd ios && pod install 실행 (iOS 라이브러리 재설치)
3. XCoce에서 프로젝트 열기
ios폴더 아래에 xcode로 열수 있는 것일 2개 있는데 꼭 Runner.xcworkspace 로 열어야 빌드가 제대로 된다. 만일 Runner.xcodeproj로 열면 에러가 발생하고 이것을 해결하지 못할 것이다. 이것때문에 시간을 몇일을 날림
꼭! Runner.xcworkspace 로 XCode를 실행하자.
참고 사이트(여기서 해결함) : https://tmd8633.tistory.com/73
4. 설정 셋팅
Runner -> TARGETS -> Runner -> General -> Minimum Deployments : iOS 12.0
Runner -> TARGETS -> Runner -> General -> Identity : Bundle Identifier: 유니크한 이름(기본적으로 들어 있음), Version, Build
Runner -> TARGETS -> Runner -> Signing & Capabilities -> Team : Account 계정
Account 계정은 Xcode -> Preferences -> Account
Runner -> TARGETS -> Runner -> Signing & Capabilities -> Bundle Identifier: 유니크한 이름(기본적으로 들어 있음)
5. XCode -> Product -> Build 실행 후 에러 해결하고 빌드하기
6. 아이폰, 시뮬레이터로 실행하기
프로젝트 중앙 상단에서 선태후 실행하기
7. 아이폰 최초 설치시 셋팅
계정을 개인팀으로 등록후 아이폰에서 볼때 안전하지 않다는 경고후 실행이 되지 않는다. 수동으로 등록을 해줘야한다.
테스트 아이폰 : 아이폰 6
아이폰 -> 설정 -> 일반 -> 기기관리 -> 개발자 앱 -> Apple Development: 계정@icloud.com 클릭 -> 신뢰 -> 끝 -> 앱 실행
flutter pub get, pod install 이 관계가 헷가려서 클로드에 문의하니 쉽게 설명해줌, 다음은 클로드의 설명
Dart 패키지, 플러그인, CocoaPods의 Podfile 관계 설명
이 세 가지 개념이 어떻게 연결되어 있는지 헷갈리는 건 자연스러운 일이에요. 하나씩 차근차근 설명해 드리겠습니다.
1. 각 개념의 기본 설명
Dart 패키지
- Flutter/Dart 생태계에서 재사용 가능한 코드 모음입니다.
- 순수 Dart 코드로만 구성된 패키지들입니다.
- 예: http (네트워크 요청), intl (다국어 지원), provider (상태 관리) 등
플러그인 (Flutter 플러그인)
- 네이티브 코드(iOS/Android)와 Dart 코드를 모두 포함하는 특별한 종류의 패키지입니다.
- 기기의 카메라, GPS, 블루투스 등 네이티브 기능을 사용할 때 필요합니다.
- 예: camera, geolocator, flutter_bluetooth_serial 등
CocoaPods의 Podfile
- iOS 앱 개발을 위한 의존성 관리 파일입니다.
- iOS 네이티브 라이브러리들을 어떻게 가져올지 정의합니다.
- Flutter 프로젝트의 /ios 폴더 안에 있습니다.
2. 그래서 이들의 관계는?
관계를 비유로 설명하면:
식당 주방에 비유해봅시다:
- pubspec.yaml 파일: 전체 요리 레시피 북 (앱에 필요한 모든 재료 목록)
- Dart 패키지: 주방에서 직접 만든 소스나 양념 (순수 Dart 코드)
- Flutter 플러그인: 외부에서 가져온 특별한 재료 + 사용 설명서 (Dart 코드 + 네이티브 코드)
- Podfile: iOS 주방에 필요한 도구들의 목록 (iOS 네이티브 라이브러리 목록)
- pod install: iOS 주방 도구 배달 서비스 (iOS 라이브러리 설치)
3. 작동 방식 및 데이터 흐름
1) 패키지/플러그인 추가 시 발생하는 일:
- 개발자가 pubspec.yaml에 새 패키지나 플러그인을 추가합니다:
- dependencies: flutter: sdk: flutter http: ^0.13.5 # 순수 Dart 패키지 camera: ^0.10.0 # 플러그인 (네이티브 코드 포함)
- flutter pub get 실행:
- 모든 Dart 코드(패키지와 플러그인의 Dart 부분)를 다운로드합니다.
- 플러그인의 경우, 자동으로 ios/Podfile에 iOS 네이티브 의존성을 추가합니다.
- pod install 실행 (꼭 iOS 폴더에서 실행해야 한다. - 여기에 Podfile 파일이 있다.):
- Podfile을 읽고 필요한 iOS 네이티브 라이브러리를 다운로드합니다.
- 이 라이브러리들을 XCode 프로젝트에 통합합니다.
2) 실제 파일 연결 관계:
your_project/
├── pubspec.yaml # 모든 Dart 패키지와 플러그인 목록
├── lib/ # 여러분의 Dart 코드
├── .dart_tool/ # 설치된 Dart 패키지들
├── ios/
│ ├── Podfile # iOS 네이티브 의존성 목록
│ ├── Podfile.lock # 설치된 Pod 버전 기록
│ └── Pods/ # 설치된 iOS 라이브러리들
└── android/
├── build.gradle # Android 설정
└── app/build.gradle # Android 의존성 목록
4. 구체적 예시로 이해하기
예시: 카메라 플러그인 추가하기
- pubspec.yaml에 카메라 플러그인 추가:
- dependencies: camera: ^0.10.0
- flutter pub get 실행:
- camera 플러그인의 Dart 코드 다운로드
- 자동으로 iOS/Podfile 및 Android/build.gradle 파일 업데이트
- iOS/Podfile 내부 변화 (자동으로 업데이트됨):
- target 'Runner' do # 플러그인에서 요구하는 Pod들이 여기 자동 추가됨 flutter_install_all_ios_pods File.dirname(File.realpath(__FILE__)) end
- cd ios && pod install 실행:
- iOS 카메라 관련 네이티브 라이브러리 다운로드 및 설치
- XCode 프로젝트에 통합
- 이제 Flutter 앱에서 카메라 사용 가능:
- import 'package:camera/camera.dart'; // 카메라 기능 사용 코드
5. 헷갈리기 쉬운 부분 정리
1) 중요 차이점:
- Dart 패키지: flutter pub get으로만 설치 완료 (iOS/Android 코드 없음)
- Flutter 플러그인: flutter pub get 후 pod install도 필요 (네이티브 코드 포함)
2) 자동화된 부분:
- 좋은 소식: Flutter는 pubspec.yaml에 플러그인 추가 시 자동으로 Podfile을 업데이트합니다.
- 필요한 작업: 그러나 여전히 pod install은 수동으로 실행해야 합니다.
3) 의존성 흐름:
pubspec.yaml에 플러그인 추가
↓
flutter pub get
↓
iOS/Podfile 자동 업데이트
↓
pod install
↓
네이티브 라이브러리 설치
↓
앱에서 기능 사용 가능
6. 흔한 오류와 해결책
오류 1: "Plugin XXX requires a higher minimum iOS version."
- 원인: 플러그인이 iOS 최소 버전을 요구하는데 프로젝트 설정이 낮을 때
- 해결: ios/Podfile에서 platform :ios, '12.0' 같이 버전 업데이트
오류 2: "Pod XXX not found"
- 원인: flutter pub get 후 pod install을 실행하지 않음
- 해결: cd ios && pod install 실행
오류 3: 충돌하는 플러그인
- 원인: 여러 플러그인이 같은 네이티브 라이브러리의 다른 버전을 요구할 때
- 해결: pod repo update 후 pod install 다시 실행, 또는 플러그인 버전 조정
요약
- Dart 패키지: Flutter/Dart 전용 코드 → flutter pub get으로 충분
- Flutter 플러그인: Dart + 네이티브 코드 → flutter pub get + pod install 필요
- Podfile: iOS 네이티브 라이브러리 목록 → 플러그인 추가 시 자동 업데이트됨
- 작업 순서:
- pubspec.yaml에 패키지/플러그인 추가
- flutter pub get 실행
- (플러그인의 경우) cd ios && pod install 실행
Flutter는 여러분이 플러그인을 추가할 때 iOS와 Android 설정을 최대한 자동화하려고 하지만, iOS의 경우 아직 pod install 단계는 수동으로 실행해야 합니다. 이 과정을 이해하면 Flutter 개발에서 많은 문제를 예방하고 해결할 수 있습니다.
관련된 다른글들:
[Flutter] 플러터 설치 방법
플러터(Flutter) 설치 방법 정리 입니다.(강의 보고 설치 방법 정리) 1. 플러터(Flutter) 설치Flutter 다운로드 : https://flutter-ko.dev/get-started/install/windows자신의 OS에 맞는 Flutter를 다운로드후 적당한
dtbb.tistory.com