Crashlytics는 너무하다

부제: Firebase는 너무하다

크래시 리포트 서비스 사용기에서 언급했듯이 Firebase기반의 Crashlytics를 기존 프로젝트에 연동하는 것은 어렵다.  특히 리졸버를 사용하여 버젼을 관리한다는 것은 사실 구글이 어떤 생각으로 그런 것을 만들었는지 아직까지 정확히 이해를 하지 못했다.  리졸버의 취지는 물론 알 것 같다.  Android와 iOS의 관련 라이브러리들과의 dependency를 해결하고자 자동으로 혹은 수동으로 버젼을 관리해준다는 것인데, 아주 이상적으로 들리는 얘기지만, 사실 여기서 부터 문제는 시작된다.

유니티를 사용하면서 Firebase와 리졸버를 소스관리시스템(svn, git..)에 올렸다 치자.  게임프로젝트는 프로그래머만 소스관리시스템을 사용하지 않는다.  기획 및 아트를 포함한 수십명의 사람들이 소스를 공유하지만, 리졸버를 사용하려면 Android sdk를 각각 로컬에 설치해야 한다.  그렇지 않으면 매번 유니티를 실행할 때마다 java를 찾을 수 없다는 에러 팝업을 피할 수 없을 것이다.  사실 이 문제는 심각하지는 않다.  설치를 모두 하라고 가이드를 해주면 되기도 하지만, 뭔가 유니티 로딩시에 리졸버가 로딩되지 않도록 방법을 강구하면 되긴한다.  혹시 그러한 옵션이 존재할 수도 있다.  (물론 난 찾지 못했다).  그래도 불편한건 불편한거다.

만약 기존 프로젝트에 구글 애드몹이 설치되어 있다고 가정해보자.  구글 애드몹이 사용하는 라이브러리들이 여러 버젼들로 구성되어 있을 것이다, 새로이 Crashlytics를 설치 하고 리졸버를 돌려보자.  기존 라이브러리들을 버젼 업해주거나 필요없는 것들은 고맙게도(?) 삭제도 해준다.  자 이제 구글 애드몹은 자동으로 버젼업된 라이브러리들과 아무 문제가 없을까?  물론 리졸버가 애드몹과 Crashlytics가 사용하는 라이브러리의 호환성을 잘 판단하여 버젼을 골라주면 좋겠지만, 그렇게 해주지는 않는다.  중복된 라이브러리는 삭제를 해야 하고 여러번의 빌드 테스트를 통해 문제가 없는지 판단해야 한다. 

리졸버를 안쓰는 방식으로 하고 싶었다.  라이브러리를 다운받아 Plugin폴더에서 관리하고 싶었다.  리졸버를 안쓰는 방식은 Firebase/Crashlytics 공식가이드에 나와 있지 않다.  물론 비공식 가이드도 없다.  구글링을 열심히하면 단편적으로 드문드문 커뮤니티에 질문들은 있지만 답변도 제각각이다.  리졸버를 안쓰면 버젼관리는 불가능하다는 얘기를 들었다.  하긴 한두개도 아니고 그많은 라이브러리들을 관리하는건 어려워 보이긴 했다.  그래서 리졸버를 필요할때만 사용하여 라이브러리들을 다운받고, 그후에 지우는 방식을 채택했다.  왜 굳이 구글에서 서비스하는 것을 이렇게 귀찮게 사용해야 하는지 모르겠지만 말이다.  구글이라고 다 잘할 순 없겠지만..

리졸버를 지우면 모든게 나아질 줄 알았지만, 갑자기 Firebase.Editor.dllFirebase.Crashlytics.Editor.dll 이 에러를 뿜어내고 있었다.  이 dll들이 reference로 리졸버를 잡고 있었던 것이다.  그래서 과감히 Firebase.Editor.dllFirebase.Crashlytics.Editor.dll 을 지워버렸다.  Editor관련 dll이라 AOS/iOS에는 영향이 없으리라 생각했다.  그러나, iOS로 빌드하여 XCode 프로젝트를 생성해보니 Build Phase에 심볼을 올리는 shell 명령어가 빠져 있었다.  이게 어디로 갔을까 한참을 찾아보니 Firebase.Crashlytics.Editor.dll 이 빌드 후 처리를 담당하고 있었다.  아 이런 XX!!  그럼 Firebase.Crashlytics.Editor.dll 이거는 버리면 안되겠다.  아.. 잠깐.. Firebase.Crashlytics.Editor.dll 은 리졸버를 reference로 갖고 있는데… (한바퀴 돌아온 느낌이다..)

이거 리졸버는 필수 요소라는 거 의도인가 실수인가 모르겠다.  완벽한 리졸버가 나오지 않는 이상, 지금의 리졸버는 쓰기도 어렵고, 버젼 관리도 어렵다. 


Leave a Reply

Your email address will not be published. Required fields are marked *