바로 시작하겠습니다!
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를 사용하여 자동으로 관리 할 수 있게 해볼게요
고생하셨습니다!
'iOS' 카테고리의 다른 글
iOS Background Task 적용 ( 백그라운드에서 API 호출하기 ) (6) | 2024.07.23 |
---|---|
Custom SPM 제작기 part 1. (0) | 2024.06.16 |
RxSwift flatMap vs map 차이 (2) | 2023.11.17 |
새싹 iOS 3기 감동의 최종합격 (0) | 2023.07.12 |
iOS SDWebImage vs Kingfisher 비교 (0) | 2023.05.31 |