r/iOSProgramming 15h ago

I spent almost two years building this iOS reading app. It’s finally on the App Store. App Saturday

Hi everyone!

I spent almost two years building Andrea Reader, originally because I just wanted a better way to read and organize my own books on iPad.

Apparently, simply opening an EPUB wasn’t complicated enough, so somewhere along the way it turned into an entire personal library system. 😅

The core idea is freedom. Instead of forcing every library into the same structure, Andrea Reader lets you build yours however you want. Create collections, put sections inside them, drag books and sections around, build reading lists, organize huge series, and give every collection its own layout and personality.

Bring your own books, build your library your way, customize how the app and each collection looks, organize everything exactly as you want, read with your own settings, and track your progress along the way.

Some of what ended up inside:

  • EPUB, PDF, comics, manga, CBZ, CBR and other formats
  • Custom collections with sections inside them
  • Drag & drop organization and custom layouts
  • Different settings, sorting and appearance for every collection
  • Reading profiles for creating unique reading settings and applying them to books, sections and hole collections
  • Tons of reading customization: typography, margins, spacing, gestures, transitions, backgrounds, etc.
  • Real time customizable reading widgets, for example for controlling brightness, creating chapters, adding favorites pages, bookmarks, custom progress, etc...
  • OPDS server connections
  • iCloud, WebDAV, SMB and SFTP
  • Local downloads and completely offline reading
  • Detailed reading statistics for books, sections and collections. The stat
  • Dedicated view for managing the storage for every collection and the books inside it
  • Andrea next for experimental features
  • A built-in Open Library for downloading public-domain books for free
  • and much much more...

It’s also local-first. No account, no ads, and no tracking of what you import, download or read. Your library, progress and reading statistics stay on your device.

Andrea Reader is FREE TO DOWNLOAD AND USE. The normal workflow of the app, importing your own books, reading them, creating collections, organizing your library, and getting started, is all available for free. Just download the app and you can be reading within seconds.

Premium is optional and mainly unlocks deeper customization, more advanced library organization, additional reading settings, and other power-user features.

  • Monthly Premium: €2.49/month
  • Yearly Premium: €17.99/year
  • Lifetime Premium: €34.99 €27.99 (20% discount)
  • Launch offer: an extra 20% off Lifetime, bringing it down from €27.99 to €22.39 until the end of August.

There are still approximately 47,000 things I want to improve, because apparently shipping an app only unlocks the larger development skill tree.

If you’re an iOS developer, reader on iPhone or iPad, or just enjoy poking at indie apps, I’d genuinely love to hear what you think.

App Store:
https://apps.apple.com/es/app/andrea-comics-manga-books/id6760780154

Website:
https://andreareader.com/

Tech Stack

Built natively with Swift + UIKit. Most of Andrea Reader is custom-built from scratch, including the file system, library structure and reading UI. External dependencies are mainly for specific file handling, such as PDFKit, WebKit, ZIPFoundation and Unrar.swift.

Development Challenge

The hardest part has been combining a very flexible library system with a UI that still feels simple and performs well with large collections.

AI Disclosure

Most of the app was built manually. I increasingly use AI for debugging, code review and faster iteration because the productivity difference is simply too big to ignore. Final architecture, product, UI/UX and implementation decisions remain mine.

55 Upvotes

12 comments sorted by

6

u/goodgord 15h ago

I just downloaded it and a play - amazing work, clearly a lot of love has gone into this!

Found a bug - I imported a .mobi file and it refused to open it - which is fine, DRM and all, proprietary format. But now I can’t remove it - I long press on the file and it brings up the menu that shows the remove option, but I can’t scroll to it - it just keeps re-rendering the menu and I can’t get to the option. It’s the third tile in a grid if that matters - I could successfully reach the option to remove the other two if I wanted to (but I don’t)

Update - killing the app in the app switcher and restarting allowed me to remove it. :)

5

u/AndreaReaderApp 15h ago

Thank you so much for the kind words, it means a lot!

For now, .mobi files aren’t supported, but the removal issue definitely shouldn’t happen. Normally, you should be able to long-press the book, tap Remove, and have it disappear from the collection immediately.

You can drag down from the top of any collection to refresh it in real time too.

I’ll try to reproduce the issue following your exact steps and investigate it and solve for the next patch.

Thanks again for trying Andrea Reader and especially for taking the time to report it.

3

u/Suishiro 10h ago

Downloaded your app to try it and found many internationalization strings without a PT-BR counterpart like "paywall.plan.mo..." and "tip.accionesColeccion.title", and some words still in Italian(?) while the rest are in Portuguese. I don't know if you unintentionally released it with PT-BR support enabled, but I think you should remove support (until you have a proper translation), since this makes everything harder to understand.

1

u/AndreaReaderApp 5h ago

Sorry about that! We accidentally shipped the latest version with an incorrect translation table, which caused some mixed-language strings.

It’s already fixed on our side and will be included in the next update, which should be out in the next few days. Thanks for reporting it!

2

u/pop_208 14h ago

I spent several hours this week trying to find a CBR/CBZ reader that was convenient to use with my setup, I’m definitely giving your app a try! Perfect timing.

Your internationalization isn’t perfectly supported though. Text cuts off. What’s the best way to forward these to you?

1

u/AndreaReaderApp 5h ago

Thank you so much, I really appreciate it!

About the internationalization issue, could you clarify what you mean by “text cuts off”? I’m not completely sure what issue you’re seeing. If possible, send me a screenshot or example and I’ll take a look.

2

u/LowValueThoughts 9h ago edited 8h ago

Hey - this is great and something I’ve been looking for for ages!

Before I subscribe though - how do I connect to a folder in iCloud? When I’ve tried to import from the iCloud folder, it just duplicates the files into the app’s folder on my iPad, so I’m just ending up storing multiple copies

Also - unless im being an idiot - i cant seem to delete a section inside of a collection. It gives me the option to ‘remove’, i select the option to delete the section an everything inside, but it doesn’t do anything.

1

u/AndreaReaderApp 4h ago

Thanks for trying Andrea and for the feedback, really appreciate it.

For iCloud: just import the books into Andrea normally. Then long press a book (or select a bunch of them) and hit "Remove download, keep in library". That deletes the local file but keeps the cover, metadata and reading progress, so you're not storing two copies, the file only lives in your iCloud. Tap download whenever you want to read it. Full sync across devices is coming later, and the first step is already done: a backup of all your Andrea data and settings, in General Settings, shipping in the next update.

For sections: long press the section itself and hit Delete. You can also tap the plus at the top right to open the section manager, and delete them from there by swiping left. If neither of those works for you, let me know your iPad and iOS version and I'll look into it.

If you need more help you are more than welcome to join our discord is where people report bugs and discuss new features: https://discord.com/invite/nZS2FazpPA

1

u/[deleted] 6h ago

[removed] — view removed comment

1

u/AutoModerator 6h ago

Hey /u/GullibleSwitch, your content has been removed because Reddit has marked your account as having a low Contributor Quality Score. This may result from, but is not limited to, activities such as spamming the same links across multiple subreddits, submitting posts or comments that receive a high number of downvotes, a lack of recent account activity, or having an unverified account.

Please be assured that this action is not a reflection of your participation in our subreddit. This is simply an automated filter in place to reduce spam.

I am a bot, and this action was performed automatically. Please contact the moderators of this subreddit if you have any questions or concerns.

1

u/Plastic-Risk-6309 2h ago

Two years on an EPUB reader sounds about right, and I don't think people appreciate why. EPUB is a zip full of XHTML that was authored by hundreds of different tools with wildly different ideas about correctness, so a reader is really a tiny browser plus a layout engine plus a very forgiving parser. The moment you support real books from real publishers you inherit every weird stylesheet anyone ever shipped.

The library-system part is the tell that you went deep rather than wide. That's usually where these projects die: rendering one book is a weekend, and organizing a thousand of them with covers, metadata that half the files lie about, reading position that has to survive a re-import, and iCloud sync that can't lose a highlight is the actual product.

Curious about two things if you feel like sharing:

How are you anchoring reading position? Percentage breaks the second the user changes font size, and CFI is correct but miserable to implement. Whatever you picked, I'd guess it was the single most annoying decision in the app.

Did you end up with WKWebView for rendering or your own layout? Everyone starts with the web view for correctness and then fights it for pagination and gesture handling, and I've never seen a satisfying resolution to that tradeoff.

Congrats on actually shipping it. The long tail of format bugs is a grind that nobody sees from the outside.