적당한 고통은 희열이다

- 댄 브라운 '다빈치 코드' 중에서

초보 iOS 개발자의 일상/개발 업무

프로젝트 별 spm 설정 초기화 (설정값 주입? or 환경변수 설정?)

hongssup_ 2024. 7. 23. 18:09
반응형

디자인 모듈을 만들었는데, 

프로젝트마다 primary color 가 바뀌도록 초기 설정을 해주어야 한다. 

 

일단 요러케 프로젝트 타입을 정의해두고

public enum AppType {
    case main
    case sub
}

 

 

SPM 모듈 내에서 각 프로젝트마다 다르게 초기화되는 값을 설정하는 방법

 

1. Dependency Injection 사용하여 설정값 직접 주입받기

다음과 같이 SPM 모듈 내에 초기화 구조체 정의

public struct DesignConfiguration {
    public static var shared = DesignConfiguration()
    
    public let appType: AppType
    
    public init(appType: AppType = .main) {
        self.appType = AppType .main
    }
}

 

그런 다음 모듈을 사용할 프로젝트에서 직접 초기화를 해줘야 한다. UIKit 프로젝트에서는 AppDelegate 내에서 초기화 해주면 됨.

@main
struct DesignSystemTestApp: App {
    init() {
        initialSetup()
    }
    
    private func initialSetup() {
        DesignConfiguration.shared = DesignConfiguration(appType: .sub)
    }
}

 

 

2. 환경 변수 사용하여 설정

SPM 내에서 다음과 같이 설정해주고, 사용할 프로젝트에는 환경변수만 넣어주면 된다. 

let myApp: AppType = AppType(rawValue: Config.myApp) ?? .main

public struct Config {
    public static var myApp: String {
        return ProcessInfo.processInfo.environment["PROJECT_TYPE"] ?? "main"
    }
}

환경 변수 넣어주는 방법은 [Edit Scheme > Run > Arguments > Environment Variables] 에서 name 과 value 를 추가해주면 된다.

 

 

 

 

이런 식으로 설정을 해두면 열거형 안에 static let 으로 선언해둔 color 값들을 프로젝트 타입에 따라 분기처리해줄 수 있다. 

 

둘 다 상관은 없지만 설정값을 직접 주입하는 방식이 좀 더 명시적인 것 같기도 하고, 

어짜피 cutom font 를 사용하려면 어짜피 FontConfiguration도 초기 설정이 필요하기 때문에

초기화 할때 함께 넣어주고자 첫번째 방법으로 적용을 해주었다. 

728x90
반응형