CocoaPods Library 만들기 _ Private Repository

Zeto·2023년 1월 12일
0

Swift_Framework

목록 보기
3/6

여러가지 캘린더를 원할 때마다 간편하게 사용할 수 있는 프레임워크를 개인 프로젝트로 진행하던 중이었다. 하나의 캘린더가 완성된 때, 문득 이를 CocoaPods로 배포해서 편하게 쓰면 되지 않을까라는 생각이 들었다. 그래서 여러 시행착오를 겪은 뒤, 이에 대한 글을 써야겠다는 마음을 먹게 되었다.
일단 캘린더가 하나 밖에 완성되지 않은데다가 영 부끄러운 상태인 듯 해서 먼저 Private Pod으로 배포하는 방법을 학습하였고, 이에 대한 내용을 먼저 정리하고자 한다.

🙊 Don't Forget!!

먼저 Private Pod 배포를 시작하기 위해서는 Github에 두 개의 Repository를 생성해주어야 한다. 하나는 우리가 구현한 소스코드들을 관리하는 Pod Repository이고, 나머지는 이러한 Pod Repository에 대한 내역들을 담당하는 Spec을 관리하는 Spec Repository이다.

Pod Repository : ( https://github.com/userName/CalendarKit.git )
Spec Repository : ( https://github.com/userName/CalendarKitSpecRepo.git )

위의 예시처럼 각각의 레포지토리를 생성해주면 되고, 모두 Private으로 설정해주면 된다.

👉 Here we Go!!!

1. Spec Repository 추가하기

먼저 만들어둔 레포지토리를 로컬의 cocoapods 디렉토리에 생성해주도록 한다.

$ pod repo add (REPO_NAME) (SOURCE_URL)

  • (REPO_NAME) : 원하는 이름으로 기입
  • (SOURCE_URL) : github에 만들어 둔 Spec Repository의 URL 기입
$ pod repo add CalendarKitSpecs https://github.com/userName/CalendarKitSpecRepo.git

해당 작업이 별다른 문제없이 진행됐다면, 해당 디렉토리로 가서 Spec Repository의 상태를 확인해주면 된다.

$ cd ~/.cocoapods/repos/(REPO_NAME)
$ pod repo lint .

cocoapods 디렉토리는 숨김 처리되어 있으니, 직접 눈으로도 확인하고 싶다면 숨김 처리 풀고 해당 디렉토리로 들어가서 파일들을 확인해주어도 된다.

2. Pod Library 생성하기

이제는 우리의 코드들을 구현할 수 있는 Pod Library를 생성해보자.

$ pod lib create (Library_NAME) {--template-url=URL}

라이브러리의 이름 부분을 원하는 대로 바꿔주면 되는데, 기본적인 형태말고 다른 템플릿에 맞춰서 진행하고 싶다면 저 뒤의 중괄호 부분을 활용해주면 된다. 일단 이번 진행 때는 템플릿 사용 없이 해보려 한다.

해당 명령어를 입력하게 되면 위와 같은 내용들이 주루룩 나오게 되는데 각각 사용할 플랫폼, 사용할 언어, 데모 어플리케이션 포함 여부, 테스팅 프레임워크 선택, View 기반 테스팅 여부를 물어보는 것이니 원하는 대로 선택해주면 된다.
이 중에서 데모 어플리케이션의 경우에는 내가 만든 프레임워크를 바로 테스팅 해볼 수 있기 때문에 선택해주었다. 선택의 기로에서 무사히 빠져나오게 되면 이제 우리가 Private Pod에 필요한 로직들과 설정들을 구현할 수 있는 프로젝트가 오픈된다.

3. Pod Library 구현하기

1) .podspec 수정

해당 프로젝트를 들어가보면 Pods > Development Pods > ProjectName > Pod 경로에 존재하는 ProjectName.podspec 파일이 있다. 라이브러리에 대한 주요한 설정들을 관리하는 파일로서 앞서 생성한 Spec Repository가 이 .podspec 파일들을 버전 별로 관리해주는 것이다.

다양한 설정을 줄 수 있지만 위의 예시처럼 본인이 필요한 내용들만 정리해주면 된다.

s.version : 수정할 때마다 조정해 줄 Version
s.source : 앞서 생성한 Pod Repository 주소 기입
s.dependency : 해당 소스 파일에 필요한 서드 파티 라이브러리

2) 구현 소스 코드 작성

위에서 작성한 .podspec의 경로와 동일한 곳에 ReplaceMe.swift라는 파일이 존재한다. 해당 파일의 제목과 내부 코드를 수정하여 외부에서 호출하고, 내부에서 작동할 요소들을 작성해주면 된다. 뿐만 아니라 기존에 작성했던 파일들을 붙여와도 된다.

이처럼 기존의 파일을 지우고 다른 파일들을 넣어줄 수 있다. 다만 여기서 주의할 사항은 파일들을 옮겨올 때, 프로젝트 이름으로 된 디렉토리 내에 Classes라고 명명된 디렉토리에다가 넣어줘야 한다. 뿐만 아니라 외부에서 호출할 수 있게 해주려면 open이나 public처럼 접근 제어자에 대한 조정도 필요하다.

3) 테스트 해보기

아까 데모 앱에 대한 선택 때, Yes를 선택한 기억이 나지 않는가. 디렉토리를 자세히 보게 되면 Example이라는 디렉토리가 보이는데 그 안에 우리가 작성한 코드를 실행해볼 수 있는 프로젝트가 존재한다.

해당 프로젝트에서는 Pod install할 필요없이 우리의 라이브러리를 바로 사용해볼 수 있다. 물론 다른 라이브러리들을 사용해야 된다면, 그것들은 Pod 입력 절차를 거치긴 해야 한다.

4) Repository 업로드

이제 모든 설정과 작성이 마무리되었다고 하면 별다른 이상이 없는지 체크하고 이전에 만들어둔 Repository들에 업로드를 하는 작업만이 남았다. 일단 업로드 전에 pod spec에 무슨 문제가 없는지 확인해줄 필요가 있다.

$ pod spec lint

해당 명령어를 입력하면 별다른 문제가 없을 수도 있고 위의 예시처럼 Error 혹은 Warning 등이 나올 수 있다. Warning 같은 경우에는 해결 방법도 알려줄 뿐더러 별 게 아니면 $pod spec lint --allow-warnings로 그냥 경고 허용해주어도 된다.
(위의 Error의 경우에는 tag를 걸어주면 충분히 해결된다)

$ git add .
$ git commit -m "Message"
$ git remote add origin (Pod Repository URL)
$ git push origin (branch)

$ git tag (tag number)
$ git push origin (tag number)

위의 명령어를 입력해주면 아주 스무스하게 업로드가 된다. 다만 본인처럼 브랜치가 어긋나서 리젝트 당하는 경우도 있을 수 있다. 이럴 경우에는 편법이기는 하지만 신규 브랜치를 생성해서 업로드해주고 이후 브랜치를 바꿔주는 방식으로 우회할 수도 있다.


그러면 이처럼 만들어둔 Repository에 정상적으로 들어간 것을 확인할 수 있다.

5) .podspec을 Spec repository에 업로드

이제 우리가 따로 만들어두었던 .podspec 관리 레포지토리에 해당 파일을 업로드해주면 된다.

$ pod repo push (REPO_NAME) (POD_SPEC_PATH)

로컬에 만들어졌던 레포지토리의 이름과 함께 .podspec 파일이 존재하는 경로를 입력해주면 정상적으로 Spec repository에 업로드된다.

$ pod repo push CalendarKitSpecs ~/_practice/CalendarKit/CalendarKit.podspec

여기까지 진행하면 Private Pod을 배포하는 과정은 전부 다 익힌 것이다. 여기서 3번의 내용들만 수정이 있을 때, 반복 진행함과 동시에 버전을 수정해주기만 하면 관리까지도 완벽!

4. Pod Library 사용하기

마지막으로 우리가 배포한 Private Pod을 사용하는 방법을 정리하고자 한다. 먼저 타인이 해당 라이브러리를 사용하기 위해서는 Private하게 설정된 Spec repository에 접근할 수 있는 권한을 주어야 한다. 이와 함께 로컬에 코코아팟을 설치하기 위해서 spec repo가 로컬에 추가되어 있어야 한다.

$ pod repo add (REPO_NAME) (SOURCE_URL)

또한 라이브러리를 사용하려는 프로젝트의 PodFile 최상단에다 Spec repositorysource URL까지 추가해주면 된다.

이후는 기존에 Pod을 활용하던 거와 동일하게 진행해주면 된다.

📝 정리

여러가지 많은 내용들이 오갔지만 다른 무엇보다 중요한 것은 두 개의 레포지토리가 필요하다는 점이다. 정리한 내용들이 차후 라이브러리를 만들어보고 싶은 이들에게 도움이 됐으면 하는 바람이다. 앞으로 캘린더 라이브러리를 더 가다듬어보고 나쁘지 않다면 오픈 소스로 전환해보고자 한다.

profile
중2병도 iOS가 하고싶어

0개의 댓글