Swift Package Manager
≡ 목차 (Table of Contents)
SPM(Swift Package Manager)는 Swift를 위한 공식 패키지 관리 및 의존성 관리를 위한 공식 도구다. Cocoapods와 비슷하다고 볼 수도 있는데, 굳이 비교하자면 Carthage와 더 유사한 것 같다. 다만 공식 패키지 관리자라는 점이 특징인 것 같다. 다만 이제는 Xcode에서도 쉽게 관리할 수 있다는 큰 이점을 가지고 있다.
SPM 프로젝트 생성하기
아래 커맨드로 현재 디렉터리에 프로젝트를 생성할 수 있다.
swift package init
프로젝트 이름은 디렉토리 이름과 동일하게 생성된다. Sources/ProjectName/ProjectName.swift
라는 파일이 기본적으로 생성되는데 내용은 구조체 하나만 달랑 들어있다.
정확하게 이야기해서 위 커맨드는 라이브러리 프로젝트를 생성한다. 명확하게 말하자면 아래 커맨드가 라이브러리 프로젝트를 생성하는 정확한 명령이다.
swift package init --type library
사실상 위와 동일한 프로젝트가 생성된다. 명확한 것을 좋아하면 이 커맨드를 쓰는 게 좋을 것 같다.
만약 라이브러리가 아니라 실행 파일 프로젝트를 만들고 싶다면 아래와 같이 할 수 있다.
swift package init --type executable
생성되는 내용은 거의 동일하다. 단지 Sources/ProjectName/main.swift
라는 파일이 기본적으로 생성되고 내부에서는 Hello, world!
를 찍는 코드가 달랑 들어있다.
추가로 Xcode 프로젝트를 생성하고 싶다면 아래 커맨드를 사용할 수 있다.
swift package generate-xcodeproj
이 커맨드는 정말 projectName.xcodeproj
파일만 생성한다. 하지만 기존 UIKit
혹은 AppKit
프로젝트와는 다르게 뭔가 많이 빠진 썰렁한 프로젝트로 생성된다. 아마도 순수 Swift 프로젝트라서 그런 듯하다.
의존성 설정하기
의존성(Dependency)은 프로젝트 루트의 Packages.swift
라는 파일로 설정한다. 이 파일을 열어보면 dependencies
항목을 찾을 수 있다.
let package = Package( name: "ProjectName", dependencies: [ .package(url: "foobar", from: "1.0.0") .package(url: "https://github.com/Alamofire/Alamofire.git", .upToNextMajor(from: "5.2.0")) ] // ... )
이미 예제코드가 주석으로 쓰여져 있어서 작성하기는 쉽다. url
은 예제 처럼 디렉터리가 올 수도 있고 github 등의 URL이 올 수도 있다. from
필드로 표기하는 버전은 semver(Semantic Versioning) 표기법을 따르거나 위 처럼 다양한 옵션이 있다.
의존성 설치 및 업데이트 하기
아래 커맨드로 의존 패키지를 설치할 수 있다.
swift package update
필요하다면 업데이트도 진행된다.
체크아웃 되는 내용은 .build
디렉터리에 들어가서 파인더 등에서는 보이지 않을 수도 있다.
테스트, 빌드, 실행하기
테스트는 아래 커맨드로 수행할 수 있다.
swift test
디버그 빌드는 build
커맨드를 이용한다.
swift build
릴리즈 빌드는 릴리즈 설정을 별도로 사용한다.
swift build --configuration release
바로 실행하고 싶다면 run
커맨드를 이용해보자.
swift run
Xcode에서 의존성 설정하기
Xcode에서 기존 프로젝트에 의존성을 추가하려면 File - Swift Packages - Add Package Dependency 메뉴를 통해 쉽게 추가할 수 있다.