面临两个错误。
此代码适用于iOS 4和5,但在更新到6之后,它无效(
我找到了以下内容,但不知道如何在代码中修复它。
从iOS 6开始,应用程序需要在其UIBackgroundModes中包含音频密钥才能使用CoreMIDI的MIDISourceCreate和MIDIDestinationCreate函数。如果没有密钥集,这些函数将返回kMIDINotPermitted(-10844)。
2012-09-23 03:40:04.773 MidiStudio [1017:907]错误(创建MIDI虚拟源): - 10844:错误域= NSMachErrorDomain代码= -10844“操作无法完成。(Mach错误) -10844)。“ 2012-09-23 03:40:04.777 MidiStudio [1017:907]错误(创建MIDI虚拟目标): - 10844:错误域= NSMachErrorDomain代码= -10844“操作无法完成。(Mach错误) -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;
}
}
答案 0 :(得分:14)
[只是把我的笔记放在Kurt的优秀答案上。]
首先,在“iOS 6.0发行说明”文档中都提到了这一点。那条线说:
从iOS 6开始,应用需要拥有音频键 UIBackgroundModes为了使用CoreMIDI的MIDISourceCreate和 MIDIDestinationCreate函数。没有密钥集,这些功能 将返回kMIDINotPermitted(-10844)。
所以你需要做的唯一事情(再次,只是指明Kurt回答的内容)就是这样的每个目标的plist :
<key>UIBackgroundModes</key>
<array>
<string>audio</string>
</array>
答案 1 :(得分:1)
我的应用使用MIDIDestinationCreate播放midi文件,应用审核小组确实在创建一个臭味。他们坚持认为应用必须在后台播放一些音频。他们引用“2.16:多任务应用程序只能将后台服务用于其预期目的:VoIP,音频播放,位置,任务完成,本地通知等。”
我已经将它们引用到这里提到的iOS6发行说明中,他们只是不断回来说它必须在后台播放音频。
我已向Apple Developer Technical Support提交了一份请求。希望他们会改变他们团队遵循的应用审核指南。