brunch

You can make anything
by writing

C.S.Lewis

by Tilltue Sep 26. 2020

Swift Package 에 리소스 추가하기

Swift Package Manager

Swift Package Manager (이하 SPM) 에서 번들 리소스 포함이 가능하도록 변경되어서 기존에 가지고 있던 오픈소스에 SPM을 넣어보았고, 해당 내용을 공유하고자 한다.


(XCode 12 사용)



일단 할일은 Package.swift 를 소스 저장소에 위치시키기만 하면 된다.

이 Package.swift 파일에 필요항목들을 정의만 하면 끝~


https://docs.swift.org/package-manager/PackageDescription/index.html

api 명세는 여기서 확인할수 있다.



시작 !

일단 Package.Swift 를 위와 같이 단순하게 작성하고 올리고 파인더에서 Package.swift 파일을 실행하면 위와 Swift Package 프로젝트로 열리게 된다.


// swift-tools-veresion:5.3  

주석이지만 이 부분은 SPM에서 해석하는 라인이며 번들 리소스를 포함시키기 위해서는 5 이상이 필요하다.


이제 api 문서를 보면서 필요한 것들을 넣어주면 된다.

최종적으로 만들어진 내용이다.

이 오픈소스는 9.1 이상이 필요했기 때문에

platforms 에  .iOS(v10)으로 정의되어있다. ( 마이너 버전은 지원하지 않고있음 mac 은 하던데 ... )


product 항목은 라이브러리의 이름과 타겟을 정의하는 부분이다. 이어지는 targets 와 연관이 있다.


targets 에서 path 를 지정해주면 해당 path 의 파일들이 포함된다. 엄격하게 소스 파일을 넣어주고 싶다면 해당 방법도 있으니 api 문서를 보고 적절히 넣어주면 된다.


exclude 는 위에 포함된 파일중에 제외하고 싶은 path 를 넣어주는 부분이다.

cocoapods , carthage 에서 사용하는 번들과 구분하기 위해 TLBundle.swift 를 제외한 모습니다.


이 부분은 아래 보충 설명.


resources 에 리소스를 넣어줄수있다.

xib 등과 Assets 등 원하는 파일을 넣는다.



Swift Package Manager 에서는 번들을 불러오는 부분이 다르다.

이렇게 Bundle.module 을 사용해야 한다.

이게 (SPM만을 지원하도록 구성하지는 않을것이므로) exclude 에 TLBundle.swift (기존에 Bundle 에서 로드하는 방식 ) 파일을 제외한 이유이다.



Swift Package Manager 의 여러 api 를 설명하거나, 사용하는 방법에 대한 글들은 공식 문서나 , 다른 여러 블로그 글들에서 접할수 있을것 같다.

여기서는 기존에 코코아팟에서 번들을 로드하는 방식과 SPM의 다른 방식에 대한 부분들을 어떻게 호환할 것인지 그 방법중의 하나를 위와 같이 정리해봤다.


마침.

브런치는 최신 브라우저에 최적화 되어있습니다. IE chrome safari