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 aViewsandRepresentablefolder.Viewsholds platform-specific views, andRepresentablecontainsUIViewRepresentablesorNSViewRepresentables.
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