🔥 Package Dependency
강의 목차
Swift 패키지 매니저로 패키지를 만들다 보면 다른 패키지를 사용해야 할 때가 많습니다. 이럴 때 바로 Package.Dependency
를 쓰면 됩니다.
Package.Dependency
는 두 가지로 이루어져 있어요. 패키지의 Git URL과 버전 조건이에요. Swift 패키지 매니저는 의존성 해결 과정을 통해 앱이나 다른 Swift 패키지에서 쓸 수 있는 패키지 의존성의 정확한 버전을 찾아냅니다.
의존성 해결 결과는 Package.resolved
파일에 기록되고, 이 파일은 Swift 패키지의 최상위 폴더에 있어요. 만약 Apple 플랫폼용 앱에 Swift 패키지를 패키지 의존성으로 넣었다면 .xcodeproj
또는 .xcworkspace
안에서 Package.resolved
파일을 찾을 수 있어요.
이제 Package.Dependency
의 주요 메서드들을 하나씩 살펴볼게요.
package(url:from:)
이 메서드는 정해진 최소 버전에서 시작해서 다음 큰 버전 전까지의 버전 조건을 쓰는 패키지 의존성을 만듭니다. 원격 패키지 의존성을 지정할 때 추천하는 방법이에요.
/// 최소 버전을 정하고, 버그 수정과 하위 호환성을 유지하는 기능 업데이트를 허용하지만, /// 새로운 큰 버전으로의 업데이트는 직접 해야 합니다. /// /// 다음 예제는 Swift 패키지 매니저가 `1.2.3`, `1.2.4`, `1.3.0` 등의 버전은 고를 수 있지만, /// `2.0.0`은 고를 수 없어요. /// /// .package(url: "<https://example.com/example-package.git>", from: "1.2.3"), /// /// - Parameters: /// - url: 패키지의 올바른 Git URL. /// - version: 최소 버전 조건. static func package(url: String, from version: Version) -> Package.Dependency
swift
이 방법은 쓸 버전을 유연하게 정할 수 있으면서도 호환성을 깨는 변경사항이 있는 버전으로 업데이트되는 걸 막아주고 의존성 그래프에서 충돌을 예방하는 데 도움을 줍니다.
package(url:_:)
이 메서드는 버전 조건을 지정해서 원격 패키지 의존성을 추가합니다.
/// 버전 조건을 지정해서 원격 패키지 의존성을 추가합니다. /// /// - Parameters: /// - url: 패키지의 올바른 Git URL. /// - requirement: 의존성 조건. `Package.Dependency.Requirement`의 정적 메서드를 참조하세요. static func package(url: String, _ requirement: Package.Dependency.Requirement) -> Package.Dependency
swift
package(url:branch:)
이 메서드는 브랜치 조건을 지정해서 원격 패키지 의존성을 추가합니다.
/// 브랜치 조건을 지정해서 원격 패키지 의존성을 추가합니다. /// /// .package(url: "<https://example.com/example-package.git>", branch: "main"), /// /// - Parameters: /// - url: 패키지의 올바른 Git URL. /// - branch: 브랜치 조건. static func package(url: String, branch: String) -> Package.Dependency
swift
package(url:revision:)
이 메서드는 리비전 조건을 지정해서 원격 패키지 의존성을 추가합니다.
/// 리비전 조건을 지정해서 원격 패키지 의존성을 추가합니다. /// /// .package(url: "<https://example.com/example-package.git>", revision: "aa681bd6c61e22df0fd808044a886fc4a7ed3a65"), /// /// - Parameters: /// - url: 패키지의 올바른 Git URL. /// - revision: 리비전 조건. static func package(url: String, revision: String) -> Package.Dependency
swift
package(url:_:)
(Range)
이 메서드는 특정 최소 버전에서 시작해서 정해진 최대 버전까지(포함하지 않음) 패키지 의존성을 추가합니다.
/// 특정 최소 버전에서 시작해서 정해진 최대 버전까지(포함하지 않음) 패키지 의존성을 추가합니다. /// /// 다음 예제는 Swift 패키지 매니저가 `1.2.3`, `1.2.4`, `1.2.5`는 고를 수 있지만, /// `1.2.6`은 고를 수 없어요. /// /// .package(url: "<https://example.com/example-package.git>", "1.2.3"..<"1.2.6"), /// /// - Parameters: /// - url: 패키지의 올바른 Git URL. /// - range: 사용자 지정 버전 범위 조건. static func package(url: String, _ range: Range<Version>) -> Package.Dependency
swift
package(url:_:)
(ClosedRange)
이 메서드는 특정 최소 버전에서 시작해서 특정 최대 버전까지(포함) 패키지 의존성을 추가합니다.
/// 특정 최소 버전에서 시작해서 특정 최대 버전까지(포함) 패키지 의존성을 추가합니다. /// /// 다음 예제는 Swift 패키지 매니저가 `1.2.3`, `1.2.4`, `1.2.5`뿐만 아니라 /// `1.2.6`도 고를 수 있어요. /// /// .package(url: "<https://example.com/example-package.git>", "1.2.3"..."1.2.6"), /// /// - Parameters: /// - url: 패키지의 올바른 Git URL. /// - range: 닫힌 버전 범위 조건. static func package(url: String, _ range: ClosedRange<Version>) -> Package.Dependency
swift
package(path:)
이 메서드는 파일 시스템의 로컬 패키지에 대한 의존성을 추가합니다.
/// 파일 시스템의 로컬 패키지에 대한 의존성을 추가합니다. /// /// Swift 패키지 매니저는 패키지 의존성을 그대로 쓰고 /// 소스 제어 접근은 하지 않아요. 로컬 패키지 의존성은 /// 새로운 패키지를 개발하거나 여러 밀접하게 연결된 패키지로 작업할 때 특히 유용해요. /// /// - Parameter path: 패키지의 경로. static func package(path: String) -> Package.Dependency
swift
이렇게 여러 메서드로 Package.Dependency
를 만들 수 있어요. 상황에 맞는 알맞은 메서드를 골라 쓰면 됩니다.
예를 들어, 다음과 같이 Package.swift
파일에서 의존성을 추가할 수 있어요.
let package = Package( name: "MyPackage", dependencies: [ .package(url: "<https://github.com/apple/example-package-deckofplayingcards.git>", from: "3.0.0"), .package(url: "<https://github.com/apple/example-package-fisheryates.git>", "2.0.0"..<"3.0.0"), .package(url: "<https://github.com/apple/example-package-playingcard.git>", "1.0.0"..."1.5.0"), ], targets: [ .target( name: "MyTarget", dependencies: ["DeckOfPlayingCards", "FisherYates", "PlayingCard"]), ] )
swift
이 예제는 세 개의 패키지 의존성을 추가하고 있어요.
example-package-deckofplayingcards
는 버전 3.0.0 이상이 필요해요.example-package-fisheryates
는 버전 2.0.0 이상, 3.0.0 미만이 필요해요.example-package-playingcard
는 버전 1.0.0 이상, 1.5.0 이하가 필요해요.
그리고 MyTarget
이라는 타깃이 이 세 패키지를 사용한다고 나와 있네요.
이렇게 Package.Dependency
를 사용하면 패키지 사이의 의존 관계를 명확하게 정의할 수 있어요. 이를 통해 코드의 재사용성을 높이고 패키지 사이의 결합도를 낮출 수 있죠.
Swift 패키지 매니저의 강력한 기능 중 하나인 Package.Dependency
를 잘 활용하면 더 효율적으로 패키지를 관리할 수 있어요!