swift

DropDown 오픈소스 라이브러리 만들기

motosw3600 2022. 8. 10. 19:08

cocoapods, SPM등 오픈소스 라이브러리들을 많이 사용해 보면서 오픈소스 라이브러리에 관심이 생겼고 직접 만들어 보고싶다는 생각이 들었다. 만들어볼 라이브러리는 DropDown으로 이전 프로젝트에서 iOS에서 기본적으로 제공해주지 않아 외부 라이브러리를 사용했던 기억이 있는데 이번 기회에 custom하게 만들어 사용해보도록 하겠다.

라이브러리 만들기

먼저 프로젝트를 만들 경로로 이동하여 pod lib create '라이브러리이름' 으로 생성

 

$ pod lib create '라이브러리이름'

위와같이 만들면 아래와 같이 기본 설정에 대해 묻고 용도에 맞게 설정한다. 

 

 

생성하면 아래와 같이 프로젝트가 생성되며 Example for DropDownSw에서 테스트도 가능하다.

Pods-Development Pods-DropDwonSw-ReplaceMe.Swift에 라이브러리 기능을 작성하여 사용.

(보통 다른 파일을 생성하거나 이름변경해서 사용)

 

Github과 연결하기

github에 들어가서 라이브러리 repo를 만들고 만들었던 프로젝트와 연결

 

$ git remote add '추가한 repo'
$ git push -u origin main

저장소에 추가된 모습

 

 

코드 작성 후 배포하기

DropDownSw소스를 작성한 뒤 podspec파일을 확인하고 태그를 생성

(태그가 있어야 cocoapods배포 가능)

0.1.0 버전의 태그를 설정한 뒤 pod spec lint로 배포 설정 확인

 

 

(WARN까지는 배포가 가능하고 Error가 뜬다면 설정을 다시 확인해야 한다.)

cocoapod 계정 생성

cocoapods계정을 생성한다.

 

$ pod trunk register {메일주소} {id}

 

메일 인증후 최종적으로 cocoapods에 배포

 

$ pod trunk push

 

 

성공적으로 배포가 된 것을 확인할 수 있다.

 

+이슈사항

현상

라이브러리를 작성하는 도중 드롭다운 토글되는 이미지를 Embed해야하는 이슈 발생

처음시도한 방법으로는 Asset을 만들고 이미지를 추가하여 기존 UIImage(named: )로 이미지를 가져오려고 시도

하지만 디버깅시 UIImage가 nil값이 들어와 이미지를 불러오지 못하는 이슈가 발생

 

해결방안

cocoapods에 Resource를 Embed할 때는 Bundle로 이미지를 가져와야한다는 글을 찾아 Bundle주소로 이미지를 가져오도록 변경

 

UIImage(named: "arrow.triangle.down", in: Bundle(for: DropDownSw.self), compatibleWith: nil)

 

podspec에도 resources와 resource_bundles추가

 

s.resources = ['DropDownSw/Assets/*.png']
s.resource_bundles = {
  'DropDownSw' => ['DropDownSw/Assets/*.png']
}

 

How to load resource in cocoapods

 

 

Library Link: https://github.com/motosw3600/DropDownSw

'swift' 카테고리의 다른 글

Wrapped Image Text  (0) 2022.10.10
Biometric Authentication  (0) 2022.08.31
Custom ScrollPaging  (0) 2022.06.05
RxDataSources  (0) 2022.05.07
RxSwift UnitTest 해보기(RxTest, RxNimble)  (0) 2022.03.10