iOS

iOS Continuous CI / CD 구축해보자! - XCConfig

iOS_Assin 2019. 10. 17. 20:17

이 포스팅은 "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 나지 않습니다.

 

참조: 

https://developer.apple.com/library/archive/documentation/DeveloperTools/Reference/XcodeBuildSettingRef/1-Build_Setting_Reference/build_setting_ref.html

https://pewpewthespells.com/blog/buildsettings.html

https://www.appcoda.com/xcconfig-guide/