개발공부 정리 노트
Configuration Setting File (xcconfig) format 본문
xcconfig에 대해 공부하기 위해 공식 문서를 번역한 글입니다.
원문: https://help.apple.com/xcode/mac/11.4/#/dev745c5c974
Configuration Settings File (.xcconfig 파일 확장자를 가진 파일)은 빌드 구성 파일 또는 xcconfig file로도 알려져 있으며, project 또는 target 각각의 빌드 구성을 정의하고 오버라이드한 plain text 파일입니다. 이 유형의 타입은 Xcode 밖에서 편집될 수 있고 소스 관리 시스템(ex. git)과 함께 잘 통합됩니다. Build configuration 파일은 지정된 포맷 규칙을 준수해야 합니다. 그렇지 않으면 빌드 경고를 생성합니다.
Note: 프로젝트에 Configuration Settings 파일을 추가하고 싶다면, https://help.apple.com/xcode/mac/11.4/#/deve97bde215 여기를 참고하세요.
Comments
빌드 시스템에서 무시되어야 하는 메모나 다른 정보를 포함하려면 한 줄 주석을 사용하세요. 각 코멘트는 두 개의 슬래시로 시작합니다. (//) 그리고 라인의 끝에 도달할 때까지 계속됩니다. (// 뒤부터 라인 끝까지 주석 처리 한다는 의미입니다.)
코멘트는 별도의 라인에 있을 수도 있고 빌드 설정 값 뒤에 올 수도 있습니다.
Specify a Build Setting Value
build configuration 파일은 가능한 모든 빌드 설정 리스트를 가질 필요가 없습니다. 커스터마이징하고 싶은 항목만 포함하면 됩니다.
각 빌드 설정 값은 다음 형식으로 한 줄에 정의됩니다.
BUILD_SETTING_DECLARATION_NAME = BUILD_SETTING_VALUE_DEFINITION
예를 들어:
ONLY_ACTIVE_ARCH = YES
빌드 설정 이름과 해당하는 값 모두 좌우 공백이 무시됩니다. 같은 조건을 가진 같은 빌드 설정은 여러 번 정의됐다면, 마지막 인스턴스가 사용되고 나머지 모두는 무시됩니다.
Note: Build Settings 창에 빌드 설정을 선택하면 빌드 설정 이름이 project editor의 Quick Help inspector에 표시됩니다. 또한 Build settings reference에서 빌드 설정 이름을 찾을 수 있습니다. Build Settings 창에서 빌드 설정 타이틀과 이름을 토글 할 수 있습니다.
Prevent a value from being overridden
기존 프로젝트 또는 target 빌드 설정 값을 새로 정의한 값의 일부로 유지하기 위해서는 다음 형식으로 $(inherited) 변수를 사용하면 됩니다.
BUILD_SETTING_DECLARATION_NAME = $(inherited)ADDITIONAL_VALUE
예를 들어:
OTHER_SWIFT_FLAGS = $(inherited) -v
다른 빌드 설정 값을 참조하기 위해 다음 형식으로 다른 빌드 설정 이름을 참조하세요.
예를 들어:
OBJROOT = $(SYMROOT)
다른 빌드 설정 값은 다음과 같이 인라인에 참조될 수 있습니다:
DSTROOT = /tmp/$(PROJECT_NAME).dst
또는:
CONFIGURATION_BUILD_DIR = $(BUILD_DIR)/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)
Add a platform condition to a value
프로젝트는 하나의 플랫폼과 다른 플랫폼의 타겟팅할 때 다르게 빌드해야 할 수 있습니다. 이를 허용하기 위해 빌드 시스템은 다음과 같은 조건부 지원을 제공합니다.
조건들은 빌드 세팅 이름 뒤에 표시되며 대괄호로 묶입니다. 예를 들어:
BUILD_SETTING_DECLARATION_NAME[CONDITIONAL=CONDITION_VALUE] = VALUE_DEFINITION
예를 들어, 다음에 오는 줄은 macOS SDK로 빌드할 때 OTHER_LDFLAGS 빌드 설정 값을 -Incurses로 설정합니다.
OTHER_LDFLAGS[sdk=macosx*] = -lncurses
다음 형식을 사용하여 여러 조건을 설정할 수 있습니다.
BUILD_SETTING_DECLARATION_NAME[CONDITIONAL1=CONDITION_VALUE1][CONDITIONAL2=CONDITION_VALUE2] = VALUE_DEFINITION
예를 들어, 다음에 오는 줄은 SDK가 macosx* 값을 갖고 아키텍처가 x86_64 값을 가질 때마다 OTHER_LDFLAGS 빌드 설정값을 -lncurses로 설정합니다.
OTHER_LDFLAGS[sdk=macosx*][arch=x86_64] = -lncurses
Include Settings from Other Build Configuration Files
빌드 구성 파일은 다른 빌드 구성 파일에서 온 빌드 설정을 임포트할 수 있습니다. 다른 파일 설정을 임포트하기 위해, 접두사에 #include를 사용하고, 따옴표 안에 파일 참조를 입력하세요. 예를 들어:
#include "MyOtherConfigFile.xcconfig"
빌드 타임에 지정된 파일을 찾을 수 없다면, 빌드 경고가 생성됩니다. 누락된 빌드 구성 파일의 경고를 없애려면, #include 접두사 뒤에 ?를 붙이세요. 예를 들어:
#include? "MyOtherConfigFile.xcconfig"
다른 빌드 구성 파일을 파일 이름, 상대 경로, 절대 경로를 사용하여 참조할 수 있습니다.
Note: 다른 빌드 구성 파일에 대한 참조는 빌드 설정을 해석하기 전에 처리됩니다.