Xcode 12 부터는 Swift Package를 만들고, SwiftUI 코드를 추가해서 Preview 와 함께 쾌적한 SwiftUI View 개발을 하실 수 있습니다. WWDC20의 Swift packages: Resources and localization Session 에서 그 내용을 찾을 수 있습니다.
다만 Xcode 12 beta 6 에서는 몇 가지 문제를 해결하는 과정이 필요합니다.
TL;DR Xcode 12 beta 6 에서 Swift Package에 담은 SwiftUI View 를 Preview 해 보려면 오류가 발생하는데, 이를 해결하기 위해서는 Package.swift 의 Package.platforms 에 .iOS(.v13) 을 추가하고 Package 와 함께 생성되는 Test Target을 삭제해야 iOS Simulator 에서 SwiftUI Preview를 볼 수 있습니다.
Xcode 12 에서 Menu의 File > New > Swift Package … 를 선택해서 새로운 Package를 만든다음
SwiftUI 파일을 하나 추가 (Sources/<Package 이름> 폴더 에서 Menu 의 File > New > File 을 선택) 하면 준비가 끝납니다.
그런데 대부분의 경우, 이 글을 작성중인 현재의 최신버전인 Xcode 12 beta 6 에서는 아래처럼 오류가 발생해서 Preview 확인을 할 수 없는 문제를 만나게 됩니다.
View
type 을 찾을 수 없다거나some
return type은 iOS 13 이상에서만 사용가능하다는 오류
Cannot find type 'View' in scope
'some' return typs are only available in iOS 13.0.0 or newer
- Test Target 을 컴파일 할 수 없다거나 arm64-apple-ios-simulator를 찾을 수 없다는 등 일관적이지 않은 다양한 형태의 오류
…/View2/Tests/View2Tests/View2Tests.swift:2:18: error: could not find module 'View2' for target 'arm64-apple-ios-simulator'; found: x86_64-apple-ios-simulator
또는,
SchemeBuildError: Failed to build the scheme “MySwiftUIView”
no such module ‘MySwiftUIView’Compile MySwiftUIViewTests.swift (x86_64):
/Users/simon/Documents/workspace/SwiftUIPreview/MySwiftUIView/Tests/MySwiftUIViewTests/MySwiftUIViewTests.swift:2:18: error: no such module ‘MySwiftUIView’
‘View’ 와 ‘some’ return type 문제 해결
정확한 원인이 무엇이다 라고 확신할 수 는 없지만 제가 선택한 해결방법은 Package.swift의 Package.platforms 에 .iOS(.v13) 을 지정하는것 이었습니다.
Swift Package 를 만들면서 Xcode 12가 기본으로 만들어준 Package.swift 에 platforms: [.iOS(.v13)] 을 추가하면 ‘View’ type을 못찾거나 ‘some’ return type을 지원하지 않는다는 오류가 사라집니다. 물론 .macOS, .watchOS, .tvOS 등 Preview가 필요한 platform을 추가로 지정할 수도 있습니다.
하지만 이 방법으로 작성된 Swift Package는 Deployment Target 이 iOS 13 보다 낮은 App 프로젝트에서 사용할 수 없기 때문에 상용프로젝트에 이 Package를 사용하고자 할 때 문제가 될 수 있습니다.
예를들어 iOS 13 에서만 SwiftUI 기반의 View를 사용하고, 이전 버전의 iOS 에서는 다른 View를 사용하는 형태의 상용 프로젝트라면 이 Package를 포함할 수 없겠지요. Xcode Scheme 에서 Preview 를 위한 Platform 버전 을 지정할 수 있는 방법이 있다면 좋겠지만, 아직 찾지 못했습니다.
‘arm64-apple-ios-simulator’ 를 찾을 수 없다는 문제 해결
SwiftUI View 코드의 의 Preview를 시작하라고 했을뿐인데 arm64-apple-ios-simulator를 찾을 수 없다는 오류가 발생합니다. 저는 아직(?) x86_64 Macbook Pro를 사용하고 있는데 말이죠.
자세한 내막은 알 수 없지만 오류가 발생한 빌드 로그를 보면 arm64 와 x86_64 target에서 Testing module 을 컴파일 하려는 시도가 목격됩니다.
Swift Package 를 만들거나 열어서 SwiftUI View를 Preview를 하는 지금과 같은 상황에서는 보통의 App 프로젝트 처럼 빌드/실행 관련 설정을 할 수 있는곳이 없기 때문에 제가 선택할 수 있는 방법이 많지 않았습니다. Xcode 12 정식 버전에서는 해결되기를 기대 해 봅니다.
빌드가 안되면 지우자(?)
제가 선택한 방법은, 어떻게든 Preview를 봐야했기에, Package.swift 에서 Test Target을 지우는것입니다.
찜찜하지만 어쩔 수 없습니다. 기분좋은 해결책은 다음기회에.
다양한 Platform 에서의 Preview
위 두 가지 문제를 해결하고 나면 iOS 뿐만 아니라 macOS, watchOS, 혹은 tvOS 에서도 Preview를 보면서 SwiftUI View 개발을 계속하실 수 있습니다.
이상입니다.