iOS 3.7 Change list

The near final 3.7 beta should be going out to testers right now. This is what will change in the next release.

  1. Fixed OMEMO session creation errors on some servers
  2. Fixed performance with attachment downloading
  3. Fixed wrong/older image being shown in chat cells
  4. Added ability to set nick names on contacts
  5. Added a photo browser for conversation images
  6. Show full name and not JID on notifications
  7. Fixed bug that might cause duplication of sent messages
  8. Notifications now have image previews
  9. Fixed a bug that wrongly showed messages as failed to send
  10. Fixed a bug that didn’t update messages when retrying
  11. Reduced network and battery use
  12. Fixed a bug that caused a disconnect loop in certain network conditions

Why do I have so many accounts?

If you have talked to me on XMPP you will notice that I often switch accounts. I keep four active accounts, two accounts on two different server platforms each that I test with the most (Prosody and ejabberd). I am a big fan of dogfooding, as in using my own product to see where the pain points are for users. This is often what spurs me to go in and fix something seemingly random. It annoys me.

I originally stated the end goal of this app was to be a replacement for expensive SMS plans. That was a decade ago, I now want to have a respectable open source alternative to WhatsApp and Facebook Messenger. This current iteration of Monal will be “done” when someone can just tell their family and friends to contact them on Monal. You shouldn’t have to explain much else. If you do then there is something to fix. This often requires me to find a balance on default settings that preserve privacy but cause the least amount of friction for users. I know from experience (and a decade of metrics I’ve collected) that every additional screen in setup causes a a large drop off in users. Every additional exposure to the of the inner workings of XMPP (e.g. the roster, online/offline e.g.) causes people say this isn’t user friendly and drop off. If you are wondering what the product direction for Monal on iOS is, it is a balance between secure and private and simple. This may be infuriating at times to other people who are techies but bear with me, if we can get more people to use XMPP, it is better for everyone.

There are about 25,000 devices using the Monal push sever at the moment. The good news is there have been very few errors on the server and my AWS instances have been able to handle this traffic without problems. This also provides me with a lot of data points for the effectiveness of push. For most people it near 100% reliable. I am trying to nail down some issues with notifications. I think I have found issues on both prosody and ejabberd’s push modules and will file bugs to work with the developers. They are two different issues, prosody servers seem to send hundreds of extra pushes and will drain your battery (this is especially true if you have group chats, which is how I found this). The battery drain at times is pretty terrible. On an iPhone X it was using 20% of my battery at least and was running for 14 hrs in the background. Ejabberd in comparison uses maybe 1% battery in a day with a few min in the background. Interestingly the bug I have found in ejabberd is the opposite, occasionally, for example at night, when there is a prolonged period of inactivity, some pushes do not arrive and there isn’t a notification for the message.

If you want to help me test things out, feel free to send messages to any of these addresses:

My Prosody test accounts:

My Ejabberd test accounts:

Notification Names and Image Previews

As I’ve mentioned in the past, a focus of Monal development going forward is going to be improving the UI/UX. I have been thoroughly modernizing many components of the app that have been largely untouched for years. Notifications and image handling is one of them. This is how I added the aesgcm: encrypted link support as well as grouped notifications. Building on that, I have updated notifications to show a preview of the image (which is transparently decrypted in the background) as well as showing the senders name instead of the JID.

Progress on OMEMO and Push

There are several bug fixes coming in the next release. I have been working in improving OMEMO and i think I have identified the issue preventing some people from starting new sessions. I am also fixing performance issues in the image handling introduced by the aesgcm links. After those are resolved I will add support for sending aesgcm links for attachments. In the process of looking at performance I have noticed higher then expected battery use when connected to some prosody servers. I hope to work with the server side developers to figure out whats going on there. Generally speaking it appears to me to be due to push notifications sent for more than just new messages. I am also testing with ejabberd to see if there is a problem there as well. Genreally speaking though I believe that XEP-0357 that defines how this is supposed to work is flawed and needs to be updated. It is very trusting and does not give the actual app developer the ability to regulate pushes based on the capabilities of his app. A few minor changes to the specification would let us make something that can compete with the experience of proprietary chat clients.

Unread Message Indicator

I have added an unread message indicator in the chat screen to indicate where unread messages begin. You can see this towards the bottom in the screenshot below. This should be useful when combined with the new date separators and shorter date display.

At this point. I think 3.6 is done with new features. The final change log is:

  1. New streamlined chat ui
  2. Support for aesgcm encrypted attachments inline
  3. Support for new line in chat and enter to send messages only when a hardware keyboard is attached.

Encryption Issues Resolved

Based on the feedback from the last beta, I have found and fixed the issues with encrypted messages going to conversations. I have also improved the image handling code in general and we should see significant performance improvements (and less pop in). There is a new iOS beta out with a Mac one coming soon.

AESGCM:// links

I have added support for aesgcm:// links on both iOS and Mac clients. There is still a bit of optimization to be done but it should be in the next client releases. It appears that the documentation for this functionality is wrong which made things a little tricky. It turns out the IV is 16 bytes and not 12 as it is written. Additionally unlike what the xep says, OMEMO uses GCM 128 and this uses GCM 256 and has a different key length.

iOS Updates

There was an iOS App Store release. I mentioned in the release notes that there was a security fix. The specific fix was a bug that didn’t save user preferences when deselecting OMEMO keys in the UI. I am generally good about clarity with security changes (see the SSL changes) I will be better about it in the future.

I am working more on iOS at the moment. The chat UI is a bit more refined. I have adjusted the dates and the spacing between cells depending on the message before it. iOS users who have used Messages will find this familiar. I will work on aesgcm:// links next. It may not make it into next weeks release but likely the one after that.