iOS5 CMMotionManager startDeviceMotionUpdatesToQueue:فشل على iPhone3GS
-
12-11-2019 - |
سؤال
أواجه مشكلة متعلقة بالبرامج والأجهزة وأحاول استكشاف الأخطاء وإصلاحها.تم تطوير تطبيقي لأجهزة iPhone4 وiOS5 ويستخدم إطار عمل Core Motion لمعالجة بيانات مقياس التسارع والجيروسكوب في الوقت الفعلي.يفشل التطبيق عند تشغيله على iPhone 3GS مع iOS5
تبدو طريقتي الرئيسية للحركة الأساسية كما يلي:
[motionManager startDeviceMotionUpdatesToQueue:motionQueue withHandler:^(CMDeviceMotion *motion, NSError *error) {
//notify calibration delegate
if(calibrationDelegate)
{
[calibrationDelegate collectCalibrationMotionData:motion];
}
//a lot more processing
}
لدي تقارير تفيد بأن iPhone3GS لا يُرجع نعم إلى isGyroAvailable، بينما يُرجع iPhone4 نعم.
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؟
المحلول
هل من الممكن تحديد أي مكان في خصائص مشروع XCode الذي أريد أن يعمل فيه تطبيقي فقط على iPhone4 وما فوق؟(أو الأجهزة التي تحتوي على جيروسكوب متاحة؟)
نعم، يمكنك تحديد مثل هذه التبعيات في ملف UIRequiredDeviceCapabilities
مفتاح Info.plist الخاص بك (gyroscope
سيكون هو المطلب في هذه الحالة).
ومع ذلك، بالنسبة للتطبيق الذي تم إصداره، فهذا أمر مؤسف مستحيل لإضافة متطلبات جديدة.