iOS5 CMMotionManager startDeviceMotionUpdatesToQueue:在iPhone3GS上失败

时间:2012-01-23 18:03:17

标签: iphone objective-c ios5 core-motion

我遇到了与软件硬件相关的问题,我正在尝试进行故障排除。我的应用程序是为iPhone4,iOS5开发的,并使用Core Motion框架实时处理加速度计和陀螺仪数据。在使用iOS5的iPhone 3GS上运行时,应用程序失败

我的主要核心动作方法如下:

        [motionManager startDeviceMotionUpdatesToQueue:motionQueue withHandler:^(CMDeviceMotion *motion, NSError *error) {

            //notify calibration delegate
            if(calibrationDelegate)
            {
                [calibrationDelegate collectCalibrationMotionData:motion];
            }
//a lot more processing

}

据我所知,iPhone3GS没有向isGyroAvailable返回yes,而iPhone4则返回yes。

 BOOL accelerometerAvailable  =  (motionManager.isAccelerometerAvailable)?YES:NO;
 BOOL gyroscopeAvailable      =  (motionManager.isGyroAvailable)?YES:NO;

        if(!accelerometerAvailable && ! gyroscopeAvailable)
        {
//handle error
            remoteControlState = kRemoteControlStateError;

        }

我痛苦地发现Apple将我的应用程序通过iPhone4,4s和3GS销售给客户。该应用程序不适用于使用iPhone 3GS的客户,因为上述电话似乎没有通过动议对象到校准代表。

我没有iPhone 3GS来测试应用程序,所以我有几个问题:

  • 是否可以在XCode项目属性中指定任何位置 我希望我的应用程序仅在iPhone4及更高版本上运行?(或者可以使用陀螺仪的设备?)

    我在哪里可以找到有关上述iOS5怪癖的更多信息 更好地了解iPhone3GS与iPhone4的区别?

1 个答案:

答案 0 :(得分:3)

  

是否有可能在XCode项目属性中指定我希望我的应用程序仅在iPhone4及更高版本上运行? (或有陀螺仪的设备?)

是的,您可以在Info.plist的UIRequiredDeviceCapabilities键中指定此类依赖项(在这种情况下,gyroscope将是必需的。)

但是,对于已发布的应用,遗憾的是impossible会添加新要求。