04 April 2022

배포 환경에 따라 애플리케이션에 들어가는 라이브러리가 각각 다를 수 있습니다.

image

위와 같은 그림에서 Flex는 DevModule에만 있지만, Production 애플리케이션 타겟에서 DevModule을 실수로 링크를 하는 경우, Flex 라이브러리는 고객에게 전달되는 애플리케이션에 실려서 나가게 됩니다.

이를 빌드 단계에서 에러가 발생하도록 막는다면 Production 애플리케이션이 빌드 중에 에러가 발생하고, 고객에게 Flex 라이브러리가 포함된 애플리케이션은 전달되지 않을 것입니다.

Swift 4.1 SE-0075에서 추가된 canImport, Swift 4.2 SE-0196에서 추가된 컴파일러 지시자 #warning, #error를 이용하여 해당 라이브러리가 포함되는지 검증할 것입니다.

해당 코드는 다음과 같습니다.

/// FileName : ValidateImportModule.swift

#if PRODUCTION

#if canImport(DevModule)
#error("Production 타겟에 DevModule이 import가 가능합니다.")
#endif

#if canImport(Flex)
#error("Production 타겟에 Flex이 import가 가능합니다.")
#endif

#endif

전처리문 PRODUCTION 에서 canImport로 DevModule, Flex가 가능하면 컴파일러 지시자 error를 이용하여 빌드시 에러가 발생하도록 처리하는 것입니다.

개발자의 실수를 위와 같이 빌드 중에 검증할 수 있습니다.