Softcover

A lightweight, native Hardcover.app client for iOS written in Swift.

Features

All reading, library, statistics, sharing, sync, and widget features are free. The optional Supporter Pack and tips fund development; purchases never gate functional features.

Requirements

Hardcover Sign-In

Softcover uses Hardcover OAuth with Authorization Code + PKCE. Access and rotating refresh tokens are stored in a shared iOS Keychain access group so the app and widgets can use the same session. Existing personal API keys remain supported as a migration/development fallback and are also stored in Keychain.

To configure a source build:

  1. Create a Hardcover Developer App of type Mobile, desktop, or CLI.
  2. Register softcover://oauth/callback as its callback URI and disable the device grant.
  3. Register the scopes listed in HardcoverOAuthConfiguration.scopes.
  4. Set HARDCOVER_OAUTH_CLIENT_ID for both the Softcover app and widget target.

Native clients do not use or ship a client secret.

Building and Running

Using Xcode

  1. Clone the repository
    git clone https://github.com/komadorirobin/Softcover.git
    cd Softcover
    
  2. Open the project
    open "Softcover.xcodeproj"
    

    Or simply double-click Softcover.xcodeproj in Finder

  3. Select your target device
    • In Xcode, select your iPhone or iPad from the device dropdown (top toolbar)
    • Or choose “Any iOS Device” to build for physical devices
    • Or select an iOS Simulator
  4. Build and run
    • Press Cmd + R or click the Play button
    • For physical devices, you’ll need to:
      • Connect your device via USB or WiFi
      • Trust your development certificate on the device
      • Enable Developer Mode (Settings → Privacy & Security → Developer Mode)
  5. First launch setup
    • When you first open the app, choose Connect with Hardcover
    • Approve the requested access on Hardcover
    • Softcover returns to the app and starts syncing your library and widgets

Building from Command Line

# Build for simulator
xcodebuild -project Softcover.xcodeproj -scheme "Hardcover Reading Widget" -destination 'platform=iOS Simulator,name=iPhone 15' build

# Build for device (requires signing configuration)
xcodebuild -project Softcover.xcodeproj -scheme "Hardcover Reading Widget" -destination 'generic/platform=iOS' build

Project Structure

Troubleshooting

“Failed to build” errors:

Code signing issues:

Widget not appearing:

Contributing

Contributions are welcome! Feel free to:

License

This project is open source. Please check the LICENSE file for details.

Acknowledgments

Built with love for the Hardcover.app community.