captureStillImageAsynchronouslyFromConnection:completionHandler: I do not think that Apple uses for its batch mode.
Instead, Apple * captures full-resolution video frames (which is supported by 5th). Here's how:
AVCaptureDevice is set to activeFormat for full resolution of the sensor, then you capture and process 10 frames per second from AVCaptureVideoDataOutputSampleBufferDelegate captureOutput:didOutputSampleBuffer:fromConnection: causing a shutter sound for each frame capture.
For devices that do not support video, at full resolution by the size of the sensor, and / or if you want to support something, you will need a snapshot (low-resolution images or a mode with a slower batch mode) older than iOS 7.x.
Note that you cannot use multiple simultaneous use of captureStillImageAsynchronouslyFromConnection:completionHandler: without any extremely unexpected results. This is why you should call each iteration from the previous completionHandler (which, in essence, is what your semaphore does). In addition, you can switch from PNG as a file format for batch images - it saves very slowly and requires a large amount of system resources - 15 or 20 PNGs can cause you serious grief!
* This is likely to be done, because, of course, he can use a private API to achieve the same end result.
source share