🔥 Package Dependency Requirement

476자
7분

Swift 패키지 매니저에는 Package.Dependency.Requirement라는 열거형이 있어요. 이걸 사용하면 패키지가 의존하는 다른 패키지의 버전 조건을 정할 수 있죠. 버전 조건은 크게 세 가지로 나눌 수 있습니다.

버전 기반 조건

프로젝트에서 사용하는 패키지를 다음 주(major) 버전이나 다음 부(minor) 버전까지 업데이트해도 괜찮은지 정하는 거예요. 더 엄격하게 관리하고 싶다면 특정 버전 범위나 정확한 버전을 지정할 수도 있죠. 보통 주 버전은 부 버전보다 변화가 크기 때문에, 주 버전이 올라가면 내 코드도 함께 수정해야 할 수 있어요. Swift 패키지는 의미론적 버전 규칙(Semantic Versioning)을 따르도록 되어 있답니다. 의미론적 버전 규칙이 뭔지 더 알고 싶다면 semver.org를 참고해 보세요.

패키지 의존성을 추가할 때는 버전 기반 조건을 사용하는 게 가장 좋아요. 이렇게 하면 패키지의 변경을 어느 정도 제한하면서도 개선 사항과 새로운 기능은 받아들일 수 있거든요.

예를 들어, 다음과 같이 정확한 버전을 요구할 수 있어요:

.exact("1.2.3")  // 패키지의 1.2.3 버전을 사용합니다.
swift

그런데 정확한 버전을 지정하는 건 별로 추천하지 않아요. 여러 패키지가 같은 패키지에 의존하고 있다면 버전 충돌이 일어날 수 있거든요. Swift 패키지는 의미론적 버전 규칙을 따르니까, 차라리 버전 범위를 지정하는 게 나을 거예요.

브랜치 기반 조건

패키지가 특정 브랜치를 따르도록 할 수도 있어요. 여러 패키지를 동시에 개발하거나, 패키지 버전을 따로 배포하고 싶지 않을 때 브랜치 기반 조건을 사용하면 좋죠.

단, 브랜치 기반 조건을 사용하는 패키지는 버전 기반 조건을 사용하는 다른 패키지에 의존성으로 추가될 수 없어요. 패키지 버전을 배포하기 전에는 꼭 브랜치 기반 조건을 제거해야 합니다.

브랜치 기반 조건은 이렇게 사용해요:

.branch("develop")  // develop 브랜치의 모든 변경 사항을 받아들입니다.
swift

커밋 기반 조건

패키지가 특정 커밋을 따르도록 할 수도 있어요. 그런데 이 방법은 별로 추천하지 않아요. 정말 특별한 경우에만 사용하는 게 좋죠. 패키지를 특정 커밋에 고정하면 패키지 내용이 바뀌지 않으니 안정적이기는 하지만, 새로운 업데이트를 전혀 받을 수 없게 돼요. 원격 패키지가 불안정해서 걱정된다면 차라리 버전 기반 조건 중에서 조금 더 엄격한 걸 고르는 게 나을 거예요.

커밋 기반 조건을 사용하는 패키지도 버전 기반 조건을 사용하는 다른 패키지에 의존성으로 추가될 수 없어요. 패키지 버전을 배포하기 전에는 꼭 커밋 기반 조건을 제거해야 해요.

커밋 기반 조건은 이렇게 사용합니다:

.revision("e74b07278b926c9ec6f9643455ea00d1ce04a021")  // 특정 커밋에 대한 버전 조건을 정의합니다.
swift

메서드

Package.Dependency.Requirement 열거형에는 여러 가지 버전 조건을 만들 수 있는 메서드들이 있어요. 각 메서드는 해당하는 조건의 인스턴스를 반환하죠.

exact(_:)

정확한 버전을 요구하는 조건을 만듭니다.

static func exact(_ version: Version) -> Package.Dependency.Requirement
swift

revision(_:)

특정 커밋을 요구하는 조건을 만듭니다.

static func revision(_ ref: String) -> Package.Dependency.Requirement
swift

branch(_:)

특정 브랜치를 요구하는 조건을 만듭니다.

static func branch(_ name: String) -> Package.Dependency.Requirement
swift

upToNextMajor(from:)

지정한 버전부터 시작해서 다음 주 버전 직전까지를 허용하는 조건을 만듭니다. 버전 조건으로는 이걸 쓰는 게 가장 좋아요.

static func upToNextMajor(from version: Version) -> Package.Dependency.Requirement
swift

upToNextMinor(from:)

지정한 버전부터 시작해서 다음 부 버전 직전까지를 허용하는 조건을 만듭니다.

static func upToNextMinor(from version: Version) -> Package.Dependency.Requirement
swift

이 메서드들을 사용하면 패키지 의존성에 대해 다양한 조건을 유연하게 설정할 수 있어요. 프로젝트의 안정성과 업데이트 가능성을 잘 조율할 수 있도록, 상황에 맞는 적절한 의존성 조건을 선택하는 게 중요하답니다.