생계유지형 개발자/Mobile

[ios] 배포환경 별 빌드설정 달리 하기

이 가을 2020. 8. 11. 14:39

1) Project Configuration 생성

Target은 프로젝트에서 무료앱, 유료앱과 같은 상품별 분기가 발생할때 사용하는 것이고 개발, 운영, 스테이징 등의 배포환경을 분리할 때는 Build Configuration 을 활용한다.

PROJECT > Info 탭에 들어가면 Configurations 항목이 있고 로컬 빌드 및 실행에 사용되는 Debug와 배포할 때 사용되는 Release 두 개가 기본으로 존재한다.

Debug, Release 외에 다른 빌드환경이 필요하다면 + 를 눌러서 기존 설정을 복사(Duplicate)하는 형태로 생성한다.

예를 들면, Duplicate "Release" Configuration 하여  "Stage"라는 설정을 생성할 수 있다.

배포환경을 분리하는 이유는 대부분이 앱 실행 환경마다 서버명, 도메인, IP, 접속계정 등 프로퍼티 값이 다를 수 있기 때문이다.

ios 에서는 config라고 부르는 것 같은데 나는 자바에 익숙해서 프로퍼티라고 하게 되네....

배포환경 별로 Info.plist를 생성해서 Config값을 다르게 설정할 수도 있는데 그것보다 좀 더 유지보수가 용이한, 편한 방법은 config 파일을 하나 더 생성하는거다.

2) Configuration 파일 생성

프로젝트명 우클릭 > New file > Configuration Setting File > .xcconf 생성하는 방법으로 배포환경에 따라 Debug.xcconf, Release.xcconf를 생성할 수 있다.

그리고 다시 Configurations 항목에 가면 Based on Configuration File에 내가 사용할 설정파일을 지정한다.

pods를 사용하는 (나의) 경우에는 pods 프로젝트를 생성하면 함께 만들어 지는 Pods-프로젝트명.debug, Pods-프로젝트명.release 파일을 사용했다.

각각의 설정 파일에 Key = Value 형태로 설정을 작성한다.

// ----------------------------------
// Pods-MobileConnect.debug.xcconfig
// ----------------------------------

APP_NAME 	= MobileConnect_dev
TOKEN_NAME 	= auth_tok_dev


// ----------------------------------
// Pods-MobileConnect.release.xcconfig
// ----------------------------------

APP_NAME 	= MobileConnect
TOKEN_NAME 	= auth_tok

3) info.plist에 등록

xcconf 파일에 작성되어 있는 키값을 info.plist에 맵핑했다. 여기에 작성된 설정값들은 소스코드에서도 사용될 수 있다. 

만약 설치한 어플 이름을 빌드환경 별로 다르게 하고 싶다면 info.plist에서 Bundle display name 설정을 $(APP_NAME)로 한다.

4) 소스코드에서 사용

소스코드에서는 xcconf 파일의  설정값을 아래와 같이 변수선언하여 사용할 수 있다.

static let appScheme = Bundle.main.infoDictionary?["APP_SCHEME"] as? String

 

출처

https://trend21c.tistory.com/2103 [나를 찾는 아이]