CoreMIDI / PGMidi Virtual Midi-Fehler in iOS6

Konfrontiert mit zwei Fehlern.

Dieser Code hat in iOS 4 und 5 funktioniert, aber nach dem Update auf 6 funktioniert er nicht (

Ich habe folgendes gefunden, weiß aber nicht, wie ich es im Code beheben soll.

Ab iOS 6 müssen Apps den Audio-Key in ihren UIBackgroundModes haben, um die Funktionen MIDISourceCreate und MIDIDestinationCreate von CoreMIDI nutzen zu können. Ohne den Schlüsselsatz geben diese Funktionen kMIDINotPermitted (-10844) zurück.

2012-09-23 03: 40: 04.773 MidiStudio [1017: 907] Fehler (Virtuelle MIDI-Quelle erstellen): -10844: Fehlerdomäne = NSMachErrorDomain Code = -10844 "Der Vorgang konnte nicht abgeschlossen werden. (Mach error -10844. ) "

2012-09-23 03: 40: 04.777 MidiStudio [1017: 907] Fehler (virtuelles MIDI-Ziel erstellen): -10844: Fehlerdomäne = NSMachErrorDomain Code = -10844 "Der Vorgang konnte nicht abgeschlossen werden. (Mach error -10844. ) "

Hier ist der Code für 'source':

-(void)setVirtualSourceEnabled:(BOOL)virtualSourceEnabled {
    if ( virtualSourceEnabled == self.virtualSourceEnabled ) return;

    if ( virtualSourceEnabled ) {
        NSString *name = virtualEndpointName ? virtualEndpointName : [[[NSBundle mainBundle] infoDictionary] valueForKey:(NSString*)kCFBundleNameKey];

        OSStatus s = MIDISourceCreate(client, (CFStringRef)name, &virtualSourceEndpoint);
        NSLogError(s, @"Create MIDI virtual source");
        if ( s != noErr ) return;

        virtualSourceDestination = [[PGMidiVirtualSourceDestination alloc] initWithMidi:self endpoint:virtualSourceEndpoint];

        [delegate midi:self destinationAdded:virtualSourceDestination];
        [[NSNotificationCenter defaultCenter] postNotificationName:PGMidiDestinationAddedNotification
                                                            object:self 
                                                          userInfo:[NSDictionary dictionaryWithObject:virtualSourceDestination
                                                                                               forKey:PGMidiEndpointKey]];

    } else {
        [delegate midi:self destinationRemoved:virtualSourceDestination];

        [[NSNotificationCenter defaultCenter] postNotificationName:PGMidiDestinationRemovedNotification
                                                            object:self 
                                                          userInfo:[NSDictionary dictionaryWithObject:virtualSourceDestination
                                                                                               forKey:PGMidiEndpointKey]];

        [virtualSourceDestination release]; virtualSourceDestination = nil;
        OSStatus s = MIDIEndpointDispose(virtualSourceEndpoint);
        NSLogError(s, @"Dispose MIDI virtual source");
        virtualSourceEndpoint = NULL;
    }
}

Antworten auf die Frage(3)

Ihre Antwort auf die Frage