์๋ ํ์ธ์ Foma๐ ์ ๋๋ค!
์ผ๋ง ์ ์ ์ ํ๋ธ์์ ๋งํ๊ฒฝ iOS ๊ฐ๋ฐ๊ธฐ๋ฅผ ๋ณด๋ค๊ฐ (https://www.youtube.com/watch?v=W_1FoBtaV7A)
UI๋ฅผ ๊ฐ๋ฐํ๋๋ฐ ์คํ ๋ฆฌ๋ณด๋์ ์ฝ๋๋ก ๊ตฌํํ๋ ์ฅ๋จ์ ์ ๋ชจ๋ ์ด์ฉํ ์ ์๋๊ฒ UIKit์์ Preview๋ฅผ
์ฌ์ฉํ๋ ๊ฒ์ด๋ผ๊ณ ํ๋๋ผ๊ตฌ์.
Preview๋ฅผ ์ฌ์ฉํ๋ฉด ์ฝ๋๋ก ํ๋ฉด์ ๊ตฌํํ๋๋ผ๋ ์ง๊ด์ ์ผ๋ก ํ๋ฉด์ ๋ณผ ์ ์๊ณ ๋ํ ์คํ ๋ฆฌ๋ณด๋๋ก ๊ฐ๋ฐํ ๋
์๊ธฐ๋ ์ถฉ๋ ๋ฌธ์ ๋ฑ์ ์์ ์ค ์ ์๊ธฐ ๋๋ฌธ์ด์ฃ !
๊ทธ๋์ ์ค๋์ UIKit์์ Preview๋ฅผ ์ด๋ป๊ฒ ์ ์ฉํ๋์ง์ ๋ํด ์์๋ณด๊ฒ ์ต๋๋ค~
UIViewController + Extension
์๋์ ๊ฐ์ด ํ๋ฆฌ๋ทฐ ์ต์คํ ์ ์ ๋ง๋ค์ด์ค์ ์ด๋ค ๋ทฐ์ปจํธ๋กค๋ฌ์์๋ ์ธ ์ ์๊ฒ ๋ง๋ค์ด์ค๋๋ค.
import SwiftUI
#if DEBUG
extension UIViewController {
private struct Preview: UIViewControllerRepresentable {
let viewController: UIViewController
func makeUIViewController(context: Context) -> UIViewController {
return viewController
}
func updateUIViewController(_ uiViewController: UIViewController, context: Context) {
}
}
func toPreview() -> some View {
Preview(viewController: self)
}
}
#endif
ViewController
๋ทฐ์ปจํธ๋กค๋ฌ๋ก ์ด๋ํด์ import SwiftUI๋ฅผ ํด์ฃผ์๊ณ
์๋์ PreviewProvider๋ฅผ ๋ง๋ค์ด์ค ๋ค ํด๋น ViewController๋ฅผ toPreview() ๋ฉ์๋๋ก ํ๋ฆฌ๋ทฐ๋ฅผ ๋ง๋ค์ด์ค๋๋ค.
import SwiftUI
struct VCPreView:PreviewProvider {
static var previews: some View {
ViewController().toPreview()
}
}
์คํ ๋ฆฌ๋ณด๋์ผ ๊ฒฝ์ฐ
์คํ ๋ฆฌ๋ณด๋ ์์ด๋๋ฅผ ์ ํด์ฃผ์๊ณ
์๋์ ๊ฐ์ด ์ ์ฉํด์ค๋๋ค.
struct VCPreView:PreviewProvider {
static var previews: some View {
UIStoryboard(name: "Main", bundle: nil).instantiateViewController(identifier: "ViewController").toPreview()
}
}
์ด๋ ๊ฒ ์คํํด์ฃผ์๋ฉด ์๋์ ๊ฐ์ด ํ๋ฆฌ๋ทฐ ํ๋ฉด์ด ๋ํ๋ ๊ฑธ ๋ณผ ์ ์์๊ฑฐ์์!
ํ๋ฆฌ๋ทฐ ์ธ๋ถ ์ค์ ํ๊ธฐ
ํ๋ฆฌ๋ทฐ ํ๋ฉด์์ ์์ชฝ์์ ์๋ ๋ฒํผ์ ๋๋ฅด๋ฉด
์ด๋ฆ,๋๋ฐ์ด์ค,๋ ์ด์์,๋ฐฉํฅ ๋ฑ์ ์กฐ์ ํ ์ ์์ต๋๋ค.
์๋ ๋ฒํผ์ ๋๋ฅด์๋ฉด ๋๋ฐ์ด์ค๋ฅผ ์ฌ๋ฌ๊ฐ ๋ง๋ค ์ ์๋๋ฐ์.
ํ๋ฒ ๋๋ฅผ ๋๋ง๋ค ์๋์ ๊ฐ์ด ๋๋ฐ์ด์ค๊ฐ ์ฌ๋ฌ๊ฐ ์์ฑ๋ฉ๋๋ค.
์ ๋ฒํผ๋ค์ ํด๋ฆญํ๋ฉด ์๋์ผ๋ก ์ฝ๋๊ฐ ์์ฑ๋๋ ๊ฒ์ ๋ณผ ์ ์์๊ฑฐ์์.
struct VCPreView:PreviewProvider {
static var previews: some View {
Group {
ViewController()
.toPreview()
.previewDevice("iphone 8")
.previewDisplayName("์์ดํฐ 8")
ViewController()
.toPreview()
.previewDevice("iPhone 12 Pro")
.previewDisplayName("์์ดํฐ 12 ํ๋ก")
.preferredColorScheme(.dark)
}
}
}
์๋ก ๋ค๋ฅธ ์ด๋ฆ๊ณผ ๋๋ฐ์ด์ค ๋คํฌ๋ชจ๋ ๋ฑ์ ์ ์ฉํ๋ฉด ์๋์ ๊ฐ์ด ํ๋ฆฌ๋ทฐ๋ฅผ ๋ณผ ์ ์์ต๋๋ค.
์ค๋์ ์ด๋ ๊ฒ UIKit์์ ํ๋ฆฌ๋ทฐ๋ฅผ ์ฌ์ฉํ๋ ๋ฐฉ๋ฒ์ ๋ํด์ ์์๋ณด์์ต๋๋ค.
์ฝ๋๋ฅผ ์์ฑํ์๋ง์ ๋ฐ๋ก ํ๋ฉด์ ํ์ธํ ์ ์๊ณ ์๋ก ๋ค๋ฅธ ๋๋ฐ์ด์ค์์ ์ด๋ป๊ฒ ๋ณด์ด๋์ง ๋ฐ๋ก ํ์ธํ ์ ์์ด์
ํ์คํ ํธ๋ฆฌํ๊ณ ๊ฐ๋ฐ ์๋๋ ํฅ์๋์์ต๋๋ค.
ํ์ง๋ง ํ๋ฆฌ๋ทฐ๊ฐ ๋๋ฐ์ด์ค ์ ์ฉ๋๋ ์๊ฐ์ด ์ค๋๊ฑธ๋ฆด ๋๋ ์๊ณ ๋ก๋ฉ์ด ์ค๋ ๊ฑธ๋ฆด ๋๋ ์๊ณ ํฌ๋์ฌ๋ ์์ฃผ ๋๊ณ
ํ๋๋ผ๊ตฌ์.. (์ด๊ฑด ์ ์ ๊ฐ์ ๋ ๊ฑฐ๋ผ๊ณ ์๊ฐํฉ๋๋ค!)
ํน์๋ผ๋ ๊ถ๊ธํ์ ์ ์์ผ์๋ฉด ๋๊ธ๋ก ์๋ ค์ฃผ์ธ์!
Reference
Use Xcode Previews with UIKit
Prerequisite: You will need macOS Catalina (10.15)+ and Xcode 11+ to run Xcode Previews.Apple introduced Xcode Previews in WWDC 2019 alongside with SwiftUI, which allow us to view UI changes immediately after each change, instead of needing to recompile th
fluffy.es
๋๊ธ