CLI에서 Swift 패키지 매니저 사용하여 swift 빌드하기
iOS개발을 하다가도 swift 언어로 라이브러리를 만들어서 배포해야할 경우가 종종 있습니다.
swift 패키지 매니저는 라이브러리를 빌드하고 실행할 수 있는 파일을 만들어주는 기능을 가지고 있습니다.
먼저 스위프트 패키지 잘 설치되어 있는지 확인해보겠습니다.
$ swift package --help
OVERVIEW: Perform operations on Swift packages
SEE ALSO: swift build, swift run, swift test
USAGE: swift package <options> <subcommand>
...
패키지 만들기
새로운 패키지를 만들어서 뼈대(skeletal) 파일들을 생성할 수 있습니다.
여기서는 Hello 라는 프로젝트 이름으로 만들어 보겠습니다.
$ mkdir Hello
$ cd Hello
init 명령어를 통해 패키지를 생성해보겠습니다.
$ swift package init
$ % swift package init
Creating library package: Hello
Creating Package.swift
Creating README.md
Creating .gitignore
Creating Sources/
Creating Sources/Hello/Hello.swift
Creating Tests/
Creating Tests/HelloTests/
Creating Tests/HelloTests/HelloTests.swift
패키지 매니저로 생성된 파일들의 구조는 이렇습니다.
.
├── Package.swift
├── README.md
├── Sources
│ └── Hello
│ └── Hello.swift
└── Tests
└── HelloTests
└── HelloTests.swift
여기서 가장 중요한 파일은 Package.swift 파일입니다.
모든 swift package manager가 관리하는 패키지는 Package.swift 라는 매니페스트 파일이 반드시 루트 경로에 존재해야 합니다.
swift package manager 빌드 명령어
스위프트 패키지로 빌드를 하기 위해서는 루트 디렉토리에서 swift build
명령어를 입력하면 됩니다.
$ swift build
Building for debugging...
[2/2] Emitting module Hello
Build complete! (3.16s)
swift package manager 테스트 명령어
CLI 에서 테스트를 수행하려면 swift test
를 입력합니다.
$ swift test
Building for debugging...
[3/3] Linking HelloPackageTests
Build complete! (6.15s)
Test Suite 'All tests' started at 2023-06-21 14:32:58.357
Test Suite 'HelloPackageTests.xctest' started at 2023-06-21 14:32:58.358
Test Suite 'HelloTests' started at 2023-06-21 14:32:58.358
Test Case '-[HelloTests.HelloTests testExample]' started.
Test Case '-[HelloTests.HelloTests testExample]' passed (0.002 seconds).
Test Suite 'HelloTests' passed at 2023-06-21 14:32:58.360.
Executed 1 test, with 0 failures (0 unexpected) in 0.002 (0.002) seconds
Test Suite 'HelloPackageTests.xctest' passed at 2023-06-21 14:32:58.360.
Executed 1 test, with 0 failures (0 unexpected) in 0.002 (0.002) seconds
Test Suite 'All tests' passed at 2023-06-21 14:32:58.360.
Executed 1 test, with 0 failures (0 unexpected) in 0.002 (0.003) seconds
실행
지금까지 실행한 빌드 방식은 라이브러리와 같은 경우에서 사용되지만,
실행해야하는 스위프트 프로그램을 만들고 싶다면 executable(실행가능한) 타입으로 패키지를 생성해야 합니다.
실행가능한 스위프트 프로그램을 만들기 위해, swift package init 과 --type executable 옵션을 함께 줍니다.
$ swift package init --type executable
Creating executable package: ExecHeelo
Creating Package.swift
Creating README.md
Creating .gitignore
Creating Sources/
Creating Sources/ExecHeelo/ExecHeelo.swift
Creating Tests/
Creating Tests/ExecHeeloTests/
Creating Tests/ExecHeeloTests/ExecHeeloTests.swift
.
├── Package.swift
├── README.md
├── Sources
│ └── ExecHeelo
│ └── ExecHeelo.swift
└── Tests
└── ExecHeeloTests
└── ExecHeeloTests.swift
5 directories, 4 files
여기서도 마찬가지로 swift run을 사용하여 빌드 후 프로젝트를 실행할 수 있습니다.
$ swift run ExecHeelo
Building for debugging...
[3/3] Linking ExecHeelo
Build complete! (0.35s)
Hello, World!
실행가능한 프로젝트로 생성하였으므로 swift run
만 실행하여도 실행이 됩니다.
swift package manager는 main.swift 라는 파일이 있으면 실행가능한 바이너리파일로 인식하여 컴파일합니다.
근데 방금 생성한 프로젝트에서는 없죠?
바로 swift 파일의 @main
어노테이션이 진입점(entry) 역할을 대신 해주기 때문입니다.
실행가능한 프로젝트 생성 명령어로 생성된 Sources 파일에 @main 어노테이션이 붙여져 있는 것을 알 수 있습니다.
@main
public struct ExecHeelo {
public private(set) var text = "Hello, World!"
public static func main() {
print(ExecHeelo().text)
}
}
또한, 스위프트는 자바와 같은 언어와 다르게 파일 이름과 struct 또는 class의 이름이 동일하지 않아도 됩니다.
'Swift > Swift Language' 카테고리의 다른 글
Swift Enum의 RawValue 제대로 사용하기 (0) | 2021.03.27 |
---|---|
Swift의 Algebraic Data Type (0) | 2021.03.24 |
Swift 언어 가이드 - 서브스크립트 Subscript (0) | 2020.04.12 |
Swift 언어 가이드 - 클로져는 참조 타입이다 (0) | 2020.03.08 |
Swift 언어 가이드 - 값 캡쳐링 (0) | 2020.03.06 |