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 [나를 찾는 아이]
'생계유지형 개발자 > Mobile' 카테고리의 다른 글
[ios] UITextField 사용할 때 키보드 타입 변경 (0) | 2021.02.09 |
---|---|
[ios] iOS 13 이상 Multiple Windows 지원 업데이트 (iPad) (0) | 2020.10.21 |
[ios] Main.storyboard: warning: Unsupported Configuration: Medium Style before iOS 13.0 (0) | 2020.08.05 |
[ios] Exception: Could not instantiate class named WKWebView because no class named WKWebView was found (0) | 2020.07.29 |
[ios] iOS 13 미만인 경우, SceneDelegate로 인해 실행 안될 때 (0) | 2020.07.29 |