본문 바로가기
IOS App Programming/IOS 연습

[SPM 라이브러리 배포] 다크 모드 대응 커스텀 라이브러리 제작기

by B_Tori 2024. 6. 6.

최근 (사실 조금 됐지만) SPM을 통하여 다크모드 대응 라이브러리를 만들어 직접 사용도 할 겸 Public으로 배포한 경험을 소개해볼까 한다.

배포 방법은 Swift Package Manager 인 SPM 을 사용하여 배포하였다.

https://github.com/bangtori/DYColor

 

GitHub - bangtori/DYColor: Swift - UIColor, Color 다크모드 대응 다이나믹 컬러 생성 간편화 라이브러리

Swift - UIColor, Color 다크모드 대응 다이나믹 컬러 생성 간편화 라이브러리 - bangtori/DYColor

github.com

 

SPM으로 배포한 이유

  • 배포 방법이 간단하다! 깃허브에 올리기만 하면 끝
  • 다른 의존성 도구와 다르게 애플에서 제공하는 퍼스트파티 도구이기 때문에 더욱 매력적으로 다가와 꼭 지원해야겠다고 생각함

위와 같은 이유로 SPM을 통해 첫 배포를 이루었다. 하지만 코코아팟 또한 서드파티 도구이지만서도 대중적이기에 많은 라이브러리가 존재한다는 장점 또한 무시할 수 없기에 추후 코코아팟으로도 다운로드할 수 있도록 추가할 예정이다!

추가하게 된다면 SPM라이브러리에 코코아팟을 붙여 배포하는 방법도 추후 업로드,,, 할 수 있기를..

 

라이브러리를 만들게 된 동기

기획 초반부터 다크모드에 대한 준비 없이 개발과정에 들어가 중도에 다크모드를 준비하려 하면 굉장히 까다로운 과정을 거쳐야 했다.

특히 나 같은 경우는 에셋보다는 코드로 hex init Color 익스텐션을 추가해서 색깔을 추가하는 경우가 많았는데, 팀프로젝트 개발 당시 다크모드를 생각하지 않고 개발에 들어갔다가 실기기 테스트 시 다크모드로의 화면을 보았었고 다크모드 대응에 대해 모든 색상에 대해 대응하기에는 너무나 많은 시간과 코드가 추가되기 때문에 뒤늦게 백그라운드 및 흰색, 검정 글자들에 대해서만 급하게 고쳐 다크모드에서 화면이 읽힐 수 있도록 대응한 경험이 있다.

결국 이는 디자인상으로 별로인 것 같고 코드 상으로도 통일성을 헤치는 느낌이 든다는 피드백에 다크모드를 막게 되었다.

이후 개인 프로젝트에서도 다크모드에 대한 고민이 깊어지다 보니 모델로 만들어서 사용해 볼까?라는 아이디어와 함께 그렇다면 이 모델을 라이브러리로 배포하면 이후 모든 프로젝트에서 귀찮은 과정을 거치지 않고, 색상을 생성자에 주입해 주는 작업만으로도 다이나믹 컬러를 제공하는 에셋 효과를 낼 수 있을 것이라 생각이 들어 직접 배포하게 되었다.

 

라이브러리 생성 방법

라이브러리 패키지 생성하기

 

1. file - new - Package 선택

2. 라이브러리 선택

3. 라이브러리 이름과 위치를 정한 뒤 Create

 

다음과 같은 모습으로 패키지가 생성된 것을 확인할 수 있다.

Package.swift 파일은 패키지의 설정이 담긴 값이라고 보면 된다.

패키지의 이름, 라이브러리 지원 버전, 종속성 등을 추가할 수 있으며 외부 라이브러리에 대한 종속성을 추가해야 하는 경우 dependecies에 추가해 주면 됨.

 

이제부터 다시 내가 만든 라이브러리 코드로 돌아와서 보자면

나는 따로 외부 종속성으로 연결해 줄 것은 없었고 platforms: 를 통해 iOS 14 이상만 사용할 수 있도록 제한하였다.

(13 이상부터 다크모드를 지원하기도 하며, 라이브러리 내에서 사용하는 함수 중 1개가 14 버전 이상에서 사용하도록 되어있어 버전 점유율 상 14 버전도 괜찮을 듯하여 14 이상으로 설정하였다.
또한 WatchOS는 기본적으로 다크모드인 상태이고, 따로 모드가 나누어져있지 않아 지원하지 않았다. 

생각해 보니 WatchOS에서도 사용가능한 라이브러리로 제작하고, 기본으로 Watch에서는 다크모드에 설정된 색상을 반환하게 업데이트하면 좋을 듯하다.)

그리고 추가적으로 swiftLanguageVersions를 통해 지원하는 스위프트 언어 버전을 명시하였다.

 

그러고 Source - 프로젝트 네임 안에 작성할 코드파일들을 생성하여 작성하였다.

 

라이브러리를 작성할 때 주의할 점은 접근제어자 설정이다!

 

라이브러리는 해당 프로젝트(패키지 프로젝트) 내에서 사용하는 것이 아니라 외부에서 라이브러리를 다운로드하여 사용하기 때문에 외부에 제공할 기능들에 대해 public으로 설정해줘야 한다.

해당 코드는 UIColor를 입력받아 다이나믹 컬러로 반환해 주는 모델이다.

각각의 컬러 프로퍼티는 private으로 설정하여 직접 접근하지 못하도록 하였으며 get함수를 따로 만들어 설정한 컬러값을 반환받도록만 하였다.

그 외 외부에서 접근해야 할 주요 프로퍼티인 다이나믹컬러 프로퍼티와 생성자 등은 Public으로 작성한 것을 확인할 수 있다.

 

모두 작성 후 깃허브에 Public으로 업로드하면 나만의 오픈소스 라이브러리 배포에 성공한다!

추후 리드미 작성, 라이센스 관리 등 추가 작업을 조금 더 해주면 완벽한 오픈소스로 변신한다.

댓글