Finer Details of Elytra.app

There are some very interesting details on Elytra’s website which you most likely have not noticed. This is by design. These are invisible details that are engineered to make your experience on the website more private and be good to your devices. 

Respecting your Privacy

Like most landing pages for apps, products and services, Elytra’s website too loads the Google Analytics script. But the script itself does not respect the DNT Header your browser may be sending. To work around this, I added a simple check before calling the code that begins tracking page views. 

if ((‘doNotTrack’ in navigator) && navigator.doNotTrack == “1”) {
console.info(“Do not track is enabled. Exiting”);
}
else { // Regular GA code }

This simple piece of code will respect your privacy settings and only if you allow will begin page views tracking via Google Analytics. Considering the critical role Privacy plays in Elytra’s core, this seemed obvious. 

Respecting your Devices

Elytra’s landing page also includes 3 videos. These are kind of big. Total to about 35MB but varies depending on what codecs your browser supports. It is obvious that it does not make sense to load videos on all devices. It is also obvious that loading these videos on metered or cellular connections like 2G and 3G would be wasteful as the page would never complete loading. Most people would close the tab and move on. 

Elytra’s website uses the new navigator.connection object to determine if videos should be shown. If it determines that videos should be discarded, it simply replaces them with cover images that fit the context. 

Safari on iOS and macOS does not support it yet, so the viewport size is used to determine this. As soon as Safari supports it, directly or by using the webkit prefix, it’ll kick into action. 

This not only correctly conserves data bandwidth, but also power and is respectful towards batteries of your untethered devices. 

Respecting Accessibility Requirements

Just like the iOS App, the website tries its best to be accessible. When designing the FAQ and Press pages, I decided to use the details and summary tags instead of hacking something on my own for creating collapsible sections. There is a lot of sample code, some which is even accessible, out there which creates collapsible sections, but nothing seemed to work as effectively as these two tags in tandem. You can read more about them on MDN

This made the two pages  accessible not only to screen readers, but also for people who use the keyboard more than a pointer device to navigate webpages. If this is new to you, I’d love for you to try it out. Its fun!


While on the surface, Elytra’s landing page may look simple or even boring to some, I wanted to focus on getting the information to people who seek it. Aesthetics are important, but making and keeping your website Accessible, Private and Fast was paramount. 

Something I want to explore when updating the website next is to localise it. So if you have any tips for me, do let me know. 

Hello, App Store

Elytra 1.0.0 is now generally available on the App Store. There’s also a shiny new website

From having of the most volatile, overwhelming pre-releases announced on Twitter, to getting some really cool, critical, and supportive Beta Testers, to the Subscriptions rejection a few weeks earlier, my journey with Elytra has been an absolute roller coaster.

When I started working on Elytra back in November I had no idea what to expect. I was very surprised that people really yearned for a new RSS Reader option. The responses on Twitter only made by presumptions more concrete: I want this. A lot of people want this. This needs to be on the App Store. 

There a lot of changes between the last Public Beta build and the App Store version. I wont go into too much detail here, but rest assured, it’s a more stable app. It isn’t completely stable though which is why I have version 1.0.1 ready to go for Review as soon as 1.0.0 is released. 

During the Public Beta, people sent me a lot of emails with feature requests, ideas and suggestions to make Elytra a better app, a better product. I’ve been communicating with a lot of people back and forth to evaluate and solidify these ideas and I am very excited to start working on those. 

As always, please feel free to email me or tweet/toot at me with ideas, questions or just stop by to say hi. 

App Status Update

TL;DR: Please copy your Account ID and keep it safe somewhere (Notes.app or whatever else you may be using for keeping notes). When the app launches on the App Store, if you wish to retain your account, you can use the same Account ID to get access to your feeds again. If you want to be re-inducted into the Public Beta, please send me an email stating so.


Elytra went through a second round of App Store Review following an appeal and it got rejected again. As I noted in my previous post (You can read it here), if that ended up happening, I’ll have to take some drastic steps. 

Since I cannot transfer an app which uses iCloud in any way, I had to recreate Elytra on my new Developer ID. 

Test Flight

With this change, I ended up with two identical apps on my phone. This is fine for me, however, the ramifications of this are big if you are part of the Beta Testing groups. 

The former Developer account expires tomorrow which will remove Elytra from Test Flight (renamed to YetiReader so I can continue using Elytra on the new account). If you wish to continue being a part of the Public Beta group, please send me an email through Test Flight or direct at: info@dezinezync.com and mention your Test Flight Email ID.

A good thing to come out of this situation: I have a much much better build which I’ll be shipping as 1.0.0. I’ve added multiple fixes, improvements and UI polish which was lacking from the latest build currently available. 

I am not sure if the Test Flight build will continue to work once the former account expires. I know the build will no longer be available, but I am not sure if it’ll continue to work.

App Store

I believe I have a better idea as to why Elytra was rejected from using Auto Renewing Subscriptions. It’s just a guess at this point. I’ll be submitting the new build from the new account on Monday with all the new changes and improvements. I’m getting everything in order over the weekend. 

Hoping everything goes well this time round. If you no longer wish to be a part Public Beta, you don’t need to do anything. If you wish to continue using Elytra when it releases on the App Store, I strongly recommend you copy your Account ID to somewhere safe like Notes.app or whatever else you may be using. 

Thank you for sticking by me and keeping me motivated. 

AppStore Status

Elytra’s App Store status has been quite a weird roller-coaster ride for me. I’ve had my fair share of odd App Store rejections in the past, but none like this one. 

After going in to the In Review status, the App was rejected a few hours later for including Auto-Renewable subscriptions. This seemed odd considering all the information Apple requires apps to be displayed on the Purchase screen was there. Turns out, that was not case. The subscriptions were rejected because they were, “Not valid use of the service”. 

Upon presenting my case in the resolution centre that Elytra was adhering to all rules as laid out by the App Store Guidelines, I was once again told that this was invalid use of the service. The reviewer recommended that I instead use a Non-Auto Renewing Subscription. 

At this point I decided to write an appeal to the App Store Review Board and see what happens. The In-App Purchases are back to being In Review and the app itself is now Waiting for Review..

Where does this leave me?

The account on which Elytra is being reviewed expires shortly. I have a new account all set up and ready to go and I don’t plan to renew the existing account if the app does not pass review. I’ll setup and resubmit the app from the new account. 

However, if by some miracle, the app does pass review now, I’ll promptly renew the account and continue using it. If this happens, I have nothing else to do. I upload the website and release the app. 

If I do end up setting it up on the new account:

  • TestFlight access to the app will cease.
  • Since I’m setting up a new app, it will no longer use data from the old app. Your subscriptions will be safe and you can simply setup the same account in the new app. 
  • I’ll have to implement a Non-Renewable Subscription which isn’t the best user experience considering you’ll have to manually renew the subscription every month, 3 months or year depending on your subscription type. 

So I hope things work out for Elytra as it stands right now. Setting up a new app will be incredibly tedious to say the least with a lot of undesirable effects. 

I simply wonder why the Review Team is rejecting Elytra’s use of Auto-Renewable Subscriptions when prior art for the purpose exists in the App Store. Heck, its even promoted in Searches.

Auto Renewing Subscriptions on the App Store including promoted subscriptions in App Store Searches

Last round on me!

This is most likely the last build of Elytra which will be going out to the Public Beta testers. It mostly contains a few minor fixes and two new additions. Read on to learn more.

New

  • Long tapping on the All Read button (Double checkmark) in a Feed’s interface will enable you to mark all unread articles as read, including articles not currently loaded in the interface. This is especially useful when you add a new high frequency feed to your list.
  • You can now optionally use a Dark Application Icon for Elytra. A new Miscellaneous section has been added under settings.

Fixes

  • Tweaked the Application Icons to render correctly on displays which use the sRGB colour profile.
  • Updated the footer text in the Subscriptions Interface to be compliant with Apple’s requirements. This is critically useful for you as well as I have come to realise. (I’m secretly hoping Elytra passes Apple’s review in the first go, as we all do :D)
  • Fixed application launch on iPads when running Elytra for the first time on the device.
  • Scrolling to load the next batch of articles now consumes less power. This is done less frequently now by using an alternate system API.
  • Fixed the status bar being dark (when a dark theme is selected) for the Move Folder interface.
  • Tapping on the Close button on iPads now deselects the currently selected article.

Notes
Version: 1.0.0
Build 127
Pipe: PBeta-04

The Final Epoch

I’ve received numerous emails and messages over the last two weeks requesting new features and reporting bugs. This build is a culmination of all of that including bug reports and feature lists we’ve compiled internally. 

What’s new

  • You can now share the Feed’s URL (and website’s URL when available) from the swipe menu. The same is accessible when dragging cells on iPads supporting drag and drop. 
  • State Restoration has now been implemented in tandem with Background Fetch. 
  • With the background fetch change, the refresh activity indicator will now also show the last refresh time if one is available.
  •  

Improvements

  • Images are no longer affected by Smart Invert. Strict Invert will still invert the colours in images. 
  • Improved image caching
  • Improved memory usage when loading and displaying images (especially on iPhones)
  • Improved multi-tasking behaviour on iPads (Slide Over was majorly broken in previous builds)

Fixes

  • Removed the trailing line-break from Lists
  • Fixed long tapping on the Account ID during setup to crash the app. (This gesture has been removed and replaced with a single tap gesture)
  • Aligns the section header’s title with the labels of the cell. 
  • Correctly manage unread and bookmarked states when article states change via the toolbar in the Article interface. 
  • Fixed a crash when linked header identifiers contained non-URL safe characters.
  • Fixes the blank window on app launch (including bringing the app to the foreground) which occurred in unusual circumstances only on iPads.

Web Service

  • Improved the performance of fetching unread items (on the server) by a huge margin. This could previously take over 30s and now shouldn’t take more than a second.  

This probably brings us to the end of the Beta runs for Elytra. I’ll be resuming work on the launch of the app now and if there are any bug reports that come during this period, I’ll work on those. But the feature list is now frozen and everything deferred to the 1.x versions.

A big thank you to everyone who has been testing the app and sending me feedback. I still have a lot of people to invite to the beta testers list and I’ll resume on that shortly. 

Notes

  • Version: 1.0.0
  • Build 119
  • Pipe: PBeta-04

Public Beta – Round 4

Elytra Build 110 is now available to all beta testers. This is a sizeable change-log so get ready. 

Whats New

  • The Publisher title is now included in the Article view. This is very useful when browsing through articles in the Unread or Bookmarked section.
  • New Subscriptions interface. You’ll see it once during the beta. You won’t be charged for the subscription when you install builds through Testflight. 
  • Off by default, you can now toggle to have Article cover images show up in the Feed interface. To manage this setting, open the App’s settings > Image Handling, scroll right to the end. Articles without cover images will continue to behave as they have always done.  

Improvements

  • Improves handling of folders when deleting a feed from a folder or deleting the folder itself.
  • When importing your OPML file, the File Picker Interface will now allow for selection of files saved with the .opml extension as well. 
  • Improved the functioning of the OPML interface for imports and exports.
  • Improved system for managing unread counts on the Feeds interface. 
  • Code blocks now support dynamic type. 
  • Removed the subscriptions interface from the Introduction interface. The subscriptions interface will now popup once after you add your first feed.
  • Tapping the search button in the Article’s Interface will dismiss the Search bar if it’s already active. 

Fixes

  • Fixed a memory consumption issue caused when really long articles are opened.
  • Fixed an issue where the cover image of an article would render twice, once as the cover image and the other as an image inside the post.
  • Fixed padding of code blocks.
  • Fixes height of rendered tweets. 
  • Rotating to a new orientation no longer causes a black out in the Article interface. 
  • Fixed a rendering bug for new lines and extraneous spaces in paragraphs.
  • Fixed handling of push notification taps. 
  • Fixed the width of the search bar (in the Articles interface) on iPads.
  • When you update the theme on the iPad and if an article is open, the article will refresh to accommodate for this change. 
  • Fixed the appearance of the New Feed and New Folder inputs. 

Notes

  • Version: 1.0.0
  • Build 110.
  • Pipe: PBeta-04

Broken Promises

Sometime last week (or perhaps the week before that), I made some minor changes to how RSS feeds are polled. This made the “engine” more efficient by running in period bursts so as to not block your requests from taking priority. 

I did however change something: The older variant used a callback system while the newer variant used Promises. I did not have an integration test to check how this change worked with the WebSub mechanism. 

Earlier today when I published the Public Beta 3 notes, I was wondering why I did not receive a push notification. Almost 6 hours later I hit my, “ah ha!” moment. 

I have patched the issue and now have an integration test for this incase I break it in the future. 

If you are subscribed to Push Notifications for the Elytra blog, you should have received one. If you didn’t, you should totally subscribe. 

Public Beta – Round 3

Elytra Build 104 is now available on Testflight and I’ve added another batch 100 testers to the list. If you still haven’t received your invite, this could be the week.

I spent a small part of the weekend fine tuning things on the server side so it can accommodate more feeds and serve more people without needing to be upgraded to a bigger size. 

This update includes a lot of visual fixes and some underlying fixes to how Elytra functions.

Improvements

  • Haptic feedback has been enabled now that I have had a chance to fine tune things. This was previously available in the private beta but disabled during public beta release.
  • Opening and closing folders no longer causes the weird jumpy animation. 
  • Micro-blog posts are now handled in a graceful manner with content snippets shown instead of only the Blog’s title and author.
  • Added a Reset App option under the Settings.app if you need to externally reset the app. If you do this, your account information will be erased from the device. You can still reload the same account by setting up as usual and then swapping the account ID. Please note your account ID if you plan to do this. 
  • Improved the text that is shared when you long tap a linked header to bring up the Share modal.  
  • Handles .ico favicons correctly. 

Fixes

  • The Recommendations Interface in the previous build (103) stopped showing any feeds. This was a regression and has since been fixed. 
  • Fixed a crash where some images came with empty urls and the app tried to load them. 
  • Various minor improvements to the Onboarding flow. 
  • Fixed a dead-lock situation when you try to add a feed (which provides multiple feed options) that you already have in your list. 

Known Issues

There is a known bug when you open the Import/Export OPML interface and later dismiss it. The overlay persists and causes the screen to be dimmed. A restart fixes this issue. I haven’t been able to trace it or reliably reproduce the issue. 

Notes

  • Version: 1.0.0
  • Build 104.
  • Pipe: PBeta-03

Public Beta – Round 2

The second Public Beta of Elytra is now available on Testflight. I have also sent out the 3rd batch of invites to everyone who signed up. 

To clarify how I’m sending out invites:

Every few days, I pick a batch of 100 (in order) and add them to the Testflight Public Beta list. This is allowing me to ensure that the server can handle the load. So far, it’s been smooth sailing. 

Also, thank you to everyone who sent me emails reporting bugs and suggestions to improve the app. It’s been of immense help. As always, if you run into any issues when adding new feeds, send me an email with the link and I’ll take a look. 

Here is the change-log for the latest build.  

Improvements

  • Favicons are now less rounded based on feedback where circles are usually reserved for people’s photos & avatars.
  • Improves Voice over support for long paragraphs by breaking them down into their distinct paragraphs. 
  • Introduced a subtle load-in animation for the Articles interface.
  • Now when searching in an article, you can press the ENTER key to jump to the next result if one is available and the ESC key to dismiss the search context.

Fixes

  • Fixes an issue where tapping on the cancel button in the Subscription Interface would lock up the process. The continue button no longer remains disabled. 
  • Fixed the text errors on the Subscription Interface.
  • Fixed a crash that would occur if you navigated to Unread, then back and then to Bookmarks in quick succession. 
  • Fixed handling of URLs without the http: prefix. 
  • Fixed a Voice Over issue where it would only read the first sentence and the first word of the second sentence in a Paragraph. 
  • Fixed search highlighting on iPads

Notes

  • Version: 1.0.0
  • Build 103
  • Pipe: PBeta-02