Dependency Management Tool for iOS

dvhuni·2021년 7월 28일
0

iOS

목록 보기
7/17

안녕하세요, dvHuni입니다!!

여름을 기다려왔지만 너무 살인적인 날씨네요 🥵

더위에 적응하느라 포스팅이 늦어진점.... 양해부탁드립니다 🤛🤛🤛

오늘은 iOS 개발에서 주로 사용되는 Dependency Management Tool에 대해 알아보고 각각의 특징을 정리해두려합니다.

이번 포스팅도 힘차게 출발해보겠습니다 아자아자!!

Library vs Framework

먼저 제가 헷갈려 했던 개념부터 정리하고 가려고 합니다! (아마 다들 헷갈려했을걸?)

Library는 무엇이고 Framwork는 무엇이냐! 어떤 차이가 있냐!!!!!

Framework의 정의

  • 프로그램을 작성하는데 필요한 일정한 부품과 뼈대.

Library의 정의

  • 프로그램을 작성하는데 필요한 도구들의 집합.

공통점

  1. 누군가에 의해 미리 만들어진 코드입니다.
  2. 공통적인 로직을 미리 만들어진 코드를 불러와서 해결 가능합니다.

차이점

제어반전

  • 라이브러리는 제어의 주체가 나의 프로그램이다. 내가 사용하지 않아도 무방합니다.
  • 프레임워크는 제어의 주체가 프레임워크이다. 즉, 꼭 지켜야하는 규약이 있습니다.

❗️iOS에서의 예시

  • UIViewController의 경우, 생명주기에 맞게 자동으로 호출되는 Method들이 존재하는데, 이 안에 개발자가 내용을 채워 넣을 수 있습니다. 채워 넣은 내용은 UIKit이라는 Framework에 전달되어 UI 조작을 통해 알맞은 타이밍에 실행되게 됩니다.
  • UI를 코드로 작성할 때 가장 많이 사용하게 되는 SnapKit이라는 Library가 있습니다. SnapKit에 존재하는 Method는 사용하지 않아도 무방합니다.

What is Dependency

자 그렇다면 이제 본론으로 넘어와서... Dependecy Management Tool인데..

Dependency는 뭐냐 ? 라는 의문이 생길 수 있기 때문에 살짝 짚고 넘어가도록 하겠습니다.

DependencyExternal Standalone Program Module입니다.

즉, 외부에 동작하는 하나의 자체적인 모듈입니다.

이러한 모듈은 Library가 될 수 있고, Framework가 될 수 있겟죠

자 그럼 이제부터는 자주 사용되는 Management Tool의 종류와 각각의 특징에 대해 알아보겠습니다~!

🕺🕺

Cocoapods

cocoapods는 ios의 첫번째 공식 DM이며, 이는 가장 넓게 적용되어있습니다.

가상적으로 모든 third party library는 이것을 지원합니다.

cocoapods은 set up이 간단합니다.

간단하게 Podfile을 만들어 dependency 리스트를 작성하고, pod install 명령어를 통해 프로젝트에 삽입 할 수 있습니다.

cocoapods은 workspace라는 새로운 파일을 만들고, 그 안에 기존의 프로젝트 파일과 조직화된 dependency들을 포함시켜줍니다.

이것은 장점이자 단점이 됩니다.

set up이 간단하지만, 수정된 프로젝트 파일을 사용자는 알지 못합니다.

또한 cocoapods은 중앙집중식이며, 모든 dependency들은 중앙 repo에 저장됩니다.

이는 어떠한 이유로 중앙 repo가 중단된다면, 프로젝트를 컴파일 할 수 없는 상태가 될 수 있다는것을 의미합니다.

장점

  1. 사용과 설정이 간단합니다.
  2. Xcode프로젝트에 대한 설정을 자동으로 해줍니다. ⇒ WorkSpace
  3. 잘 정리된 커다란 커뮤니티가 존재하고, 대부분 iOS library를 지원합니다.💥

단점

  1. podFile을 관리해야합니다.
  2. cocoapods은 Xcode 프로젝트가 무엇이 변했는지에 대한 고지 없이 업데이트합니다.
  3. 중앙 집중 방식입니다.
  4. 클린 빌드 시 모든 pod 라이브러리를 다시 빌드해야합니다.💥

Carthage

carthage(카르타고)는 비중앙 집중 방식입니다.

현재 몇가지의 dependency source를 지원합니다.(git repo, public https 등)

set up은 cocoa pod과 비슷하다. 사용자가 cartfile을 생성하고, dependency를 추가하고 carthage update를 실행합니다.

체크아웃 후 dependency를 구성한 후 Xcode에 바이너리를 추가 할 수 있도록 남겨둡니다.

Xcode가 업데이트 되는 경우 carthage update를 해줘야 하기 때문에, 라이브러리는 항상 최신으로 유지해야 합니다.

장점

  1. carthage는 Xcode의 설정과, project파일을 변경하지 않습니다.
  2. 비중앙 집중 방식
  3. Submodule을 지원합니다.
  4. carthage update 시 한 번 프레임워크를 빌드하므로 cocoapods에 비해 빌드 속도가 빠릅니다.💥

단점

  1. 커뮤니티가 작고, 배포자 수가 적습니다.
  2. 지원하는 모든 아키텍쳐(iOS, tvOS, MacOS등)에 대해 dependency를 빌드 해야 합니다.
  3. 모든 라이브러리들을 항상 최신버전으로 유지해야합니다.💥

Swift Package Manager

Swift에서 공식적으로 제공한는 Dependency Management Tool입니다.

Xcode 12로 업데이트 되면서 Xcode에 포함되어 관심을 받고있습니다.

package manager 역할 뿐 아니라 Build와 Test 도구로써의 역할도 수행 가능합니다.

SPM은 xcode에 package를 생성하지 않습니다.

장점

  1. swift에서 공식적으로 제공하는 package manager입니다.
  2. Apple에 의해 관리됩니다.
  3. swift 에 built-in 되어있기 때문에 별다른 설치가 필요 없습니다. 💥

단점

  1. 새로운 툴이며, 아직 까지 많은 변화를 겪고 있습니다.(이슈가 많습니다) 💥
  2. 모든 플랫폼(iOS, tvOS, macOS 등)을 공식적으로는 지원하지 않는다고 합니다.
  3. SPM의 디렉토리 표준을 따르는 SPM 혹은, 프로젝트만 동작합니다.

최근 WWDC21에서 SPM에 대한 업데이트가 있었습니다!
해당 내용도 정리해서 포스팅 하겠습니다!

마무리 하며..

오늘은 항상 헷갈려 했던 Library와 Framework의 차이점에 대해 알아보았고,

iOS의 Library를 관리하는 Depedency Manager의 종류와 각각의 특징에 대해 정리해보았습니다.

저는 CocoaPod을 주로 사용했습니다만,

시간이 지나면 SPM을 조금 더 중점적으로 사용하게 될 것 같다고 생각합니다. (Apple에서 관리하고 있으니까 ?!)

새로운 프로젝트를 설계할 때 프로젝트의 특성에 맞게 Dependecy Manager를 선택하시면 좋을 것 같습니다!

이상으로 이번 포스트를 마치겠습니다.

틀린부분이 있다면 언제든지 지적 해주시면 정말 감사하겠습니다 !! 🥺

읽어주셔서 감사합니다!! 🙇‍♂️

profile
hello, iOS

0개의 댓글