Expo Prebuild를 실행할 때 Xcode의 Development Region이 en으로 돌아가는 원인과 config plugin으로 ko를 유지하는 방법을 정리합니다.
Expo 프로젝트에서 iOS 앱을 빌드하려고 Xcode를 열었을 때, Project → Info → Localizations의 기본 언어가 계속 English로 돌아가는 문제가 있었습니다.
Xcode에서 Korean을 추가하거나 Development Region을 한국어로 바꿔도, 다음에 npx expo prebuild를 실행하면 변경이 사라졌습니다. 이 글에서는 왜 이런 현상이 발생하는지와, Expo config plugin으로 Development Region을 ko로 고정하는 방법을 정리합니다.
Expo 프로젝트에서 iOS 네이티브 프로젝트를 생성한 뒤 Xcode에서 다음 항목을 직접 수정했습니다.
Korean 추가en에서 ko로 변경하지만 다시 iOS 프로젝트를 생성하면 설정이 초기값으로 돌아갔습니다.
npx expo prebuild --platform ios특히 --clean 옵션을 사용하면 기존 ios/ 폴더를 삭제하고 다시 만들기 때문에, Xcode에서 직접 수정한 내용은 확실히 사라집니다.
npx expo prebuild --platform ios --cleanExpo의 CNG(Continuous Native Generation) 구조에서 ios/, android/ 폴더는 app.json과 설치된 패키지를 바탕으로 생성되는 결과물입니다.
즉, ios/*.xcodeproj/project.pbxproj를 Xcode에서 직접 수정하는 방식은 유지 대상이 아닙니다. Prebuild가 다시 실행되면 새 Xcode 프로젝트가 만들어지고, 수동 변경은 덮어써집니다.
이 현상은 특정 앱만의 문제라기보다, Expo Prebuild/CNG를 쓰는 프로젝트에서 네이티브 설정을 직접 수정할 때 공통으로 생길 수 있는 특성입니다.
`Expo Config Plugins 소개` `Expo Continuous Native Generation(CNG)`Expo 공식 문서도 CNG 프로젝트에서는 네이티브 파일을 직접 수정하기보다 config plugin으로 변경 사항을 적용하는 방식을 권장합니다.
withXcodeProject를 사용하는 로컬 config plugin을 만들면, Prebuild가 Xcode 프로젝트를 생성한 뒤 원하는 값을 자동으로 적용할 수 있습니다.
프로젝트 루트에 plugins/with-ios-development-region.js 파일을 만듭니다.
const { withXcodeProject } = require("@expo/config-plugins");
const DEVELOPMENT_REGION = "ko";
const withIosDevelopmentRegion = (config) =>
withXcodeProject(config, (config) => {
const project = config.modResults.getFirstProject().firstProject;
project.developmentRegion = DEVELOPMENT_REGION;
project.knownRegions = [DEVELOPMENT_REGION, "Base"];
return config;
});
module.exports = withIosDevelopmentRegion;이 플러그인은 생성된 project.pbxproj의 다음 값을 변경합니다.
developmentRegion = ko;
knownRegions = (
ko,
Base,
);app.json의 expo.plugins 배열에 로컬 플러그인 경로를 추가합니다.
{
"expo": {
"plugins": ["./plugins/with-ios-development-region", "expo-router"]
}
}기존에 등록된 플러그인은 지우지 않고 그대로 유지하면 됩니다.
npx expo prebuild --platform ios이제 Prebuild를 다시 실행해도 Xcode 프로젝트에 ko가 적용됩니다.
프로젝트 생성 후 ios/*.xcodeproj/project.pbxproj를 열어 아래 값이 있는지 확인합니다.
developmentRegion = ko;
knownRegions = (
ko,
Base,
);Xcode에서도 파란색 프로젝트 아이콘을 선택한 뒤 PROJECT → Info → Localizations로 이동하면 한국어가 개발 리전으로 반영된 것을 확인할 수 있습니다.
app.json에서 ios.infoPlist.CFBundleDevelopmentRegion 값을 ko로 넣는 방법도 생각할 수 있습니다.
{
"expo": {
"ios": {
"infoPlist": {
"CFBundleDevelopmentRegion": "ko"
}
}
}
}하지만 이 설정은 Info.plist의 값만 수정합니다. Xcode의 Project Localization 목록과 Development Region은 project.pbxproj에서 관리하므로, Xcode UI의 설정까지 일관되게 맞추려면 앞에서 만든 config plugin 방식이 더 확실합니다.
위 예시는 한국어만 지원하는 앱을 기준으로 knownRegions를 ko, Base만 남깁니다.
영어와 한국어를 함께 지원한다면 필요한 언어를 모두 유지해야 합니다.
project.knownRegions = ["ko", "en", "Base"];또한 Development Region 설정은 Xcode 프로젝트의 기본 언어 설정일 뿐, React Native 화면의 문구를 자동으로 번역하지는 않습니다. 앱 내 다국어 처리는 expo-localization과 i18n 라이브러리로 별도로 구현해야 합니다.
withXcodeProject로 developmentRegion과 knownRegions를 수정하면, Prebuild 뒤에도 ko 설정을 유지할 수 있습니다.