[Swift] Swift Package Manager 배포하기

욜로~ 차니에요!!

 

Xcode에서 외부 모듈(이하 라이브러리)을 사용하는 여러 방법들이 있는데요.

  1. Cocoapods 사용하기  
  2. Framework 사용하기  
  3. Swift Package Manager 사용하기

1, 2번 항목은 이전 포스팅에서 확인해보실 수 있고 오늘은 세 번째 항목인 SPM을 활용해보려고 합니다.

 

1. Swift Package 프로젝트 생성

etc-image-0
Swift Package 항목을 선택하여 생성해줍니다.

 

2. Package.swift

// swift-tools-version:5.3
// The swift-tools-version declares the minimum version of Swift required to build this package.
import PackageDescription
let package = Package(
name: "MyLibrary",
products: [
// Products define the executables and libraries a package produces, and make them visible to other packages.
.library(
name: "MyLibrary",
targets: ["MyLibrary"]),
],
dependencies: [
// Dependencies declare other packages that this package depends on.
// .package(url: /* package url */, from: "1.0.0"),
],
targets: [
// Targets are the basic building blocks of a package. A target can define a module or a test suite.
// Targets can depend on other targets in this package, and on products in packages this package depends on.
.target(
name: "MyLibrary",
dependencies: []),
.testTarget(
name: "MyLibraryTests",
dependencies: ["MyLibrary"]),
]
)

Swift Package 프로젝트를 생성하면 Package.swift 파일이 자동으로 생성되는데 pod 라이브러리를 만들 때 썼던 podspec 파일과 동일한 포지션이라고 생각하시면 됩니다.

  • name : 라이브러리 이름입니다.
  • platforms:  지원하는 플랫폼 리스트입니다.
    • .iOS
    • .macOS
    • .tvOS
    • .watchOS
  • products : 패키지를 정의하는 항목입니다.
    • Library 
    • Executable 은 사용자에게 실행가능한 패키지를 제공할 때에 사용됩니다.
  • targets : 동일한 패키지 안에서 의존성이 지정된 타겟들을 나열합니다.
  • swiftLanguageVersions : 지원하는 스위프트 언어 버전들을 나열합니다.

 

3. Git Repository 생성

etc-image-1
Swift Package 코드 업로드를 위한 repo를 생성해줍니다.

 

4. Git Push

Xcode에 Github 계정이 연동되어 있다고 가정하고 작성하겠습니다.

etc-image-2
Source Control - Pull... 을 클릭해줍니다.
etc-image-3
계정 연동 후 Address의 Url이 3번에서 생성한 것과 동일한지 확인
etc-image-4
Push 이후 코드가 정상적으로 업로드 된 것을 확인합니다.

5. 배포를 위한 버전 tag 생성

Info

git tag 0.1.0
git push origin 0.1.0

etc-image-5

6. 실제 프로젝트에서 받아보기

etc-image-6

라이브러리를 사용할 프로젝트에서 Swift Packages에 들어가면 xcode와 연동된 Git repository가 자동으로 불러와집니다.

방금 만든 MyLibarary를 선택할게요.

 

etc-image-7
Repository Url, Version 아까 만든 것과 동일하죠?
etc-image-8
좌측 네비게이터 하단에 정상적으로 받아진 모습이 보입니다.

 

이상으로 포스팅 마치겠습니다.

틀린 부분이나 질문은 댓글로 남겨주세요!

차니님의 😊
글이 좋았다면 응원을 보내주세요!