목차
스유를 하다보면 Preview가 아주 유용하다는 것을 알 수 있다.
일일이 시뮬을 구동하여 확인하지 않아도 되고, 셀렉터블 프리뷰를 이용하여 컴포넌트들이 차지하는 공간을 확인할 수 있는 것이 특히 장점이다.
평소 프리뷰 크래시를 많이 겪었던 사례
MVVM 패턴에서 EnvironmentObject를 사용할 때이다.
하위 뷰에서 객체를 쓰고, 상위뷰에서 객체를 안쓴다고 프리뷰에 .environmentObject를 안써줬다간 바로 크래시가 난다.
관련해서는 따로 글을 작성했다.
SwiftUI) Preview 크래시 발생 사례 (EnvironmentObject)
스유를 사용하다보면 Preview에서 크래시가 종종 일어난다. 사실 이전에 Preview 크래시 관련 글을 작성했었는데, 그땐 일반적인 문제보다 특수 경우였고 xcode 버그로 판명났다. 근데 그 글이 구글에
yahoth.tistory.com
내가 겪은 사례
잘 사용하고 있었는데(UIKit에 익숙한 몇몇 친구들은 잘 안쓰기도 하더라), 프로젝트를 진행하던 도중 원인 모를 Preview Crash가 발생했다. 처음엔 코어데이터로 인해 프리뷰에 오류가 생긴 줄 알았지만 코드를 하나하나 소거해보고 프로젝트를 새로 만들었는데도 오류가 사라지지 않았다
문제의 코드
문제는 toolbar의 버튼을 통해서 sheet를 열려고 할 때 발생했다.
struct SwiftUIView: View {
@State var isSheetShowing = false
var body: some View {
NavigationStack {
VStack {
Text("상단의 버튼을 누르면 시트가 올라와야함")
}
.toolbar {
Button("add") {
isSheetShowing.toggle()
}
}
.sheet(isPresented: $isSheetShowing) {
EmptyView()
}
}
}
}
구글링해봤지만 관련한 글을 찾을 수 없었다.
그래서 StackOvewFlow에 질문을 올렸다. 질문: 링크
SwiftUI) Preview crashes when trying to open a sheet with the button on the Tool bar
struct SwiftUIView: View { @State var isSheetShowing = false var body: some View { NavigationStack { VStack { Text("hello") } ...
stackoverflow.com
하지만 질문에도 해결책을 찾을 수 없어서, 조금 더 근본적으로 해결해보려고 한다.
Preview crash의 원인을 chatGPT한테 물어봤다.
1️⃣ 첫 번째, 코드는 단순하기 때문에 문제가 되지 않는다. 혹시 몰라 toolbar안에 ToolbarItem도 넣어보고, depreacate된 navigationBarItems도 해보았는데 전부 작동하지 않았다.
2️⃣ 두 번째와 4️⃣ 네 번째의 경우, 특정 상황에만 크래시가 발생되기 때문에 설정문제라고 할 수 없다. 그리고 3개 프로젝트에서 테스트해봤는데 모두 동일했다.
가장 유력한 것은 3️⃣ 세 번째이다. 구글링을 통해 preview crash 상황에 해결한 경우를 찾아보았다.
시도한 것들
- DerivedData 삭제 참고
- 프리뷰 기기 변경
- [ xcrun simctl --set previews delete all ] 코드를 통해 프리뷰 설정 전부 삭제 참고
- Library-Xcode-UserData-Previews 폴더의 Simulator Devices 안의 데이터 전부 삭제
결론
시도한 것들 중 위의 3개는 효과가 없었고.
마지막 항목을 시도했을 때, 아래 표시를 나타내며 프리뷰가 무한 로딩되었다.
Preparing Iphone Simulator for Previews
툴바와 관련된 것은 내가 올린 글이 답변을 달아주신 분 중에, 비슷한 상황이신 분이 계셨다.
그 분의 말에 의하면 일종의 버그라고 생각된다. 일단 시뮬레이터에선 정상 작동되니,
해결이 된다면 관련 글을 작성하겠다.
문제 해결
--------------------------------------------------------Solved--------------------------------------------------------
2024.1.17 프로젝트를 다시 확인해보니 프리뷰가 정상 작동함. Xcode 버그로 추정
'SwiftUI' 카테고리의 다른 글
SwiftUI) Preview 크래시 발생 사례 (EnvironmentObject) (0) | 2024.01.17 |
---|---|
SwiftUI)토스 주식 탭 애니메이션 구현하기 (3) | 2023.06.06 |
SwiftUI) 토스 애니메이션 구현해보기 (0) | 2023.05.23 |
[이해하기 어려웠던 개념] filter (feat. 연산프로퍼티, Toggle) (0) | 2022.12.08 |