iOS

Custom SPM 제작기 part2.

Thor_yeom 2024. 6. 16. 18:38

 

바로 시작하겠습니다!

 

 

 

UIComponents 폴더 생성 -> BaseLabel 파일 생성 

 

 

하지만 Import UIKit을 하는 순간 Error 발생

 

어떤 Error인지 확인해보니

UIKit is not available when building for macOS. Consider using #if canImport(UIKit)
to conditionally import this framework.

 

: UIKit이 macOS에서 사용할 수 없음을 의미

 

 

 

해결방법으로는 조건문을 설정해주면 됩니다. 

 

# if canImport(UIKit)  ~ #endif

#if canImport(UIKit)
import Foundation
import UIKit

open class BaseLabel: UILabel {
    public init() {
        super.init(frame: .zero)
        self.text = "ExampleLabel"
    }
    // add
    
    public required init?(coder: NSCoder) {
        fatalError("init(coder:) has not been implemented")
    }
}
#endif

 

 

 

자 그렇다면 package.swift로 이동해서 마무리 지어 볼게요

 

.library로 UIComponents를 추가해주고

targets에도 만들어줄게요

 

 

 

프로젝트에 추가하게되면 이렇게 나옵니다.

 

 

 

SPM을 설치하고 적용해 볼게요 

 

자동 완성으로 잘 적용되는 것을 볼 수 있습니다. 

 

 

 

 

너무 쉽죠?? 

 

 

 

 

정리를 해보자면

폴더 생성 -> Base 파일 생성 -> package.swift 폴더 이동 -> products, targets에 만든 폴더명 추가 

 

이렇게 구성이 됩니다.

 

 

 

custom SPM만 깔아도 SnapKit이나 Alamofire를 한번에 깔 수 있는 방법은 어떤게 있을까요?

 

 

 

 

package.swift 파일에 dependencies를 추가할게요

 

 

여기에는 자동으로 설치되는 라이브러리를 git 주소만 있으면 추가할 수 있어요 

 

 

SnapKit을 예시를 들면 SnapKit GitHub에 들어가보면 SPM 설치하는 부분이 있어요

url을 복사해주세요

 

 

dependencies에 추가해줄게요

또한 CustomSPM을 설치하면 자동으로 SnapKit도 자동으로 설치 할 수 있데 dependence를 추가해 줄게요

 

 

자 이렇게 했는데... 기존 CustomSPM과 구분 짓기 위해 tag를 사용하여 버전 관리를 할 수 있어요 
마치 SnapKit에서 exact: 5.0.1 처럼요 

 

git tag // 현재 tag 버전 확인 

git tag 1.0.1 // tag Up 시키기
git add . // 모든 변경사항 올리기 
git commit -m "add version 1.0.1" // commit 메시지
git push origin main

 

 

이렇게 push 까지 맞췄다면 SPM이 적용된 프로젝트를 가서 확인해볼게요

 

 

 

음... 변한게 없네요... 분명 Snapkit을 존속 시켰는데 말이죠 ㅠㅠ

 

 

왜 아무런 변화가 없냐면 SPM은 업데이트가 되었는데 

현재 프로젝트는 업데이트가 되기전 버전이에요 그래서 적용되지 않은 것이에요

 

일단 수동으로 SPM을 업데이트 해줄게요 

 

 

 

Xcode -> File - > Packages를 보면 Update to Latest Package Versions

SPM을 업데이트 하게 되면 SnapKit이 설치되는 것을 볼 수 있어요 

 

 

 

CustomSPM을 만들어 놓으면 불필요하게 

프로젝트를 구성할때마다 Snapkit, alamofire, tabman 이런것들을 일일히 설치 안해도 되겠죠??

 

 

 

 

추후에는 현재는 CustomSPM이 업데이트 될때마다 프로젝트에서 수동으로 SPM을 업데이트 해주고 있는데,

CI / CD 중 CI를 사용하여 자동으로 관리 할 수 있게 해볼게요 
고생하셨습니다!