React Native에서 DEV/PROD 분리는 필수다.
iOS는 보통 환경(DEV/PROD) × 빌드모드(Debug/Release) 조합으로 Build Configuration을 만든다.
| 이름 | 의미 | 보통 사용 |
|---|---|---|
| Dev.Debug | 개발 서버 + 디버그 | 로컬 개발 |
| Dev.Release | 개발 서버 + 릴리즈 | TestFlight QA |
| Debug | 운영 서버 + 디버그 | 거의 안 씀 |
| Release | 운영 서버 + 릴리즈 | App Store |
Configuration이 있어도 Scheme이 그걸 안 쓰면 의미 없음.
Xcode → Edit Scheme에서 보통 이렇게 고정한다.
Dev.DebugDev.Release(QA용) 또는 Release(스토어용)TestFlight는 Run이 아니라 Archive 결과물이다.
“개발계로 올렸는데 PROD처럼 보인다”는 대부분 Archive가 어떤 Configuration을 쓰는지부터 보면 됨
(확인 경로: Xcode 상단 Scheme 클릭 → Edit Scheme → Run/Archive의 Build Configuration)
Android는 flavor로 감이 오는데, iOS는 .env를 빌드할 때 네이티브 상수로 주입하는 방식이라서 스크립트가 안 돌면 값이 안 바뀐다.
ENVFILEBuildDotenvConfig.rb둘 중 하나라도 빠지면 앱에서는 계속 기본값(예: .env / BASE)이 찍힌다.
// Dev.xcconfig
ENVFILE=$(SRCROOT)/../.env.dev
// Prod.xcconfig
ENVFILE=$(SRCROOT)/../.env.prod
Bundle React Native code and images 위에 추가:
set -e
RBC="${PROJECT_DIR}/../node_modules/react-native-config/ios/ReactNativeConfig/BuildDotenvConfig.rb"
ruby "$RBC"
.env.dev 바꿔도 계속 예전 값(예: BASE)이 남는다.👉 환경 분기할 때는 이 옵션 꺼두는 게 안전함.