iOS

Private Pod 배포 방법

Phililip
728x90

안녕하세요.

 

이번에는 Library를 private pod으로 배포하는 방법에 대해 알아볼게요.

 


 

우선 Private Pod을 배포하기 위해서는 2가지 repository(저장소)가 필요합니다.

- Pod Repo

- Spec Repo

 

 

Pod Repo는 배포할 Library 프로젝트 저장소를 의미합니다.

Spec Repo는 Library를 배포하기 위한 podspec이 들어가 있는 저장소를 의미합니다.

 

Public Pod 배포할 때는 Spec Repo라는 걸 따로 안 만들었는데, Private Pod 배포할 때는 왜 필요할까요??

 

 

 

Public Pod을 배포하는 경우라면, pod trunk push 명령어를 사용해서 podspec을 CocoaPods/Specs 저장소에 제출하고, 

(CocoaPods/Specs가 Spec Repo라고 보시면 됩니다.)

 

CocoaPods/Specs 저장소에 등록된 podspec을 가지고 사용자가 pod 설치를 하는 것입니다.

 

 

 

Private Pod의 경우는 어떨까요.

 

Private Pod이기 때문에 podspec을 모든 사람들이 보는 Cocoapods/Specs 저장소에 올릴 수 없으니, 별도의 저장소를 개인이 관리해줘야 합니다. 그래서 Spec Repo가 필요하다는 것이에요.

 

사용자가 Private Pod을 사용할 때는 Cocoapods/Specs 저장소에 podspec이 없으니, Podfile에 아래처럼 podspec이 어디 있는지 명시해줘야 합니다.

source 'SPEC_REPO'

 

 

개념은 요 정도로 이해를 했구요.. 만약 틀린 부분이 있으면 알려주세요ㅠㅠ

 

 

우선 Library 만드는 법부터 해서 배포하는 것까지 직접 해볼게요.

(PLPrivateSDK라는 모듈을 만들고 배포해볼게요!)

 

 

 

## 1. Pod Repo 만들기

저는 PLPrivateSDK라는 모듈을 만들 거예요.

 

Library가 저장될 위치로 가서(저는 Desktop에서 할 거예요.) 터미널에다가 아래 명령어를 입력해주세요.

pod lib create [Library 이름]
ex) pod lib create PLPrivateSDK

 

 

여러 가지 옵션이 있는데, 이번 시간은 Private Pod 배포하는 방법에 대해서 알아보는 시간이니 가장 간단하게 설정하고 넘어갈게요.

 

 

 

Library가 저장될 빈 repository를 만들어줄게요. (ex. https://github.com/phillip5094/PLPrivateSDK.git)

 

 

 

Library 디렉토리로 돌아와서 podspec을 수정해주고,

 

 

 

생성된 Library를 Pod Repo에 푸시해주고 태그도 함께 생성해줄게요.

git add .
git commit -m "first commit"
git branch -M main
git remote add origin [Pod Repo URL]
git push -u origin main
git tag 1.0.0
git push origin 1.0.0

 

 

아래 명령어로 podspec을 검증했을 때 문제가 없어야 합니다!!

pod spec lint [Library 이름].podspec --verbose --allow-warnings
ex) pod spec lint PLPrivateSDK.podspec --verbose --allow-warnings

 

 

 

 

 

## 2. Spec Repo 생성

podspec이 저장될 빈 repository를 하나 만들어주고 clone 받아올게요. (ex. https://github.com/phillip5094/Specs.git)

 

터미널에서 아래 명령어를 입력합니다.

pod repo add [Spec Repo 이름] [Spec Repo URL]
ex) pod repo add Specs https://github.com/phillip5094/Specs.git

 

 

아래 주소에 잘 들어갔는지 확인해주세요.

cd ~/.cocoapods/repo/[Spec Repo 이름]
ex) cd ~/.cocoapods/repo/Specs

 

 

 

## 3. Spec Repo에 podspec 등록

이제 podspec을 Spec Repo에 푸시해줘야 합니다.

 

다시 Library 디렉토리로 돌아와서 아래 명령어를 입력해주세요.

pod repo push [Spec Repo 이름] [Library 이름].podspec --verbose --allow-warnings
ex) pod repo push Specs PLPrivateSDK.podspec --verbose --allow-warnings

 

 

아래 주소에 잘 들어갔는지 확인해주세요.

cd ~/.cocoapods/repo/[Spec Repo 이름]
ex) cd ~/.cocoapods/repo/Specs

 

 

아래와 같은 구조로 private repo의 podspec이 등록되니 참고해주세요.

.
├── [Spec Repo 이름]
    └── [Library 이름]
        └── [버전]
            └── [Library 이름].podspec
            
ex) 
.
├── Specs
    └── PLPrivateSDK
        └── 1.0.0
            └── PLPrivateSDK.podspec
        └── 1.1.0
            └── PLPrivateSDK.podspec
        ...

 

 

 

## 4. Private Pod 사용하기

배포는 모두 끝났습니다.

 

앞으로는 Podfile에 아래처럼 source 옵션을 넣어서 podspec 위치를 선언하고 사용해주시면 됩니다.

platform :ios, '12.0'
source 'https://github.com/phillip5094/Specs.git'  ✅

target 'MSampleApp' do
  use_frameworks!
  pod 'PLPrivateSDK'  ✅
end

👍

 

 

## 5. 다른 PC에서 Private Pod 사용하려면?

다른 PC에서 사용하는 방법도 동일해요.

 

아래 명령어를 입력해서 Spec Repo를 clone 받고

pod repo add [Spec Repo 이름] [Spec Repo URL]
ex) pod repo add Specs https://github.com/phillip5094/Specs.git

 

Podfile에 source 옵션을 넣어서 사용하면 됩니다.

source 'https://github.com/phillip5094/Specs.git'

platform :ios, '12.0'

target 'MySampleApp' do
  use_frameworks!
  pod 'PLPrivateSDK', '1.0.0'
end

 

 

 

 

만일 Library를 업데이트해야 한다면, Library 배포하는 분은 아래 명령어로 podspec을 Spec Repo에 등록해주셔야 하고,

pod repo push [Spec Repo 명] [Library 명].podspec --verbose --allow-warnings
ex) pod repo push Specs PLPrivateSDK.podspec --verbose --allow-warnings

 

사용하는 분은 아래 명령어로 최신 모듈을 clone 받고 사용하시면 됩니다.

pod repo update
pod update

 

 

 

## 참고

- https://guides.cocoapods.org/making/private-cocoapods.html

- https://zeddios.tistory.com/701

- https://chc3484.tistory.com/92

 


 

이번 글은 여기서 마무리.

 

 

 

반응형

'iOS' 카테고리의 다른 글

NSString, String 비교 방법 (Objective-C, Swift)  (0) 2022.08.14
Apple Common Scheme List  (0) 2022.08.04
SwiftUI <-> UIKit 이벤트 전달 방법  (0) 2022.05.21
Logger, OSLogPrivacy  (0) 2022.05.02
[오픈소스] Inject  (0) 2022.04.12