Ten Years of Monal

If you  look at the top of some files you will notice the year they were made is 2008. I realized today that come the new year, it will be 10 years since I began to write Monal (then called SworIM).  All of this came up after a conversation at brunch one day with my brother about how our fancy new iPhone 3G didn’t have a better messaging ability and the only way we could message was by email.  We could use text but SMS cost money in those days.

Back in the magical year of 2008, the iPhone was on its first iteration. iPhone OS 2 was coming out (it wasn’t called iOS until later). iMessage was not going to be a thing for at least 3 more years, whats app didn’t exist. Push notifications didn’t exist and there were no 3rd party multi tasking capabilities on the iPhone. In fact, the most popular messaging client was AIM, which stupidly disconnected every time you closed the app.  Initially Monal supported both AIM and XMPP because people (including myself) used AIM a ton back then.

Much of the code for Monal is actually based on the API introduced in iOS4. With the removal of VOIP sockets, it looks like APNS push and side by side multi tasking (iPad) is the only way that Monal will multitask going forward.  Additionally, I going to focus on keeping the code as modern as possible. I have been very conservative with changes to support as many older iOS versions as possible,  the App Store has the ability to retrieve the last compatible version now  so older OS versions will still have a functioning client. This should improve stability and make changes easier.  Additionally, iOS updates do not cost money anymore so its not unreasonable to expect everyone to update.

In fact, there are some screens that are exactly the same from 10 years ago.

 

Something that’s been long over due is a new icon.  I’ve been tinkering with the idea for a while and decided to try it out yesterday.  This is the first iteration on the new icon. I would love feedback — esp since I made it myself based on vectors of the old one, so it’s hardly the most professional looking thing.  The SVG is here is you want to play with it. I think we can all agree the new icon looks better in the post iOS 7 world. 

Storyboards and Google

I’m currently working on a feature branch that will  be merged into develop when complete.  If you are curious to see whats going on look here:

https://github.com/anurodhp/Monal/tree/ios11-iPhoneX

The storyboard board migration is almost complete and with that side by side multi tasking. For iPad users, this should be a major improvement.  Additionally, dropbox and google login broke due to changes in the API. I am working on restoring both of those as well. Google for iOS is almost complete and will be followed by OSX soon .

I am currently testing side by side :

 

I’m back

I’m sure you have noticed that there hasn’t been an update to Monal in almost a year. I’ve been incredibly busy and haven’t had the free time to work on this project.  Development has restarted again and  I hope to put out an update soon.  There are certain things that I will focus on in this next update and depending how it goes may be one of the biggest updates since Monal 2.

Code Modernization

Much of the Monal code was written for iOS 2 in 2008.  I have adapated it to work with changes in recent updates but it is in severe need of a clean up.  Part of my hesitance to adopt every new feature has been to support older OS versions.  I have decided to focus on iOS 9 and up.   This will reduce the scope of work, testing, and allow quicker changes.

Storyboards

I never adopted storyboards when they came out in iOS6.  Storyboards do a lot of nice things for you but they have certain downsides for code reuse.  Apple has done a lot to improve it in the last half decade, and for graphically simple Apps like Monal however, they are perfect.  Using a storyboard to handle the presentation will allow me to focus on the backend XMPP code more than fiddling with the UI for various screen sizes.

Multi tasking

Storyboards will allow me to quickly deploy side by side multi tasking that came with iOS9. This is even more important now because of multitasking changes in iOS10.

The VoIP socket I used to multitask is deprecated and appears to be done. I will be deploying a server on AWS to handle APNS push notifications.  This will require adding push modules to your XMPP server  but should have much better reliability than the older approach — one of the reasons apple got rid of it after 6 years.  This is also one of the primary source of crashes in the App.

XMPP Parser

There as a bunch of bugs in my XMPP parser. PArt of the reason for that is I do not use the streaming parser introduced in iOS5. This is much further along the way but will likely result in a major rewrite of the XMPP code.

Continuous Integration

The improvement to Xcode Server in Xcode 9 means that I can reliably run tests now on commit.  I am setting up Prosody, Openfire and jabberd servers that I can test all the basic XMPP functanility on with every commit. This should reduce surprises post release.