📕 iOS

[iOS] 라이브러리 관리 도구와 사용법 (CocoaPods/Carthage/Swift Package Manager)

이오🐥 2024. 10. 8. 01:44

안녕하세요! 오늘은 iOS 개발을 위한 라이브러리 관리 도구를 이야기하려고 합니다.

(오랜만에 글을 썼더니 평소와 다르게 존댓말로 작성했네요..?ㅎㅎ)

 

저는 Xcode를 이용해 개발하면서 외부 라이브러리를 사용할 때, 주로 SPM을 이용합니다.

가장 간편하고 관리가 쉽다고 느껴져 SPM을 사용하지만,

라이브러리 관리 도구에는 다양한 종류가 있습니다!

 

오늘은 CocoaPods, Carthage, Swift Package Manager에 대해 알아봅시다.


라이브러리 관리 도구

각각을 알아보기 전에 먼저 라이브러리 관리 도구가 무엇인지 알아봅시다.

 

많은 사람들이 라이브러리 관리 도구를 의존성 관리 도구라고 부르는 경우가 있습니다.

이 도구들이 프로젝트에서 사용하고자 하는 외부 코드(라이브러리)의 의존성을 관리해 주기 때문입니다.

 

의존성이란?

프로젝트가 외부 코드나 라이브러리에 의존하고 있다는 의미입니다.

즉, 프로젝트에서 외부 라이브러리나 패키지를 사용할 때 의존성이 생깁니다.

 

의존성이 늘어나면, 버전 충돌/업데이트 관리/호환성 등의 문제가 생길 수 있습니다.

이를 효율적으로 관리해 주는 도구들이 바로 의존성 관리 도구 = 라이브러리 관리 도구입니다.

 

라이브러리 관리 도구는 무슨 일을 하나요?

라이브러리 관리 도구는

프로젝트에 필요한 외부 라이브러리의 설치 및 업데이트를 자동으로 해주고,

특정 버전을 지정해 사용할 수 있습니다.

 

또한, 여러 라이브러리가 동일한 의존성(라이브러리)을 요구할 때,

중복으로 설치되지 않고 공유될 수 있도록 관리합니다.

 

예를 들어 A 라이브러리와 B 라이브러리를 사용할 때,

A와 B가 각각 다른 버전의 C 라이브러리를 사용하고 있는 상황을 생각해 봅시다.

이런 상황에서 라이브러리 관리 도구는 C 라이브러리의 버전 조정,

프로젝트 설정 변경과 같은 복잡한 과정을 자동화하여

개발자가 편리하게 외부 코드를 활용할 수 있도록 도와줍니다.

 


CocoaPods

 

CocoaPods.org

CocoaPods is built with Ruby and is installable with the default Ruby available on macOS. We recommend you use the default ruby. Using the default Ruby install can require you to use sudo when installing gems. Further installation instructions are in the g

cocoapods.org

 

CocoaPodsSwift와 Objective-C Cocoa 프로젝트를 위한 의존성 관리 도구입니다.

10만 개가 넘는 라이브러리를 가지고 있고, 3백만 개가 넘는 앱이 사용하고 있습니다.

 

CocoaPods는 Ruby로 제작되었고, macOS에서 사용할 수 있는 기본 Ruby로 설치할 수 있습니다.

 

시작해 볼까요?

🔥 1. CocoaPods를 설치합니다. 터미널에서 다음 명령어를 입력해 설치할 수 있습니다.

$ sudo gem install cocoapods

하지만 저는 Ruby 버전에 문제가 있어 설치가 되지 않았습니다.. 엉엉..

그래서 그냥 brew로 설치해 주었습니다! 하하

brew install cocoapods

 

🔥 2. 프로젝트 directory에 Podfile을 생성해 줍니다.

직접 생성해도 되지만, directory에서 터미널을 통해

pod init

이라는 명령어를 입력하여 만들 수 있습니다.

아래와 같이 Podfile이 생성된 모습을 볼 수 있습니다!

 

🔥 3. 이제 Podfile을 열어 원하는 라이브러리를 추가합니다.

Podfile를 열고 나서 위 사진의 커서가 있는 영역,

즉 use_frameworks! 하단에 사용하고자 하는 라이브러리를 추가해 줍니다.

 

저는 Kingfisher 라이브러리를 추가해 보겠습니다.

Kingfisher 라이브러리의 readme에서 설치방법을 확인할 수 있습니다.

또는 CocoaPods 사이트에서도 확인할 수 있습니다.

우측의 ~> 8.0은 해당 라이브러리의 버전 정보입니다.

 

🔥 4. 이제 추가한 라이브러리를 설치하기 위해 다시 터미널을 열어

pod install

을 실행해 줍니다.

잘 설치가 되었고, 앞으로는 PracticeCocoaPods.xcworkspace를 사용하라고 안내해주고 있습니다.

(추가로 iOS에 대한 버전이 별도로 특정되어 있지 않아서 17.2로 지정했다고도 알려주고 있습니다 하하..)

 

🔥 5. 끝!

xcworkspace 파일이 잘 생겼고 앞으로 해당 파일을 이용해 프로젝트를 열어주면 됩니다!

설치와 사용이 간편하지만, 프로젝트 빌드시 Podfile의 모든 라이브러리가

함께 빌드되어서 빌드 시간이 조금 더 걸린다고 합니다.

 

개인적으로는 xcodeproj 파일이 아닌 xcworkspace 파일을 활용해야 한다는 점이..

SPM을 사용하게 만드는 것 같습니다 하하

 


Carthage

 

GitHub - Carthage/Carthage: A simple, decentralized dependency manager for Cocoa

A simple, decentralized dependency manager for Cocoa - Carthage/Carthage

github.com

 

Carthage는 의존성을 빌드하고 binary framework를 제공하지만,

개발자가 프로젝트 구조과 설정을 모두 제어할 수 있습니다.

Carthage는 자동으로 프로젝트 파일이나 빌드 설정을 변경하지 않습니다.

바이너리 프레임워크란?

컴파일된 상태로 제공되는 프레임워크를 의미합니다. 즉, 소스 코드가 아닌 미리 컴파일된 바이너리 파일 형태로 배포됩니다. 빌드 시간이 줄어들고 소스 코드 보호가 가능하지만, 디버깅의 어려움 등이 존재합니다.

 

 

Carthage를 설치합시다~

🍀 1. 아래 명령어를 사용하거나 readme 파일에서 다른 방법을 활용하는 방법을 확인하고 진행하면 됩니다.

brew install carthage

 

 

🍀 2. .xcodeproj 나 .xcworkspace 와 동일한 directory에 Cartfile을 만들어줍니다.

 

🍀 3. 파일에 원하는 dependencies를 작성합니다.

우측 ~> 5.5.는 버전이기 때문에 작성하지 않아도 됩니다!

 

🍀 4. 그다음

carthage update --use-xcframeworks

를 실행해 줍니다.

 

이 단계에서 라이브러리를 미리 빌드합니다.

빌드 후에는 새로 생긴 Carthage 폴더의 Build 폴더로 이동됩니다.

이렇게 직접 Build 폴더에 빌드된 파일을 프레임워크에 추가해 줍니다.

 

🍀 5. 끝!

이제 이렇게 import 할 수 있습니다.

 

Carthege는 빌드가 빠르지만, 지원하는 라이브러리 수가 적고,

프로젝트의 모든 구성을 사용자가 수동으로 진행해야 하는 단점이 있습니다.

 

 


SPM(Swift Package Manager)

 

Swift.org

Swift is a general-purpose programming language built using a modern approach to safety, performance, and software design patterns.

www.swift.org

 

SPM은 위의 CocoaPods나 Carthage와 같은 3rd party tool이 아니라 1st party tool입니다.

Xcode11, Swift3.0 이상에 포함되어 있습니다.

자체 빌드 시스템이 포함되어 있고, dependecy를 자동으로 관리해 줍니다.

 

지원하지 않는 라이브러리가 있다는 언급을 종종 보았지만, 최근에 사용한 라이브러리들은 대부분 SPM을 지원했습니다.

 

시작해 봅시다!

🌼 1. 프로젝트를 열어 패키지를 추가해 봅시다. 접근할 수 있는 방법이 여러 가지입니다.

첫 번째 방법: 상단 File > Add Package Dependencies… 로 들어갑니다.

두 번째 방법: Project > Package Dependencies > + 버튼을 클릭합니다.

 

🌼 2. 원하는 라이브러리를 선택해 추가합니다. 우측 상단 검색창에 URL을 입력해 검색할 수 있습니다.

🌼 3. Target을 선택하고 패키지를 추가합니다.

🌼 4. 끝! 이렇게 좌측에서도, 프로젝트 정보에서도 모두 확인이 가능합니다!

 

(참고하면 좋을만한 자료)

 

Swift Package Manager 적용기 - tech.kakao.com

안녕하세요! 카페앱개발파트에서 iOS 개발을 하고 있는 셀린(Celine.jin)...

tech.kakao.com

 


지금까지 라이브러리 관리 도구와 그 종류인 CocoaPods, Carthage, SPM을 알아보았습니다.

 

앞서 언급했지만, 개인적으로는 SPM을 즐겨 사용하는 것 같습니다. ㅎㅎ,,

그리고 이 글을 준비하면서도 SPM이 처음 추가도 간단하고,

자동으로 관리해주면서 1st party tool이라는 점이 저에게 장점으로 와닿은 것 같습니다.

 

하지만, 외부 라이브러리 추가가 필요할 때, 프로젝트 상황에 맞춰 선택하여 사용하면 될 것 같습니다!