Programming/WWDC

Getting to Know Swift Package Manager 정리 - WWDC2019

devssun 2020. 4. 1. 13:17
728x90
반응형

Getting to Know Swift Package Manager - WWDC 2018 - Videos - Apple Developer

Swift Package Manager (SwiftPM)

Swift 코드 배포를 관리하기 위한 도구이다. Swift 빌드 시스템과 통합되어 종속성, 컴파일 및 링크 프로세스를 자동화한다.
https://swift.org/package-manager/

Apple은 왜 SwiftPM을 만들었을까?

Swift는 크로스 플랫폼 언어고 코드를 작성하기 위한 도구가 필요하다. SwiftPM을 통해 코드를 일관된 방식으로 쉽게 구성하고 Swift가 지원하는 모든 플랫폼에서 실행할 수 있다.

SwiftPM에는 자체 빌드 시스템이 포함되어 있어 소프트웨어를 구성하고, 빌드하고, 테스트하고, 하나의 도구로 실행할 수도 있다.
또한 Swift 프로젝트에서 정식 패키지 관리자를 제공하여 어디서나 Swift 라이브러리를 다른 사람과 공유할 수 있게 라이브러리 배포 방법에 대한 공통 표준을 정의한다.

→ Swift 생태계의 성장!

SwiftPM 사용법

SwiftPM Commands

    # 1. build to package
    $ swift build

    # 2. run excutable products
    $ swift run

    # 3. run test
    $ swift test

    # 4. run various non-build operations on the package
    $ swift package

Make SwiftPM (영상 04:41~06:07)

  1. 폴더 생성 및 이동

  2. 기본 패키지와 구조 만들기

    • swift package init --type executable
  3. 실행하기

    • swift run

        # 이런 에러가 나면?
        # unable to find utility "xctest", not a developer tool or in PATH
      
        sudo xcode-select -s /Applications/Xcode.app/Contents/Developer
  • main.swift 에 있는 Hello, world!가 실행된 것을 볼 수 있다.

SwiftPM의 기본 개념

패키지는 세 가지 주요 부분으로 구성된다.
Dependencies, Targets, Products

Dependencies

종속성은 기능을 개발할 때 사용할 수 있는 Swift 패키지이다.
각 종속성은 패키지가 사용할 수 있는 라이브러리와 같은 하나 이상의 product를 제공한다.
package.swift 파일에서 종속성을 확인할 수 있고 각 종속성에 소스 위치와 버전이 있다. 위에서 만든 hello world 프로젝트는 종속성이 없기에 dependencies 항목이 빈 배열로 되어 있다.

Targets

Target은 패키지의 기본 빌딩 블록이다. 소스 파일 세트를 모듈 또는 test suite로 빌드하는 방법을 설명한다.
Target은 동일한 패키지의 다른 대상 및 다른 패키지에서 내보낸 product에 의존할 수 있다.

Products

product는 라이브러리에서 실행 가능하며 하나 이상의 빌드 아티팩트로 조립된다. (아티팩트의 의미는?)

Package

product를 정의하여 다른 패키지에 대한 라이브러리를 제공한다. 라이브러리 유형은 명시적으로 선언할 필요는 없지만 사용에 따라 SwiftPM에서 선택한다.
필요한 경우 라이브러리를 정적이나 동적으로 선언할 수 있다.

테스트를 병렬로 실행하기 → 테스트 결과가 더 빨라진다

swift test --parallel --filter ByteBufferTest

The design of SwiftPM

SwiftPM은 Swift의 철학을 따른다.
Safe, Fast, Expressive

Safe: 격리된 빌드 환경과 빌드에서 임의 명령을 실행할 수 없어 안전합니다.

Fast: 큰 의존성 그래프로 확장 가능한 빌드 엔진을 사용하면 빠릅니다.

Expressive: Manifest 에 Swift 언어를 사용하기 때문에 표현력이 좋습니다.

이 이후로는 위 사진의 각 단계에 대한 자세한 설명과 Evolution ideas, Open source process 에 대한 설명이 있다.

내용이 어렵고 이해가 되지 않아 정리를 못하겠다. 다음에 다시 보자!

 


결론

Swift Package Manager (SwiftPM)는 Cocoapods, Carthage같은 third-party tool을 이용해서 종속성을 관리하던 것을 Apple이 종속성을 관리하기 위해 SwiftPM이라는 공식 지원을 추가한 것이다.

반응형