기어가더라도 제대로

Swift Package Manager 기초 본문

Swift - 기초

Swift Package Manager 기초

Damagucci-juice 2022. 5. 28. 22:38

Package 는 무엇인가?

A package is a flexible container of source code that can distribute libraries to clients.

패키지는 클라이언트에게 라이브러리를 배포할 수 있는 소스 코드의 유연한 컨테이너이다. 외부 라이브러리를 사용할 경우, 라이브러리를 Embed 시켜야하는데, 이것이 여간 까다로운 작업이 아니다. 하나만 사용한다면 그러려니 하고 쓰겠지만,  여러 라이브러리를 사용하거나 서로 의존적인 관계에 있는 라이브러리를 쓰기 위해선 번거롭게 추가해줘야하는 라이브러리가 있을 수도 있다. 또한 그런 라이브러리의 버전을 업데이트하거나 변경해야하는 경우에도 문제가 생길 수 있으며, 이를 우리 개발 팀원들과 공유해야한다고 하면 벌써 머리가 아프다. 그것을 우리 팀원이  일부 변경하는 상황을 가정해보면 ... 음, 우린 단순히  라이브러리를 사용하는 건 편리하게 Xcode가 처리하게 하고 코드를 짜야한다! 

 

SPM은 ?

Swift Package Manager 는 이런 패키지 관리 작업을 도맡아주는 기능이다. 좀 더 정확히는 애플이 제공하는 디펜던시 매니저이고, Siwft Project의 일부이다. Build 시에 통합되어 디펜던시를 다운로드, Compiling, 링킹, 업데이트를 처리해준다. 여기서 디펜던시(Dependency) 란 사용할 패키지의 주소와 버전을 적어놓은 레시피라고 빗대어 이해할 수 있다. 

 

Dependency Declare

1. Xcode 네비게이션 영역에서 프로젝트를 클릭하고, 다시 한번 프로젝트를 클릭한다. 상단 바에 나오는 Package Dependencies 를 클릭한다. 

2. 사용하고자 하는 Git URL 주소를 복사한다.(snapkit:)

https://github.com/SnapKit/SnapKit.git

+ 버튼을 눌러서 검색창에 붙여 넣기 한다. 최신 버전을 사용하려면 Dependency rule 에서 "Up to next major version" 을 누른다. 이를 추가하면 여러 Package 가 올 수 있는데 이를 취사 선택하고 좀 있으면 네비게이션 영역에 추가 된다. 

SnapKit-Dynamic 은 사용하지 않기 때문에 안 채택한 모습

Package Resolution 

위에서 선언을 해놓으면, SPM 이 알아서 ~ Resolution을 해줍니다. Resolution을 직역하면 해결인데, 그렇게 생각하지 마시고, DNS Resolve 를 생각하시기 바랍니다. URL 주소를 보고 가서 다운로드 받아오는 겁니다 . 아무튼, Declare(선언)을 해주고 나면 Package.resolved 라는 파일이 생깁니다. 여기서 SPM 이 하는 일은 다음과 같습니다.

  • Dependency의 URL 과 버전 확인
  • 버전에 맞는 Dependency를 가져옴
  • 해당 Dependency에 의존하는 Sub Dependency도 가져옵니다. 
  • Project와 Packages를 구성(패키지를 빌드에 통합하는 과정)해서 "Import" 할 수 있게 해줍니다.

패키지를 추가하고 나면 Package.resolved 라는 파일이 생기는데 여기에는

  • 어떤 Dependency가 추가되었고
  • 그 버전이 무엇인지 쓰여있습니다.
  • SPM은 이 파일을 통해 Dependency가 업데이트 되어야하는지 아닌지 결정합니다.

 

Package.resolved 파일의 위치

이 파일을 깃의 버전 체크에 포함 시켜야 패키지 버전 관리와 팀원간 작업환경에 통일성을 추구하는데 편리합니다. 

이파일의 위치는 아래에 있습니다. 

[ProjectName].xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved

또한 패키지를 제거할 때에 단순히 네비게이션 영역에서만 제거해 줄 것이 아니라, 추가적인 작업이 필요합니다. 

1. Package 삭제
2. Cached Dependency 제거
3. 새로운 패키지 리졸브 받아오기!

 

SPM Action 3가지

1. Reset Package Cached

캐시된 패키지를 지웁니다. 지운후 SPM이 자동으로 다시 리졸브 해옵니다.

2. Resolve Package Versions

이 액션은 Dependency의 리졸브를 강제하는데 사용합니다. 만약 팀원이 Package.resolved 파일을 업데이트 하면, 이 action 이 Local 에 있는 package 들의 버전을 맞춰줍니다.

3. Update to Latest Package Version

Dependency가 업데이트할 수 있는 버전이 나오면, 디펜던시 룰에 따라 업데이트 합니다. (예: Up to next Major)

 

결론

오늘은 아래와 같은 주제를 알아보았습니다.

  • SPM과 Package가 무엇인지
  • Package 추가법
  • Package resolution 이 무엇인지
  • Package.resolved 파일의 위치
  • 어떻게 Xcode에서 Package를 관리하는지(action)

감사합니다. 다음엔 스위프트 패키지가 무엇인지 더 알아보도록 하겠습니다.

출처

https://tiagolopes.blog/2022/01/09/spm-basics/

 

The basics of Swift Package Manager

What SPM is, what problems it solves, and how we can use it.

tiagolopes.blog

https://phillip5094.tistory.com/23

 

Swift Package 의존성 추가, 생성, 배포 방법

안녕하세요. 이번에는 Swift Package Manager를 사용해서 dependency 추가하는 방법과, Swift Package를 직접 만들고 배포하는 방법에 대해 알아볼게요. # 1. Swift Package Manager로 패키지 설치 Swift Package..

phillip5094.tistory.com

 

Comments