iOS: это ошибка симулятора аудио-сессии?ключевые слова: kAudioSessionProperty_AudioRoute kAudioSessionUnsupportedPropertyError - PullRequest
1 голос
/ 02 июля 2011

Может кто-нибудь подтвердить, действительно ли это ошибка? (Если так, я уйду и подам в 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

1 Ответ

1 голос
/ 16 июля 2011

Я только что получил следующее подтверждение от Apple:

Эта ошибка была исправлена ​​в 4.3, и в настоящее время мы не планируем исправлять ошибки в более ранних сборках симулятора.

...