1

これが本当にバグかどうか誰かが確認できますか? (もしそうなら、私は出かけてAppleに提出します)。

kAudioSessionProperty_AudioRoute を取得しようとすると、4.3 (執筆時点での最新バージョン) より前のバージョンのシミュレーターでエラー コード kAudioSessionUnsupportedPropertyError が返されます。

これは簡単に再現できます。

新しいプロジェクトを開始します (私は 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!
    {
        // http://stackoverflow.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 で再度実行 -- OK
iPad シミュレーター 4.2 で再度実行 -- 失敗

4

1 に答える 1

1

Appleから次の確認を受け取りました。

これは4.3で修正されたバグであり、現在、シミュレータの以前のビルドでバグを修正する予定はありません。

于 2011-07-16T02:42:34.803 に答える