Я сделал несколько условное кодирование в мое приложение, чтобы проверить AVCaptureDevice, но он по-прежнему падает мой IPod Touch (IOS 3.1.3) с этим сообщением:AVCaptureDevice держит сбой мой IPod Touch с OS 3
dyld: Символ не найдено: _OBJC_CLASS _ $ _ AVCaptureDevice
Реферировано от: /var/mobile/Applications/4286D40F-9E33-49AB-9AD9-4F66EB9331A5/TestApp.app/TestApp
Ожидаемые в:/System/Library/Frameworks/AVFoundation. каркас/AVFoundation
Форматы данных временно недоступны, повторите попытку после продолжения. (Не безопасно позвонить в dlopen в это время.)
mi_cmd_stack_list_frames: Недостаточно кадров в стеке.
mi_cmd_stack_list_frames: Недостаточно кадров в стеке.
В моем коде, я проверочные условия, как это:
#if (!TARGET_IPHONE_SIMULATOR)
#if __IPHONE_OS_VERSION_MAX_ALLOWED >= 40000 // __IPHONE_4_0
AVCaptureDevice *device = [AVCaptureDevice defaultDeviceWithMediaType:AVMediaTypeVideo];
// ... more code
#endif
#endif
Я проверяю здесь и другое место в коде, который использует AVCaptureDevice с этим же условным.
Я предполагаю, что более ранняя версия iOS для iPod не может ссылаться на новую библиотеку, так что я могу ее исправить?
Кажется странным, что мне нужно будет использовать другой компилятор, чтобы приложение совместимо со старыми версиями ОС. Это ТОЛЬКО? – TigerCoding
Вы также можете использовать технику 'NSClassFromString', которая всегда работала. Это просто более громоздко. И LLVM - лучший компилятор (и будущее), так что теперь вы можете сделать этот переключатель. –
Я пробовал NSClassFromString и все еще получаю ошибку: id cls = (NSClassFromString (@ "AVCaptureDevice")); if (cls! = nil) {// ... Я очистил целевые объекты, удалил приложение с устройства, запустил его, и по-прежнему сохраняется та же проблема. Прямо в начале приложения я делаю эту проверку и устанавливаю флаг, чтобы предотвратить использование позже в приложении. Однако мои заявления NSLog даже не доходят до этой проверки. – TigerCoding