본문 바로가기

IOS

iOS - SPM 프로젝트에 Cocoapods 을 달아보자

요즘 이것저것 해보고 싶은게 많다. 

그래서 깃허브에 라이브러리를 올려보자 한다. 내용자체는 간단한 내용이지만,

언젠간 쌓일 ⭐️ 을 위해...

 

시간 관련 함수를 정리한 라이브러리에, Cocoapods 을 달아보고자 한다.

사실 SPM 은 Swift Package 로 생성한것에 GitHub 에만 올리면 가능한 이야기라, 따로 설명은 없다.

하지만 아래의 블로그를 보면 참고 할수 있다.

https://moonggi-dev-story.tistory.com/86

 

iOS - 프로젝트에 SPM 을 달아보자

종속성 관리를 위한 도구인 SPM 을 소개 하고자합니다. 기존에 Cocoapod(3st party) 으로 설치했던 라이브러리를 SPM(1st party) Xcode 내장 기능을 이용해 구성 했습니다. 공통적으로 사용 가능한 함수, 및 V

moonggi-dev-story.tistory.com


1. 라이브러리 생성

1-1. 초기 프로젝트가 생성 되어있지 않은 상태에서 생성 하고자 하는 디렉토리에 이동해 (Terminal) 다음 명령어를 쳐줍니다.

pod lib create (라이브러리 명)

1-2. 여러가지 설문에 응답합니다.

설문은 다음과 같습니다.

  1. 어떤 플랫폼을 사용할것인가?

  2. 어떤 언어를 사용할것인가?

  3. 데모앱 사용할것인가?

  4. 테스트는 어떤걸로 할것인가?

  5. 뷰 기반으로 테스트 할것인가?

 

* 해당 작업을 하면, 신규 프로젝트가 생성 되기에 기존에 만들어진 프로젝트 같은경우 2번과 같은 행위를 거쳐야 합니다. (기존 프로젝트에 pod 내용 옮기기) 

* 필자 같은경우 최초 SPM 프로젝트를 생성하고 GitHub 에 올린후 진행 했습니다.

* 만약 신규 프로젝트 생성후 바로 진행 하실려면 3번부터 보시면 됩니다.


2. 기존 프로젝트에 (pod 내용 옮기기)

설치한 프로젝트에서 해당 파일만 기존 프로젝트로 옮깁니다.

* 옮길 프로젝트명과 새로 만든 pod 프로젝트 명이 다를경우 상당히 골치가 아플수 있습니다.

  필자 같은경우, 다른 디렉토리에 동일한 프로젝트 명으로 만들고 옮겼습니다.

  • .podspec SPM의 Package.swift와 역할이 같으며, CocoaPods 디펜던시에 대한 핵심 사항을 설정하는 파일입니다. 
  • Example – 해당 라이브러리에 대한 예제 앱을 추가할수 있습니다.
  • LICENSE – 라이센스 파일
  • README.md – 리드미 파일

3. 배포하기

2번을 진행하지 않고, 3번을 진행할경우 ReplaceMe 파일을 라이브러리명.swift 로 변경 해주세요. 

해당 파일이 라이브러리 소스를 담당하는 친구입니다.

 

3-1. spec 파일 수정하기

2번 사항에서 옮긴 파일 (podspec) 파일을 연후 다음 내용을 수정합니다. 2번을 진행 안하셔도 한번 둘러보시는걸 추천 합니다.

  s.homepage         = 'https://github.com/MoongGi/TimeKit-pod-test'
  # s.screenshots     = 'www.example.com/screenshots_1', 'www.example.com/screenshots_2'
  s.license          = { :type => 'MIT', :file => 'LICENSE' }
  s.author           = { '김문기' => 'hihibibi00@naver.com' }
  s.source           = { :git => 'https://github.com/MoongGi/TimeKit-pod-test.git', :tag => s.version.to_s }
  # s.social_media_url = 'https://twitter.com/<TWITTER_USERNAME>'

  s.ios.deployment_target = '10.0'

  s.source_files = 'Sources/TimeKit/Classes/**/*'

필자는 homepage, source, author, source_file 수정 했습니다. 특히 s.source_file 중요하니 경로 잘 확인 하세요.

 

3-2. Example 에서 테스트 해보기

디렉토리 상에서 Example 로 이동하고 pod install 을 진행 합니다.

그리고, Git에 Push 처리 합니다.

 

3-3. 태그 생성

git 상에 상단 태그를 클릭합니다.

버전 내용을 입력후 (v 와 같은 문자열이 들어가면 안됩니다.) 생성진행합니다.

 

3-4. 이메일 인증

터미널에 다음 명령어를 입력 합니다 (이메일, 이름)

pod trunk register hihibibi00@naver.com kimmoongi
[!] Please verify the session by clicking the link in the verification email that has been sent to hihibibi00@naver.com

이메일을 받은후 해당 링크를 클릭합니다.

링크를 실행후 pod trunk push 입력하면 가능할꺼같지만, 그전에 검수를 진행 해야합니다. 

 

3-5. 검수

터미널상에 아래 명령어를 검색하면 알아서, 유효성 무결성 검사를 진행합니다.

pod lib lint --no-clean

 

이렇게 걸립니다.. 지긋지긋

 

해당 내용을 보아하니, source_files 에 문제가 있는것을 확인하여

3-1 에서 진행한 spec 의 내용을 변경 했습니다. (경로 중요!)

  s.source_files = 'Sources/TimeKit/**/*'

변경후 개같이 패스 완료.

 

3-6. 배포

검수 완료시 아래 명령어를 입력해 최종 배포를 진행합니다.

pod trunk push TimeKit.podspec --allow-warnings

 

아래 메세지 같은경우, 라이브러리 버전과 태그 버전이 알맞지 않아 발생한 문제 입니다.

버전 수정하고 재 배포 하면 끝입니다!


마치며

끝인데 왜? 마무리 이미지는 없냐구요?

왜냐면 최종 배포할때 동일한 이름을 가지고 있는 라이브러리가 있어, 최종 배포에는 실패 했습니다.

최초로 실패한 내용을 올리는 포스팅이지 않나 싶습니다. (SPM 에 만족중)

하지만, 해당 내용만 겹치지 않았으면 충분히 배포가 가능 했을꺼같아 포스팅 마저 진행합니다.

실제 필자가 만들고 싶은, 라이브러리 생성하여 배포가 완료했을때 다시 돌아오겠습니다. 

꼭 해당 프로젝트를 만들기전에 https://cocoapods.org/ 에 검색해서 프로젝트가 있는지 없는지 확인하세요!

 

-- 추가 --

2023.09.03 라이브러리 생성 성공

이번에는 검색해서 프로젝트가 있는지를 확인 했구 새로 진행하고 싶은 라이브러리를 만들고자 합니다.

 

첫번째 버전 릴리즈 할때 글 올리겠습니다.

 

긴글 읽어주셔서 감사합니다.


참고

http://yoonbumtae.com/?p=5011 

 

Swift Package Manager(SPM)와 CocoaPods를 동시에 대응하는 라이브러리 만들기 (1) - BGSMM

Swift Package Manager와 CocoaPods를 동시에 대응하는 라이브러리 만들기 (1) 전체 코드 https://github.com/ayaysir/BGSMM_DevKit   과정 Xcode에서 Swift Package Manager에 대응하는 Packag

yoonbumtae.com

https://fomaios.tistory.com/505

 

[iOS] 나만의 라이브러리 만들기(feat. CocoaPods)

안녕하세요 Foma 👟입니다! 평소에 라이브러리를 사용하고 언젠가 나만의 라이브러리를 만들어서 써봐야지했는데 드디어 그런 날이 오네요... 그래서 오늘은 자기만의 라이브러리를 만들고 사

fomaios.tistory.com