티스토리 뷰

반응형

[1] RELEASE 플래그 

 

보통 앱을 만들면 DEBUG 컴파일러 플래그는 기본으로 추가되어있고

RELEASE 플래그를 직접 추가합니다. 

 

네모친 부분을 추가했음!

 

그리고 앱에서 종종 플래그를 사용해서 분기처리를 합니다. 

class ViewController: UIViewController {

    override func viewDidLoad() {
        super.viewDidLoad()
        
        #if RELEASE
        print("릴리즈")
        #else
        print("릴리즈 아님")
        #endif
        
        
        #if DEBUG 
        ... 
    }
}

 

그럼 Local Swift Package 를 앱에 embed 해서 쓰는 경우, 

Swift Package 안에서도 앱 빌드세팅의 컴파일러 플래그를 그대로 사용할 수 있을까요? 

 

 

테스트해보면

#if DEBUG 는 타고  #if RELEASE 는 안탑니다! 

DEBUG는 기본이라서 타고 RELEASE는 직접 추가한 것이라서 안타나봐요! 

 

이 경우,  #if RELEASE 를 사용하고 싶으면  swiftSettings > define(_:_:) 을 해주면 됩니다. 

 

 

그럼 RELEASE 플래그가 잘탑니다! 

 

 

# 테스트 1 (앱 빌드)

아래와 같이 코드를 작성하고 릴리즈 Build Configuration으로 앱 빌드를 해보면 

Swift Package 안에 있는 코드도 #if RELEASE 를 타는 것을 확인할 수 있습니다. 

 

 

# 테스트 2 (패키지 빌드)

뿐만아니라 swiftSettings > define(_:_:)  을 추가한 후, Swift 패키지를 단독 빌드/테스트 할 때도 #if RELEASE 로 잘 들어옵니다.

 

이상하지만 테스트를 위해 Test의 Build Configuration을 RELEASE 로 바꾸고 

 

 

아래 테스트를 돌려보면 성공합니다.  Build Configuration이 DEBUG면 실패! 

 

 

 

[2] define

참고로  define(_:_:) 은 PackageDescription 5.0 부터 사용가능합니다.

 

또한 저는 RELEASE 플래그를 위해 저렇게 썼지만

define의 condition은 nil로 기본 값이 설정되어있기 때문에 

 

BuildConfiguration 상관없이 Target-specific flag 를 만들어서 사용할 수 도 있다고 합니다. (참고)

Target-specific flags in the manifest: options like cSettings or swiftSettings are used for fine-grained control of compilation flags for particular targets.

 

유용한 실예제로 어떤 게 있는 지는 잘모르겠네요!

 

 

 

[3] Custom Build Configuration은?

 

보통 회사에서 Build Configuration을 여러개 두고 쓰는데, 이 경우는 어떨까요?

우선 Swift Package의 BuildConfiguration  은 현재 debug, release 두개의 configuration밖에 못쓰는 것 같아요

 

 

 

Configurations > Duplicate "Debug" Configuration으로  만든  Custom Configuration의 경우,

Swift Package 내에서 DEBUG 를 타고 

 

 

 

Configurations > Duplicate "Release" Configuration 만든 Custom Configuration의 경우,

Swift Package 내에서 RELEASE를 탑니다. 

 

 

 

 

그리고 주의해야할 점이 있습니다. 

예를들어 Debug Copy로 Inhouse Debug 를 만들고

 

 

일부러 왼쪽에서 오른쪽으로 빌드세팅을 바꿔보았어요! 

 

 

그리고 해당 Build Configuration으로 빌드하면 

앱 안의 코드는  #if RELEASE 를 타지만

Swift Package 안의 코드는 #if RELEASE 를 안타고 여전히 #if DEBUG 를 탑니다,,,

 

이유는 모르겠지만,, 주의! 

 

 

반응형
댓글