I'm trying to build a QRCodeReader
for a project our research group is working on for the iPhone. After much research I found the program called QuickMark
. This program scans automatically for QRCodes. What it appears to do is load the UIImagePicker
and read off data from the camera. I suspect it is using UIGetScreenImage
and taking a screenshot from the camera and decoding it.
Now I tried using the new takepicture()
method from the 3.1 iPhone API but that seems not to be able to do what the above does which is take photos every second or so, silently. Now I had heard that UIGetScreenImage
is perhaps not legal and that Apple will turn around and deny access to your App if they use it. So, my questions are:
a) Is Quickmark
(or any other allowed app) using UIGetScreenImage()
and if so, is it legal and,
b) would it be possible for takepicture()
method to do the same sort of thing?
RedLaser is definitely using UIGetScreenImage(). A quick glance at the symbols in their library confirms it.
"Legal" is a really vague term, but I think what you mean is would the app get denied. There is a laundry list of things that could cause app denial, but one of the grayest of gray areas is the use of private headers. Google got away with it in their search app, but the internet was ablaze in fury for a few months while people wrote very sternly worded blog entrys. Bottom line, you can do whatever you want, but if you get caught, good luck to you.
The APIs pretty much work the way they work, it should be simple enough to loop a call to takepicture with a NSTimer just be careful with how you do it, seems like a heavy handed process to me.
You will get your app rejected for using UIGetScreenImage().
My app was rejected (today) for using this call. :( I'm searching for a new solution as I type ...
http://www.redlaser.com/SDK.aspx
Here they are hinting at having used this function, with reference to this page.
Something should be updated now ?
UIGetScreenImage should be legal now.
There is a way to capture video data from camera without using UIImagePickerController or UIGetScreenImage().
It is available since iOS 4.0 in AVFoundation Framework. see here how.