소스코드를 공개해 누구나 제한 없이 볼 수 있도록 한 소스코드
- 많은 오픈소스가 존재
ex) Alamofire(네트워킹 라이브러리), Kingfisher(이미지 다운로드 관리)
- 해당 기능을 구현하는 시간 절약 + 질 좋은 기능 사용
의존성 관리 도구
외부 라이브러리를 사용할 때 프로젝트와 해당 라이브러리의 상관관계를 용이하게 관리해주는 도구
- Java - Maven / Javascript - Yarn, NPM / Python - pyenv
- 애플에서 제공하는 애플리케이션 개발 환경은 Cocoa, CocoaTouch
- 코코아 및 코코아터치 애플리케이션 - 코코아팟(Cocoapods), 카르타고(Carthago), 스위프트 패키지 매니저
오픈 소스 라이선스
MIT
- 이 소프트웨어를 누구라도 무상으로 제한 없이 취급 가능
- 저자 또는 저작권자는 소프트웨어에 관해서 아무런 책임을 지지 않음
-> 수정 및 배포가 자유롭고 상업적으로 이용해도 되지만 소스로 인한 피해는 사용자가 감수해야 함
코코아 팟
Swift 및 Objective-C 언어 환경에서 프로젝트 의존성을 관리해주는 도구
- Podfile에 사용할 라이브러리만 명시해주면 사용 가능
장점
- 사용하기 쉬움
- 한 군데서 검색해서 사용 가능
- 어떤 오픈소스를 쓰고 있는지 보기 편함
- 버전과 의존성의 의존성을 관리해줌
- 새로운 버전이 있는지 쉽게 체크 가능
- 대부분의 라이브러리가 지원
단점
- 프로젝트 필드할 때마다 모든 라이브러리들이 빌드되어 빌드 시간이 길다
- 종속된 팟 라이브러리를 설치하고 업데이트 하는데 오래 걸린다
코코아팟 설치
- Ruby로 개발되어 있음
- mac에는 이미 Ruby가 설치되어 있음
sudo gem install cocoapods
Pod 설치
- 프로젝트 경로로 이동하기
pod init
-> Pod 파일 생성됨
- Podfile을 열어서 사용할 Pod를 명시
pod install
- .xcworkspace 프로젝트 파일로 작업
- 사용하고 싶은 라이므러리를
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 파일과 같은 역할)
- 파일에 내용입력
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 라이브러리 버전
야곰닷넷 - 오픈소스 배포하기