iOS - MFi 认证
1、MFi 认证
1.1 什么是 MFi 认证
苹果 MFi 认证,是苹果公司(Apple Inc.)对其授权配件厂商生产的外置配件的一种标识使用许可,是 Apple 公司 “Made for iOS” 的英文缩写。
市面上认证产品的显著标识就是在包装正面出现如下白底黑字的苹果 MFi 授权 logo,如本文开头图片所示。苹果公司允许授权厂商在产品包装上印上授权标签。有句话叫无商不奸,如果消费者担心生产商作假,未授权的硬件也偷偷贴上 MFi 的授权标签,那么可以登录苹果的官方网站,进行查询。如下图
1.2 为什么要做 MFi 认证
从苹果角度来看,为了更好的巩固苹果的生态圈,只有集成了有 MFi 芯片,才能跟 iPhone、iPod,iPad 进行连接通信。而只有经过了 MFi 认证的企业才能批量购买 MFi 芯片,并且 MFi 芯片的供销链条都有很严格的监督管理,所以这样苹果可以严格控制只有那些满足苹果规范和要求的外设才能加入到苹果生态圈。
从生产厂商来看,经过苹果官方授权,配件产品能完美兼容苹果智能设备;提交 MFi 认证过程中,硬件设备需要经过苹果要求的 ATS 自测以及苹果的严格测试,产品质量更有保证;消费者也更加信任经过了 MFi 认证授权的配件;最后成功获得 MFi 授权这也成为技术与质量实力的一种标志,因为 MFi 认证通过率仅 2%,其中大部分企业因为申请资格不符合直接被拒绝。
从 iOS 开发人员来看,MFi 认证是由硬件生产商主导进行申请的,是苹果对外设配件的一种认证和授权。但是很多外设跟苹果进行连接,并不只是跟 iOS 设备硬件或者 iOS 系统配合就可以完成对应的功能(比如充电、CarPlay、播放 iPod 音乐(A2DP)、接听蓝牙电话(HPF)或者提供 GPS 输入源等)。很多时候为了实现特定的需求,需要由 iOS App 的配合,由 iOS App 跟对应外设进行连接和通信,传输相关的控制命令对外设进行控制,或者传输相关的外设数据进行展示。iOS App 跟外设的连接方式有网络、EAP 和 BLE,其中 EAP 是苹果官方推荐的跟外设连接的方式。只有经过 MFi 认证的外设才能使用 EAP 跟 App 进行通信。
1.3 如何做 MFi 认证
MFi 认证的流程比较复杂,可以归纳总结为三个部分,如下图所示
其中黄色背景标注的部分是可能跟 iOS App 开发者相关的。其他部分则都是由硬件生产商主导进行的,作为 iOS 开发人员并不需要参与。
1、申请人提交申请资料
首先,收集公司资料信息,这些资料主要包括了认证负责人联系信息,企业情况介绍,公司组织架构、企业网站,物料品质控制以及 ISO 体系证书等资料。然后是在苹果 MFi 官网 上进行注册,并提交第一步收集到的公司资料,进行账号申请。
接下来苹果会进行 MFi 体系审核。这个是非常关键的一个步骤。主要考察公司对 MFi 芯片的管理体系,看公司是否有规范的流程和系统来管理 MFi 芯片,能有效防止转售芯片或者挪用芯片(把芯片用到未通过 MFi 认知的项目上),苹果会安排专人或者代理公司来抽查。
如果 MFi 体系审核过了,苹果还会对公司其他情况进行考察,来评估该公司是否满足 MFi 会员的资格。审核的标准主要看公司相关资质,是否有较大的生产规模;是否拥有自主品牌;品牌在业内是否有较高的地位(主要表现为各类荣誉);是否曾为其他国际知名企业供货;研发人员是否达到苹果要求的人数等,申请者一定保证申报资料的真实性,苹果公司都会一一核实。
如果这些条件都满足,恭喜你公司成为了 MFi 会员,能够有资格购买样品芯片,并且拿到苹果提供的 MFi 官方开发文档,该文档的每一页都是带有申请人姓名水印的,禁止对外公开,如果被发现,有可能会被取消 MFi 会员资格。据说大部分的企业都会被卡在会员资格审核这一步。
2、提交产品计划,研发和自测
如果你的公司是属于那幸运的那一小部分通过了 MFi 会员资格审核,拿到了苹果的 MFi 研发官方文档,也购买了 MFi 样品芯片,那么就可以提交产品计划,进行产品研发和自测了。
提交产品计划是非常关键的一步,需要根据要研发的公司产品的形态、所用技术方案和需要支持的 iOS 设备、iOS 的相关信息都进行详细的描述,其中比较重要信息有。
1)附件概览(Accessory Overview)
- 技术方案(Technology)如果你是做支持 CapPlay 的车机,那么就选择 CarPlay,否则都应该选择 iAP;如果你的硬件需要跟 iPhone 连接,并且处理相关业务,而不仅仅是充电线或者数据线,那么在 Components 里应该选择 Authentication coprocessor.
2)固件和硬件(Firmware & Hardware)
- 现在所有的 MFi 认证的硬件都需要支持 iAP2 协议,所以必须要选 iAP2 或者同时支持 iAP2 和 iAP1。然后外设硬件跟苹果设备是如何通信的,是使用 USB 的 Host 模式,还 USB 的 Devices 模式,还是串口或者蓝牙,这个需要根据产品的需求、特性进行选择。
3)选择硬件所支持的 iAP2 的特性
4)选择所支持的苹果设备型号。
- 根据产品的设计选择所需要支持的苹果设备型号,包括 iPad,iPhone 和 iPod 的各种型号。
5)App 相关的信息
- 这部分也是 iOS 开发者需要重点关注的部分,包括 App 的版本号,BundleID 和协议字符串以及 iOS App 的主要功能特性描述,这部分信息需要跟最后送 MFi 审核时附带的 App 测试包的信息保持一致。提交了产品计划之后,就可以拿到 PPID(Product Plan ID)。这个 PPID 也是跟 iOS App 开发者需要关注的。当 App 开发完成,提交 AppStore 上线时,需要在版本审核备注信息里带上这个 PPID,否则审核是过不了的。
接下来就可以进行产品研发了。主要是硬件生成商需要根据苹果提供的开发文档进行硬件和驱动认证程序的开发。而 iOS App 开发者则主要是需要集成 iOS 系统提供的一个系统框架 ExternalAccessory.framework,并且在 info.plist 中配置好协议字符串(Supported external accessory protocols)。当 iOS 设备通过 USB 线或者蓝牙连接到对应硬件时,iOS 系统会把符合 MFi 认证要求的外设抽象成了一个流对象,App 通过指定的协议字符串来创建一个 EASession 类的实例来访问到该流对象,就能通过 NSInputStream 和 NSOutputStream 跟硬件件进行通信了。这部分功能实现可以参考苹果官方的 EADemo 进行入门和学习。
产品研发完成后需要进行 ATS(Accessory Test System)自测,并提供自测报告。ATS 自测苹果会提供 ATS Box 的测试工具和软件,主要是针对硬件进行电气特性相关的测试,包括各个节点的电压电流值是否满足苹果要求,然后传输带宽是否稳定,是否达到苹果要求等等。
自测完成之后就可以把硬件和所配套的软件(iOS App 的 ipa 安装包)送到苹果指定的测试实验室进行认证测试。iOS 开发者在这个步骤需要关注的是如何打包 ipa 包。因为如果直接用开发证书打包,那么苹果测试人员的 iPhone 不在你开发证书的设备列表中,是无法安装的。如果用企业证书打包的话,可能 AppStore 发布证书对应的 bundleid 跟企业证书的 bundleid 不一致,所以也不可行。所以推荐的做法是,等到产品研发完成和自测之后,就带上产品计划中拿到的 PPID,提交 AppStore 进行审核。等审核通过之后,就可以直接从 AppStore 下载对应的 ipa 安装包,配合硬件一起送 MFi 认证测试了。
3、测试审核和批量生产
这个阶段也是硬件生产商主导进行的,跟 iOS app 开发者关系不大。当硬件的 MFi 认证送审通过之后,还需要对产品的包装也提交认证和审核。审核通过之后,就可以获得苹果授权进行 MFi 芯片的批量购买,然后根据销售计划进行硬件的批量生产和销售了。
整个 MFi 认证的周期大概需要 3 个月到半年的时间,并且每次提交认证测试都需要支付一笔 600 美金的测试费用,所寄去测试的硬件测试样品苹果也是不会寄回来的。
2、NCM 将只能用于 CarPlay
最近 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 只能用于 CarPlay,否则外设将无法通过 MFi 认证。
如果你的外设是采用的 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 的把控。
iOS - MFi 认证的更多相关文章
- 关于MFi认证你所必须要知道的事情
MFiLogo 前面我写了一篇文章<iOS App连接外设的几种方式>,其中EAP和NCM是都需要做MFi认证.对于苹果的MFI认证,对iOS开发的同学来说其实是一个比较陌生并且繁琐的to ...
- iOS https认证 && SSL/TLS证书申请
1.下面列出截止2016年底市面上常见的免费CA证书: 腾讯云SSL证书管理(赛门铁克TrustAsia DV SSL证书)阿里云云盾证书服务(赛门铁克DV SSL证书)百度云SSL证书服务Let's ...
- iOS 指纹认证登陆开发(TouchID)
设计思路 TouchID 关联账号 用户登陆成功 -> 开启TouchID登陆 -> TouchID验证 -> 记录用户信息(验证通过) -> 关联完成 TouchID 登陆 ...
- iOS - Bluetooth 蓝牙
1.蓝牙介绍 具体讲解见 蓝牙 技术信息 蓝牙协议栈 2.iBeacon 具体讲解见 Beacon iBeacon 是苹果公司 2013 年 9 月发布的移动设备用 OS(iOS7)上配备的新功能.其 ...
- iOS蓝牙开发(二)蓝牙相关基础知识
原文链接: http://liuyanwei.jumppo.com/2015/07/17/ios-BLE-1.html iOS蓝牙开发(一)蓝牙相关基础知识: 蓝牙常见名称和缩写 MFI ====== ...
- iOS蓝牙开发(一)蓝牙相关基础知识(转)
转载自:http://www.cocoachina.com/ios/20150915/13454.html 原文作者:刘彦玮 蓝牙常见名称和缩写 MFI ======= make for ipad , ...
- iOS 后台运行 类型
iOS后台运行,需要有特定的类型才可以进行.这些内容并不是一直不变的,苹果也在逐步的更新这些内容. 本文内容是2015年11月03日时苹果支持的后台运行类型. 这是官方连接地址 其中较为重要的是下面这 ...
- 关于IOS的蓝牙(转)
关于IOS的蓝牙 首先,你要了解你的目的是什么,一般的IOS蓝牙开发有以下三种目的: 1. IOS设备和IOS设备之间交互 好消息是:ios6.0可以把iPhone手机当从设备了,可以两台iPhone ...
- iOS 蓝牙4.0开发
背景: 1.iOS的蓝牙不能用来传输文件.2.iOS与iOS设备之间进行数据通信,使用gameKit.framework3.iOS与其他非iOS设备进行数据通信,使用coreBluetooth.fra ...
随机推荐
- POJ1509 Glass Beads [后缀自动机]
题意: 给一个字符串S,每次可以将它的第一个字符移到最后面,求这样能得到的字典序最小的字符串.输出开始下标 练习SAM第一题! SS构造SAM,然后从开始尽量走最小走n步就可以啦 什么?开始位置?!R ...
- 在linux内核中实现自己的系统调用
如实现一个简单的打印:printk 1.cd linux-ok6410/kernel/ vim printk.cvoid sys_pk(){printk("<0>this is ...
- 图论算法-最小费用最大流模板【EK;Dinic】
图论算法-最小费用最大流模板[EK;Dinic] EK模板 const int inf=1000000000; int n,m,s,t; struct node{int v,w,c;}; vector ...
- github page博客里添加多说评论插件
本文来自我的github pages博客http://galengao.github.io/ 即www.gaohuirong.cn 摘要: 由于现在我这个博客原来用的是DISQUS评论插件,那全是全球 ...
- 【实用】需要收藏备用的JQuery代码片段
1 元素屏幕居中 jQuery.fn.center = function () { this.css("position","absolute"); this. ...
- Postfix+dovecot搭建简单邮箱服务器
实验环境: (1)修改主机名:hostnamectl set-hostname mail.meilintong.com 退出,重新登陆 (2)关闭selinux (3)关闭防火墙 1.安装postfi ...
- LNMP搭建环境遇到的N多坑
最近配置开发用的lnmp环境,环境配置完成后,爆500错误,查看nginx错误日志 open_basedir 将 PHP 所能打开的文件限制在指定的目录树,包括文件本身 错误日志显示,访问脚本不在 o ...
- 使用canvas编写时间轴插件
使用canvas编写时间轴插件 背景 项目中有一个视频广场的功能,需要一个时间轴类似视频播放中进度条功能一样显示录像情况,并且可以点击.拖动.放大缩小展示时间轴,获取到时间轴的某个时间.原来的时间轴是 ...
- DxPackNet 2.视频截图和捕捉帧图片
在上一节的基础上 打开了摄像头后: 1.视频截图------调用 CatchBmp 方法即可获取当前帧的 bmp 图像, //调用截屏函数 获取当前图片 Bitmap bmp = camCaptur ...
- Docker容器技术
Docker介绍 什么是容器 Linux容器是与系统其他部分隔离开的一系列进程,从另一个系统镜像运行,并由该镜像提供支持进程所需的全部文件. 容器镜像包含了应用的所有依赖项,因而在从开发到测试再到生产 ...