티스토리 뷰
안녕하세요 Diana 입니다.
오늘은 Tuist 를 통해 KakaoMapsSDK 를 사용할 때의 설정에서 나타나는 문제와 해결방법을 기록 해보려고 합니다.
Tuist 는 버전 4, KakaoMapsSDK는 버전 2를 사용합니다.
그럼 시작해볼까요?
우선 Tuist를 설치하고 프로젝트를 생성한 뒤 `tuist edit` 명령어를 통해 Manifest 파일을 실행해줍니다.
Manifest 파일은 이미 알고 있다시피 프로젝트와 워크스페이스를 정의하고 실행 프로세스를 명시하는 파일입니다.
즉 외부 프레임워크인 KakaoMapsSDK 를 사용하려면 Manifest에 설정을 해줘야겠죠?
✅ Tuist/Package.swift 설정
import PackageDescription
#if TUIST
import ProjectDescription
let packageSettings = PackageSettings(
// Customize the product types for specific package product
// Default is .staticFramework
// productTypes: ["Alamofire": .framework,]
)
#endif
let package = Package(
name: "DianaDemo",
dependencies: [
// Add your own dependencies here:
// .package(url: "https://github.com/Alamofire/Alamofire", from: "5.0.0"),
// You can read more about dependencies here: https://docs.tuist.io/documentation/tuist/dependencies
]
)
우선 디폴트로 생성되는 Package.swift 파일은 위와 같습니다.
외부 라이브러리나 패키지를 사용할 거면 여기에 설정을 해주라고 공식문서에 안내되어있는데요.
친절하게도 주석으로 예시까지 들어있네요!
주석을 보면 Alamofire를 사용하는 경우에는 PackageSettings에 productTypes로 사용할 프레임워크인 Alamofire 이름과 .framework를 명시해주면 된다고 합니다.
이제 여기서 문제가 발생합니다!!
KakaoMapsSDK를 사용할때는 위와 같이 .framework로 설정해주면 런타임 에러가 납니다!
이렇게 KakaoMapsSDK에서 제공해주는 코드인 KakaoMapsView의 KMViewContainer를 초기화 하는 부분에서 오류가 나더라구요.
게다가 KMViewContainer를 초기화하는 코드는 숨김처리 되어있어서 어떤 문제인지 확실히 특정하기 어려웠습니다...
Kakao가 공식 배포한 SDK인데 구현을 안하고 배포했을리도 없구요.
며칠간의 삽질을 한 결과 해결책을 찾아냈습니다 ㅠㅠ(인간승리..)
Manifest의 Package.swift 파일에서 KakaoMapsSDK의 설정은 아래와 같이 되어야 합니다.
import PackageDescription
#if TUIST
import ProjectDescription
let packageSettings = PackageSettings(
// Customize the product types for specific package product
// Default is .staticFramework
// productTypes: ["Alamofire": .framework,]
productTypes: ["KakaoMapsSDK-SPM": .staticLibrary]
)
#endif
let package = Package(
name: "DianaDemo",
dependencies: [
// Add your own dependencies here:
// .package(url: "https://github.com/Alamofire/Alamofire", from: "5.0.0"),
// You can read more about dependencies here: https://docs.tuist.io/documentation/tuist/dependencies
.package(url: "https://github.com/kakao-mapsSDK/KakaoMapsSDK-SPM", from: "2.10.5")
]
)
.framework가 아닌 .staticLibrary 였습니다!
코드를 확인해본 결과 해당 부분은 ProjectDescription.Product 타입으로 .framework와 .staticLibrary 외에도 아래와 같이 수 많은 타입이 존재하였습니다.
사용하려는 라이브러리나 프레임워크의 타입에 맞는 Product 값을 넣어주지 않으면 오류가 난다는 걸 직접 경험하여 깨닳았네요 ㅠㅠ
public enum Product : String, Codable, Equatable {
/// An application.
case app
/// A static library.
case staticLibrary
/// A dynamic library.
case dynamicLibrary
/// A dynamic framework.
case framework
/// A static framework.
case staticFramework
/// A unit tests bundle.
case unitTests
/// A UI tests bundle.
case uiTests
/// A custom bundle. (currently only iOS resource bundles are supported).
case bundle
/// A command line tool (macOS platform only).
case commandLineTool
/// An appClip. (iOS platform only).
case appClip
/// An application extension.
case appExtension
/// A Watch application. (watchOS platform only) .
case watch2App
/// A Watch application extension. (watchOS platform only).
case watch2Extension
/// A TV Top Shelf Extension.
case tvTopShelfExtension
/// An iMessage extension. (iOS platform only)
case messagesExtension
/// A sticker pack extension.
case stickerPackExtension
/// An XPC. (macOS platform only).
case xpc
/// An system extension. (macOS platform only).
case systemExtension
/// An ExtensionKit extension.
case extensionKitExtension
/// A Swift Macro
/// Although Apple doesn't officially support Swift Macro Xcode Project targets, we
/// enable them by adding a command line tool target, a target dependency in
/// the dependent targets, and the right build settings to use the macro executable.
case macro
...
.staticLibrary로 설정한 결과 KakaoMapsSDK를 Tuist에서 정상적으로 설정할 수 있었고 프로젝트도 성공적으로 돌아갔습니다!
혹시라도 이 부분에서 고생하고 계신 분들이 있다면 도움이 되길 바라며 기록을 마치겠습니다.
'Tuist' 카테고리의 다른 글
Tuist - Tuist v4 업데이트 (0) | 2024.06.02 |
---|
- Total
- Today
- Yesterday
- tuist v4
- 코어데이터
- reusablelist
- opaque
- 팁킷
- 스위프트
- ViewBuilder
- boxedprotocoltype
- Tuist
- asymptoticnotation
- BoxedType
- Algorithm
- private(set)
- ios
- capsulation
- opaquetype
- swift
- tipview
- kakaomapssdk
- boxedprotocol
- SwiftUI
- tipkit
- coredata
- 빅세타표기법
- swiftcoredata
- swiftpackage
- 개발자코테
- threadprogramming
- Concurrency
- 알고리즘
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |