앱을 개발하다보면 Staging, Debug, Release 등에 따라 빌드를 다르게 해야하는 값들이 있습니다.
ex) api 의 base url
단순히 #if DEBUG 등 으로도 사용할 수 있겠지만 코드 수정없이 조건에 따라 다른 값을 설정할 수 있는 build configuration을 소개합니다.
Build Configurations
앱의 프로젝트 설정에 들어갑니다.
+를 누르면 어떤 설정을 복사할지 물어보는데 저는 Staging을 만들기 위해 Duplicate "Debug" Configuration 을 선택했습니다.
모두 Shared를 체크해줍니다.
Manage Schemes... 를 눌러줍니다.
기존의 schemes 를 duplicate 해줍니다. 이름은 앱 이름이 MyTestApp 이므로 MyTestApp-Staging 으로 지었습니다.
Debug용으로도 똑같이 duplicate 하고 이름을 지어줍니다.
각각 scheme 의 설정에서 Run의 Build Configuration을 해당하는 값으로 변경해줍니다.
(Test나 Analyze, Archive 등 다른 옵션도 필요하다면 변경해줍니다.)
이제 각 Build 별 값을 저장할 파일을 만들겠습니다.
New file 을 선택하고 Configuration Settings File 을 선택해서 생성합니다.
이때 Targets에 체크하면 안됩니다.
각 Build별 사용할 파일을 만듭니다.
각 파일에 key = value 의 형식으로 값을 작성합니다.
저는 예시로 BASE_URL 에 각 build name을 적었습니다.
이제 값들을 적용하기만 하면 사용할 수 있습니다.
다시 프로젝트 설정으로 돌아가서 Configurations로 갑니다.
Configurations의 각 Based on Configuration File 에 설정을 해줍니다.
이제 info.plist 설정을 해줘야합니다.
프로젝트 설정에서 TARGETS를 선택하고 Info에서 +를 눌러 추가해줍니다.
추가하면 다음과같이 Info.plist 파일이 생성되었을 것 입니다.
Key, Value 를 아까 입력한 key를 이용해서 다음과 같이 수정해줍니다.
이제 설정이 완료되었습니다.
방금 설정한 값은 아래의 코드로 불러올 수 있습니다.
Bundle.main.object(forInfoDictionaryKey: "BASE_URL") as? String ?? ""
완성
각각의 Scheme 로 실행해보면 같은 코드지만 configuration 에 의해 다른 값이 나오는 것을 볼 수 있습니다.