guard let a = b else { return }
이런 코드의 경우 옵저버 바인딩에 실패한다면 어디서 오류가 발생하였는지 알기 힘들다.
그래서 return 전에 log를 찍어, 값을 추적해줄 필요가 있다.
1. os_log
import OSLog
os_log("에러 발생")
그런데 이를 쓰려면 모든 파일에 import OSLog 를 하여야한다.
따로 객체로 분리해주는 편이 좋을 것이다.
2. Logger : 에러 발생 부분 바로 알 수 있는 방법
OSLog에서 제공하는 logger 객체를 활용해보자.
enum Log {
func make() -> Logger {
return Logger()
}
}
logger 객체는 logger 객체가 생성된 부분에서의 위치로 이동해준다.
guard let title = jsonDict["title"] as? String,
let milestoneData = jsonDict["milestone"] as? [String : Any], let milestone = milestoneData["title"] as? String,
let jsonLabelDicts = jsonDict["labels"] as? [[String : Any]] else {
logger.make().debug("can't find title, milestone, labels")
return nil
}
에러마다 해당 객체가 생성되어야 그곳으로 이동할 수 있기 때문에 모든 에러마다 logger 객체를 생성한 후, debug 메세지를 띄워야한다.
3. 에러가 발생한 곳으로 바로 이동하기
콘솔 창의 맨 아래, 왼쪽에서 두 번째에서 category란에 체크표시를 하면
에러 메세지에 마우스를 올리면 어느 Swift 파일에서 찍힌 에러인지 알려준다.
추가. Default라고 뜨는 이름을 다르게 지정해주고 싶다면?
func make() -> Logger {
return Logger(subsystem: <#T##String#>, category: <#T##String#>)
}
Logger 객체를 생성하는 시점에서, category Enum 타입을 만들어서 해결해줄 수 있다.
'🍎 Apple > iOS' 카테고리의 다른 글
[iOS] NSCoding, 내 마음 속에.. 아니 Data에 저장하고 싶을 때 (0) | 2023.10.22 |
---|---|
[iOS] required init?(coder: NSCoder) 이게 뭔데 자꾸 만들어줘 (0) | 2023.10.22 |
[iOS] struct도 encoding을 해야한다. (0) | 2023.10.01 |
[iOS] 가로모드만 지원하도록 설정하는 방법 (0) | 2023.09.25 |
[iOS] multiple scene 설정하기 (0) | 2023.09.21 |