NCM只能用于CarPlay,否则外设将无法通过MFi认证

最近MFi开发的苹果官方文档更新到R25(《Accessory Interface Specification R25.pdf》)了,相比之前的版本,在CarPlay的章节中多了这样一句话“Accessories must not use the NCM interface for anything other than CarPlay”,如下图所示:

这意味着什么呢? 意味着除了CarPlay,后面所有其他跟iPhone连接的外设都不能使用NCM的方式跟iPhone上的App进行连接和通信了。
如果你的外设是采用的NCM方式跟App进行通信,并且目前还没有通过MFi认证,需要尽快调整方案,建议改成EAP(External Accessory Protocol)连接方式,这个是苹果官方推荐连接方式。否则,肯定是过不了MFi认证的。
如果你的外设采用的NCM方式跟App进行通信,并且已经经过了MFi认证。那么可以保持现状,不用担心。有人会说苹果会不会后面升级iOS系统时,在某个版本中直接在系统底层做限制,如果不是CarPlay模式就不能切出NCM的端口? 这种担心,小编认为是多余的,因为苹果也是最新的Spec才加入这种限制,意味着之前肯定有很多外设采用NCM并且通过了苹果的MFi认证,苹果需要保证iPhone升级iOS系统后也能兼容以前的外设。
NCM按理说是一种非常标准的USB传输方式,它把USB端口虚拟成标准的网络端口,具有带宽高、天然支持多通道等优点,那苹果为什么要做出这种限制呢?小编猜测还是跟苹果想要严格把控iOS系统生态有关。
因为如果采用EAP,那么对应的App就必须集成苹果的EA框架(ExternalAccessory.framework),提交AppStore审核时,AppStore通过代码扫描就能扫描到App使用到了EA框架,知道该App需要跟外设进行通信,就需要App必须提供对应外设的PPID(Product Plan ID),如果不能提供PPID就会被AppStore拒绝。 这样就能更严格控制iOS系统生态,外设和对应的App都在苹果的控制范围之内。
如果App采用NCM的方式跟外设通信,在App层面来说NCM就是标准的网络通信,使用TCP/IP协议。App提交AppStore审核时,如果不明说这个App可以连接某种MFi外设,苹果是完全不知道的,这样苹果就在一定程度上丢失对App的把控。
你怎么看呢?欢迎交流。
关于MFi认证可以参考我之前写的文章:《关于MFi认证你必须要知道的事情》
关于NCM连接和EAP连接,可以参考我之前写的文章:《iOS App连接外设的几种方式》
欢迎加本人微信(luoxub)进行交流,请带上自我介绍