flutter 앱을 iOS 기기에서 실행시키면서 겪었던 이슈/해결책을 정리해봤습니다. iOS 13.3.1 + macOS Catalina 10.15.3 기준입니다.
code signature invalid for "path/to/Flutter.framework/Flutter"
위와 유사한 에러가 발생하면서 앱이 죽는 현상이 발생함.
해결
From: @jmagman
The bug first appeared in iOS 13.3.1 and is fixed in iOS 13.4 beta 3 (17E5241d). It was not specific to Flutter, was hit at runtime loading an embedded dylib (like Flutter), and can be reproduced without Flutter. It should not impact apps that are already distributed to the App Store (meaning: your customers are not hitting this crash). You should still be able to distribute your application to the App Store.
Workarounds:
Install the beta profile on your test device and install iOS 13.4 beta 3 or higher.
Wait for iOS 13.4 to be released.
Use a non-Personal Team provisioning profile. Personal Team provisioning profile says "Personal Team" in the Xcode build settings Runner Target > General > Signing and Capabilities > Team dropdown.
Run in the simulator.
Test on a iOS device running 13.3 or lower.
If you need help implementing these workarounds, please ask your questions on Stack Overflow or another help forum. GitHub issues are for tracking actionable issues for the Flutter team, and there was nothing Flutter could do to work around this bug other than diagnose, report to Apple, and track its progress. If you are seeing a similar crash on iOS 13.4 or greater, please file a new Flutter GitHub issue so we can take a look.
I'm going to lock this issue again so this comment stays at the bottom. We will keep it open for visibility, and close after iOS 13.4 has been released.
위 댓글에 의하면 이 현상은 flutter에만 국한된 현상은 아니며, 기기에 이 버그가 픽스된 베타 버전(iOS 13.4 beta3 이상)의 프로필을 설치함으로써 해결이 가능하다.
베타 프로필 설치 및 사용법은 링크를 참조하기 바란다.
참조) 깃허브 이슈
ios 13.3 (17c54), which may not be supported by this version of xcode. 에러
1. 에 따라 베타 프로필을 설치했다면 베타 버전의 xcode를 다운로드 받지 않은 이상 (빌드하려는 대상 iOS 버전과 맞는 xcode가 필요하다.), 위와 같은 에러가 발생할 것이다.
이 경우 해결책은 두 가지인데, 첫번째는 빌드하려는 대상 iOS 버전에 맞는 xcode를 설치하는 것이고, 두번째는 DeviceSupport
폴더를 추가해주는 방법이다.
자세한 방법은 링크를 참조하기 바란다.
이번에는 MacOS 카탈리나 이상에서 제보되고 있는 에러다. flutter run
을 실행시키는 순간 위 내용이 담긴 경고창이 뜨면서 실행이 되지 않는 에러인데, 이 경우 에러 메시지의 내용에 따라 아래 명령어를 적절하게 입력해주면 된다.
For "idevice_id" error:
sudo xattr -d com.apple.quarantine /Users/Your_User/Your_Dev_Folder/flutter/bin/cache/artifacts/libimobiledevice/idevice_id
For "ideviceinfo" error:
sudo xattr -d com.apple.quarantine /Users/Your_User/Your_Dev_Folder/flutter/bin/cache/artifacts/libimobiledevice/ideviceinfo
For "idevicesyslog" error:
sudo xattr -d com.apple.quarantine /Users/Your_User/Your_Dev_Folder/flutter/bin/cache/artifacts/libimobiledevice/idevicesyslog
For "iproxy" error:
sudo xattr -d com.apple.quarantine /Users/Your_User/Your_Dev_Folder/flutter/bin/cache/artifacts/usbmuxd/iproxy
참조) 깃허브 이슈
이 에러는 iOS 기기와 같은 wifi에 연결된 상태에서 usb를 연결한 채로 디버깅을 할 경우 발생하는 에러다.
해결책은 크게 두 가지인데, 첫번째는 컴퓨터의 프로파일 파일(.bash_profile
등)에 환경변수로 NO_PROXY=localhost,127.0.0.1;
를 추가해준 다음 다시 실행시키는 것이고, 두번째는 대상 iOS 기기의 wifi 연결을 제거한 다음 실행시키는 것이다.
내 경우에는 두 번째 방법을 통해 실행시킬 수 있었다.
여러가지 원인에 의해 발생하는 에러인데 딱히 한가지 해결책은 없어 보인다. xcode를 통해 직접 빌드를 하면서 에러 메시지를 확인하는 수밖에 없다. 혹은 앱이 신뢰하는 개발자의 앱
에 포함되지 않으면 flutter 커맨드로 열지 못하는 경우도 있다.
(이 경우 iOS 기기의 설정
- 일반
- 프로파일 및 기기 관리
- 개발자앱
에 들어가 신뢰함
을 눌러주면 앱이 삭제되기 전까지 flutter 커맨드로 열 수 있다.)
여기까지입니다. 이외에도 flutter를 실 기기에서 실행시키면서 겪은 에러 사례가 있다면 댓글로 남겨주시면 감사하겠습니다.