仅适用于第四代IPhone/Ipod Touch的通用应用程序+;IPad

仅适用于第四代IPhone/Ipod Touch的通用应用程序+;IPad,iphone,ios,ipad,universal-binary,Iphone,Ios,Ipad,Universal Binary,我正在开发一个通用应用程序,它只用于视网膜显示器IPhone/IPod touch设备+IPad。我如何在plist或我的应用程序/二进制文件中的任何其他地方指定此项 UIRequiredDeviceCapabilities对这两种设备都不起作用,因为我可以指定IPhone/IPod需要前置摄像头,但这不包括IPad 1。这无法做到。UIRequiredDeviceCapabilities应用于限制应用程序/游戏真正需要或排除的功能,而不是仅仅因为开发者不想支持某一组设备而用于限制这些设备。因此

我正在开发一个通用应用程序,它只用于视网膜显示器IPhone/IPod touch设备+IPad。我如何在plist或我的应用程序/二进制文件中的任何其他地方指定此项


UIRequiredDeviceCapabilities
对这两种设备都不起作用,因为我可以指定IPhone/IPod需要
前置摄像头,但这不包括IPad 1。

这无法做到。UIRequiredDeviceCapabilities应用于限制应用程序/游戏真正需要或排除的功能,而不是仅仅因为开发者不想支持某一组设备而用于限制这些设备。因此,基本上,在设计时应始终牢记当前正在更新到上一个操作系统的所有设备。

这是不可能做到的。UIRequiredDeviceCapabilities应用于限制应用程序/游戏真正需要或排除的功能,而不是仅仅因为开发者不想支持某一组设备而用于限制这些设备。因此,基本上,您在设计时应该始终牢记当前正在更新到上一个操作系统的所有设备。

我不建议这样做,但如果方法
isCorrectDevice
返回true,您可以找到它是什么设备,然后加载应用程序:

- (BOOL) isCorrectDevice
{
    size_t size;
    sysctlbyname("hw.machine", NULL, &size, NULL, 0);
    char *machine = malloc(size);
    sysctlbyname("hw.machine", machine, &size, NULL, 0);
    NSString *platform = [NSString stringWithCString:machine];
    free(machine);

    if ([platform isEqualToString:@"iPhone3,1"] ||
        [platform isEqualToString:@"iPhone3,2"] ||
        [platform isEqualToString:@"iPod4,1"] ||
        [platform isEqualToString:@"iPad1,1"] ||
        [platform isEqualToString:@"iPad2,1"] ||
        [platform isEqualToString:@"iPad2,2"] ||
        [platform isEqualToString:@"iPad2,3"])
        return true;
    else
        return false;
}

这样做有一些问题。一个是,一旦苹果发布了一款新设备,它将过时,不包括更新的设备;但是,这也不会阻止其他设备的用户下载它。我想你可以加载一个屏幕,上面写着“仅适用于…”?这只是一个想法。

我不建议你这么做,但你可以先找出它是什么设备,然后在方法
为正确设备时加载你的应用程序

- (BOOL) isCorrectDevice
{
    size_t size;
    sysctlbyname("hw.machine", NULL, &size, NULL, 0);
    char *machine = malloc(size);
    sysctlbyname("hw.machine", machine, &size, NULL, 0);
    NSString *platform = [NSString stringWithCString:machine];
    free(machine);

    if ([platform isEqualToString:@"iPhone3,1"] ||
        [platform isEqualToString:@"iPhone3,2"] ||
        [platform isEqualToString:@"iPod4,1"] ||
        [platform isEqualToString:@"iPad1,1"] ||
        [platform isEqualToString:@"iPad2,1"] ||
        [platform isEqualToString:@"iPad2,2"] ||
        [platform isEqualToString:@"iPad2,3"])
        return true;
    else
        return false;
}

这样做有一些问题。一个是,一旦苹果发布了一款新设备,它将过时,不包括更新的设备;但是,这也不会阻止其他设备的用户下载它。我想你可以加载一个屏幕,上面写着“仅适用于…”?只是一个想法。

为什么您绝对需要该设备配备视网膜显示器?它在非视网膜显示器上看起来不够好。这是一场游戏,我们只是不想提供次优体验,尽管我们会因此失去一些买家;正如您所知,4.0.x+可用于3GS/4/Pad等,虽然有代码可以检测视网膜显示是否可用,但上传到iTunes时该选项不存在。我想现在还不行。是的,不幸的是它看起来不可能做到。为什么你绝对需要这个设备配备视网膜显示器?它在非视网膜显示器上看起来不够好。这是一场游戏,我们只是不想提供次优体验,尽管我们会因此失去一些买家;正如您所知,4.0.x+可用于3GS/4/Pad等,虽然有代码可以检测视网膜显示是否可用,但上传到iTunes时该选项不存在。我想现在还不是。是的,不幸的是这看起来不可能,但我们真正想要避免的是用户下载应用。是的,我想。令人烦恼的是,这可能是你唯一的选择。你可以在一开始就制作一个闪屏,上面写着“为视网膜显示而优化”;):)我们正在为3GS修复它,这并不像预期的那么难,但它看起来肯定不像我们想要的那样。我发现3GS之前的设备运行4.0不太好,大多数用户将使用3.x!3GS绝对是一款值得测试的产品!我们连一个都没有!我们今天借了一个,到目前为止它看起来不错,我们只支持iOS 4.1,所以旧设备不会成为问题。多亏了这一点,但我们真正想要避免的是用户下载应用。是的,我想。令人烦恼的是,这可能是你唯一的选择。你可以在一开始就制作一个闪屏,上面写着“为视网膜显示而优化”;):)我们正在为3GS修复它,这并不像预期的那么难,但它看起来肯定不像我们想要的那样。我发现3GS之前的设备运行4.0不太好,大多数用户将使用3.x!3GS绝对是一款值得测试的产品!我们连一个都没有!我们今天借了一台,到目前为止还不错,我们只支持iOS 4.1,所以旧设备不会成为问题