The customer crash reports that Apple now makes available showed me a problem with GeoCorder that I had missed.
- Removed redundant code that would load and save tracks in a seperate file in addition to the trackpoints written directly to a SQLite database while recording. This could cause timouts on program exit and long loading times at program start for people with lots of recorded trackpoints.
- Thus program start and exit are now much faster for people with lots of recorded tracks.
It’s embarrassing I know, but how can you spot such a thing? When you test your app you don’t think to record so many tracks that applicationWillTerminate will time out and be aborted by the iPhone OS. But thanks to the crash reports I was immediately steered in the right direction of what to fix.
I’ve submitted this quick fix release to Apple, more usability enhancements are in the works.
UPDATE May 16th:
Apple rejected the update claiming that without network connectivity the screen stays black. That’s not possible because GeoCorder has a Default.png image and there is no network activity unless the user sends a track via e-mail. I tested the app on my iPhone 3G on 2.2.1 and iTouch 3.0b5, with and without network. No black screen.
But to be safe I ran Clang Static Analyzer over the code for 2.0 and even 3.0 and found a couple of unused variables, a mismatch between unsigned and signed and one code file that was not even used. So I cleaned those up and resubmitted.
UPDATE May 21st:
Apple rejected it again this time with an even more annoying message. But this time is the first time that they actually provide some information how I can fix it.
Your application, GeoCorder, cannot be posted to the App Store at this time because it does not adhere to the iPhone Human Interface Guidelines as outlined in iPhone SDK Agreement section 3.3.5.
When the device is not connected to a network, GeoCorder does not load its contents. When the user is on the “Record GPS Tack” screen the App fails to load location (please refer to screen shot). This behavior might lead to user confusion. It would be appropriate to display either a notification or an alert stating that internet connectivity is required.
Please take a look at the Reachability iPhone program sample which demonstrates the use of the System Configuration Reachability API to detect the absence of WiFi and Wireless Wide Area Network (WWAN) services. Your application can then take appropriate action at the first point where network services are required.
Translation from convoluted to plain English: In Airplane Mode the iPhone does not get Core Location updates. Now why do they think of this NOW on the THIRD version I submitted to them for review?!
SECOND UPDATE MAY 21st:
I finished the app (once again) and submitted it to Apple with these enhancements:
- I revamped the inner workings of the blip graph so that it can show recieving of Core Location updates independently from whether the user chooses to record them or not. Non-recorded blips are grey, recorded ones are red.
- Position updates are now active as soon as the recording modal screen is opened and are deactivated as soon as the screen is exited.
- Implemented connectivity sensing according to Apple’s suggestion. If you enter the recording screen without internet connectivity you get an alert to that effect.
- I made a nicer splash screen, because having it look like the final recording table view would anger users because it would look like for the time of loading that the app does not react to user input.
- Also I submitted a new free version of GeoCorder which will be sponsored by AdMob. It’s technologically identical to original GeoCorder.
I’ll update as soon as they get through.
UPDATE May 24th:
I received a crashing bug rejection (for a change *G*) for GeoCorder [FREE].
Thanks to the attached crash report and detailed instructions on how to reproduce the crash I quickly found the problem and fixed it. I had a dangling object reference to previously released memory. This would show if you recorded a track, removed it and tried to record another. Since both GeoCorders share the same code I had to replace the binary for regular GeoCorder as well.
Apple is getting faster, at least with newly submitted apps. I’m glad Apple Reviewers are working on Saturdays as well to work through new apps. That can only mean that they have multiple shifts, because Saturday is not a regular work day in the USA.
UPDATE June 16th
Apple had approved the free version rather quickly but the regular version was stuck “in review” even though it contains exactle the same code and functionality minus the ads. I wrote to Apple two days again and now finally the regular version became available as well.