본문 바로가기
Development

Flutter In iOS 14+, debug mode Flutter apps can only be launched from Flutter tooling 오류를 만난 이유

by 파크인포 2024. 6. 8.

Flutter 앱을 개발중에 개발앱과 프로덕션 앱을 분리하고자 하는 과정에서 만난 이슈를 기록한다.

 

Flutter iOS Debug 앱 실행 안됨 이슈 

Flutter로 개발한 iOS앱을 Xcode에서 build configuration 을 Debug로 설정하고 앱을 설치하면 잘 실행된다.

그러나 이때 Xcode나 Android Studio와의 연결된 케이블을 해지한 상태로 디바이스에 설치됐던 앱을 실행하면 앱이 켜지자 마자 바로 꺼지는 현상이 나타난다.

그리고는 아래와 같은 에러가 출력된다.

 

In iOS 14+, debug mode Flutter apps can only be launched from Flutter tooling, IDEs with Flutter plugins or from Xcode. Alternatively, build in profile or release modes to enable launching from the home screen.

 

 

이 말은 iOS 14+ 이상에서는 Debug 모드의 플러터앱은 플러터 툴을 통해서만 실행할 수 있다. 이를 위한 대안방법으로는 Profile 모드 또는 Release 모드로 빌드를 하면 된다. 라는 뜻이다.

 

 

Flutter iOS Debug 앱 실행 안됨 해결방법 

이를 해결하기 위한 방법은 빌드환경(Build Configuration)을 Release 모드로 앱을 실행하면 된다. 

 

  • [Xcode 상단의 Scheme 선택]
  • [Edit Scheme]
  • [왼쪽 사이드의 Run]
  • [Build Configuration을 Release] 로 변경 후 앱 설치 

 

[Edit Scheme]

 

[Build Configuration을 Release]

 

 

이렇게 하면 앱이 Release 모드로 설치되기 때문에 Xcode와 연결되지 않아도 앱 실행이 가능하다.

즉 Debug 환경은 오직 Android Studio 또는 Xcode에서 디버그 용도로 빌드하고 사용해야 할 것 같다. 

 

 

Flutter 앱 개발앱 프로덕션앱 구분 방법 (dev, prod)

서비스앱을 개발할때에 개발환경의 앱과 프로덕션 환경의 앱이 필요하다. 개발환경의 앱을 Dev앱, 프로덕션환경의 앱을 Prod 앱이라고 칭하겠다. 

 

원래 계획은 Debug, Release 빌드 환경으로 Dev앱, Prod앱을 구분하려 했다.

 

하지만 iOS 앱은 Debug 빌드 모드로 설치하면 IDE 툴없이 앱을 실행할 수 없기 때문에(위에서 만났던 오류) Dev앱을 배포하여 테스트를 할 수가 없다. 따라서 결국 Dev앱, Prod앱은 모두 Release 빌드 모드로 앱을 설치해야 하기 때문에 Flavor 를 사용하여 앱을 구분하기로 했다.

 

Flavor 종류

Build 구분 Dev 앱 Prod 앱
Debug  dev-debug prod-debug
Release dev-release prod-release

 

Flutter에서의 Flavor 설정하는 방법은 다음글에서!

 

 

Flutter Debug, Profile, Release 빌드 환경 구분

Flutter 앱은 빌드환경은 Debug, Profile, Release 모드가 있다.

 

  • Debug
    • 개발 중에 사용
    • Hot Reload를 지원하여 코드 변경사항을 빠르게 반영
    • 모든 디버깅 정보와 로그가 활성화됨
    • 성능은 최적화되어 있지 않아 앱의 성능이 저하될 수 있음
    • Assertion이 활성화되어 있어 코드의 논리적 오류를 빠르게 발견 가능
    • Dart Dev Tools 를 사용하여 다양한 디버깅 도구를 활용 가능
  • Profile
    • 성능 테스트와 프로파일링 용도
    • 성능 분석 또는 최적화를 위해 필요한 도구가 활성화되어 사용가능
    • Hot Reload 지원하지 않음
    • 일부 디버깅 정보과 비활성화 되어 성능 위주로 동작
    • 개발용으로 필요한 도구와 프로파일링 도구들이 활성화됨
    • Dart Dev Tools 로 성능 병목 현상 등을 분석할 수 있음 
  • Release
    • 실제 사용자에게 배포할 용도
    • 최적의 성능을 위해 모든 디버깅 정보와 로그가 비활성화됨
    • 코드가 최대한 최적화되어 실행됨
    • Hot Reload 지원하지 않음
    • Dart Dev Tools 이 지원하지 않음
    • Assertion이 비활성화가 됨
    • 앱의 크기가 취소화되며 성능이 최대화됨