개발을 잘하고 싶은 주니어?

Swift Package Manager (SPM) 공부하기 - 실습 본문

개발/iOS

Swift Package Manager (SPM) 공부하기 - 실습

데쿠! 2021. 11. 27. 22:39
반응형

그럼 앞서서 봤던 이론에 더해서 실습도 해보겠습니다.

터미널에서 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

 

Swift, Swift Package Manager가 무엇인지 알아봅니다

 

devmjun.github.io

https://www.raywenderlich.com/1993018-an-introduction-to-swift-package-manager

 

An Introduction to Swift Package Manager

In this introduction to the Swift Package Manager, you’ll build a website to display random idioms. You’ll learn how to manage projects and dependencies and how to read and change Package.swift files.

www.raywenderlich.com

 

반응형

'개발 > 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
Comments