2012-01-05 64 views
0

我试图创建在所有iOS设备的工作原理,除了在iPad 2和iPod Touch的第五将军功能如何在功能中排除iPad 2和iPod Touch第五代?

- (void)doSomething { 

// if iPad 2 or iPod 5th Gen 
if() 
{ 
    NSLog(@"You're using an iPad 2 or iPod 5th Gen. Sorry!"); 
} 
else 
{ 
    NSLog(@"Any other iOS device. Congrats!"); 
} } 

有人能后的我会是如何实现一个快速的示例代码段?

+1

苹果可能会拒绝你做这件事的应用程序(推荐方法是排除/包括基于可用的硬件功能),但您可以从sysctl(3)调用中获取硬件型号。由于没有iPod Touch 5G,你必须得到它的型号字符串,你或者只能包含当前已知的硬件模型(和猜测)或排除特定的已知硬件模型(例如,iPad 2是iPad2,1 iPad2 ,2个iPad2,3分别用于WiFi,3G和CDMA型号)。 – 2012-01-05 21:13:32

+0

好的,有没有办法确定相机是否具有自动对焦功能? – 2012-01-05 21:14:23

+0

是的,对于UIRequiredDeviceCapabilities Info.plist键,添加自动对焦相机条目。有关UIKit键及其定义的完整列表,请参阅http://developer.apple.com/library/prerelease/ios/#documentation/General/Reference/InfoPlistKeyReference/Articles/iPhoneOSKeys.html#//apple_ref/doc/uid/TP40009252-SW1 – 2012-01-05 21:17:21

回答

0

检查:

if ([[AVCaptureDevice defaultDeviceWithMediaType:AVMediaTypeVideo] isFocusModeSupported:AVCaptureFocusModeAutoFocus]) { 
    //device with autofocus 
} 
else { 
     //device without autofocus 
} 
4

如果您的应用程序有一个主要的硬件要求(即,它不能真正功能/做任何有用的,如果硬件是不存在的设备上),你应该添加UIRequiredDeviceCapabilities条目在您的应用的Info.plist中。这将使那些没有必要硬件的人无法使用你的应用程序购买/下载它。它还会使应用商店显示支持您软件的所有模型的列表,以便人们可以看到他们需要什么来使用它。

如果您的应用程序具有需要某些特定功能的功能,则通常可以进行框架内测试以查看设备是否具有所需的功能/硬件。如果这不是您应用程序的主要目的,则可以根据设备的功能启用/禁用应用程序的此功能。您不希望尝试查询用户正在运行的设备(除非可能情况非常有限),而是询问设备是否有能力按照您的要求进行操作。

既然您提到了自动对焦相机,我们将以此为例。如果您的应用程序需要此操作来执行任何操作,则应将UIRequiredDeviceCapabilities密钥添加到您的Info.plist文件中,并将条目auto-focus-camera添加到阵列中。这将确保只有拥有自动对焦相机设备的用户才能购买并安装您的应用。有关Info.plist的UIKit密钥的更多信息,请参阅Information Property List Key Reference

另一方面,如果您的应用程序可供任何设备使用,但具有需要自动对焦相机的功能,则可以使用AVFoundation框架测试它的存在。你可以从AVCaptureDevice课程中获得你需要的东西。例如,要检查,如果你有机会获得一个自动对焦摄像头用于视频/剧照:

// Check for the default camera 
AVCaptureDevice* camera = [AVCaptureDevice defaultDeviceWithMediaType:AVMediaTypeVideo]; 
if(camera && [camera isFocusModeSupported:AVCaptureFocusModeAutoFocus]) { 
    // this device has a default video source capable of autofocus, so enable the feature 
} else { 
    // this device does not have the required hardware, so disable the feature 
}