2012-09-23 5 views
10

2つのエラーが発生しました。CoreMIDI/PGMidi iOS6の仮想ミディエラー

このコードは、iOS 4と5で働いていたが、6にアップデートした後、私が、次を発見した

(動作していないが、コードでそれを修正する方法がわからない。

iOSの6で始まり、アプリケーションはキーセットがなければ、これらの機能はkMIDINotPermitted(-10844)を返します。CoreMIDIのMIDISourceCreateとMIDIDestinationCreate機能を使用するために彼らのUIBackgroundModesのオーディオキーを持っている必要があります。

2012年9月23日03:40:04.773 MidiStudio [1017:907]エラー(MIDIバーチャルサワーを作成するCE):-10844:エラードメイン= NSMachErrorDomainコード= -10844 "操作を完了できませんでした。 "017:907]エラー(MIDI仮想送り先の作成):-10844:エラードメイン= NSMachErrorDomainコード= -10844"操作完了できませんでした。 (マッハエラー-10844)は」ここに

は、 'ソース' のためのコードです:

-(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; 
    } 
} 

答えて

13

[ジャストクルトの優秀な答えにここに私のノートを置く。]

まず第一に、これはすべてのと呼ばれる文書に記載されている「のiOS 6.0リリースノート。」そこにラインは言う:iOSの6で始まり

、アプリケーションはCoreMIDIのMIDISourceCreateと MIDIDestinationCreate機能を使用するために彼らの UIBackgroundModesのオーディオキーを持っている必要があります。キーが設定されていない場合、これらの関数 はkMIDINotPermitted(-10844)を返します。

だから、あなたがする必要がある唯一のものは、(再び、ちょうどクルトが答えたものを指定すると)でこのような何か、各対象者のplistです:

<key>UIBackgroundModes</key> 
<array> 
    <string>audio</string> 
</array> 
+2

自分自身への注意:リリースノートを読んでください。 –

+1

参考になったplistエントリ名は "Required background modes" –

7

あなたが任意のコードを変更する必要はありませんもう一度そのメッセージを読む。

で先頭をiOSの6は、アプリケーションが

UIBackgroundModes

は。だから、 use Xcode to edit your app's Info.plist a key in your application's Info.plistである彼らのUIBackgroundModesのオーディオキーを持っている必要があり、そのための値を作りますkeyは文字列 audioを含む配列です。

+0

Kurtが正しいです。しかし、...あなたのアプリがバックグラウンドで再生されない場合、アップルはそれを悪用せずに通過させることはできません。ちょうどこれを見て、物事はうまくいくでしょう。 – stephen

+0

@stephen最終的に、あなたのアプリが何年も店で売っていても、あなたは正当化しなければなりません。更新を提出しない限り) –

1

私のアプリは、MIDIを再生するためにMIDIDestinationCreateを使用していますファイルとアプリレビューチームは実際に悪臭を作り出しています。彼らは、バックグラウンドでオーディオを再生する必要があると主張している。 「2.16:マルチタスクアプリケーションは、VoIP、オーディオ再生、場所、タスク完了、ローカル通知など、意図した目的にのみバックグラウンドサービスを使用することができる」と引用しています。

私はここで述べたiOS6リリースノートに言及しましたが、バックグラウンドでオーディオを再生する必要があると言って戻ってきます。

Apple Developer Technical Supportにリクエストを提出しました。うまくいけば、彼らは彼らのチームが従うアプリレビューガイドラインを変更するでしょう。