Skip to content
A cross-platform Reddit client built in SwiftUI
Branch: master
Clone or download
Latest commit bec7a48 Aug 10, 2019
Type Name Latest commit message Commit time
Failed to load latest commit information.
Reddit-iOS Remove .DS_Store Aug 9, 2019
Reddit-macOS Minor fixes Aug 9, 2019
Reddit-watchOS WatchKit App watchOS app icons Aug 9, 2019
Reddit-watchOS WatchKit Extension Flair in PostDetailView Aug 9, 2019
Reddit.xcodeproj Fix all broken file references Aug 10, 2019
Resources Minor fixes Aug 9, 2019
Shared Remove .DS_Store Aug 9, 2019
.gitignore Remove .DS_Store Aug 9, 2019
LICENSE Create LICENSE Aug 10, 2019 Change README image path Aug 9, 2019

A cross-platform Reddit client created in SwiftUI.

Note: This project is far from complete. It still lacks many features of your typical Reddit client and has bugs (partly due to SwiftUI, but I'll take credit for some of them)

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 a Views and Representable folder. Views holds platform-specific views, and Representable contains UIViewRepresentables or NSViewRepresentables.

macOS Specific Features

I've added several things to make the macOS app stand out:

  1. Double click - You can double click on a post to open a new window for the detail view.
  2. NSToolbar - This is implemented entirely in the AppDelegate, and uses standard Cocoa code which interfaces with the SwiftUI views.
  3. 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())
You can’t perform that action at this time.