iOS5 CMMotionManager startDeviceMotionUpdatesToQueue:falha no iPhone3GS
-
12-11-2019 - |
Pergunta
Tenho um problema relacionado a software e hardware que estou tentando solucionar.Meu aplicativo foi desenvolvido para iPhone4, iOS5 e usa a estrutura Core Motion para processar dados de acelerômetro e giroscópio em tempo real.O aplicativo falha ao ser executado no iPhone 3GS com iOS5
Meu principal método de movimento central é assim:
[motionManager startDeviceMotionUpdatesToQueue:motionQueue withHandler:^(CMDeviceMotion *motion, NSError *error) {
//notify calibration delegate
if(calibrationDelegate)
{
[calibrationDelegate collectCalibrationMotionData:motion];
}
//a lot more processing
}
Tenho relatos de que o iPhone3GS não retorna sim para isGyroAvailable, enquanto o iPhone4 retorna sim.
BOOL accelerometerAvailable = (motionManager.isAccelerometerAvailable)?YES:NO;
BOOL gyroscopeAvailable = (motionManager.isGyroAvailable)?YES:NO;
if(!accelerometerAvailable && ! gyroscopeAvailable)
{
//handle error
remoteControlState = kRemoteControlStateError;
}
Descobri dolorosamente que a Apple vende meu aplicativo para clientes com iPhone4, 4s E 3GS. O aplicativo não funciona para clientes com iPhone 3GS porque a chamada acima não parece passar os objetos em movimento para o delegado de calibração.
Não tenho iPhone 3GS para testar o aplicativo, então tenho algumas dúvidas:
É possível especificar em qualquer lugar nas propriedades do projeto Xcode que eu queira que meu aplicativo seja executado apenas no iPhone4 e acima? (ou dispositivos com giroscópio disponíveis?)
Onde posso encontrar mais informações sobre as peculiaridades do iOS5, como a acima, para entender melhor como o iPhone3Gs difere do iPhone4?
Solução
É possível especificar em qualquer lugar nas propriedades do projeto XCode que desejo que meu aplicativo seja executado SOMENTE no iPhone4 e superior?(ou dispositivos com giroscópio disponíveis?)
Sim, você especificaria tais dependências no UIRequiredDeviceCapabilities
chave do seu Info.plist (gyroscope
seria o requisito neste caso).
No entanto, para um aplicativo lançado, infelizmente impossível para adicionar novos requisitos.