A cross-platform Reddit client built in SwiftUI
reddit-swiftui
To show off SwiftUI's strength in cross-platform development, I did not use Mac Catalyst for this project. Instead, common UI code is shared between iOS, macOS, and watchOS.
Project Structure
Shared
- Models, helpers, API, and any shared Views.Reddit-[PLATFORM]
- Each target folder contains aViews
andRepresentable
folder.Views
holds platform-specific views, andRepresentable
containsUIViewRepresentables
orNSViewRepresentables
.
macOS Specific Features
I've added several things to make the macOS app stand out:
- Double click - You can double click on a post to open a new window for the detail view.
NSToolbar
- This is implemented entirely in theAppDelegate
, and uses standard Cocoa code which interfaces with the SwiftUI views.TouchBar
- TODO
SF Symbols
Because macOS doesn't support SF Symbols, I have created the following extension to make sure shared code works. I would like to replace this with custom icons for macOS that it loads from XCAssets
eventually:
/// `SwiftUI` compatibility
#if os(macOS)
extension Image {
init(systemName: String) {
self.init(nsImage: NSImage())
}
}
#endif