관리 메뉴

김종권의 iOS 앱 개발 알아가기

[iOS - swift] iOS 프로젝트 배포 환경별 build 세팅, Build Scheme 세팅 (단일타겟, xcconfig) 본문

iOS 앱 배포와 출시

[iOS - swift] iOS 프로젝트 배포 환경별 build 세팅, Build Scheme 세팅 (단일타겟, xcconfig)

jake-kim 2021. 4. 21. 22:13

* xcconfig방법은 .xcconfig파일을 별도로 swift문법과는 다르게 작성하는 번거로움이 있는 단점과 더욱 정밀하게 선언하여 관리할 수 있는 장점이 있지만, info.plist에 configuration을 가져와서 .swift파일에서 동작하도록 하는게 더욱 간편

 

* info.plist로 설정 방법: ios-development.tistory.com/278

각 환경에 맞는 설정파일 추가

  • Configuration은 나눈 상태 (debug / alpha / beta / release)
    - 단 debug모드는 전처리기로 구분하려고 할 때, alpha, beta, release모두에 포함되므로, 새로운 스킴 DEV와 같이 만들 것
    - 아래는 편의상 Debug로 정의

  • Configuration Settings File 추가
    - 구성: CConfig 디렉토리에 shared.xcconfig(공통적으로 사용될 config), 하위 App에 대한 phase 각 .xcconfig파일이 존재

각 Configuration 파일 내용 적용

  • 각 xcconfig 별 속성 정의
// 각 파일에 공통적으로 추가
#include "../shared.xcconfig"

Debug.xcconfig

  • shared.xcconfig 파일에 각 환경에 맞게 MACRO로 분기할 수 있도록 적용
    - config={xcconfig이름}
OTHER_SWIFT_FLAGS[config=DEBUG][sdk=*] = $(inherited) -DDEBUG
OTHER_SWIFT_FLAGS[config=ALPHA][sdk=*] = $(inherited) -DALPHA
OTHER_SWIFT_FLAGS[config=BETA][sdk=*] = $(inherited) -DBETA
OTHER_SWIFT_FLAGS[config=RELEASE][sdk=*] = $(inherited) -DRELEASE
  • configurations -> xcconfig 파일 지정

Configuration

Scheme 추가

  • Manager Schemes 선택

  • Schemes 추가

추가된 빌드 scheme

  • build configuration 설정 (default가 debug이므로 따로 설정 필요)
    • 일반적으로는 Debug-Alpha, Beta, Production 세 개로 구성

Edit Scheme 선택

  •  debug, alpha, beta, release모두 Build Configuration 수정
    - Run, Test, Profle, Analyze, Archive 모두 수정 필요
    • 만약 Debug-Alpha, Release-Alpha 이렇게 한쌍으로 구성할 경우, Run, Test, Analyze에는 Debug-Alpha로 설정 / Profile, Archive에는 Release-Alpha로 설정

결과 확인

  • MACRO로 확인

API를 환경설정 별 다르게 부르는 방법

  • API프로젝트가 있을때 위에서 정의했던 configuration들을 동일하게 만들어 주지 않으면 오류
  • API프로젝트에 MACRO로 환경별 다른 api를 호출하도록 설정
  • MainApp에서 API프로젝트를 import한 후 사용

기타 xcconfig의 활용

  • xcconfig파일은 info.plist에서 접근 가능

.xcconfig

  • info.plist에서 좌측 key값은 .swift파일에서 접근, 우측 value값은 .xccconfig로부터 읽어오는 것

info.plist

  • 타겟 빌드세팅에서 configuration세팅이 되어 있다면, configuration.swift 파일에서 불러와서 바로 사용

config 세팅

  • 빌드 세팅에 어떤 환경을 구별하는 DeployPhase 값을 보고 Configuration.swift에 적용하지 않아도 되는 간편함 존재
//
//  ServiceConfiguration.swift
//  configTest
//
//  Created by 김종권 on 2021/04/26.
//

import Foundation

struct ServiceConfiguration {
    static var baseUrl: String {
        guard let baseUrl = Bundle.main.object(forInfoDictionaryKey: "ApiBaseUrl") as? String else {
            fatalError("Service API URL could not find in plist. Please check plist or user-defined!")
        }
        return baseUrl
    }
}

* xcconfig를 이용한 xcode 세팅: https://ios-development.tistory.com/660

 

* 참고

pewpewthespells.com/blog/xcconfig_guide.html

minsone.github.io/ios/mac/xcode-xcconfig

www2.slideshare.net/MintakSon/ios-80115427

 

Comments