Может кто-нибудь подтвердить, действительно ли это ошибка? (Если так, я уйду и подам в Apple).
при попытке получить kAudioSessionProperty_AudioRoute возвращает код ошибки kAudioSessionUnsupportedPropertyError в любой версии симулятора до 4.3 (которая является последней версией на момент написания).
этот очень легко воспроизвести.
Начать новый проект (я использую Xcode 4.0.2 Build 4A2002a, это стандартная сборка), оконный проект "AudioSessionBug"
включает каркас AudioToolbox
замените файл .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!
{
// /1888014/kakie-marshruty-ya-mogu-poluchit-iz-svoistva-kaudiosessionpropertyaudioroute
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