Elytra Blog

The simple RSS Reader. This blog publishes release notes, engineering and design details.

Elytra Winter 2019 Update

Winter is coming… soon. The Elytra Winter 2019 update is already here though. If you feel generous and have a couple of minutes, please leave a review on the App Store. It makes a huge difference for me. Thank you in advance. Here’s the change log:

iOS App

What’s New

Elytra's Updated Sign In Interface

New Push Notifications Interface

New Image Viewer Interface

  • Added a new Bookmarks Manager. This is much more efficient system compared to the previous system and is much more scalable. This is a non-UI update so you’ll see a lot of performance benefits from this.
  • Sign in With Apple. If you’re new to Elytra, you don’t need to take any additional steps. If you’ve been using Elytra and are updating to the latest version, please head over to Settings > Account and link your account from there.
  • Image Viewer: Tap on an image in an article to open it in a full screen image viewer. All images from the article are gathered in single place for easier viewing.
  • Push Settings: View a list of publishers you’ve subscribed to receive push notifications from.
  • Added Settings Sync to work in tandem with the web app. More on this soon.

Improvements

  • Adding a new feed from the search interface now increments the unread count.
  • Removing a feed now decrements the unread count.
  • Recommendations interface now correctly shows the custom Feed name if one is set.
  • Improves how the app handles & reacts to memory pressure warnings from the OS.
  • The Author Interface now shows the author’s name prominently and defers the blog’s name to the subtitle.
  • Drastically improved managing of unread counts in the app.
  • Improved behaviour of the app when marking backdated articles as read.

Fixes

  • Fixes push notifications opening the wrong feed.
  • Fixes push notifications not opening the article on iOS 13.
  • Fixed a bug where the app would re-sync all bookmarks even if they existed locally.
  • Fixed the Settings icon for the Push Notifications row not showing up on some devices.
  • Fixed the activity indicator persisting on screen when only one or no page exists for unread items.
  • Fixed a potential crash when opening new feed interface.
  • Fixes loading of unsupported image formats. Loading an SVG image would cause the app to crash.
  • Fixed last updated date not matching the actual refresh date when manually refreshing through the User Interface. This only updated when fetching via background refresh.
  • Fixed an issue that would cause a corrupted navigation bar in iOS 13.
  • Fixes a crash which could occur when the Trial Interface was presented.
  • Fixed linked images which would not render if they were contained inside an anchor blog with multiple other elements. These other elements were usually line-breaks preventing the entire block from rendering properly. Affected blog: Saturday Morning Breakfast Cereal..
  • Removed webp support.
  • Images are loaded using the same extension from the proxy as the source image.
  • Fixed a small bug with the unread count when marking read automatically from the article reader.
  • Fixed an issue with image loading preferences. “Never Load Images” now works properly in the Articles List & Article Viewer.
  • Fixed some really nasty memory leaks.
  • Fixed a crash that would occur when launching the app. This was a regression introduced in Build 275 of Elytra and OS 13.1.2.
  • Micro.blog posts with images now show the image as a thumbnail in the articles list when settings are enabled for it.
  • Fixed the colour of the summary label (iOS 13 only, correct on iOS 12).

API

I have been discussing with a few developers across platforms to open Elytra’s API to them so they can also build apps on top of it. I hope this takes off because that’ll mean more and more apps will be using a more private and secure way to read their favourite RSS Feeds. 

Other than that, I have made some significant changes to the API and RSS Feed Poller in this update. Here’s a quick change log of things which affects us as Elytra’s Users:

  • The RSS Feed Poller now fetches more frequently and now fully complies with all HTTP caching mechanisms. Previously I only used ETags to know if a feed document was fresh or stale. But this sometimes resulted in unnecessary requests. If a Feed now tells that the content is to be considered fresh for a day, that will be respected. 
  • Improved the WebSub protocol support. If you write on your own blog, I urge that you check if whatever engine runs your blog supports WebSub. If you’re using WordPress, there are plugins with enable this feature. It’s simple to setup and you get free real-time notifications for your readers.  

Thank you for your continued support and feedback and criticism. I will continue to work on the iOS and Web apps through November. I’ll be unavailable on email in December but please feel free to get in touch, I’ll try to reply to you during that time whenever possible. Happy holidays. 

Elytra Winter Update Delayed

I had Elytra’s v1.5 build scheduled up pretty tight and ready to go. I submitted it to the App Store for Review and woke up today morning to learn that the binary was rejected because it was crashing. That’s fair. None of us involved want this to happen. 

I checked the crash log provided by the review team and it did not look good. However, a quick run on my devices and reading about this issue (yes! It has already been documented), I have to unfortunately conclude that I’m going to have to delay v1.5 until Apple fixes this issue. 

As soon as an update to Xcode is available, I’ll test things and dispatch a new build. The iOS 13.2 SDK fixes a bunch of issues I’ve been facing since the iOS 13.0 SDK so I hope it is worth waiting. 

iOS 12 Deprecation

Apple recently updated their Support page stating updated iOS 13 adoption metrics. Chance Miller (9To5Mac) wrote about it in detail. With over 50% on iPhones and 30% on iPads, this seems like a good time to deprecate iOS 12 support from Elytra. 

Elytra for iOS v1.5 will be the last pipeline to support iOS 12. v1.6 which is scheduled for Spring 2020 will drop iOS 12 support completely. Some excellent changes await in in v1.6 and I cannot wait to share more details with you. 

v1.4 Fall 2019 Update

Left: Articles List. Center: Folder List. Right: Article Reader.

Dark Mode. Left: Articles List. Center: Folder View. Right: Article Reader.

iPad: Article Reader. iPhone: Feed's Articles List.

Dark Mode. iPad: Article Reader. iPhone: Feed's Articles List.

Fall/Autumn is here and this brings a new update for Elytra with iOS 13 compatibility. Given how the last two updates worked out, seasonal updates with one-time bug fixes updates is working out well, so I’ll be sticking to this schedule.

If you feel generous and have a couple of minutes, please leave a review on the App Store. It makes a huge difference for me. Thank you in advance.

Now, for the change log:

What’s New

  • Full iOS 13 Compatibility.
  • Native Dark Mode support.
  • Most icons used in the app now use SF Symbols (by Apple).
  • The Reader theme now has a Dark counterpart as well.
  • Pop Menus have been repleaced by Context Menus which are new to iOS 13. Long Press/3D Press on Feeds or Articles to bring up the context menus.
  • New Font: Open Dyslexic. This font is well suited for Dyslexic readers. I personally switch between this and the System font choice.
  • Recommendations now shows a list of “Similar” feeds. Similar feeds are RSS Feeds which are followed by a user who follows at-least one RSS Feed which you follow too.

Improvements

  • Improved networking with support for better caching mechanisms.
  • Improved state restoration performance on iPhone 6S and 7.
  • Since v1.1, Elytra would render only sections of the article at a time. In iOS 13, the scroll bar is now draggable, and Elytra’s behavior would break this interaction. v1.4 will now render all text in an article without any memory overhead.
  • Tapping on theme no longer reloads it.
  • Improved the Gamma point for the Reader theme making it easier to read in darker environments (when not using the system dark mode).
  • improved Voice Over support for Ordered Lists & Unordered Lists.
  • Account deactivation is now handled directly through the API. This no longer requires you to send an email to deactivate the account which further ensures your privacy.
  • Improved how Feed Renaming is handled by the app to ensure updates are immediately processed on screen.
  • Enclosures are now added to the article viewer more reliably. Some articles may contain multiple images as enclosures which will be rendered as a Gallery.

Fixes

  • fixed a crash that would occur when loading Youtube videos. Youtube has changed the API response which caused the crash. The new method is resilient to all such future API changes.
  • fixed a state in the Article reader when using the toolbar where the previous and next article buttons would not update their states.
  • fixed the height of Tweets embedded in articles. When no images are present in the tweet, the Tweet context adjusts to account for this.
  • fixed the copy behavior when highlighting text and then tapping on copy. This used a custom implementation since iOS 12.1.4 and I’ve finally found the issue and fixed it. Took over a year ¯\_(ツ)_/¯.
  • fixed the odd behaviour when lauching the app on an iPad would not show the sidebar. This required a custom implementation in iOS 12 to make it work correctly but is no longer needed for iOS 13.
  • fixed sharing of URLs from articles after long tapping on the URL to bring up the Share Sheet.
  • fixed enclsoure images sometimes appearing twice in the feed. This may still happen in some articles (the same image will appear twice because they have different URLs).
  • fixed handling of nested italic and bold descriptors. Previously, only one of the two would be used (latest taking the priority).

Push Notifications & WebSub

Since version 1.0, Elytra has supported the WebSub protocol, and as a natural consequence of it: Push Notifications. 

The WebSub protocol enables Elytra to receive real-time notifications from websites and update the internal cache of latest articles from these websites. 

I recently noticed some abnormalities in the WebSub log that runs every weekend. Quite a few websites:

  • Use an old (outdated) version of the protocol via a plugin (WordPress’ PuSHPress plugin) or similar
  • Use a custom implementation that does not follow the protocol outlined by the W3C Doc. 

This caused several websites to advertise their WebSub Hubs but not respond correctly to the subscription requests. A notable exception was Medium.com. While the RSS Feed URL for these were correct, Medium used to respond with a “incorrect topic url” error which was easy to fix because they also responded back with the correct URL to use for that feed. 

I have since automated the above process, so no further actions are required by publishers relying on such hubs. However, if you are using any other implementation and WebSub doesn’t seem to be working on your blog:

  • Try a different plugin (if you’re using a plugin)
  • Try a different hub (some plugins allow you to define the hubs you would like to use)
  • If you have written a custom implementation, ensure it uses the latest standards defined in the WebSub protocol linked above. 

If you still run in to any issues, please feel free to get in touch with me at support@elytra.app.

Duplicate Blogs

Another issue I noticed is duplicate blogs. A lot of people import their OPML files into Elytra and detecting duplicates is often tricky. The reason is simple, a single blog sometimes has multiple URLs pointing to the same feed. Now the obvious solution would be to check the title, but that doesn’t work either because larger websites have separate feeds based on topics. 

So detecting duplicates is tricky.

Solving the Problem

Both of these issues can be solved in the upcoming dashboard I am working on for Publishers. I hope to create a hub for Publishers to use for a nominal cost as well as enable publishers to group Duplicate blogs and RSS feeds and point to the single source of truth by claiming ownership of these RSS Feeds. 

I’ll be publishing a consultation draft as to which features should be paid and which should be free, but I know one thing for sure: duplicate feeds consolidation will definitely be free for everyone. It is good for Elytra, you and your readers and this shouldn’t be an expense for anyone involved. 

August 2019 Update

Web Service

Over the last couple of days, I have been testing a new way for reliably fetching and caching RSS data from your favourite RSS feeds. 

Ironically, my preliminary implementation of this reliable method wasn’t all that reliable usually not adding new articles to the database. Luckily, I caught this issue within 24h and has now been patched. 

This change matters for two reasons:

  1. Although this new method is slower by almost 50%, it uses less resources like CPU and RAM, so I was able to downsize the server that runs this process. This means a small reduction in operating costs for me. 
  2. I have improved logging across the board so now I’ll know exact reasons why a particular RSS Feed failed to update. So the next time if you reach out to me telling me a feed wasn’t updated in a while, I should be able to resolve it quicker. 

iOS App

The progress on this has been slower than I had hoped. iOS 13 is changing a lot across the Betas, and has been one of the buggiest releases in recent memory. I have all the major things covered but I’m most likely not going to release the iOS 13 release of Elytra until the iOS 13 GM becomes available. 

macOS App

Yes, this is planned. But in the mean time, NetNewsWire is out in Public Beta. Definitely give it a shot. 

Summer 2019 Update

The summer is here (monsoons, for us lucky folks in India) and this brings a new update for Elytra. 

Visually, this isn’t a very big update but I have been able to improve a couple of a things in this release which is detailed below:

New

Toolbars

Using the newer longer iPhones becomes a task when handling them with a single hand, especially the iPhone XR and the iPhone XS Max. I personally run into a lot of issues with my iPhone X. These are big devices and reaching actions at the top in the navigation bar becomes a task by itself. So a new option has been introduced in Elytra v1.3 which enables you to bring all of these actions in the toolbar towards the bottom of the screen.

 Toolbars on the iPhone XS across various primary interfaces in Elytra.

Toolbars on the primary interfaces on the iPad Pro 11 inches and 12.9 inches

Some actions like sharing an article or opening it in the browser are still left to be in the navigation bar. I hope to enable y’all to determine which actions appear in the toolbar and which appear in the navigation bar in a future release. 

Menus

In v1.2 of Elytra, I publicly released the new Extended Layout which was supposed to improve compatibility on iPads and be able to extend the layout to two columns of articles. This was achieved using Collection Views. This introduced a unique problem for me where swipe actions was no longer directly feasible. To address this shortcoming of the app, I’m introducing menus in this release. They bring shortcuts to the Articles interface in Elytra making accessing common actions a little more accessible. 

Menu support on the iPad Pro 12.9 inches and iPhone XS

Improvements

Faster Rendering

I’ve reworked certain sections of the Article renderer so I can add more supported sections to the article reader in the future. But the immediate effect of this is improve rendering speeds on older devices like the iPhone 6 and 6S. The performance improvements are huge when compared to the v1.2 builds but don’t take my word for it, if you try it on any of these devices, let me know your experience. You can email me or send me a tweet on twitter.

Another advantage of this change is to bring change logs to the article viewer. I’m working on enabling this so that changes made to an article can be visible so you can see corrections, updates and deletions if you’re interested in that sort of a thing. 

Improved Networking

I’ve reworked certain sections of the app to improve networking with Elytra’s sync server. This change is extremely opaque to users but what it does is avoid fetching information it does not need at all. This reduces the amount of data transferred from the sync server and helps save on bandwidth. 

Improved Image Rendering

If you start to notice more vibrant images in articles, you got to thank the improvements UIKit Engineers @ Apple have made in iOS 12. As this will be the last version that will support iOS 11 (iOS 13 Betas are either already out or will be out soon), I thought this would be a good opportunity to improve on this. Any images hosted and served by blogs which support the DCI-P3 colour space are now resized according to your specifications while preserving all of that extra colour information. 

Fixes

I am very glad to report that v1.2.3 was a very stable build. It reported, for the first time, 0 crashes which is a huge achievement for me and the app. So I have nothing to report here. 

Closing Notes

I hope you like this build. I am working on adding a few more smaller improvements and changes through the v1.3 pipeline. Have a great summer and if you’re an iOS or macOS Developer, have a great WWDC! 

Marked Read

In the v1.2 release of Elytra, a few users of Elytra started to report unusual behaviour in the app when marking multiple articles as read especially with the backdated articles setting. 

This was caused due to an issue with the API of Elytra which behaved unexpectedly due to a misconfiguration in the iOS App. Today’s release corrects this behaviour and now works as expected. 

This release also contains a fix which works around a bug in iOS 12.1.x where trying to copying rich text from the Article Interface could crash the app. So at the moment, copying rich text wont work as expected and will default to plain text in most cases. 

I’m trying to isolate the issue on my end as far as possible so I can report this to Apple Engineers if necessary. 

I have also been keeping a close eye on crashes and issues you may be facing. I’m happy to report that over the last one month, App Store Connect has reported zero crashes with a healthy usage increase. This is a huge milestone for Elytra and has been possible only because of all the wonderful and helpful people who have patiently worked with me to get these fixed. 

I’ll detail my summer plans for Elytra in a separate blog post. As of now, Elytra’s v1.3 is shaping up to be a really cool release and I cannot wait to share more details with all of y’all. 

The Spring Update

Elytra’s Spring update has been available for a while on the App Store, but due to personal reasons and prior commitments, I was unable to write this post. So let’s get down to it. 

To celebrate the Spring Update, I also took the opportunity to update the main website as well. I’ll be making a couple of tweaks to it to fix some responsive design issues, but apart from that, I hope you like it. I also tried making the Privacy aspect of Elytra and the pricing structure (thanks to the wonderful people behind Capsicum app for the inspiration) a bit more clear and upfront. 

Version 1.2 has by far been the most involved update I have worked on for any app. On the surface, not a whole lot has changed, but under the User Interface, significant changes have been made to improve rendering times for the Article Viewer, networking, continuous efforts to reduce power and network bandwidth consumption and a whole lot more. 

As for the changes directly noticeable, let’s go through them. 

What’s New

In v1.2, I tried to make finding blogs that match your interests a little simpler. Once again, I did not want to implement a “My interests” based system where Elytra harvests this data and recommends blogs to you. As I noted in my previous post, Improving Discoverability, I harnessed data already available to Elytra to help you find new blogs. You can read all the details in that post. 

The Add Feed Interface now also enables you to search for Feeds that match the Feed's Title or keywords to your text queries.

To further improve upon the same system, adding a new feed now expands to three separate sections: 

  1. The traditional: add by entering a link method. 
  2. Searching by the title of the blog.
  3. Searching by keywords associated with the blog. 

All the information above is made publicly available to Elytra and blogs can change this information anytime. Elytra does not add any information to this so all results you see are Best Match only. 

Apart from this, the Extended Feed Format is now default and the older list format has been removed from the app completely. The newer design and layout can accommodate a lot more information and a variety of settings to show and hide that information with better compatibility. I highly recommend you check out the Miscellaneous section under the App’s Settings for all possible options. 

What’s Improved

Apart from what I mentioned earlier in the post, there aren’t a whole lot of improvements in the app that are visible. Most changes have occurred “under the hood” to improve performance and stability of the app. 

Apart from all the new things and improvements, I was able to fix a lot of bugs from v1.0 and v1.1. As of right now, Elytra has no crashing bugs that I am aware of. This brings it to a level of stability that gives me free time to build other cool stuff for Elytra.

I have one more patch update Waiting for Review in the App Store which will bring the highly requested Reader and Flutter (flatter, but wings, so flutter) App Icon options for you to choose from, so I hope you like them. 

Closing Notes

After the release of v1.2.2, if any bugs come up, I’ll be patching and fixing them in v1.2.3. But if nothing comes up, I’ll commence work on a few other related projects and v1.3 in March. As always, I really appreciate the wonderful reviews y’all write on the App Store and I enjoy reading your emails, so please keep ‘em coming. Cheers.

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