仅支持Retina的iOS设备



是否有办法将非视网膜设备从构建中排除,并且在提交过程中是否允许?我的目标不是iPad或iPad mini。我认为3GS用户很少,设备不能处理太高级的东西。

我不想在bundle中包含非retina artwork

你不应该排除非视网膜设备,因为iPad mini是非视网膜设备。也没有构建选项来排除非视网膜设备。

所以非视网膜设备将使用视网膜图像运行,并使用更多的内存,这可能会使它们耗尽内存。如果你设法排除iPhone 3GS,你的应用仍然需要在iPad mini上运行,iPad mini是非视网膜的,即使你的应用只在iPhone上运行,它也应该在任何iPad上运行。

在过去,您可以使用本文中描述的方法。阅读本文后,请参考更新后的设备功能矩阵。

本质上,你选择一组UIRequiredDeviceCapabilities键,它将支持的设备集限制为视网膜显示的设备。

不幸的是,正如你从矩阵中看到的,iPad mini在视网膜显示方面使这种方法无效(它没有视网膜显示,但它不缺乏任何其他功能,你可以用它来排除其他视网膜显示设备)。

编辑:基于你的编辑,因为你不是为iPad/iPad mini构建,你可以使用上面的方法,并要求前置摄像头。

另见类似的问题& a

你不必包括非视网膜的艺术品。只使用non-@2x命名图像;这将导致非视网膜设备的性能不佳,因为它们也更老,硬件速度更慢(iPad mini除外)。你不能排除基于硬件的设备(除非设置最小iOS版本)。

很遗憾,这是不可能的。

你可以看一下:信息属性列表关键参考,在那里你可以看到你可以配置你的应用程序需要运行的项目。

也许你可以看看会话:UIRequiredDeviceCapabilities试着调整它只运行在具有一定组合的功能的设备上,但就像你在页面上看到的那样,它是不可能根据设备显示配置的。

你可以做的一个例子是只支持具有更强大硬件的设备,你可以定义你只需要使用最新设备的硬件,比如:前置摄像头。(iPad 2有它,但没有视网膜,这只是一个你可以利用的功能的例子)。

也许在你的应用程序中你可以检查比例,并采取两种不同的方法。

if ([[UIScreen mainScreen] respondsToSelector:@selector(scale)]
    && [[UIScreen mainScreen] scale] == 2.0) {
    [self runTheFeature];
} else {
    [self alertYourDeviceSucks];
}

你不应该排除非视网膜设备,正如最后一个答案所说,但如果你觉得你必须这样做,那么你可以这样做:
1-在你的app委托中,在将主视图控制器添加到UIWindow

之前,检查设备是否有视网膜显示
if(IS_RETINA)
{
      [self initTheMainViewCotnroller];
}
else
{
      // show alert, warning or anything
      [self showErrorOrWarningMessage];
}

注意:IS_RETINA -是一个宏

#define IS_RETINA ([[UIScreen mainScreen] respondsToSelector:@selector(displayLinkWithTarget:selector:)] && ([UIScreen mainScreen].scale == 2.0))

最新更新