Bahá’í Readings

A reader for the Bahá’í Writings

Download the app here

 

Motivations

I think one important thing that I’ve learned about my phone usage is – I care about very specific apps. I use apps on my phone more often than I use any baked in Apple application. As in – I can get all my kindle books in ePub and store them on my Bookshelf – but I use Amazon instead. I could store all the prayers in an ePub on my Bookshelf – but I use Baha’i Prayers App instead.

What does this mean? Well I’m willing to bet that the same is true of many other content – I just don’t want the burden of owning it, but I do want to have it readily available but compartmentalized format.

Very specific needs no?

Anyways – it’s from this train of thought that Baha’i Readings was created. I created it primarily to address a very specific gap – a void. I just want to read. I just want something that will help me consume the writings of the Baha’i Faith, and I want it to stand apart from everything else I have. In addition – I want something that’s beautiful, elegant, but functional and straightforward to use. I don’t need to be sold – I just need to read.

To that end – that’s what I’ve tried to do with this application – to address a very simple, very singular, objective – to read.

That said, this project is ongoing. Some features I hope to build in over the course of the year, possibly ranked in order of priority:

  1. iPad Support
  2. CloudKit Progress Syncing Across Devices
  3. Introduction of Categories and Filters
  4. Introduction of Search and Deep Searching (ala, iOS9)
  5. Annotations

Technical Lessons

VIPER, VIPER and More VIPER

As far as new technical things – nothing too new here. In this specific instance, I again used the VIPER design pattern – but did so in a manner much less rigorous than with the Ship Spinner. In a sense, It was partly bootstrapped and only partly designed. This was done specifically to test out the longevity of the VIPER design pattern and how one takes an application and refactors it over time. Having said that – VIPER was used in places I expect to be more robust – specifically the reader.

Why there and nowhere else? Well, specifically it’s because the Reader IS the main subject here – everything is about the reader. It’s the first place where you get dropped off, it’s highlighted even before the Library. Why? Again – the purpose here is to READ, not just consume.

Plus – everything else is too light, too ephemeral. The code sitting behind reminders, libraries, galleries – they’re just not that heavy. Maybe 10 lines per feature, tops. When things become more robust and features begin getting flushed out – sure, the move to a VIPER pattern will make sense. But for not, it just simply doesn’t.

CloudKit – Awesome.

I’d never had a chance to write an iOS app that used CloudKit before – and for the most part it feels like the sort of thing you’d readily find in games and social apps. Something that would ultimately allow me to sync my progress across devices. But more than that – CloudKit can serve as a centralized DB. No need for cross platform? Want a backend interfact that’s quick n dirty? CloudKit is the way to go.

But what else? To me it really stands as a testament to a great library that’s totally undervalued. CloudKit interfaces are just awesome. They’re dead simple, straightforward, and interacting with CKRecord objects is one of the most easiest things I’ve ever had to do. This thing totally blows solutions like AFNetworking and Alamofire out of the water (albeit, those things solve slightly different problems).