1. 문제 상황
구글 로그인을 위해 데이터 레이어를 모두 임시 구현해두고 테스트를 하는데 No endpoint 경고가 뜸
NSLocalizedDescription=특정 호스트 이름을 가진 서버를 찾을 수 없습니다.
분명 baseURL을 xcconfig에 넣고 이를 info.plist에 등록해서 가져다가 쓴건데...?
라우터 패턴 내부에
var baseURL: URL {
guard let url = URL(string: NetworkConstants.baseURL) else {
fatalError("Invalid base URL")
}
print("baseURL은 \(url)입니다")
return url
}
// 생략 ...
func asURLRequest() throws -> URLRequest {
let url = baseURL.appendingPathComponent(path)
print("최종 url: \(url)")
var request = try URLRequest(url: url, method: method)
request = try encoding.encode(request, with: parameters)
return request
}
각 파트마다 print를 찍어보았는데 baseURL: https: 까지만 찍힘.
왜..?
2. 문제 해결
xcconfig 파일 내에서 예시로
BASE_URL = https://abc.com
이 형태로 넣어두게 된다면 / 기호 두번이 주석으로 인식하게 만들고 결국 https:까지만 BASE_URL로 저장되는 것이다.
이때 $()라는 문자를 넣어 트릭을 걸어준다.
BASE_URL = https:/$()/abc.com
$() 이런거 맨날 보던건데? 뭐지?
$()는 Xcode의 빌드 시스템에서 변수 값을 동적으로 치환할 때 사용하는 문법이다. 빌드 시점에 $(변수명)이 실제 값으로 대치된다.
info.plist만 봐도 <string>$(BASE_URL)</string> 같은 표현을 하는 것을 알 것이다.
아무 값이 없는 $()을 두 슬래시(/) 사이에 끼워넣어 같이 인식되지 않게 만들고 중간엔 빈값이기에 결국 제대로된 URL 값을 저장할 수 있게 하는 것이다.
어쩐지 xcconfig에 url 저장할때 //이후로 색이 바뀌더라니 바로 넘기지 말고 어떤 현상인지 조금 더 지켜봤으면 좋았을 것 같다.
'iOS > Swift' 카테고리의 다른 글
[25.08.14] MOUP 리팩토링 및 트러블슈팅 - 동적 높이를 가지는 테이블뷰 셀 (3) | 2025.08.14 |
---|---|
[25.07.31] MOUP 트러블슈팅 - tableHeaderView 레이아웃 제약 경고 (2) | 2025.07.31 |
[25.06.24] MOUP 트러블슈팅 - Listener와 Rx의 timeout (0) | 2025.06.24 |
[TIL / 25.05.27] 날씨 앱 main 페이지 구조 트러블슈팅 (5) | 2025.05.27 |
[TIL / 25.05.18] 의존성 주입 담당 DIContainer를 처음 적용해보았습니다 (4) | 2025.05.18 |