iOS Continuous CI / CD 구축해보자! - XCConfig
이 포스팅은 "iOS Continuous CI / CD 구축해보자!"의 Series 중 일부입니다.
1. iOS Continuous CI / CD 구축해보자! - Overview
2. iOS Continuous CI / CD 구축해보자! - XCConfig
3. iOS Continuous CI / CD 구축해보자! - Travis CI (준비중)
4. iOS Continuous CI / CD 구축해보자! - Fastlane (준비중)
5. iOS Continuous CI / CD 구축해보자! - Codecov (준비중)
XCConfig를 사용해야 하는 이유?
여러 유형의 빌드 타입들을 어떻게 효율적으로 관리할 수 있을까요?
기본적으로 빌드 타입은 Debug, Release 로 구분되어 있지만
2가지 빌드 타입뿐만 아니라 QA, Stage 등 많은 빌드 타입을 가질 수 있을 것입니다.
뿐만 아니라 .xcodeproj 를 통해 빌드 타입을 관리하는 것은 변경점을 파악하기 어려울 수 있습니다.
어떻게 적용할 수 있을까?
전체코드는 여기에서 확인할 수 있습니다.
Info.plist
xcconfig 정의한 변수를 info.plist 로 연결시켜주는 작업을 합니다.
⚠️ 시스템에서 이미 사용되고 있는 환경 변수(PRODUCT_NAME,PRODUCT_BUNDLE_IDENTIFIER)의 값으로 참조하면
.xcodeproj 값으로 평가되니 주의하셔야 합니다.
Development.xcconfig
앱의 기본적인 정보를 관리합니다.
#include "BuildType/Release.BuildType.xcconfig"
#include "Common/Common.xcconfig"
DISPLAY_NAME = AssinCICD
PRODUCT_NAME = AssinCICD
PRODUCT_BUNDLE_IDENTIFIER = com.assin.continuous
APP_IDENTIFIER = com.assin.continuous
Production.xcconfig
#include "BuildType/Debug.BuildType.xcconfig"
#include "Common/Common.xcconfig"
PRODUCT_NAME = Debug_AssinCICD
DISPLAY_NAME = Debug_AssinCICD
PRODUCT_BUNDLE_IDENTIFIER = com.assin.continuous.debug
APP_IDENTIFIER = com.assin.continuous.debug
Versions.xcconfig
Builde Version 를 관리합니다.
BUNDLE_VERSION = 1.0
LONG_BUNDLE_VERSION = 1
Common.xcconfig
Project 설정 정보를 관리합니다.
더 자세한 Build Setting Reference는 Apple Build Setting Reference, 이쁜 Reference 에서 확인할 수 있습니다.
#include "Versions.xcconfig"
IPHONEOS_DEPLOYMENT_TARGET = 11.0
SDKROOT = iphoneos
TARGETED_DEVICE_FAMILY = 1
SWIFT_VERSION = 5
[Debug, Release].BuildType.xcconfig
Debug 빌드 설정 정보를 관리합니다.
ONLY_ACTIVE_ARCH = YES
VALIDATE_PRODUCT = NO
GCC_OPTIMIZATION_LEVEL = 0
SWIFT_OPTIMIZATION_LEVEL = -Onone
BUILD_GCC_PREPROCESSOR_DEFINITIONS = DEBUG=1
BUILD_OTHER_SWIFT_FLAGS = -DDEBUG
ENABLE_TESTABILITY = YES
ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = $(inherited)
Xcode > Project > Build Setting 에 있는 값과 맵핑됩니다.
더 자세한 Build Setting Reference는 Apple Build Setting Reference, 이쁜 Reference 에서 확인할 수 있습니다.
Project Configuration
이제 마지막으로 Build Configuration 을 적용합니다!
마무리!
다양한 빌드 타입에 따라 Bundle Identifier 를 다르게 설정했다면 여러 앱이 설치됩니다.
Custom Build flag 나 API Key와 백엔드 URL 를 관리할 수도 있습니다.
자세한 내용은 여기에서 확인할 수 있습니다.
전체코드는 여기에서 확인할 수 있습니다.
⚠️pod install 명령어를 실행해야만 Xcode 가 crash 나지 않습니다.
참조: