This was a hard decision to make, but I have decided to completely remove all early versions of Mignori from the App Store. But worry not! Mignori 2.0.0 will come out in the next few months, as a lot of the core functionality of the app is completed (You can get early access to the app by joining our Testing Program, *wink wink*).
There’s a few reasons the first versions of Mignori are getting pulled from the App Store.
1. I want to be honest with myself, but more importantly, I want to be honest with everyone who purchased the app. Mignori was my third app that hit the App Store, and code-wise, it is pretty amateurish. I started development of Mignori in late 2013 and managed to publish it in early 2014. With university and other responsibilities, it was hard keeping it up to date. The last update it received was in June 2014. It was the first big project I ever completed and as such, it’s a mess internally. I could go on and on about the details of what is wrong with Mignori, but in short I believe I incurred in technical debt. The code is so bad that even if I tried to compile Mignori 1.x.x now, it would be a challenge.
2. Everything from the first point has direct consequences for end users: Bugs and crashes. Bad code is bad. Not only for the developers who have to maintain it, but also for the users who have to deal with its consequences. For a long time, it looked like Mignori had very few bugs. But time has shown that is not true, and the latter reviews the app received are proof of that. Early reviews of the app are fantastic, but latter reviews show that the codebase really aged. It is unfair for my end users to pay the Mignori Pro fee when the app cannot keep up with their expectations. I never made enough money to consider the app lucrative, but it did pay for my developer license for two years. I want to take this chance to thank everyone who did buy the Pro version.
3. -Booru sites are just websites, and they change with time. In the time Mignori has been in the App Store, I have seen Boorus break compatibility with it and cause even more annoyances for my end users. When Gelbooru changed their API rules, we (both I and the people who help me run social media) a lot of e-mails and messages asking for help to make it work with Mignori again. Mignori 1.x.x. Currently has a very inflexible way to deal with Boorus. If a Booru changes their API usage rules or need other shenanigans to work, there’s nothing Mignori 1.x.x. Can do about it. Gelbooru is a good example, because previously it did not need authentication. Later they changed their API to need it. Mignori 1.x.x. has no way to deal with authentication (and due to the messy code, it’s not easy to add it, either). Behoimi is another great example of a Booru that could work with Mignori, but doesn’t. Technically, they require a certain value in a certain HTTP header. Mignori 1.x.x. had no way to set the HTTP header, and while it could’ve been added, the ways of doing so were less than ideal. I was incompetent, and the messy code was not on my side to help me. I could never deliver a fix for Behoimi and Gelbooru in Mignori 1.x.x. This is just the truth, and it’s one of the lessons you learn. I do not think I am incompetent anymore, but tinkering with the Mignori 1.x.x. code is not an option at this time. Actually, I may try to open source it so people can check it out (and make fun of me, of course!).
4. Collections are one of the most liked features of Mignori, but internally, they are implemented poorly. Very poorly. This is an important reason to remove Mignori 1.x.x. from the App Store, because the old collections format is simply not portable to the new one. This means that, at least at first, Mignori 1.x.x. collections will not be importable to Mignori 2.0.0. I do not want people to download the app and spend time building their collections as they wish only to find they cannot import them to Mignori 2.0.0. This may be a feature in the future, but it is not a priority. I’m planning on “open sourcing” the way Collections are stored, although anyone who has looked at Mignori’s files, with jailbreak or without, probably already have a vague idea of how they work. I will also try to detail the new collections “format”. I want to do this with hopes that some other developer, wether an aficionado or a profesional, will find time to write a Migrator tool for Mignori 2.0.0. I would be willing to help such developer with whatever I can.
5. The business model is changing. Mignori 2.0.0 will be released in a Lite and full versions instead of an in-app purchase. Does the first version of Mignori bug you a lot with inserting your Apple ID credentials? I hate it, too. While enough time has passed and I now know how to implement In-App Purchases properly, I believe releasing the “Lite” version is a much better way to try Mignori without committing to the Pro version.
Mignori and the Future.
The good news is Mignori 2.0.0 is being rewritten from scratch. There is not one single line of code shared with the original Mignori code base. Mignori is also being rewritten in Swift, and while this on itself has its challenges (Swift is rapidly evolving, and just like Swift 2 broke a lot of compatibility with Swift 1, it’s very likely Swift 3 will do the same), those challenges are much easier to solve than code that has incurred in technical debt due to me not having the right skills are having designed a very poor architecture for the app.
A lot of care is being put into Mignori 2.0.0 to ensure I do not make the same mistakes I did before. I now have more knowledge, and more experience, to implement this app as it should rightly be. I have started development of this app many times in the past year, but I have scratched two prototypes because they did not meet my expectations, and they definitely would not meet the expectations of my users. The version I’m working on now was started on August 2015, and a lot of care is being put into every choice. With the help of the testers I have, I am able to work out quirks and annoyances before they reach bigger masses. I spent almost three months just working on Booru compatibility, to ensure Mignori works on as many boorus as possible. It is impossible to make every Booru work, but I can definitely make most of them work. If the Booru does not expose an API (as is the case with .booru.org sites), then it is not possible for it to work with Mignori. Compatibility with Gelbooru is fully fixed in Mignori 2.0.0. Behoimi finally works, too. And to the happiness of many, I even developed a way to make Derpibooru work, which was one of the most requested Boorus. Most quirks with most boorus can be dealt with the new Servers format which allows for much more flexibility than before, without using usability as a sacrifice. Adding Boorus in Mignori 1.x.x. was pretty easy. In Mignori 2.0.0, adding a server requires more work, but I developed a feature called Mignori Index, which autopopulates known servers for you when you write their name. Similarly when you try to add a Booru that we know doesn’t work, you will get a warning saying so. Mignori 1.x.x. had a similar feature but it was hard-coded into the app. In Mignori 2.0.0 the feature is dynamic, and we will add new servers as we learn about them.
The latest Alpha builds released to my testers include many requested features, such as Touch ID. Mignori will keep evolving, hopefully from this same code-base without incurring in technical debt once again. I do not want to make the mistakes I did with Mignori 1.x.x, and I do not want to annoy as many users as those early versions.
There is still no ETA for Mignori 2.0.0, but I’d say it’s… Around 75% complete. I need to start working in Collections (which is one of the most challenging features of the app to get right) and Filters, and I will have most of it done. My goal is to release Mignori 2.0.0 in the first quarter of this year, so if everything goes to plan, it would be out by April. This is an estimate and it can definitely take longer. I still have a university to attend to and a job to fulfil duties at, so unfortunately, I cannot work on Mignori as diligently as I’d wish.