회사에서 react-native-config 를 사용지 Android 에서 발생한 문제 해결 기록이다.
현재 회사에서 react-native-config 를 통해 3rd lib token 값을 관리한다.
그런데 그 중 운여에서 analytic 의 기록이 누락 되는 것을 확인 원인을 찾는 중, react-native-config 의 설정 파일인 .env 로딩이 제대로 안되는 것을 발견하였다.
현재 회사에서 product, staging, dev 환경에 때라 분리하여 root 디렉토리 하위에 env 폴더를 만들어 .env.product, .env.staging, .env.dev 파일로 분리해서 저장 되어 있다. 그리고 이 것을 build type 에 맞게 가지고 와서 사용할 수 있도록 app/build.gradle 에 아래 설정 값을 추가 해 두었다.
project.ext.envConfigFiles = [
devdebug: "./env/.env.dev",
devrelease: "./env/.env.dev",
stagingdebug: "./env/.env.staging",
stagingrelease: "./env/.env.staging",
productdebug: "./env/.env.product",
productrelease: "./env/.env.product"
]
위와 같이 설정 이후 아래 명령어로 빌드하면 잘 빌드 되었다.
react-native run-android --variant devDebug
그런데 왜 마켓에 올라간 버전은 문제가 되었던 것일까??
처음에는 운영 버전 build 시 사용되는 암호화 프로그램 문제라고 생각 해 보고 암호화 과정을 빼고 build 를 해 보았지만 마찬가지였다.
그리고 혹시 playConsole 에 올리면서 문제가 발생한건가 싶어서 찾아보았지만 원인이 아니였다.
그럼 테스트 빌드와 운영 빌드중 무엇이 문제일까...
결국 문제는 운영 빌드시 사용하는 fastlane 이 문제였다.
현재 회사에서 CI/CD tool 로 fastlane 을 사용하고 있는데, fastlane 으로 빌드시 시스템 프로퍼티가 주어지지 않아서였다.
gradle(
task: 'assemble',
build_type: 'release',
flavor: 'product',
system_properties: {
"ENVFILE": "./env/.env.product"
}
)
이렇게 하니 문제 없이 잘 빌드 되었다.
그럼 왜 지금까지 잘 되었던 거지??
사실 react-native-config 와 fastlane 연동은 이전부터 잘 되던것이고, 이전 반영부터 문제가 발생하던거라 그 동안 왜 잘 되었는지 의문이였다.
찾아보니 react-native-config 를 사용하기 위해 ios 에서는 android 와 다르게 .env 파일을 해당 build type 에 따라 root 디렉토리에 .env 파일로 복사해서 그 파일을 읽도록 되어 있었다.
그런데 여러 빌드를 하면서 처음 빌드시에는 .env.prodcut 파일이 잘 복사되어 잘 되던것이 마침 이전 빌드에 .env.dev 가 복사 되어 문제가 발생했던 것 ;;;