【问题标题】:No EAAccessoryDidConnectNotification and EAAccessoryDidDisconnectNotification after connecting Lightning kBD or Smart KBD连接 Lightning kBD 或 Smart KBD 后没有 EAAccessoryDidConnectNotification 和 EAAccessoryDidDisconnectNotification
【发布时间】:2016-12-26 02:56:28
【问题描述】:

在我的APP连接Lightning kBD或Smart KBD后,我无法收到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”权利

【问题讨论】:

  • 我最近在同一个日志中偶然发现了同样的行为,你能找到原因吗?
  • 这里有同样的问题,包括“com.apple.private.externalaccessory.showallaccessories”消息。这个问题有什么启示吗?
  • 到目前为止有什么解决办法吗?
  • 有人有更新吗?我已经尝试了我能找到的每一个建议以及其他一些可以启动的东西。对我来说这很疯狂,这个问题已经知道了至少四个月,而且似乎没有一个可靠的修复(从 10.1.1 开始它似乎也没有得到解决)。 Apple 开发者论坛上的帖子没有任何额外的见解。这对我的公司至关重要,而且我们并不是唯一拥有 MFI 产品的公司!
  • 在 2016 年 12 月 7 日下午 4:56 在苹果论坛上找到这篇文章:forums.developer.apple.com/thread/61646,Rich(Apple 员工)提供了一些相关信息。现在(iOS 10)中的协议似乎已验证区分大小写。

标签: ios objective-c nsnotificationcenter external-accessory


【解决方案1】:

我在 Xcode->preferences->accounts->-> 查看详情中删除了“iOS Team provisioning profile: *”。

删除该配置文件后,系统会立即下载新副本。从那以后,我再也看不到这个“找不到 com.apple.private.externalaccessory.showallaccessories 权利”了。我猜这个权利现在在“iOS 团队配置文件:*”中。 如果您的捆绑包 ID 存在于其他“iOS 团队配置文件”中,那么我建议您也删除这些配置文件。

【讨论】:

  • 既然您没有收到错误消息,您是否可以通过[[EAAccessoryManager sharedAccessoryManager] connectedAccessories] 枚举配对的BT 设备?如果是这样,您的应用程序启用了哪些服务/功能?谢谢!
  • 即使出现错误消息,我也没有任何问题,是的,我正在使用 sharedAccessoryManager connectedAccessories。功能全部关闭。我的配件是经典蓝牙条码扫描器。
【解决方案2】:

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

虽然我尝试了一些不同的方法来解决这个问题,但最终还是这样做了,这很有效:

  1. 干净
  2. 清理构建文件夹
  3. 删除并重新链接 ExternalAccessory.framework
  4. 在 iOS 设备上删除应用程序
  5. 构建并运行

如果这不起作用,请尝试为您的应用删除并生成新的配置文件。

【讨论】:

    【解决方案3】:

    这是我的经验。在 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] 错误 - 由于 Info.plist 中未声明协议 (null),打开会话失败

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

    【讨论】:

      【解决方案4】:

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

      1. 在应用的UISupportedExternalAccessoryProtocols 属性列表中包含外部附件的protocolString。

      2. 让外部配件的制造商向 Apple 提交将您的应用列入 MFi 白名单的请求。

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

      【讨论】:

      • 谢谢。有这方面的文件吗?你是从哪里听说的?
      • 迈克,来自developer.apple.com/library/content/featuredarticles/…,并与配件制造商进行了对话。
      • 这个答案被接受了真的很奇怪,它是否为某人解决了问题?对我来说,这些要求并不新鲜,拥有它们并不能阻止错误的发生。我会赌一个苹果虫,一只小鸟告诉我希望并等待下一个 iOS 10 次要版本
      • @cshavit 你是否意识到你正在调用 UISupportedExternalAccessoryProtocols - 如果我相信 Apple Doc developer.apple.com/library/content/documentation/General/…,这是一个自 iOS 3.0 以来一直存在的 UIKit Key - “新要求”?
      • @cshavit 你可以坚持你的意见,我不在乎。我遇到了这个问题,它已在 iOS 10.1 中修复。仅供参考,我的项目已经在 plist 中包含 UISupportedExternalAccessoryProtocols 并且我的公司已经被列入白名单。所以说这是一个新的要求实际上是完全错误的,你至少应该编辑你的答案,而不是抱怨我的“好斗的语气”。这就是我所说的智力诚实。
      【解决方案5】:

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

      在 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)。

      【讨论】:

      • 请不要在没有正确引用内容的情况下将其他用户的答案复制到您的答案中;见stackoverflow.com/help/referencing。但是,在这种情况下,我不确定您为什么要复制内容完全,因为您的答案与它无关,所以我已经编辑了复制的内容。
      猜你喜欢
      • 2023-03-17
      • 2017-04-02
      • 2015-11-23
      • 2019-08-23
      • 1970-01-01
      • 1970-01-01
      • 2011-05-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多