When we started work on 21 June we read a couple of reports on our Twitter account saying that the app was crashing. We assumed this was just an isolated case since the app has been running fine up until then so we redirected these users over to the main support page. After loading the support site we found a long list of people who were reporting the same issue, clearly there was a problem. Other users who were following our Facebook page commented on our latest post to let us know too. Thanks to some users for providing crash logs taken from the Mac app we were quickly able to find the problem. We ran the app here and immediately saw the same crash as people were reporting.
Both the iOS and Mac apps sold from Apple's app stores communicate with Apple on startup. They do this to load the names, description and local pricing of add-ons available. Apple's In-App Purchase servers respond with this data, which the app stores and displays on its Add-ons screen.
At approximately 02:40 GMT on 21 June, Apple's servers began responding with invalid data. This caused Easy Books to crash. We looked through the Apple developer forums for anyone else experiencing the same trouble and discovered a few conversations with exactly the same issue. This affected quite a few other apps, including an app that had just reached a high position in the "top" charts. The developers were especially upset because they received bad press and a lot of one-star ratings as a result.
Many of us reported the problem to Apple by phone and by using one of our "incident" tickets, which are a paid part of the Apple Developer Program. Apple development are based in California, so this was in the middle of the night for them and there was no response until 15:29 GMT.
While the problem was happening, we were advising everyone to disable networking on the Mac and disabling In-App purchases on iOS using the iOS settings.
At around 20:30 GMT Apple fixed the problem and the app now works properly.
This issue was caused by invalid data reaching the app from Apple. We realise we have coded in an implicit trust between the app and Apple's servers, having assumed this data would always be valid. We have changed the code now so that all incoming data is checked to make sure it is valid before being accepted and stored in the app.
We would like to acknowledge all the help and support we received from you. The Facebook page seems to have worked very well for this, it helped get the word out to show that you were not alone with the problem. Many of you helped by sending information that we could use to isolate the problem, others suggested workarounds such as using Airplane mode, and we were encouraged by your positive comments on Facebook and Twitter telling us these had worked for you.