markbattistella/swiftdatapreviewer
`SwiftDataPreviewer` is a lightweight Swift package designed to simplify SwiftUI previews using SwiftData. It provides an **in-memory model container** for use in `DEBUG` builds, allowing you to preview your SwiftData-powered views with sample data.
Features
- Seamless SwiftData Previews: Easily inject a
ModelContainerinto your SwiftUI previews. - In-Memory Storage: Prevents persistent data pollution while testing.
- Automatic Sample Data Insertion: Quickly preview lists and other data-driven views.
- Developer-Friendly API: Just wrap your view with
SwiftDataPreviewer.
Installation
Add SwiftDataPreviewer to your Swift project using Swift Package Manager.
dependencies: [
.package(url: "https://github.com/markbattistella/SwiftDataPreviewer", from: "1.0.0")
]Alternatively, you can add SwiftDataPreviewer using Xcode by navigating to File > Add Packages and entering the package repository URL.
Recommended Usage
[!NOTE]
SwiftDataPrevieweris designed for SwiftUI previews only and is not meant for production usage. It provides an in-memoryModelContainerthat is automatically configured for SwiftData-powered views.
Usage
- Define a SwiftData Model
Ensure your SwiftData model conforms to PersistentModel:
```swift import SwiftData
@Model final class Item { var timestamp: Date
init(timestamp: Date) { self.timestamp = timestamp } } ```
- Create a Preview Container (optional)
Define a PreviewContainer with the model types you want to include:
```swift #if DEBUG import SwiftDataPreviewer
final class Previewer { let previewContainer = PreviewContainer(Item.self) } #endif ```
- Use
SwiftDataPreviewerin Your Previews
Wrap your SwiftUI view in SwiftDataPreviewer and pass sample data:
```swift #if DEBUG import SwiftUI import SwiftData
struct ItemListView: View { @Query private var items: [Item]
var body: some View { List(items) { item in Text(item.timestamp, style: .date) } } }
// Pre-Xcode 15 struct UserListView_Previews: PreviewProvider { static var previews: some View { SwiftDataPreviewer( preview: Previewer.previewContainer, items: [ Item(timestamp: Date()), Item(timestamp: Date()), Item(timestamp: Date()), ] ) { ItemListView() } } }
// Post-Xcode 15 #Preview("Array items") { SwiftDataPreviewer( preview: PreviewContainer(Item.self), items: Item.mockItems ) { ItemListView() } }
#Preview("Single item") { SwiftDataPreviewer( preview: Previewer.previewContainer, item: Item.mockItem ) { ContentView() } }
#endif ```
How It Works
- PreviewContainer creates an in-memory ModelContainer.
- SwiftDataPreviewer injects the container into your SwiftUI view.
- Sample data is automatically inserted so your previews are populated.
Contributing
Contributions are welcome! If you find a bug or have suggestions for improvements, feel free to submit a pull request.
Licence
SwiftDataPreviewer is available under the MIT licence. See the LICENCE file for more details.
Package Metadata
Repository: markbattistella/swiftdatapreviewer
Default branch: main
README: README.md