🔥 SupportedPlatform

508자
6분

Swift Package Manager에서는 SupportedPlatform 구조체를 사용하여 Swift 패키지가 지원하는 플랫폼을 정의합니다. 기본적으로 Swift Package Manager는 설치된 SDK에서 지원하는 가장 오래된 배포 대상 버전을 각 지원 플랫폼에 할당하지만, platforms API를 사용하여 지원 플랫폼을 구성할 수 있습니다.

SupportedPlatform 구조체는 다음과 같은 메서드를 제공합니다:

swift
/// macOS 플랫폼에 대한 최소 배포 대상 버전을 구성합니다.
///
/// - Since: PackageDescription 5.0에서 처음 사용 가능
///
/// - Parameter version: 패키지가 지원하는 최소 배포 대상입니다.
static func macOS(_ version: SupportedPlatform.MacOSVersion) -> SupportedPlatform
 
/// 버전 문자열을 사용하여 macOS 플랫폼에 대한 최소 배포 대상 버전을 구성합니다.
///
/// 버전 문자열은 `10.10` 또는 `10.10.1`과 같이 점으로 구분된 두 개 또는 세 개의 정수 시리즈여야 합니다.
///
/// - Since: PackageDescription 5.0에서 처음 사용 가능
///
/// - Parameter versionString: `10.10.1`과 같이 점으로 구분된 두 개 또는 세 개의 정수로 표현된 문자열 형식의 최소 배포 대상입니다.
static func macOS(_ versionString: String) -> SupportedPlatform
swift
/// macOS 플랫폼에 대한 최소 배포 대상 버전을 구성합니다.
///
/// - Since: PackageDescription 5.0에서 처음 사용 가능
///
/// - Parameter version: 패키지가 지원하는 최소 배포 대상입니다.
static func macOS(_ version: SupportedPlatform.MacOSVersion) -> SupportedPlatform
 
/// 버전 문자열을 사용하여 macOS 플랫폼에 대한 최소 배포 대상 버전을 구성합니다.
///
/// 버전 문자열은 `10.10` 또는 `10.10.1`과 같이 점으로 구분된 두 개 또는 세 개의 정수 시리즈여야 합니다.
///
/// - Since: PackageDescription 5.0에서 처음 사용 가능
///
/// - Parameter versionString: `10.10.1`과 같이 점으로 구분된 두 개 또는 세 개의 정수로 표현된 문자열 형식의 최소 배포 대상입니다.
static func macOS(_ versionString: String) -> SupportedPlatform

위의 코드는 macOS 플랫폼에 대한 최소 배포 대상 버전을 구성하는 두 가지 방법을 보여줍니다. 첫 번째 메서드는 SupportedPlatform.MacOSVersion 열거형을 사용하고, 두 번째 메서드는 버전 문자열을 사용합니다.

예를 들어, macOS 10.15를 최소 배포 대상으로 설정하려면 다음과 같이 작성할 수 있습니다:

swift
let platform: SupportedPlatform = .macOS(.v10_15)
swift
let platform: SupportedPlatform = .macOS(.v10_15)

또는 버전 문자열을 사용하여 다음과 같이 작성할 수도 있습니다:

swift
let platform: SupportedPlatform = .macOS("10.15")
swift
let platform: SupportedPlatform = .macOS("10.15")

SupportedPlatform 구조체는 iOS, tvOS, watchOS 플랫폼에 대해서도 유사한 메서드를 제공합니다. 예를 들면:

swift
/// iOS 플랫폼에 대한 최소 배포 대상 버전을 구성합니다.
///
/// - Since: PackageDescription 5.0에서 처음 사용 가능
///
/// - Parameter version: 패키지가 지원하는 최소 배포 대상입니다.
static func iOS(_ version: SupportedPlatform.IOSVersion) -> SupportedPlatform
 
/// 사용자 정의 버전 문자열을 사용하여 iOS 플랫폼에 대한 최소 배포 대상 버전을 구성합니다.
///
/// 버전 문자열은 `8.0` 또는 `8.0.1`과 같이 점으로 구분된 두 개 또는 세 개의 정수 시리즈여야 합니다.
///
/// - Since: PackageDescription 5.0에서 처음 사용 가능
///
/// - Parameter versionString: `8.0.1`과 같이 점으로 구분된 두 개 또는 세 개의 정수로 표현된 문자열 형식의 최소 배포 대상입니다.
static func iOS(_ versionString: String) -> SupportedPlatform
swift
/// iOS 플랫폼에 대한 최소 배포 대상 버전을 구성합니다.
///
/// - Since: PackageDescription 5.0에서 처음 사용 가능
///
/// - Parameter version: 패키지가 지원하는 최소 배포 대상입니다.
static func iOS(_ version: SupportedPlatform.IOSVersion) -> SupportedPlatform
 
/// 사용자 정의 버전 문자열을 사용하여 iOS 플랫폼에 대한 최소 배포 대상 버전을 구성합니다.
///
/// 버전 문자열은 `8.0` 또는 `8.0.1`과 같이 점으로 구분된 두 개 또는 세 개의 정수 시리즈여야 합니다.
///
/// - Since: PackageDescription 5.0에서 처음 사용 가능
///
/// - Parameter versionString: `8.0.1`과 같이 점으로 구분된 두 개 또는 세 개의 정수로 표현된 문자열 형식의 최소 배포 대상입니다.
static func iOS(_ versionString: String) -> SupportedPlatform

이를 통해 iOS 8.0 이상을 지원하는 플랫폼을 다음과 같이 정의할 수 있습니다:

swift
let platform: SupportedPlatform = .iOS(.v8)
swift
let platform: SupportedPlatform = .iOS(.v8)

또는 버전 문자열을 사용하여 정의할 수 있죠:

swift
let platform: SupportedPlatform = .iOS("8.0")
swift
let platform: SupportedPlatform = .iOS("8.0")

Swift Package Manager는 유효하지 않은 값이 지원 플랫폼에 제공될 때 적절한 오류를 발생시킵니다. 예를 들어, 빈 배열, 동일한 플랫폼에 대한 여러 선언 또는 잘못된 버전 지정 등이 있습니다.

또한 종속성이 최상위 패키지의 배포 버전과 호환되지 않으면 오류가 발생합니다. 패키지의 종속성에 대한 배포 대상은 특정 플랫폼에 대한 최상위 패키지의 배포 대상 버전보다 낮거나 같아야 합니다.

다음은 Package.swift 파일에서 지원 플랫폼을 구성하는 예시입니다:

swift
let package = Package(
    name: "MyPackage",
    platforms: [
        .macOS(.v10_15),
        .iOS(.v13),
        .tvOS(.v13),
        .watchOS(.v6)
    ],
    products: [
        // ...
    ],
    dependencies: [
        // ...
    ],
    targets: [
        // ...
    ]
)
swift
let package = Package(
    name: "MyPackage",
    platforms: [
        .macOS(.v10_15),
        .iOS(.v13),
        .tvOS(.v13),
        .watchOS(.v6)
    ],
    products: [
        // ...
    ],
    dependencies: [
        // ...
    ],
    targets: [
        // ...
    ]
)

위의 예시에서는 macOS 10.15, iOS 13, tvOS 13, watchOS 6을 최소 배포 대상으로 설정하였습니다. 이렇게 하면 Swift Package Manager는 해당 플랫폼과 버전 이상에서 패키지를 빌드하고 실행할 수 있게 됩니다.

SupportedPlatform 구조체를 사용하여 지원 플랫폼을 명시적으로 선언함으로써, 패키지의 호환성을 명확히 하고 사용자에게 필요한 최소 배포 버전을 전달할 수 있습니다. 이는 패키지의 안정성과 사용성을 향상시키는 데 도움이 됩니다.

YouTube 영상

채널 보기
Pro펑터, 입력과 출력을 동시에 다루는 펑터 | 프로그래머를 위한 카테고리 이론
NestJS 커스텀 데코레이터, createParamDecorator 사용 | NestJS 가이드
관점 지향 로깅 인터셉터 구현 및 전역 바인딩 전략 | NestJS 가이드
함수 타입과 Hom-Set 이해하기 | 프로그래머를 위한 카테고리 이론
class-validator 와 DTO | NestJS 가이드
NestJS 가드, 바이딩과 스코프 | NestJS 가이드
NestJS 역할 기반 접근 권한 부여 - Guard, Reflector | NestJS 가이드
NestJS 인터셉터에서 map 연산자로 응답을 변환하는 방법 | NestJS 가이드