连接Lightning kBD或Smart KBD后没有EAAccessoryDidConnectNotification和EAAccessoryDidDisconnectNotification

时间:2016-08-19 03:33:44

标签: ios objective-c nsnotificationcenter external-accessory

将Lightning kBD或Smart KBD与我的APP连接后,我无法收到这两个通知EAAccessoryDidConnectNotificationEAAccessoryDidDisconnectNotification。 但它在iOS9.3上工作,我的代码如下,

[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(_accessoryDidConnect:) name:EAAccessoryDidConnectNotification object:nil];
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(_accessoryDidDisconnect:) name:EAAccessoryDidDisconnectNotification object:nil];
[[EAAccessoryManager sharedAccessoryManager] registerForLocalNotifications];

原因是什么?

P.S。:我在日志中收到以下消息。       找不到“ com.apple.private.externalaccessory.showallaccessories ”权利

5 个答案:

答案 0 :(得分:0)

我删除了" iOS团队配置文件:*"在Xcode-> preferences-> accounts-> - >查看详细信息。

一旦删除该配置文件,就会下载新的副本。从那时起,我就没有看到这个"无法找到com.apple.private.externalaccessory.showallaccessories权利"了。我猜这个权利现在位于" iOS团队配置文件中:*"。 如果您的捆绑包ID存在于其他" iOS团队配置文件"那么我建议删除那些配置文件。

答案 1 :(得分:0)

似乎这个问题在iOS 10(beta)版本中众所周知,因为我们没有可用的稳定版本,这似乎在iOS 10的稳定版本中得到解决。它也在Apple Developer Forum上提出,但没有具体的解决方案。

虽然我尝试了一些不同的东西来解决这个问题,但最终做到了这一点,这有效:

  1. 清洁
  2. 清理构建文件夹
  3. 删除并重新链接ExternalAccessory.framework
  4. 在iOS设备上删除应用
  5. 构建并运行
  6. 如果这不起作用,请尝试删除并为您的应用生成新的配置文件。

答案 2 :(得分:0)

这是我的经历。在Xcode 8.1上,我可以成功构建一个旧的基于NIB的Apple项目(EADemo)并在iOS 10.1.1设备上运行它。它可以与我的蓝牙配件一起使用。然后我重命名了项目文件夹并完成了移植到基于Storyboard的项目。在同一个iPhone上运行应用程序EA会崩溃,我收到错误日志:

2016-11-29 17:04:00.804421 K5Demo [430:69578]无法找到" com.apple.private.externalaccessory.showallaccessories"权利 2016-11-29 17:04:04.736780 K5Demo [430:69578]错误 - 打开会话失败,因为协议(null)未在Info.plist中声明

对于这两种情况,Info.plist文件是相同的,也是iOS版本。

答案 3 :(得分:-3)

您可以尝试删除并为您的应用生成新的配置文件。

在iOS 10中,Apple有两个新要求,以便您的应用可以接收EAAccessoryDidConnectNotification和EAAccessoryDidDisconnectNotification通知,并可以通过[[EAAccessoryManager sharedAccessoryManager] connectedAccessories]列出设备。

Include a protocolString of the external accessory in your app's UISupportedExternalAccessoryProtocols property list.

Have the external accessory's manufacturer submit to Apple a request for MFi whitelisting of your app.

对于调试,只需要(1)。但是,如果没有(2),您的应用程序将不会被Apple批准(甚至可能不适用于TestFlight)。

答案 4 :(得分:-3)

在iOS 10中,Apple有两个新要求,以便您的应用可以收到projectsMap.values().stream().flatMap(List::stream).collect(Collectors.toList())EAAccessoryDidConnectNotification通知,并可以通过EAAccessoryDidDisconnectNotification列出设备。

  1. 在您应用的[[EAAccessoryManager sharedAccessoryManager] connectedAccessories]媒体资源列表中包含外部附件的protocolString。

  2. 让外部配件制造商向Apple提交申请MFi白名单的请求。

  3. 对于调试,只需要(1)。但是,如果没有(2),您的应用程序将不会被Apple批准(甚至可能不适用于TestFlight)。