의존성 관리 도구

Judy·2022년 6월 29일
0

소스코드를 공개해 누구나 제한 없이 볼 수 있도록 한 소스코드

  • 많은 오픈소스가 존재
    ex) Alamofire(네트워킹 라이브러리), Kingfisher(이미지 다운로드 관리)
  • 해당 기능을 구현하는 시간 절약 + 질 좋은 기능 사용

의존성 관리 도구

외부 라이브러리를 사용할 때 프로젝트와 해당 라이브러리의 상관관계를 용이하게 관리해주는 도구

  • Java - Maven / Javascript - Yarn, NPM / Python - pyenv
  • 애플에서 제공하는 애플리케이션 개발 환경은 Cocoa, CocoaTouch
  • 코코아 및 코코아터치 애플리케이션 - 코코아팟(Cocoapods), 카르타고(Carthago), 스위프트 패키지 매니저

오픈 소스 라이선스

  • Apache, CPL, MIT, BSD 등

MIT

  • 자유도가 높고 제약이 낮은 라이선스
  1. 이 소프트웨어를 누구라도 무상으로 제한 없이 취급 가능
  2. 저자 또는 저작권자는 소프트웨어에 관해서 아무런 책임을 지지 않음

-> 수정 및 배포가 자유롭고 상업적으로 이용해도 되지만 소스로 인한 피해는 사용자가 감수해야 함

코코아 팟

Swift 및 Objective-C 언어 환경에서 프로젝트 의존성을 관리해주는 도구

  • Podfile에 사용할 라이브러리만 명시해주면 사용 가능

장점

  • 사용하기 쉬움
  • 한 군데서 검색해서 사용 가능
  • 어떤 오픈소스를 쓰고 있는지 보기 편함
  • 버전과 의존성의 의존성을 관리해줌
  • 새로운 버전이 있는지 쉽게 체크 가능
  • 대부분의 라이브러리가 지원

단점

  • 프로젝트 필드할 때마다 모든 라이브러리들이 빌드되어 빌드 시간이 길다
  • 종속된 팟 라이브러리를 설치하고 업데이트 하는데 오래 걸린다

코코아팟 설치

  • Ruby로 개발되어 있음
  • mac에는 이미 Ruby가 설치되어 있음
    sudo gem install cocoapods

Pod 설치

  1. 프로젝트 경로로 이동하기
  2. pod init -> Pod 파일 생성됨
  3. Podfile을 열어서 사용할 Pod를 명시
  4. pod install
  5. .xcworkspace 프로젝트 파일로 작업
  6. 사용하고 싶은 라이므러리를 import해서 사용
  • 사용할 버전을 명시할 수 있음, 명시하지 않으면 항상 최신 버전의 라이브러리를 사용

Podfile.lock

  • pod들의 버전을 추적하여 기록하고 유지시키는 역할
  • 유일성을 보증하는 해쉬값인 CHECKSUM 부여

명령어

  • pod install : pod을 세팅하고 Podfile에 pod을 추가, 수정, 삭제할 때 사용
  • pod update : pod을 최신 버전으로 업데이트
  • pod outdated : 새로운 버전이 있는 모든 pod을 나열
  • pod repo update : podspec 파일을 업데이트

Carthago

  • 코코아 팟의 단점을 보완
  • 프레임워크(혹은 라이브러리)를 추가
  • 프로젝트 파일이나 빌드 설정을 자동으로 수정하지 않음

장점

  • 빌드 시점에 라이브러리도 같이 빌드되지 않아 빌드 속도가 빠름
  • 의존성의 의존성까지 관리
  • 어떤 의존성이 있는지 쉽게 알 수 있음
  • 처음에 프레임워크를 추가하는 것 외에 프로젝트 설정이 바뀌지 않음

단점

  • 의존성이 추가될 때마다 번거로운 작업이 존재 + 오래걸림
  • 지원하지 않는 라이브러리가 있을 수 있음

Homebrew를 이용한 카르타고 설치

  • 카르타고는 gem이 아닌 Homebrew를 통해 설치

brew install carthage

명령어

  • carthage update : Cartfile을 기반으로 모든 의존성을 갱신하고 빌드
  • carthage bootstrap : Cartfile.resolved를 기반으로 모든 의존성을 갱신하고 빌드
  • carthage build : 갱신하지 않고 모든 의존성을 빌드
  • carthage outdated : 새로운 버전이 있는 항목을 알려줌

스위프트 패키지 매니저

  • 코코아팟이나 카르타고는 third-party 도구를 주로 이했지만 스위프트 피키지를 내놓으면서 애플에서 의존성 관리 도구를 적극 패원
  • Xcode에서 스위프트 패키지 매니저를 공식저적으로 지원

장점

  • 애플이 지원 👍
  • 의존성의 의존성 관리
  • 어떤 의존성이 있는지 쉽게 알 수 있음
  • 스위프트 언어에 포함되어 있어 별다른 설치가 필요 없음
  • 리눅스에서도 사용 가능
  • Package.swift 파일만 만들면 수행할 일이 없음
  • Xcode의 GUI에서 관리 가능

단점

  • 아직 지원하지 않는 라이브러리가 많음
  • 아작 해결되지 않은 이슈들이 많음

스위프트 패키지 매니저 라이브러리 만들기

  • touch Package.swift : Package.swift 파일 추가
    (=코코아팟의 .podspec 파일과 같은 역할)
  • 파일에 내용입력
// swift-tools-version:5.1

import PackageDescription

let package = Package(
    name: "YYSimpleAlert",
    platforms: [
        .iOS(.v13)
    ],
    products: [
        .library(name: "YYSimpleAlert",
                 targets: ["YYSimpleAlert"])
    ],
    targets: [
        .target(name: "YYSimpleAlert",
                path: "YYSimpleAlert/Classes")
    ],
    swiftLanguageVersions: [
        .v5
    ]
)
  • swift-tools-version을 명시 = PackageDescription 라이브러리 버전




야곰닷넷 - 오픈소스 배포하기

profile
iOS Developer

0개의 댓글