Why Apple made me trash two months of work.

It all started with a speeding ticket in September. I knew there was a fixed speed camera at that particular location, but my distraction turned out to be rather costly. This got me thinking.

The Idea

A mobile application that notifies the driver whenever a speed camera is approaching. The application needed to be extremely simple to use; download the app, enable notifications, and you never have to launch it again.

The Execution

Without going into technicalities, the main problem with this approach is that iOS apps can only run in the background for a short period of time.

I did my research, and found a solution that used both the motion coprocessor and the GPS to keep the application alive just enough to check for the user’s position; this ended up costing only 1–2% of battery life in 7 days. Quite an achievement considering early prototypes were draining the battery overnight.

Test Flight

By mid November I had a name. Malta Speed Cameras was ready for public testing. The new iTunes Connect integration with Test Flight gave me an opportunity to test it on a lot of devices before launching. The target was to launch in December.

Rejection

In just 24 hours I received Apple’s verdict, App Rejected.

22.1: Apps must comply with all legal requirements in any location where they are made available to users. It is the developer’s obligation to understand and conform to all local laws

——- 22.1 ——- Your app contains content or features that facilitate, enable, or encourage an activity that is not legal in all the locations in which the app is available. This is not in compliance with the App Store Review Guidelines. Specifically, the primary purpose of your app is to identify speed camera locations. We encourage you to review your app concept and evaluate whether you can incorporate additional content and features that are in compliance with the Guidelines.

I changed the name of the app to Malta Speed Alerts, added some functionality and resubmitted. Rejected again.

Granted, maybe Apple are not familiar with Maltese laws and regulations and are taking the safest way out.

By January, the application was still unpublished. So, I contacted the Maltese Transport authorities who confirmed that the app would be legal as long as it doesn’t distract the driver.

I reverted to the original name, and attached a copy of the correspondence to the Test Flight submission, this time thinking that it would be enough to get approved for Beta testing. I was wrong. The app got rejected for the same reason.

So I appealed. This was Apple’s reply:

The App Review Board evaluated your app and determined that the original rejection feedback for the current version of your app is valid. Your app does not comply with: 22.1: Apps must comply with all legal requirements in any location where they are made available to users. It is the developer’s obligation to understand and conform to all local laws We understand you have received an email from the Malta transport authority. We also understand your app will only be functional in Malta. However, it is not appropriate for the sole purpose of your app to display the location of speed cameras, and alert users to their location. This is not appropriate functionality for the App Store. In order for your app to be reconsidered, it must provide additional features and functionality in addition to the speed camera location functionality. For example, the location of other possible road hazards the user may want to be informed about. Displaying the camera locations on a map is not sufficient additional functionality, as it is still only displaying speed camera locations.

How is this acceptable?

Conclusion

I understand that the review process is there to safeguard the integrity of the app store; however, it has recently become the centre of many infamous rejection stories. This, in turn, ends up hurting genuine app developers.

How can anyone test new ideas with the threat of being rejected by the app store for any reason? Should we publish on the Play Store instead?