개발을 잘하고 싶은 주니어?
Swift Package Manager (SPM) 공부하기 - 실습 본문
그럼 앞서서 봤던 이론에 더해서 실습도 해보겠습니다.
터미널에서 swift package를 입력하면 명령어들의 리스트를 볼 수 있습니다.
우리는 주로 다음의 명령어를 사용합니다.
- swift package init : 새로운 패키지를 생성합니다.
- swift package update : 패키지 내의 의존성을 업데이트합니다.
- swift package generate-xcodeproj : 패키지의 xcode 프로젝트를 생성합니다.
이번 예시에서 랜덤 숫자를 프린트 하는 package를 만들어보겠습니다.
Package 생성
Package는 하나 이상의 라이브러리와 executable을 가지고 있는 repositories입니다. 각 package는 Package.swift manifest 파일을 가지는데, 이것은 의존성을 관리하는 파일입니다.
manifest file은 Swift로 작성되어있고, package를 설명하는 파일입니다.
target은 모듈과 의존성에 대한 설명을 가지고 있고, main.swift를 가진 target을 실행 가능한 파일로 컴파일할 수 있습니다.
SPM을 사용하면 터미널에서 바로 package를 생성할 수 있습니다. SPM는 프로젝트 이름을 디렉터리 이름으로 사용합니다.
directory 생성
mkdir RandomNumber
cd RandomNumber
우선 원하는 프로젝트 디렉토리를 생성합니다.
swift package init --type=executable
그리고 나서 executable package를 생성합니다.
만약 라이브러리로 만들고 싶다면 그냥 swift package init만 입력하면 됩니다.
tree 명령어로 디렉토리 구조를 살펴봅시다.
- Package.swift에는 패키지에 대한 정보가 있습니다.
- Sources/ 에는 main.swift 파일이 생성되었습니다. 이것은 앱의 entry point로 내부에는 print(hello, world)가 있고 앱을 실행하면 hello, world가 출력됩니다.
- Tests/에는 XCTest로 작성한 unit test를 포함합니다.
swift build를 통해서 패키지를 빌드를 하면 ./build/debug/RandomNumber에 실행 파일이 생기고 앱을 실행하면 결과가 화면에 출력됩니다.
여기까지가 Swift package를 생성하는 과정입니다.
라이브러리 생성
랜덤 숫자를 생성하는 작업을 할 라이브러리를 생성하겠습니다. RandomNumberMaker라는 이름으로 생성해보겠습니다.
이렇게 생성한 라이브러리를 RandomNumber에서 사용할 예정입니다.
여기서는 main.swift가 아니라 RandomNumberMaker.swift파일이 생겼습니다.
swift test 명령어를 사용해서 SPM이 라이브러리를 컴파일하고 테스트를 할 수 있습니다.
RandomNumberMaker.swift 파일을 열고 아래의 코드로 바꿔줍니다.
public struct RandomNumberMaker {
// 0..<numberRange
public let numberRange: Int
public init(numberRange: Int) {
self.numberRange = numberRange
}
// 생성된 랜덤 숫자
public var randomNumber: Int{
get{
return Int.random(in: 0..<numberRange)
}
}
}
우선 numberRange를 입력받으면 randoomNumber는 0..<numberRange내의 숫자 중 하나로 할당되도록 합니다.
그리고 또한 모든 항목을 public으로 표시해서 RandomNumberMaker를 import하면 바로 사용할 수 있도록 합니다.
그리고 나서 이 라이브러리를 사용하기 위해서 github에서 v1.0.0으로 태그를 달아서 release 해줍니다.
Executable 생성하기
라이브러리를 생성했으므로 이제 우리는 이 라이브러리를 RandomNumber package에서 의존성으로 추가할 수 있습니다.
RandomNumber의 Package.swift파일을 다음과 같이 바꿉니다.
import PackageDescription
let package = Package(
name: "RandomNumber",
dependencies: [
// 1
.package(url: "https://github.com/kanghuiseon/RandomNumberMaker.git", from: "1.0.0")
],
targets: [
.executableTarget(
name: "RandomNumber",
// 2
dependencies: ["RandomNumberMaker"]),
.testTarget(
name: "RandomNumberTests",
dependencies: ["RandomNumber"]),
]
)
1. dependencies에 위에서 생성한 라이브러리를 추가해줍니다. url과 버전을 명시해줍니다.
2. target의 dependencies에 "RandomNumberMaker"를 추가해줘서 SPM이 자동으로 관리하도록 합니다.
swift build를 통해 빌드해줍니다. SPM은 RandomNumberMaker 라이브러리를 가져와서 빌드하고 실행파일에 연결합니다.
라이브러리 사용
이제 RandomNumberMaker라이브러리를 RandomNumber에서 사용해보겠습니다.
main.swift 파일에 다음의 코드를 추가해줍니다.
import RandomNumberMaker
let arguments = CommandLine.arguments
if arguments.count != 2{
print("please input numberRange")
}else{
let rangeNumber = Int(arguments[1])
let maker = RandomNumberMaker(numberRange: rangeNumber!)
print(maker.randomNumber)
}
우선 커맨드 라인에서 숫자를 받고, 이것을 RandomNumberMaker의 argument로 넘겨줍니다. 그리고 나서 maker의 randomNumber를 출력하면 원하는 값을 얻을 수 있습니다.
그리고 나서 swift build를 하고 ./.build/debug/RandomNumber 5를 커맨드 라인에 입력해서 실제로 실행해봅니다.
XCode Project 생성
위와 같이 커맨드 라인으로 해도 되지만 Xcode 프로젝트를 생성해서 할 수도 있습니다.
RandomNumberMaker로 돌아가서 다음을 실행합니다.
swift package generate-xcodeproj
그럼 위와 같이 프로젝트가 생성됩니다.
이제 Xcode를 이용해서 패키지를 만들거나 테스트를 실행해볼 수도 있습니다.
RandomNumber도 동일하게 프로젝트를 생성해줍니다.
그리고 나서 argument로 원하는 범위를 입력해 넣고 빌드하여 실행할 수 있습니다.
Reference
https://devmjun.github.io/archive/SwiftPackageManager
https://www.raywenderlich.com/1993018-an-introduction-to-swift-package-manager
'개발 > iOS' 카테고리의 다른 글
JSONSerialization 공부하기 (0) | 2021.11.30 |
---|---|
Collection View 공부하기 (실습) (0) | 2021.11.30 |
Swift Package Manager (SPM) 공부하기 - 이론 (0) | 2021.11.27 |
Framework란? Library란? (0) | 2021.11.27 |
의존성(Dependency) 공부하기 (1) | 2021.11.27 |