---
# System prepended metadata

title: 의존성 관리도구

---

### iOS 환경에서 활용할 수 있는 의존성 관리도구의 종류에는 무엇무엇이 있을까?
코코아팟(CocoaPods), 카르타고(Carthage), SPM(Swift Package Manager)

### 각각의 의존성 관리도구의 장단점도 알아봅시다
- 코코아팟(CocoaPods)
    - 장점
        - 거의 대부분의 라이브러리가 코코아팟을 지원
    - 단점
        - 프로젝트를 빌드 할 때마다 모든 팟 라이브러리가 같이 빌드되므로 프로젝트 빌드 시간이 느림
        - pod install / update에 시간이 오래 걸림
- 카르타고(Carthage)
    - 장점
        - carthage update 를 실행할때만 프레임워크를 빌드 -> 코코아팟에 비해 프로젝트 빌드 속도가 빠름
    - 단점 : 
        - 자동으로 업데이트를 처리해주지 않으므로 의존성이 추가될 때마다 업데이트된 버전의 프레임워크를 수동으로 다운로드하고 빌드하여 프로젝트에 추가하는 작업을 해줘야 함
        - 지원하지 않는 라이브러리가 있을 수 있음
- SPM(Swift Package Manager) : 
    - 장점 : 
        - 애플이 지원
        - 스위프트 언어에 built-in 되어있어 별다른 설치가 필요 없음
    - 단점 : 
        - 아직은 지원하지 않는 라이브러리가 많음
        - 해결되지 않은 오류나 이슈사항이 많음

### 의존성 관리도구를 사용하는 이유는?
- 프로젝트 내에서 사용하는 다양한 라이브러리의 버전 관리가 용이함
    - 라이브러리간 의존성 충돌 및 휴먼 에러를 방지하여 안정성 보장
    - 불필요한 공수가 줄어들어 시간이 절약됨
### 의존성 관리도구와 Git을 함께 사용할 때 주의할 점은?
- 라이브러리가 업데이트될 때마다 프로젝트에 변동사항이 발생하지 않도록 .gitignore 파일에 라이브러리 파일 추가
- 협업을 하는 모두가 동일한 버전을 사용할 수 있도록 버전을 명확히 명시
- 의존성 도구에 설정 파일이 필요한 경우 해당 내용도 협업을 하는 모두가 공유할 수 있도록 추가
### 이번 프로젝트에 SwiftLint 라이브러리를 적용해봅시다
- [SwiftLint](https://github.com/realm/SwiftLint)
- CommandLineTool에서는 동일하게 동작하지 않는다!
    - https://github.com/realm/SwiftLint/issues/2829

### Lint 규칙 정하기 등의 세부 설정은 나중에 하고, 이번 활동학습 시간 중에는 Lint 설치에만 의의를 둡니다
- https://github.com/maxhyunm/ios-bank-manager/tree/dependency_manager/BankManagerUIApp


## 참고자료
- https://yagom.net/courses/open-source-library/git pu
- https://www.swift.org/package-manager/#example-usage
- https://github.com/realm/SwiftLint
- https://zeddios.tistory.com/447