在 macOS 上直接运行一个 SwiftUI 应用(或任何 SwiftUI 视图),并将其置于 iPhone 模拟器的“外壳”中!
需要明确的是,这不是一个 iPhone 模拟器(也不是任何形式的模拟)。 而是,对于那些小心翼翼编写 iOS 应用,而没有依赖任何平台特定库(例如 UIKit)的开发者来说,您可以将此视为您的回报:一种为 macOS 构建该应用程序并在任何 Mac 上以光速(相比于真正的 iPhone 模拟器而言)运行它的方法,无需 Xcode 或开发工具。
SwiftUIPhone 兼容目标平台为 macOS 11+ 的应用程序。
SwiftUIPhone
可以作为一个 Swift Package 使用。 要在您的项目中使用它,请将其添加到您的项目的 Swift Packages 中
https://github.com/JUSTINMKAUFMAN/SwiftUIPhone.git
SwiftUIPhone
可以如下使用
import SwiftUI
import SwiftUIPhone
@main
struct SwiftUIPhoneDemoApp: App {
@SwiftUI.Environment(\.colorScheme) var colorScheme
let appName: String = "SwiftUIPhone Demo"
@SceneBuilder var body: some Scene {
WindowGroup {
VStack(alignment: .center) {
Button("Launch SwiftUIPhone") { launch() }
}.padding()
}
}
func launch() {
let window = NSWindow(
contentRect: NSRect(x: 0.0, y: 0.0, width: 400.0, height: 809.0),
styleMask: [.titled, .closable, .miniaturizable],
backing: .buffered,
defer: false
)
let view = SwiftUIPhone(
rootView: AnyView(
VStack(alignment: .center) {
Text("This is the root view of my app")
}
.background(colorScheme == .dark ? Color.black : Color.white)
)
)
window.titlebarAppearsTransparent = false
window.hasShadow = false
window.isOpaque = false
window.backgroundColor = NSColor.clear
window.center()
window.setFrameAutosaveName("\(appName).MainWindow")
window.title = appName
window.isReleasedWhenClosed = false
window.contentView = NSHostingView(rootView: view)
window.makeKeyAndOrderFront(nil)
}
}
Justin Kaufman
邮箱 | jmkauf@gmail.com
Twitter | @JUSTINMKAUFMAN
SwiftUIPhone 使用 MIT 许可证。 更多信息请参见 LICENSE 文件。