DynamicUI
DynamicUI copied to clipboard
Create a SwiftUI user interface through a JSON file. The JSON file will contain the structure of the user interface, and the program will create the user interface based on the JSON file.
DynamicUI
Create a SwiftUI user interface through a JSON file. The JSON file will contain the structure of the user interface, and the program will create the user interface based on the JSON file.
Requirements
- Swift 5.9+ (Xcode 15+)
- iOS 15+, macOS 12+, tvOS 14+, watchOS 7+, macCatalyst 15+, visionOS 1.0+
Installation
Install using Swift Package Manager
dependencies: [
.package(url: "https://github.com/0xWDG/DynamicUI.git", branch: "main"),
],
targets: [
.target(name: "MyTarget", dependencies: [
.product(name: "DynamicUI", package: "DynamicUI"),
]),
]
And import it:
import DynamicUI
Usage
import SwiftUI
import DynamicUI
struct ContentView: View {
let json = """
[
{
"type": "Text",
"title": "Wait, am i generating views from JSON?",
"modifiers": {"foregroundStyle":"red","opacity":0.6}
},
{
"type": "Button",
"title": "Click me",
"eventHandler": "customHandler"
},
{
"type": "Toggle",
"title": "Toggle me",
"identifier": "my.toggle.1"
}
]
""".data(using: .utf8)
@State private var component: DynamicUIComponent?
@State private var error: Error?
var body: some View {
DynamicUI(
json: json,
component: $component,
error: $error
)
}
}
Usage (Legacy)
import SwiftUI
import DynamicUI
struct ContentView: View {
let json = """
[
{
"type": "Text",
"title": "Wait, am i generating views from JSON?",
"modifiers": {"foregroundStyle":"red","opacity":0.6}
},
{
"type": "Button",
"title": "Click me",
"eventHandler": "customHandler"
},
{
"type": "Toggle",
"title": "Toggle me",
"identifier": "my.toggle.1"
}
]
""".data(using: .utf8)
@State private var error: Error?
var body: some View {
DynamicUI(
json: json,
callback: { component in
// This contains everything passed as a component (type, title, identifier, ...)
print(component)
},
error: $error
)
}
}
Playground Application:
In the directory Playground is a Xcode project to build the Playground Application
The playground application is available for macOS, iOS, watchOS, tvOS and visionOS.
Supported SwiftUI Views
See the list in the documentation over here
Images
Playground
V0.0.1 in action
Used By
- Aurora Editor for custom views in extensions.
Contact
๐ฆ @0xWDG ๐ mastodon.social/@0xWDG ๐ฆ @0xWDG ๐งต @0xWDG ๐ wesleydegroot.nl ๐ค Discord