SwiftUIPhone

Version License Platform

在 macOS 上直接运行一个 SwiftUI 应用(或任何 SwiftUI 视图),并将其置于 iPhone 模拟器的“外壳”中!

需要明确的是,这不是一个 iPhone 模拟器(也不是任何形式的模拟)。 而是,对于那些小心翼翼编写 iOS 应用,而没有依赖任何平台特定库(例如 UIKit)的开发者来说,您可以将此视为您的回报:一种为 macOS 构建该应用程序并在任何 Mac 上以光速(相比于真正的 iPhone 模拟器而言)运行它的方法,无需 Xcode 或开发工具。

SwiftUIPhone Screenshot

兼容性

SwiftUIPhone 兼容目标平台为 macOS 11+ 的应用程序。

安装

Swift Package Manager

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 文件。