Few days after the AppStore release of Sky Blue, I've received a few bug reports. Each described the app as completely unusable due to crashing after startup. I was truly surprised considering the amount of testing that I've commited. Of course, 1-star AppStore reviews followed.
One device that I didn't test was the new iPhone 5 - I've optimized the UI for its taller screen but I had no access to the hardware itself. After exchanging emails with the users that contacted me, it became obvious that the bug is iPhone 5-exclusive.
I was unable to determine anything as the crash reporting functionality of iTunes Connect proved completely worthless, stating that "too few reports have been submitted for a report to be shown". What the hell is that? Was I to wait for another dozen of 1-star reviews? I know that at least one user affected by the issue had the report sharing enabled and did sync with iTunes, so Apple screwed up something on the way.
My first thought was the fault of some new hardware in iPhone 5, with CPU utilizing the new ARMv7s architecture being the prime suspect. Still, that would be weird as I haven't compiled for this arch and released ARMv7-only binary which iPhone 5 is supposed to support.
As AppStore doesn't offer an option to block app sale just for iPhone 5 (thanks again Apple!), I was left with but one option: to buy an actual device. I would normally never even consider it due to completely ridiculous price taag of even the cheapest model...
One thing at which Apple did surprise me positively was the amount of time it took them to deliver the phone, ordered in Apple Online Store not long before Christmas. I got it in just 5 days. But then again, it was so expensive they could have sent it via private airplane straight to my house.
I was almost happy to see the app crash on my brand new iPhone, as I would be more than screwed if it didn't. One look at the crash log and it became obvious that it was mipmap generation at fault. So it wasn't the CPU as I suspected before but the GPU and its driver.
Still, I'm not sure if I would figure it out based only on the crash log and absent the faulty device. That's because
glGenerateMipmap is asynchronous on iOS and therefore crash logs don't point to the instance of
glGenerateMipmap that is responsible for the crash.
Like many who use OpenGL textures, I was generating mipmaps for most of loaded textures using
glGenerateMipmap, but it wasn't that context that was at fault. I've also initialized mipmap levels for one special framebuffer on its creation using the same function. This is a foundation for fast bloom and DoF effects in my engine. And voila, that was the faulty piece of code that did cost me so much lately. Long story short, manually uploading the levels using
glTexImage2D fixed the issue.
Once again, I consider this a fault on Apple's side. No part of their documentation state that
glGenerateMipmap is asynchronous. No part of it warn you about its usage. And above all, calling
glGenerateMipmap should guarantee that after these calls, OpenGL has everything ready - that is it fact a basic principle of OpenGL as a state machine. Not here.
Even on iPad 3 on which my engine didn't crash I observe a substantial delay (at least one minute) before the mipmap generation gets effective in case of some textures. I find no such behavior on iPhone.
Is this what you call a unified platform, Apple? Are we indie developers supposed to own every device you release?
The bottom line
Anyway, the problem was solved and an update has been issued to AppStore. Unfortunately, I'm afraid it will not make it there until New Year's due to AppStore Christmas submission overload and one week during which it will be completely down.
Oh, about that. Could someone explain to me, what exactly am I waiting for upon each app submission if Apple let my app into AppStore despite it being completely unusable on their newest flagship device? And one week later they approved my 1.01 update which of course still contained the critical bug. I don't expect them to be my private bug testing team, but I expected them to do something except checking if my app icon contains porn, especially considering enormous delays.
My sincere thanks go to users Vania and Valerie for heads-up about the issue and kind words in situation when most iPhone 5 users just wanted to crucify me on the AppStore. I'll continue my effort tor people like you. Thanks!