문제

Flutter run --release 나 Xcode 에서 릴리즈 모드로 실행시에도 정상 실행이 되는데 배포만 하면 스플래시 화면에서 하얀색(white, blank) 화면이 나오며 정상 작동이 안되는 경우.

 

해결 방법

나에게 적용된 해결 방법

: 파이어베이스를 사용 안하더라도 만약 애드몹을 사용하고 있다면 파이어베이스 해당 프로젝트 추가 후 설정하고난 후 flutter build ios --release 후 다시 xcode 에 들어가서 Archive 파일을 만든 후 배포

- 그냥 xcode 에 바로 들어가서 Archive 파일을 만들고 배포하는게 아닌 그 전에 flutter build ios --release 후에 하는게 중요하다.

- 애드몹과 파이어베이스의 의존성이 chatgpt나 stackoverflow에서 없다고 하는데 프로젝트가 파이어베이스에 등록되고 프로젝트에 설정을 하지 않으면 안되네요 ㅋㅋ

 

다른 해결 방법.

1. Signing & Capabilities 확인.

2. 실제 기기의 testflight 업데이트 하기.

3. testflight 에서 테스트할 앱을 삭제 후 가장 최신 버전 다운로드 하기.

4. flutter upgrade 후에 다시 배포 하기.

5. pod update 하기.

6. cocoapod 최신 버전으로 업데이트

플러터 빌드 시 에러 로그를 봐도 해결하기 어려운 문제일 시 아래의 방법을 사용해보면 좋을 것 같아 작성합니다.

 

가장 먼저 flutter doctor -v 해보는 것을 잊지말것!

 

문제가 뭘까?
  1. 내가 사용하는 플러터 버전, 다트 버전, 패키지, 라이브러리, 플러그인이 마지막으로 업데이트된 버전이 아니다. 
  2. 버전에 관련된 캐시들로 인해 문제가 있는 버전으로 계속 실행되어 에러가 나온다.

 

1번째 해결방법 = 마지막으로 업데이트된 버전이 아니다.

1. 플러터 버전을 바꿔본다.

=> FVM을 사용하여 안전하게 플러터 버전을 바꿔본 후 실행해본다. (언제든지 원래 버전을 변경 가능)

 

2. 다트 버전을 바꿔본다.

 

3. 빌드 시 에러 로그가 나오면 문제가 있는 패키지, 라이브러리, 플러그인 이름의 버전을 바꿔본다.

=> flutter pub upgrade 문제있는 패키지, 라이브러리, 플러그인 이름

 

2번째 해결방법 = 캐시들로 인해 문제가 생길경우

먼저, 플러터 관련 캐시 삭제 후 다시 다운로드 하기

flutter clean
flutter pub cache repair
flutter pub get

여기까지 CLI 실행 후 다시 실행하기 이후에도 안된다면 안드로이드 관련 문제 시, IOS 관련 문제 시로 나뉜다.

 

안드로이드 관련 문제 시 

안드로이드 폴더로 이동 후
// mac os
./gradlew clean

// window os
gradlew.bat clean

그 다음
.grade 라는 숨겨진 폴더 제거

그 후 
다시 flutter 빌드 해보기

 

IOS 관련 문제 시 

Pods 폴더, Podfile, Podfile.lock, .symlink 폴더 들을 혹시 모르니 백업 후 삭제
pod cache clean -all
pod repo update
pod install
그 후 
다시 flutter 빌드 해보기

 

많은 도움이 되셨기를 바랍니다!

FireStore 패키지 사용 시 IOS 빌드 시 Running Xcode build가 몇분이나 계속 보여지고 무한 실행 중인 것처럼 늘어지는 경우가 있다.

 

이 문제를 해결하기 위해 아래에 해당하는 문서를 읽어 조금이라도 단축해보려고 한다.

 

 

GitHub - invertase/firestore-ios-sdk-frameworks: ⚡ Precompiled Firestore iOS SDKs extracted from the Firebase iOS SDK reposito

⚡ Precompiled Firestore iOS SDKs extracted from the Firebase iOS SDK repository release downloads for faster build times. - GitHub - invertase/firestore-ios-sdk-frameworks: ⚡ Precompiled Firestore...

github.com

 

왜 느려질까?

Firestore IOS SDK는 대부분 C++ 코드 약 500k줄에 의존하며 가뜩이나 느리다고 소문난 Xcode로 컴파일하기 때문에 오래걸린다. 참고로 CI 구성 시 더욱 느려진다.

 

해결 방법
pod 'FirebaseFirestore', :git => 'https://github.com/invertase/firestore-ios-sdk-frameworks.git', :tag => 'version 입력'

해당 코드 라인을 ios/Podfile을 열고 Runner 블록 내부에 추가하면 된다. 즉, target 'Runner' do 아래 라인에 추가.

네이버 로그인 기능을 추가하고 있는데 

프로젝트 이름/ios/Pods/naveridlogin-sdk-ios/NaverThirdPartyLogin.framework/NaverThirdPartyLogin' for architecture arm64

라는 에러가 나오면 실행 취소되었다. 여러가지 방법을 시도한 후 해결한 방법을 적어보려고 한다.

 

  1. 현재 개발하고 있는 flutter 프로젝트의 ios 폴더로 이동.
  2. Runner.xcworkspace를 Xcode로 실행.
  3. Runner, Pods 중 Pods 클릭.
  4. Build Settings -> All 클릭.
  5. Architectures의 Excluded Architecturese에 arm64를 추가하여 다시 실행해 본다.

Flutter

플러터(Flutter)란 무엇인가?

단일 코드베이스로 모바일(Android, IOS) 개발, 웹 개발, 데스크탑 개발, 임베디드 개발등이 가능한 크로스 플랫폼이다.

Google에서 개발하고 있는 장차 Fuchsia OS 위에서 UI / UX를 담당하게 될  오픈소스 프레임워크이다.

구글에 맞춘 Meterial 디자인과 애플에 맞춘 Cupertino 디자인도 가능하다.

 

왜 크로스 플랫폼을 선택해야하는가?

사용하기에 앞서 각 플랫폼별 native 언어가 있는데 불구하고 크로스 플랫폼을 선택을 왜 하는지에 의문이 있을 것이다.

 

ex) 현재 native 개발자인데 크로스 플랫폼을 사용해도 생산성 차이가 없을 것 같다 등

답 : NAVER 지식IN 개발 후기를 보면 알 수 있듯이 기존 native 개발과 크로스 플랫폼으로 따로 같은 개발을 해봤을 시 생산성이 3~5배로 차이가 날 정도로 좋다. 물론 개인마다 차이가 있겠지만 최소 1.5배 ~ 2배 차이가 나면서 멀티 플랫폼 개발을 한번에 하는게 압도적인 생산성 차이가 난다고 생각한다.

 

ex) 크로스 플랫폼으로 개발을 해도 결국 native로 변경해야하는 것 아닌가? 등

답 : Computing이나 민감한 디바이스의 특정 기능을 요구하는 것이 아니므로 반드시 native가 필수일 필요는 없다. 즉, 처음 모바일 설계를 할 시 구분을 하고 넘어가야한다 대부분의 모바일 앱은 Computing이나 민감한 디바이스의 특정 기능을 요구하지 않으며 사용한다고 하면 크로스 플랫폼을 선택하지 않는게 맞기 때문이다.

 

ex) native에서 되는게 크로스 플랫폼에서 개발 안되는 것 아닌가? 등

답 : 현재 대부분의 기능을 플러그인을 통해 구현이 되어있으며 점차 더 개발될 것이기 때문에 걱정할 필요는 없다고 생각한다.

 

플러터(Fluter) vs 리액티브 네이티브(Reactive Native) 비교

플러터(Flutter)

장점

- 리액티브 네이티브(Reactive Native)처럼 Bridge를 거치지 않고 각 플랫폼에 맞는 native 언어로 컴파일된 후바로 Skia엔진을 통해  canvas에 렌더링하기 때문에 각 플랫폼의 native 언어와 비슷한 수준의 성능을 보여준다.

- 리액티브 네이티브(Reactive Native)의 인기를 쉽게 따라잡았으며 인기의 추세가 더 크다.

 

단점

- 리액티브 네이티브(Reactive Native)보다 구직하기 어렵다. (채용사이트 구인 게시글 수를 비교하였을 때)

 

리액티브 네이티브(Reactive Native)

장점

- 기존 React 개발자이면 빠르게 학습하여 모바일 개발이 가능하다.

- 플러터(Flutter)보다 구직하기가 더 쉽다. (채용사이트 구인 게시글 수를 비교하였을 때)

 

단점

- Bridge를 사용하여 플러터(Flutter)보다 렌더링 성능이 떨어진다.

 

개발 특징

1. Hot Reload(핫 리로드) : 모바일 앱이 실행되고 있는 상태에서, 앱의 상태를 유지한 채로 변경사항을 적용시켜 주어 빠른 개발을 할 수 있다.

 

2. Hot Restrat(핫 리스타트) : 모바일 앱이 실행되고 있는 상태에서, 변경사항을 적용시켜준다. 단, 앱의 상태는 초기화 된다. Hot Reload(핫 리로드)보다는 시간이 조금 더 걸리지만, 앱을 재실행하는 것보다는 훨씬 빠르게 변경사항을 확인할 수 있다.

 

기존 Native의 명령형 스타일 -> 선언형 스타일로 하게 되어 개발하기 더 쉽다.

// 명령형 스타일
b.setColor(red)
b.clearChildren()
ViewC c3 = new ViewC(...)
b.add(c3)
// 선언형 스타일
return ViewB(
  color: red,
  child: ViewC(...),
)

 

플러터(Flutter)로 만들어진 기업 어플리케이션
  • 네이버 지식IN
  • GS SHOP
  • Google AdSense, Google Assistant, Google Pay
  • BMW
  • Toyota
  • Alibaba
  • Tencent

ios simulator를 이용하여 애플 관련 개발을 진행할 경우 위의 제목과 같이 로그인을 진행 했음에도 불구하고 경고창이 나오면서

 

더 이상 진행이 되지 않는 경우가 있다 이럴 경우 icloud.com에 들어가 개발을 진행할 계정으로 로그인 후 사용자 약관 동의 후 

 

ios simulator에서 setting으로 들어가 로그인 후 다시 개발하고자 하는 어플에 들어가 진행하면 된다.

+ Recent posts