2月9日,有网友爆料,奇虎360旗下的iOS应用调用私有API,并且涉及读取用户数据,并怀疑360应用是因此而遭苹果商店下架。时隔一天,又有网友针锋相对的提出一些对比,表示360 浏览器调用的API主要用于浏览器加速,也就是上网时使网页在浏览器里显示得更快,而且通过反编译发现,多个国内外iPad浏览器应用都在调用这个接口。由于我们掌握的事实依据并不充分,这里并不做过多的判断。
什么是私有API
iPhone中的API除了公开的API:Published API外(或者Documented API),还有两类:私有API:Private API和未公开API:UnPublished API(或者Undocumented API)。
私有API是指放在PrivateFrameworks框架中的API,未公开的API是指虽然放在Frameworks框架中,但是却没有在苹果的官方文档中有使用说明、代码介绍等记录的API。
按苹果的说法,未公开的API是还不够成熟,可能还会变动的API,等完全成型了后会变成公开的API,但是目前不对其提供承诺,就是系统版本升级后可能会失效。而私有API是苹果明确不能使用的API。虽然两者有所区别,但是在具体使用方法上是类似的。
私有API也曾逃过审核
因为调用私有API而在审核中遭到拒绝的现象并不少见,甚至是在#ifdef DEBUG下,也有被检测出来的。当然,也有很多应用都调用了私有 API但依然获得了通过,或者是在被警告的同时得到通过。由于苹果的审核机制,并未透露更多的信息给开发者,我们也不能确认苹果到底是如何进行判断。
但可以确认的是,苹果并不是完全禁止私有API。在Apple官方的开发者论坛中曾公布允许开发者使用UIGetScreenImage() 这个私有API函数,还表示并在今后公布的SDK中,可能会公布跟这个函数等效的公开API函数。
Tumblr 和 Instapaper 的程序员 Marco Arment 还曾经“揭露”,苹果在 iBooks 中使用了大量私有 API,致使第三方应用无法实现亮度控制和调用字典等类似的功能。
甚至是Google Voice这样的应用,一样调用了私有API,并且获得了通过上架。Google曾承认在开发iPhone版Google Mobile应用的时违反Apple的iPhone软件开放包的规则,使用了未发布的API来使用iPhone的接近感应器方便用户进行语音搜索。
图:Google Voice
私有API的不足
使用未发布的API有可能造成在Apple升级软件时应用程序代码可能会损坏。但是很多开发者愿意冒这个险来开发自认为更强力的应用,同时,也有很多开发者认为自己的应用不需要多次升级。以Google语音搜索感应识别为例,在原始的SDK使用规范中,使用这些技术的应用程序将无法通过Apple Store的审核。而事实上,如果严格遵守SDK规则的话,开发者是无法开发出Google Voice的。