.xcconfig를 이용한 빌드 설정의 이유와 장점
1. 설정의 분리와 가독성 향상
• 코드와 설정 분리: 빌드 설정을 소스 코드와 분리함으로써, 설정 파일이 더 깔끔하고 관리하기 쉬워집니다.
• 가독성: 텍스트 파일 형식의 .xcconfig 파일은 Xcode UI보다 설정을 일목요연하게 정리할 수 있습니다.
2. 환경별 설정 관리 용이
• 환경별 설정 관리: 개발, 테스트, 프로덕션 등 다양한 빌드 환경별로 설정을 쉽게 관리할 수 있습니다.
• 중복 최소화: 공통 설정을 하나의 파일로 관리하고, 환경별로 필요한 설정만 덧붙일 수 있어 설정 중복을 최소화할 수 있습니다.
3. 버전 관리
• Git 등 VCS 관리 용이: .xcconfig 파일은 텍스트 파일이므로 Git 등의 버전 관리 시스템에서 변경 이력을 쉽게 추적할 수 있습니다.
• 협업 용이: 팀 내에서 설정 변경 사항을 명확히 하고 공유할 수 있습니다.
4. 자동화와 스크립트 통합
• 자동화 통합: .xcconfig 파일을 사용하여 빌드 설정을 관리하면 CI/CD 파이프라인에서 설정을 쉽게 적용하고 관리할 수 있습니다.
• 스크립트와의 통합: 커스텀 빌드 스크립트와 쉽게 통합할 수 있습니다. 예를 들어, 특정 빌드 설정에 따라 스크립트를 다르게 실행할 수 있습니다.
5. 유지보수성 향상
• 중앙 집중식 관리: 여러 타겟이나 여러 프로젝트에서 공통으로 사용하는 설정을 중앙에서 관리할 수 있습니다.
• 변경 용이: 특정 설정을 변경할 때, 해당 설정이 적용된 모든 곳에서 일괄적으로 변경할 수 있습니다.
6. Tuist로의 이행 준비
(Tuist는 Xcode 프로젝트를 코드로 관리할 수 있게 해주는 도구로, 다양한 설정을 손쉽게 관리하고 자동화할 수 있습니다. )
• 기초 설정 준비: .xcconfig 파일을 사용하여 빌드 설정을 미리 정리해 두면, Tuist로 전환할 때 설정을 쉽게 통합할 수 있습니다.
• 이행의 용이성: .xcconfig 파일을 통해 관리하던 설정을 Tuist의 Project.swift 파일로 이전할 때, 기존 설정을 참고하여 쉽게 이전할 수 있습니다.
.xcconfig 설정 방법
1. Xcode 맨 위 File 메뉴를 클릭 후, New > **File…**을 선택합니다. 그리고 iOS탭 선택
2. Other탭 위치까지 아래로 스크롤
3. 파일 템플릿 선택 화면에서 Configuration Settings File을 선택합니다. 이 옵션은 ‘Other’ 카테고리 아래에 있습니다.
4. Next 버튼을 클릭합니다.
5. 아래 사진과 같이 생성된 모습을 볼 수 있다.
1. 프로젝트 선택: 파일 탐색기에서 프로젝트 이름 클릭
2. 프로젝트 설정으로 이동: 프로젝트 이름 클릭
3. Info 탭 선택: Info 탭 클릭
4. Configurations 섹션 확장: Configurations 섹션 확장
5. 빌드 구성 추가: + 버튼 클릭 (Edit Scheme -> Build Configuration을 통해서 추가한 빌드 구성을 설정할 수 있다.)
6. .xcconfig 파일 선택: 각 빌드 구성에 대해 .xcconfig 파일 선택
7. 명령줄 빌드 구성 설정: Use 드롭다운 메뉴에서 명령줄 빌드 구성 설정
아래 링크를 들어가면 .xcconfig에 설정할 수 있는 내용이 정리 되어있다.
https://help.apple.com/xcode/mac/11.4/#/itcaec37c2a6
아래는 프로젝트에 필요한 내용 정리
App.share.xcconfig를 만들어서 각 .xcconfig에 공통으로 들어갈 내용을 설정할 수 있다.
// 사용자 경로를 항상 검색하지 않도록 설정합니다. 이는 일반적으로 NO로 설정하여 빌드 속도를 최적화합니다.
ALWAYS_SEARCH_USER_PATHS = NO
// 로컬화되지 않은 문자열에 대한 경고를 활성화합니다.
CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES
// null 가능성을 분석하도록 설정합니다.
CLANG_ANALYZER_NONNULL = YES
// C++ 언어 표준을 지정합니다. 여기서는 gnu++0x 표준을 사용합니다.
CLANG_CXX_LANGUAGE_STANDARD = gnu++0x
// 사용할 C++ 라이브러리를 지정합니다. 여기서는 libc++를 사용합니다.
CLANG_CXX_LIBRARY = libc++
// Clang 모듈을 활성화합니다. 이는 컴파일 시간을 단축시키고 모듈화된 코드를 사용할 수 있게 합니다.
CLANG_ENABLE_MODULES = YES
// Objective-C 자동 참조 카운팅(ARC)을 활성화합니다.
CLANG_ENABLE_OBJC_ARC = YES
// 중복 메서드 일치에 대한 경고를 활성화합니다.
CLANG_WARN__DUPLICATE_METHOD_MATCH = YES
// 블록에서 autoreleasing 변수 캡처에 대한 경고를 활성화합니다.
CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES
// 불리언 값 변환에 대한 경고를 활성화합니다.
CLANG_WARN_BOOL_CONVERSION = YES
// 콤마 연산자 사용에 대한 경고를 활성화합니다.
CLANG_WARN_COMMA = YES
// 상수 변환에 대한 경고를 활성화합니다.
CLANG_WARN_CONSTANT_CONVERSION = YES
// 사용되지 않는 Objective-C 구현에 대한 경고를 활성화합니다.
CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES
// 직접적인 isa 사용에 대해 오류를 발생시킵니다.
CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR
// 빈 코드 블록에 대한 경고를 활성화합니다.
CLANG_WARN_EMPTY_BODY = YES
// 열거형 변환에 대한 경고를 활성화합니다.
CLANG_WARN_ENUM_CONVERSION = YES
// 무한 재귀 호출에 대한 경고를 활성화합니다.
CLANG_WARN_INFINITE_RECURSION = YES
// 정수 변환에 대한 경고를 활성화합니다.
CLANG_WARN_INT_CONVERSION = YES
// 리터럴이 아닌 null 변환에 대한 경고를 활성화합니다.
CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES
// Objective-C에서 self 암시적 유지에 대한 경고를 활성화합니다.
CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES
// Objective-C 리터럴 변환에 대한 경고를 활성화합니다.
CLANG_WARN_OBJC_LITERAL_CONVERSION = YES
// Objective-C 루트 클래스 경고를 오류로 처리합니다.
CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR
// 프레임워크 헤더에서 인용 부호로 포함된 파일에 대한 경고를 활성화합니다.
CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES
// 범위 기반 루프 분석에 대한 경고를 활성화합니다.
CLANG_WARN_RANGE_LOOP_ANALYSIS = YES
// 엄격한 프로토타입 규칙에 대한 경고를 활성화합니다.
CLANG_WARN_STRICT_PROTOTYPES = YES
// 의심스러운 move 연산에 대한 경고를 활성화합니다.
CLANG_WARN_SUSPICIOUS_MOVE = YES
// 도달할 수 없는 코드에 대한 경고를 활성화합니다.
CLANG_WARN_UNREACHABLE_CODE = YES
// 코드 서명 스타일을 자동으로 설정합니다. Xcode가 적절한 서명 옵션을 자동으로 선택합니다.
CODE_SIGN_STYLE = Automatic
// 릴리즈 빌드에서 디버그 심볼을 제거하지 않도록 설정합니다.
COPY_PHASE_STRIP = NO
// 애플 개발자 계정의 팀 ID를 지정합니다. 코드 서명에 사용됩니다.
DEVELOPMENT_TEAM = AAAAAA
// Objective-C 메서드 호출을 엄격하게 검증하도록 설정합니다.
ENABLE_STRICT_OBJC_MSGSEND = YES
// C 언어 표준을 지정합니다. 여기서는 gnu99 표준을 사용합니다.
GCC_C_LANGUAGE_STANDARD = gnu99
// 공통 블록 사용을 금지합니다.
GCC_NO_COMMON_BLOCKS = YES
// 64비트에서 32비트로의 변환에 대한 경고를 활성화합니다.
GCC_WARN_64_TO_32_BIT_CONVERSION = YES
// 반환 타입에 대한 경고를 오류로 처리합니다.
GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR
// 선언되지 않은 셀렉터에 대한 경고를 활성화합니다.
GCC_WARN_UNDECLARED_SELECTOR = YES
// 초기화되지 않은 자동 변수에 대한 경고를 활성화합니다.
GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE
// 사용되지 않는 함수에 대한 경고를 활성화합니다.
GCC_WARN_UNUSED_FUNCTION = YES
// 사용되지 않는 변수에 대한 경고를 활성화합니다.
GCC_WARN_UNUSED_VARIABLE = YES
// Info.plist 파일의 전처리기에 사용될 헤더 파일을 지정합니다.
//INFOPLIST_PREFIX_HEADER = info_preprocess.h
// Info.plist 파일을 전처리하도록 설정합니다.
INFOPLIST_PREPROCESS = YES
// 최소 iOS 배포 대상 버전을 설정합니다.
IPHONEOS_DEPLOYMENT_TARGET = 17.0
// 앱의 마케팅 버전을 설정합니다. 이는 앱 스토어에서 표시되는 버전입니다.
MARKETING_VERSION = 1.0
// 프로비저닝 프로필을 지정합니다. 이 설정은 프로비저닝 프로필의 UUID를 명시하지 않을 때 사용됩니다.
PROVISIONING_PROFILE_SPECIFIER =
// 사용할 SDK 루트를 설정합니다. 여기서는 iOS SDK를 사용하도록 설정합니다.
SDKROOT = iphoneos
// 최소 watchOS 배포 대상 버전을 설정합니다.
WATCHOS_DEPLOYMENT_TARGET = 9.0
App.debug.xcconfig에 설정한 내용이다.
#include "App.shared.xcconfig"
// 코드 서명에 사용할 신원을 지정합니다. 여기서는 “iPhone Developer”로 설정되어 있습니다. 이는 개발자 인증서로 서명하는 것을 의미합니다.
CODE_SIGN_IDENTITY = iPhone Developer
// iPhoneOS SDK를 사용하는 빌드에 대해 코드 서명 신원을 “iPhone Developer”로 설정합니다.
CODE_SIGN_IDENTITY[sdk=iphoneos*] = iPhone Developer
// 디버그 정보 형식을 DWARF로 설정합니다. DWARF는 디버그 정보를 저장하는 형식으로, 디버깅 시 사용됩니다.
DEBUG_INFORMATION_FORMAT = dwarf
// 테스트 가능성을 활성화합니다. 이 설정은 XCTest 프레임워크를 사용하여 테스트할 때 필요한 설정입니다.
ENABLE_TESTABILITY = YES
// Position-Independent Code (PIC)를 비활성화합니다. PIC는 코드가 메모리 내 어느 위치에서도 실행될 수 있도록 하는 기법입니다.
GCC_DYNAMIC_NO_PIC = NO
// 최적화 레벨을 0으로 설정합니다. 이는 최적화를 하지 않도록 설정하며, 일반적으로 디버그 빌드에서 사용됩니다.
GCC_OPTIMIZATION_LEVEL = 0
// 전처리기 정의를 설정합니다. 여기서는 DEBUG 매크로를 1로 정의하고, 이전 설정을 상속합니다. 이는 디버그 빌드에서 사용됩니다.
GCC_PREPROCESSOR_DEFINITIONS = DEBUG=1 $(inherited)
// Metal API 디버그 정보를 활성화합니다. 이는 Metal API를 사용할 때 디버깅을 쉽게 하기 위한 설정입니다.
MTL_ENABLE_DEBUG_INFO = YES
// 현재 활성화된 아키텍처만 빌드하도록 설정합니다. 이는 빌드 시간을 단축시키기 위해 디버그 빌드에서 자주 사용됩니다.
ONLY_ACTIVE_ARCH = YES
'Apple > Apple_Xcode' 카테고리의 다른 글
[Localization] 다른 나라 언어 대응하기. (현지화) (0) | 2024.03.21 |
---|---|
Xcode Source Control (Git) 상태 표시의 의미 (0) | 2024.03.11 |