Today, we received notification from Apple that 3D Camera Lite (the free version of 3D Camera based on the upcoming 1.2 update) was rejected:
Thank you for submitting 3D Camera Lite to the App Store. Unfortunately it cannot be added to the App Store because it is modifying or extending an undocumented API, which as outlined in the iPhone Developer Program License Agreement section 3.3.1 is prohibited:
“3.3.1 Applications may only use Documented APIs in the manner prescribed by Apple and must not use or call any private APIs.”
There is no documentation for the custom subclasses or self-contained views of UIImagePickerController – this includes PLCameraView and its custom subclasses (PLImageTile, PLRotationView, PLImageScroller, PLImageView, PLCropOverlay, PLCropLCDLayer, TPBottomDualButtonBar, TPPushButton and TPCameraPushButton) – in the iPhone SDK.
We’re familiar with this particular rejection, because 3D Camera 1.0 was rejected for the very same reason when we initially submitted it to the App Store. The first version of our app did modify the UIImagePickerController views in an undocumented way in order to make it quicker and easier to take two simultaneous photos. When taking left and right photos for 3D images, it’s critical to keep the camera orientation stable for both photos; the more you have to touch the screen and the longer the duration between shots, the lower the quality of the final image.
So, to comply with Apple’s rules, we removed this custom camera functionality. The only functionality we could keep was the overlay that shows “Left Image” and “Right Image” along with a translucent version of the left photo to assist with alignment of the second shot. We did this by adding a a UILabel and UIImage over the top of the UIImagePickerController. We did not do anything that could be considered “modifying or extending an undocumented API,” and none of the functionality depends on anything within the UIImagePickerController itself. We’re long time software guys, and we completely understand how brittle an app can become if it depends on undocumented internals.
From a developer perspective, this diagram illustrates how the 3D Camera overlay is implemented:
This “fix” was approved by Apple, and it’s the same functionality that has been in 3D Camera 1.0 and 1.1 for awhile now.
So, it’s puzzling to us that Apple has rejected version 1.2, when we’ve changed absolutely nothing about the camera functionality. To be honest, we’re not entirely sure that this is the reason that it’s been rejected, because the e-mail (above) is very vague. Follow-up e-mail exchanges have failed to provide any more clarification about the issue that is causing them to reject the app. Responses are along the lines of: “In order for your application to be reconsidered for the App Store, please resolve this issue and upload your new binary to iTunes Connect.” If we knew what “this issue” was, we’d happily and quickly work to resolve it.
The worst part of the process is that we’re in the dark about what to do. Additionally, because the app has now been rejected, we’ll be forced to wait through another lengthy review period, and we may end up right back where we started.