iOS: это ошибка симулятора аудио-сессии? ключевые слова: kAudioSessionProperty_AudioRoute kAudioSessionUnsupportedPropertyError
Кто -то может подтвердить, действительно ли это ошибка? (Если так, я уйду и запишу его в Apple).
попытка получить kAudioSessionProperty_AudioRoute возвращает код ошибки kAudioSessionUnsupportedPropertyError в любой версии симулятора до версии 4.3 (которая является последней версией на момент написания).
этот очень легко воспроизвести.
Начать новый проект (я использую Xcode 4.0.2 Build 4A2002a, это стандартная сборка), оконный проект "AudioSessionBug"
включить AudioToolbox framework
замените файл.m делегата приложения следующим:
//
// AudioSessionBugAppDelegate.m
// AudioSessionBug
//
// Created by Pi on 02/07/2011.
// Copyright 2011 Pi. All rights reserved.
//
#import "AudioSessionBugAppDelegate.h"
#import <AudioToolbox/AudioToolbox.h>
#define SET_PROPERTY( prop, type, val ) \
{ \
OSStatus ret = AudioSessionSetProperty( prop, sizeof( type ), &(type){ val } ); \
if ( ret != kAudioSessionNoError ) \
{ \
NSLog( @"AudioSessionSETProperty failed for: %s!", #prop ); \
return; \
} \
}
enum {
kNo = 0,
kYes = 1
};
// - - -
@interface AudioSessionBugAppDelegate ( )
- (void) setupSession;
@end
// - - -
@implementation AudioSessionBugAppDelegate
@synthesize window=_window;
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
// Override point for customization after application launch.
[self.window makeKeyAndVisible];
[self setupSession];
return YES;
}
- (void) setupSession
{
OSStatus result = AudioSessionInitialize( NULL, NULL, NULL, NULL );
assert( result == kAudioSessionNoError );
SET_PROPERTY( kAudioSessionProperty_AudioCategory, UInt32, kAudioSessionCategory_PlayAndRecord );
// make sure headphones are plugged in!
{
// http://stackru.com/questions/2753562/what-kind-of-routes-could-i-get-back-from-kaudiosessionproperty-audioroute-proper
CFStringRef state = nil;
UInt32 propertySize = sizeof(CFStringRef);
OSStatus status = AudioSessionGetProperty( kAudioSessionProperty_AudioRoute, &propertySize, &state );
if ( status == kAudioSessionUnsupportedPropertyError )
{
NSLog( @" WTF? GETTING kAudioSessionProperty_AudioRoute GIVES kAudioSessionUnsupportedPropertyError ?!?!? " );
}
NSLog( @" OK - done! " );
exit( 1 );
}
}
- (void)dealloc
{
[_window release];
[super dealloc];
}
@end
проверьте, что это работает.
Теперь измените цель развертывания на что-либо до 4.3. скажем 4.2.
запустите его снова на симуляторе iPad 4.3 - ОК
запустите его снова на симуляторе iPad 4.2 - FAIL
1 ответ
Я только что получил следующее подтверждение от Apple:
Эта ошибка была исправлена в 4.3, и в настоящее время мы не планируем исправлять ошибки в более ранних сборках симулятора.