A small, fast Android and iOS player for your own Audiobookshelf server https://absplus.app
  • Swift 44.6%
  • Kotlin 43.5%
  • HTML 7.5%
  • Python 3.3%
  • JavaScript 0.7%
  • Other 0.4%
Find a file
Repository files (latest commit first)
Filename Latest commit message Latest commit date
Claude 82d2116ae2
Some checks failed
Checks / iOS (offline-progress) (push) Waiting to run
Checks / iOS (isolation-retained) (push) Has started running
Checks / iOS (loading) (push) Has started running
Checks / android (push) Failing after 1m59s
CI: install the Android SDK on the Forgejo runner
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-22 16:32:33 -07:00
.forgejo/workflows CI: install the Android SDK on the Forgejo runner 2026-10-22 16:32:33 -07:00
.github CI: run on git.borodutch.com (Forgejo Actions) 2026-10-22 15:44:15 -07:00
app Downloads list every podcast episode on its own; 1.2.1 (#35) 2026-10-20 20:06:37 -07:00
appstore iOS: set team, add 6.5-inch App Store screenshots 2026-10-01 17:24:43 -07:00
docs One release ships everything: Play, App Store, the APK and the F-Droid merge request (#34) 2026-10-16 12:28:39 -07:00
fastlane/metadata/android/en-US Downloads list every podcast episode on its own; 1.2.1 (#35) 2026-10-20 20:06:37 -07:00
gradle/wrapper ABS+ 1.0.0 2026-10-01 15:01:12 -07:00
ios Downloads list every podcast episode on its own; 1.2.1 (#35) 2026-10-20 20:06:37 -07:00
play ABS+ 1.0.0 2026-10-01 15:01:12 -07:00
promo Add the promo video and show it on absplus.app 2026-10-02 07:31:08 -07:00
.gitignore CI: resolve or create the iOS Simulator instead of hard-coding iPhone 17 (#96) (#27) 2026-10-12 20:27:45 -07:00
build.gradle.kts ABS+ 1.0.0 2026-10-01 15:01:12 -07:00
gradle.properties ABS+ 1.0.0 2026-10-01 15:01:12 -07:00
gradlew ABS+ 1.0.0 2026-10-01 15:01:12 -07:00
gradlew.bat ABS+ 1.0.0 2026-10-01 15:01:12 -07:00
LICENSE ABS+ 1.0.0 2026-10-01 15:01:12 -07:00
README.md One release ships everything: Play, App Store, the APK and the F-Droid merge request (#34) 2026-10-16 12:28:39 -07:00
RETAINED_DOWNLOADS.md Keep server-scoped downloads usable after logout (#5) 2026-10-05 08:25:11 +00:00
SESSION_ISOLATION.md Isolate credentials and cached state across ABS+ servers (#8) 2026-10-05 03:48:04 +00:00
settings.gradle.kts ABS+ 1.0.0 2026-10-01 15:01:12 -07:00

ABS+

A small, fast Android and iOS player for your own Audiobookshelf server. Free, no ads, no analytics.

Build

JDK 21 and the Android SDK:

./gradlew assembleRelease

Without a keystore.properties, release builds come out unsigned, which is how F-Droid builds them.

Releasing

Bump versionCode and versionName in app/build.gradle.kts and add fastlane/metadata/android/en-US/changelogs/<versionCode>.txt (one or two plain sentences, with no mention of Android or iPhone: Google Play, the App Store and F-Droid all show them). Merge, then publish the release:

gh release create vX.Y.Z --target main --title "ABS+ X.Y.Z" --notes-file fastlane/metadata/android/en-US/changelogs/<versionCode>.txt

The Release workflow ships everything from that one release: the bundle to Google Play, the iPhone app to the App Store (build number = versionCode), the signed absplus-X.Y.Z.apk (and the same file as absplus.apk, which absplus.app links through releases/latest) to the release, and the new version to the F-Droid merge request while it's open. A previous version still waiting for review or in review is replaced on both stores. F-Droid builds the tag itself and publishes the APK only if its own build matches it. Run the workflow by hand with mode dry-run to build everything and publish nothing, or testflight-only to upload the iPhone build without submitting it. The store texts and images in fastlane/ link to play/.

iOS

The SwiftUI app lives in ios/ (iOS 26.1+, iPhone). Open ios/ABSPlus.xcodeproj in Xcode 27, or build from the command line:

xcodebuild -project ios/ABSPlus.xcodeproj -scheme ABSPlus -destination 'generic/platform=iOS Simulator' build

ios/UITests/Tour.swift walks through every screen against a real server and saves screenshots; see the comment at its top for the environment variables it needs.

License

MIT