Cocoapods 처음 등록/배포 해보기!!

Cocoapods이란?

Jinhyuk
7 min readApr 20, 2020

Swift , ObjC의 의존성(혹은 종속성) 매니저라는게 가장 큰 장점이다.
Cocoapods 이외에도 Cartage, Swift Package Manager 와 같은 툴들이 존재한다. 하지만 여기선 Cocoapods 에 관하여 튜토리얼 수준의 스텝바이스텝으로 전체적인 흐름을 보려고합니다.

전체적인 흐름 (https://blog.cocoapods.org/CocoaPods-Trunk/)

일단 알아둬야하는 개념
Pod Spec : 말 그대로 코코아팟에 관련한 명세서이다!! [ 링크 ]
Cocoapods Trunk에 Pod Spec이 업로드되어야만 사용이 가능하다.
(해당 라이브러리/ 프레임워크의 버전, 소스 코드 위치 등 메타 데이터 가짐)
안드로이드의 Gradle과 달리 소스 위치를 직접 가지고있음

Cocoapods Trunk : 인증과 API 서비스를 담당하고있다고함 [ 링크 ]
핵심은 코코아팟으로 제공해주기 위해선 반드시 Trunk에 정보가 있어야함!!

Pod Spec Repo : 코코아팟으로 제공되는 라이브러리들의 무결성을 제공하기 위해 Pod Spec을 위한 저장소를 뜻함.
코코아팟으로 제공해주는 라이브러리들의 버전이 증가함에 따라 관리의 중요성을 의미.

즉, 라이브러리 소스의 위치(Github), 버전을 알고있는 Pod Spec 파일을 Cocoapods Trunk에 등록시켜야 사용할수 있다!

Cocoapods : https://cocoapods.org/

이번 글에선 예제를 따라하면서 Cocoapods 전체 흐름에 대하여 알아보려고한다. 아래 2가지 방법으로 진행해보려고 합니다.

Cocoapods으로 제공하는 방법

  1. 소스 코드와 함께 라이브러리를 제공하는 방법
  2. Framework와 샘플 코드를 제공하는 방법

공통 작업환경

Cocoapods 설치 필수
Xcode 설치 필수
아래 예제는 Github 사용하기에 Github 계정 필수!!!

소스코드와 함께 라이브러리를 제공하는 방법

  1. 원하는 위치에 디렉토리 생성 및 터미널로 해당 위치로 이동

2. 아래 명령어로 프로젝트 생성

pod lib create {코코아팟 프로젝트 이름}

3. 명령어 실행시 아래와 같이 묻는 창이 나오는데 모든 항목 확인하기

4. Pods -> Development pods -> {Project Name} -> ReplaeMe.m 삭제후 원하는 코드 작성
* 주의점 : podspec file 안에 s.source_files 경로에 맞추어 h/m 파일 생성해주어야함

5. Github Repository 생성 및 소스 Push

6. Tag 생성

7. 라이브러리 검증을 위해 아래의 명령어 입력

pod spec lint

8. Pod spec file을 Cocoapods Trunk 에 업로드합니다. => podspec 관리가 중요

pod trunk push

9. 10 ~15분 후 Cocoapods 테스트 ( Trunk 적용 시간이 걸림 )

10. 테스트 샘플 앱에 적용하여 확인하기!!

2020-04-14 17:22:09.619618+0900 adsfa[2432:2390299] JHCocoaTest : aaa

Framework와 샘플 코드를 제공하는 방법

이와 같은 방식은 프레임워크만 배포하여 내부 코드는 볼수 없도록 배포할수 있는 장점이 있다.

Pod::Spec.new do |spec|spec.name         = "logFramework"spec.version      = "0.1.0"spec.summary      = "logFrameworkTest"spec.description  = <<-DESCJinhyukLogFramework.frameworkJinhyukLogFramework.frameworkJinhyukLogFramework.frameworkDESCspec.homepage     = "https://github.com/jjhyuk/logFramework"spec.license      = "MIT"spec.author             = { "jjhyuk" => "email@address.com" }spec.source       = { :git => "https://github.com/jjhyuk/logFramework.git", :tag => "#{spec.version}" }////////////////////////////////////////////////////vendored_frameworks : 프레임워크를 가져와 팟에 연동시켜준다.spec.vendored_frameworks = "JinhyukLogFramework.framework"//////////////////////////////////////////////////end

아래의 Github 과 같이 레포지토리에 샘플과 프레임워크를 푸시한다.
첫번째 예제와는 다르게 ‘vendored_frameworks’ 값이 추가된다.
아래 깃 주소에서 확인해보시면 됩니다!!!

간단한 예제를 스텝바이스텝으로 작성해보았습니다.
맨 처음에 의존성을 관리해준다면서 정작 튜토리얼에는 다른 프레임워크 (라이브러리)의존성에 관한 내용이 하나도 없네요… 죄송합니다…ㅜㅜㅜ
저와 같이 뺑뺑 돌면서 알아보지 않게 누군가에겐 도움이 되었으면 좋겠습니다. 감사합니다~

--

--

No responses yet