Skip to content

mondominator/sapphoios

Repository files navigation

Sappho iOS

Native iOS client for the Sappho self-hosted audiobook server.

Swift iOS License

Features

  • Stream or download audiobooks from your Sappho server
  • Background audio playback with lock screen controls
  • Chapter navigation and bookmarking
  • Adjustable playback speed (0.25x - 3x) with fine-tune controls
  • Sleep timer
  • Progress sync across devices
  • Offline downloads
  • Library browsing by author, series, genre, and collections
  • AirPlay support
  • Dark theme matching the Sappho web app

Screenshots

Coming soon

Requirements

Getting Started

1. Clone the repository

git clone https://github.com/mondominator/sapphoios.git
cd sapphoios

2. Generate the Xcode project

The project uses XcodeGen to generate the .xcodeproj from project.yml:

brew install xcodegen
xcodegen generate

3. Open in Xcode

open Sappho.xcodeproj

4. Build and run

Select your target device or simulator and press Cmd+R.

On first launch, enter your Sappho server URL and credentials to connect.

Architecture

The app follows a clean architecture pattern with SwiftUI:

Sappho/
├── App/                    # Entry point
├── Data/
│   ├── Remote/            # API client (URLSession + async/await)
│   └── Repository/        # Auth storage (Keychain)
├── Domain/Model/          # Data models
├── Presentation/          # SwiftUI views
│   ├── Home/              # Main feed
│   ├── Library/           # Browse by author/series/genre
│   ├── Detail/            # Audiobook detail
│   ├── Player/            # Full & mini player
│   ├── Search/            # Search
│   ├── Profile/           # User settings & admin
│   └── Components/        # Shared UI & theme
├── Service/
│   ├── AudioPlayerService # AVFoundation playback
│   └── DownloadManager    # Offline downloads
└── Cast/                  # Chromecast (Google Cast SDK)

State management uses Swift's @Observable macro with @Environment injection.

Related Projects

Contributing

Contributions are welcome! Please open an issue first to discuss what you'd like to change.

  1. Fork the repo
  2. Create your feature branch (git checkout -b feature/my-feature)
  3. Commit your changes
  4. Push to the branch (git push origin feature/my-feature)
  5. Open a Pull Request

License

This project is licensed under the MIT License - see the LICENSE file for details.

About

No description, website, or topics provided.

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages