[Flutter] Flutter에 아이폰을 연결해주기

2023. 2. 28. 00:28Developers 공간 [Shorts]/Frontend

728x90
반응형
<분류>
A. 수단
- OS/Platform/Tool : Linux, Kubernetes(k8s), Docker, AWS
- Package Manager : node.js, yarn, brew, 
- Compiler/Transpillar : React, Nvcc, gcc/g++, Babel, Flutter

- Module Bundler  : React, Webpack, Parcel

B. 언어
- C/C++, python, Javacsript, Typescript, Go-Lang, CUDA, Dart, HTML/CSS

C. 라이브러리 및 프레임워크 및 SDK
- OpenCV, OpenCL, FastAPI, PyTorch, Tensorflow, Nsight

 


1. What? (현상)

아래와 같이 iMAC의 안드로이드 스튜디오(Android Studio)의 Emulator에 카메라 기능을 확인해보려고 하면 emulator가 개발컴퓨터의 카메라를 인식하지 못합니다. 

_cameras = await availableCameras();

controller = CameraController(_cameras.first, ResolutionPreset.max);

controller.initialize().then((_) {
      if (!mounted) {
        return;
      }
      setState(() {});
    }).catchError((Object e) {
      if (e is CameraException) {
        switch (e.code) {
          case 'CameraAccessDenied':
          // Handle access errors here.
            break;
          default:
          // Handle other errors here.
            break;
        }
      }
    });
LateInitializationError: Field 'controller' has not been initialized.

 

즉, emulator는 인식하는 방법이 없다고 합니다.

 

따라서 iMAC에 개인 아이폰을 연결해 테스트 하는 과정을 기록하려고 합니다.


2. Why? (원인)

  • PC와 스마트폰에 셋팅을 해주어야 합니다.

3. How? (해결책)

<1. PC셋팅>

 

1-1. PC 셋팅 - Xcode 계정 설정

  • 아래 명령어를 통해 Xcode를 실행하고, Runner > Signing & Capabilities > Add Account... 를 해 계정을 추가합니다.
open ios/Runner.xcworkspace

[Xcode 계정 설정 순서]

 

1-2. PC 셋팅 - Xcode 지원버전 : 위에 그림에 "unsupported OS version" 이라고 뜨는 문제를 해결해보고자 합니다. (혹은 flutter doctor -v 명령어를 실행시 아래 Error 와 같은 에러메시지가 납니다.)

! Error : Failed to prepare device for development.
This operation can fail if the version of the OS on the device is incompatible with the installed version of Xcode.
You may also need to restart your mac and device in order to correctly detect compatibility. (code 806)

 

원인은 Xcode에서 현재 내 아이폰의 iOS버전까지 지원을 해주지 못하기 때문입니다. 이를 우회하여 해결하기 위한 방법은 3가지가 있습니다.

  • 방법1. App Store에서 Xcode를 업그레이드 하기. (이후에 아래 명령어 실행해야)
    • sudo xcodebuild -license
    • flutter doctor -v
    • Xcode가 지원이 되지 않는 macOS인 경우, macOS를 업그레이드해서 macOS에 맞는 Xcode 버전을 활용하는 것이겠지만, 실제로는 경험상 macOS에 맞는 Xcode를 찾는 것이 쉽지가 않습니다.
  • 방법2. XCode는 그대로 두고 아래의 링크에서 아래위치에 iOS 디바이스 Support 버전을 직접 폴더로 다운받아 옮겨 줍니다.
  • 방법3. 아예 Xcode를 지우고 원하는 버전으로 다시 설치하는 방법도 있습니다. 아래 링크에서 .xip파일을 받아 압축을 푼 뒤, /Applications 내의 위치로 옮겨주기만 하면 됩니다.

 

1-3. PC셋팅 - Code Sign 문제 : 가끔 아래와 같은 메시지로 Code Sign에러가 나는 경우가 있습니다. 이유는 iCloud Drive 경로에서 예상하지 못한 xattr(com.apple.FinderInfo) CodeSign이 자동으로 들어가기 때문입니다. 
** Simulator에서 구동하는 경우 사실 Codesign을 자동으로 skip하지만, Simulator 실행시에도 위와 같은 에러가 나기도 합니다. 이 경우, 보통 [sdk=iphonesimulator*]이면 Codesign을 하지 않도록 명시해보기도 하지만 이도 안 통하는 경우가 바로 위와 같은 이유입니다.

! Error (Xcode): Target debug_unpack_ios failed: Exception: Failed to codesign ./build/ios/Debug-iphonesimulator/Flutter.framework/Flutter with identity -.
  • 방법1. 혹시나 simulator로 실행하는 경우 open ios/Runner.xcworkspace를 통해 Xcode를 열어 직접 빌드하면 직접 codesign을 skip하면서 실행할 수 있습니다.
  • 방법2. 근본적으로 iCloud 내의 폴더가 아닌, iCloud 공유 밖의 폴더로 옮겨서 작업을 해야합니다.

 


<2. 스마트 폰 셋팅>

 

2-1. 스마트폰 셋팅 - 개발자 모드 켜기 : 연결을 하고 flutter doctor -v를 하면 아래 에러가 나는 경우, 개발자 모드를 켜줘야 합니다.

! Error: To use Your iPhone for development, enable Developer Mode in Settings → Privacy & Security. (code 6)

 

[개발자 모드 켜기]

 

2-2. 스마트폰 셋팅 -  busy 에러 : 연결을 하고 flutter doctor -v를 하면 가끔 아래와 같은 에러가 나는데, 이는 두가지 방법으로 해결 가능합니다.

  • 방법1. 아래 그림과 같이 Xcode > Window > Devices and Simulators > 왼쪽 아래 + 버튼을 눌러 추가합니다.
  • 방법2. 사실 이건 핸드폰 연결을 뺏다 끼면 거의다 해결된다.
! Error: OOO is busy: Fetching debug symbols for OOO. Xcode will continue when OOO is finished. (code -10)

 

[busy 에러 화면 해결방법1]

 

2-3. 스마트폰 셋팅 - 신뢰하지 않는 개발자 문제 : 위와 같이 셋팅 한 후에 "flutter run" 명령어를 통해 실행하면 아래와 같이 신뢰하지 않는 개발자 문제가 생깁니다.

  • 아래 그림과 같은 순서로 동의해줍니다.
  • 일반 > VPN 및 기기 관리 > Apple Development > 신뢰

[신뢰하지 않는 개발자 해결방법]


<3. 결과 검사>

 

3-1. 결과 - 검사 : 아래 명령어를 실행시 아래와 같은 결과가 나와야 정상입니다.

  • flutter doctor -v 

[검사 결과]

 

3-2. 결과 - debug 모드로 실행하기

  • 방법1. 직접 emulator를 선택해 실행하기
  • 방법2. flutter run
  • 방법3. flutter run -d Device_ID

 

3-3. release 모드로 실행하기 : debug모드로 실행하면 아래와 같이 연결을 해제하고 나서 실행이 안됩니다. 이럴 때는 release모드로 실행해주면 좋습니다.

  • flutter run --release

[debug 모드로 실행시 끄고나면 다시 켜지지 않는다.]

 

혹시나 동작하지 않으면 캐시와 빌드를 지우거나

# 1) Clean Flutter,DerivedData,Pods

flutter clean
rm -rf ~/Library/Developer/Xcode/DerivedData/* # Xcode DerivedData 정리
rm -rf ios/Pods ios/.symlinks ios/Flutter/Flutter.framework ios/Flutter/Flutter.podspec ios/Podfile.lock # iOS 폴더 정리

# 2) Reset dependencies

flutter pub get
cd ios
pod deintegrate
pod cache clean --all # Pod cache clean
pod repo update
pod install —repo-update # Pod update
cd ..

 

ios 폴더 자체를 지우고 새로 만들어 다시 시도해 보는 것도 좋습니다.

mv ios ios_old
flutter create --platforms=ios .

 


 

728x90
반응형