[React-Native] firebase messaging 환경 분리(+Scheme, Configuration)

gyulhana·2023년 9월 21일

이 기나긴 삽질의 여정을 적어보려해..

아니 때는 바야흐로 9/7 푸쉬가 안드와 iOS에서 모두 정상적으로 동작하고 있다는 걸 들었음. 휴 다행이군 개발에 문제가 없었군! 하고 이제 환경을 분리해야겠다 생각하고 firebase에 들어가서 prod 환경 info.plist와 dev 환경 info.plist를 받아서 Project/ios 디렉토리 내에 폴더를 만들어서 이렇게 등록해뒀다.

그리고 나서 해야 될 작업은 xCode에서의 작업인데 나는 여기서 대박 실수를 하고 말았음 (두둥)

Add files to project Name을 클릭하고 file을 선택하는 부분에서 지금처럼 firebase 폴더 자체를 등록해줘야 되는데 나는 파일 하나하나를 등록해줬음..(등록 하실 때 캡쳐에는 잘렸지만 밑에 타겟에 절대 체크하심 안 됩니다..! 체크하셨다면 삭제하시고 다시 등록해주세여) 당연히 될 리 없음 지금 생각해보면 무지하게 바보 같지만 나는 이 실수를 언제에서야 눈치챘냐면

이 문서에서

이 부분을 봤을 때.. 어언 삽질을 한지 3일이 지나고 나서야 깨달은 거임 내가 이 바보 같은 짓을 했다니!!! 그래서 이제 이렇게 바꿔주고 build Phases를 등록해줘야됨

Setup Firebase Environment GoogleService-Info.plist 이름으로 Link Binaries 아래에 넣어주면 됨

# Name of the resource we're selectively copying
GOOGLESERVICE_INFO_PLIST=GoogleService-Info.plist
# Get references to dev and prod versions of the GoogleService-Info.plist
# NOTE: These should only live on the file system and should NOT be part of the target (since we'll be adding them to the target manually)
GOOGLESERVICE_INFO_DEV=${PROJECT_DIR}/firebase/develop/${GOOGLESERVICE_INFO_PLIST}
GOOGLESERVICE_INFO_PROD=${PROJECT_DIR}/firebase/product/${GOOGLESERVICE_INFO_PLIST}
# Make sure the dev version of GoogleService-Info.plist exists
echo "Looking for ${GOOGLESERVICE_INFO_PLIST} in ${GOOGLESERVICE_INFO_DEV}"
if [ ! -f $GOOGLESERVICE_INFO_DEV ]
then
echo "No Development GoogleService-Info.plist found. Please ensure it's in the proper directory."
exit 1
fi
# Make sure the prod version of GoogleService-Info.plist exists
echo "Looking for ${GOOGLESERVICE_INFO_PLIST} in ${GOOGLESERVICE_INFO_PROD}"
if [ ! -f $GOOGLESERVICE_INFO_PROD ]
then
echo "No Production GoogleService-Info.plist found. Please ensure it's in the proper directory."
exit 1
fi
# Get a reference to the destination location for the GoogleService-Info.plist
PLIST_DESTINATION=${BUILT_PRODUCTS_DIR}/${PRODUCT_NAME}.app
echo "Will copy ${GOOGLESERVICE_INFO_PLIST} to final destination: ${PLIST_DESTINATION}"
# Copy over the prod GoogleService-Info.plist for Release builds
if [ "${CONFIGURATION}" == "Release" ]
then
echo "Using ${GOOGLESERVICE_INFO_PROD}"
cp "${GOOGLESERVICE_INFO_PROD}" "${PLIST_DESTINATION}"
else
echo "Using ${GOOGLESERVICE_INFO_DEV}"
cp "${GOOGLESERVICE_INFO_DEV}" "${PLIST_DESTINATION}"
fi

이렇게 넣어주면 Release Scheme일 때 빼고 develop 디렉토리에 있는 파일을 불러오게 함.

그리고나서 빌드를 해봤음!!! 모든 게 완벽하다!!!

푸쉬가 안 와요.. 모가 문제냐고 그리고 나서 이것저것 확인해보기 시작했음 이 모든 문제는 환경 분리에서부터 시작된 거였으니까 내 git 변경 이력과 PM이 9/7에 된다고 했던 말을 고려하면 그것말고는 이유가 없으니까

그래서 나는 Scheme 확인을 하다가 위와 같은 상황을 발견함 배포를 하려면 Archive를 해야 되는 건데 그 때는 Build Configuration으로 Release를 사용하고 있는 게 아니겠음 그래서 Debug로 바꿔버림 (사유 제가 가지고 있던 Scheme은 Develop과 Product, Configuration은 Debug와 Release뿐이었어요) 그리고나서 다시 빌드를 하고 배포를 하려고 하니까 빌드까진 되는데 스토어에 안 올라감

asset validation failed (50) the app references non-public selectors in payload


사진은 훔쳤습니다 스택오버플로우에서

이 에러가 나는 거예요.. 걍 안 됨!!! 뭐 찾아보니까 앱스토어 오류다 xCode 오류다 별별 말이 많고 minimized version을 lowest version인 11로 내리면 된다는데 안 되고 뭐 pod file도 바꿔봐라 해서 바꿔봤지만 안 됨 근데 찾다가 본 어떤 댓글

아 Debug Configuration으로는 배포가 안 되는구나!!!!! 깨달음 그럼 어케 해야 될까? 그래 Configuration Staging을 만들어야겠다. 근데 또 이 과정에서 엄청난 삽질을 하기 시작합니다..

Debug랑 Scheme 복제해서 Staging Scheme 만들었음 그리고 나서 Staging Configuration도 만들고 Edit Scheme 들어가서 Configuration을 전부 Staging으로 바꿔줌

근데 여기서 발생한 문제 Configuration을 세팅하려면

이런 Configuration Setting file이 필요한데 내가 임의로 생성하는 게 아니고 기존 파일들을 참조해보면 내가 생성하는 라이브러리들을 가지고 자동 생성된 파일임을 알 수 있다.. 그래서 난 이걸 어떻게 생성하는지 또 굉장히 오랜 시간 구글링(1시간)을 했는데 결국 걍 챗지피티 멱살 잡고 흔들어서 알아낸 바로는 그냥 Configuration을 생성한 다음에 아무짓도 하지 말고 프로젝트 루트/ios 디렉토리에서 터미널에 pod install로 설치하면 저 파일들이 자동으로 Pods 디렉토리에 생성되게 되니까 그걸 등록만 해주면 된다!!

이 과정에서 챗지피티 몇대 때렸어요. 헛소리하닊가. 헛소리 당당하게 한다는 사실 잘 참고해서 물어보세요.

이렇게 하고 배포하니까 알림? 너무 잘 온다

3일을 삽질한 결과물의 끝 이 맛에 개발하죠

profile
친절한 하루를 선물하고 싶은 사람

0개의 댓글