최근 React-Native로 모바일 앱을 만들고 있다.
그 와중에 별거 아니지만 굉장히 삽질한 경험을 기록해놓는다.
이번이 처음으로 모바일 앱을 만들어보는건데, Mac에서 안드로이드 애뮬레이터를 켜볼 수 있는지 몰랐다.
그래서 UI 개발은 IOS 시뮬레이터로만 확인하고 있었다.
다른 부분을 개발하다가 그저께 이제 안드로이드도 어떻게 하면 켤 수 있는지 알아봐야겠다고 생각했다.
하루동안 이런 저런 삽질 하는데… 계속 안드로이드에서 앱이 제대로 안켜지고 이런 오류가 났다.

이게 IOS가 아니라서 안된다니…
뭐때매 이런 에러가 나는지 모르니 이것저것 다 건드려보면서 시간이 지나갔다. 계속 내 코드가 문제가 아니고 애뮬레이터 설정 등이 문제일거라고 생각했다.
그러다 아예 새로운 프로젝트를 만들어서 안드로이드를 켜보니 되는 것이다…
그때부터 내 코드에서 좀 짐작이 가는걸 다 건드려봐도 계속 같은 오류가 났다.
기존 코드 중 어디가 문제인지 찾는거보다
새로운 프로젝트에다가 하나씩 기존 코드를 복사해가면서 찾아봤다.
코드를 붙여가는데도 계속 안드로이드가 잘 되길래 “그냥 무슨 이윤지는 모르겠지만 일단 되게하자”는 생각으로 내가 만든 UI를 띄워봤다(이전까진 그냥 예제 UI만 띄웠다).
그러니까 또 저 에러가 난거다.
이제 거의 다 찾았다.
방금 전에 커밋한것까진 문제 없고 추가한 부분 중에 백프로 문제가 있는거다.
근데 이것저것 다바꿔도 여전히 안됐다.
그러다 결국 이 코드때문이라는 걸 알았다.
const getIosStatusBarHeight = (isSafe: boolean) => {
if (isNotIOS) {
throw new Error('This is not IOS');
}
if (isIphoneX) {
return getIphoneXStatusBarHeight(isSafe);
}
return 20;
};
This is not IOS는 내가 throw 하고 있던 에러였다^^;;;;;
저 코드는 OS에 따라 Status Bar Height를 다르게 만들어주려고 한 코드다. 사실 이 코드는 다른 사람의 코드를 베껴오면서 내가 조금 수정한 것인데, 내가 조금 수정한 것때매 버그가 생겼다.
export const iosStatusBarHeight = (safe: boolean) => {
if (isIOS) {
return ifIphoneX(safe ? 44 : 30, 20);
}
return 0;
};
export const ifIphoneX = (iphoneXStyle: any, regularStyle: any) => {
if (isIphoneX) {
return iphoneXStyle;
}
return regularStyle;
};
그냥 ctrl C + V 했으면 버그는 없었을텐데…ㅎㅎ
iosStatusBarHeight를 구하는데 IOS인지 아닌지 체크하는 부분이 아쉬웠고(클라-서버가 계약이 제대로 안된느낌), 아예 IOS가 아니면 에러 쓰로우를 하게 만들었었다.
근데 왜인지 안드로이드일 때도 이 코드를 탄다.
export const getStatusBarHeight = (isSafe: boolean) => {
return Platform.select({
android: getAndroidStatusBarHeight,
ios: getIosStatusBarHeight(isSafe)
});
};
여기에서 아예 android 환경에서는 getAndroidStatusBarHeight만 타게 돼있는건줄알았는데, 엉뚱하게 getIosStatusBarHeight가 에러를 뿜는다. 테스트로 Platform.select를 할 때 안드로이드 환경이면 android: getAndroidStatusBarHeight 이게 선택이 된다는걸 확인했는데 아직도 왜 getIosStatusBarHeight(isSafe) 이쪽에서 에러를 뿜는지 모르겠다. 더 딥하게 알아보고 싶기도 하지만 이정도 수준에서 넘어가려고 한다. 서버쪽에 더 중요하고 재밌는 이슈들이 많다. 나중에 생각나면 더 딥하게 공부해봐야겠다.
이번 이슈를 삽질하며 해결하며 디버거 사용의 중요성을 느꼈다. 자바 쓸때야 디버거 쓰는게 익숙해져서 어지간하면 다 디버거 돌리는데 프론트 작업할때는 콘솔로 찍어볼 때가 많았다. 근데 만약에 내가 이거 디버거 썼으면 더 빠르게 해결할 수 있었을것같다.
이틀동안 삽질하긴 했지만 그래도 후련하다~