【转】查找应用中的Private API

  作为 Objective-C / Cocoa Touch 开发者,在经历了呕心沥血十月怀胎终于孕育出了一个代码包,然后踌躇满志准备提交给天杀的 Apple App Review Team  审核之时,别急,我们仍然需要诚惶诚恐的考虑一个问题,我们的代码里是否用到了 Private API ?

    什么是 Private API ?简而言之,就是这个 API 真实存在于 Cocoa Touch 中,但它又不是 Public API (有点绕吧…)。那什么是 Public API 呢?Public API 就是苹果通过 Cocoa Touch 向全世界第三方开发者公开的所有 API 。在哪可以查到 Public API ?在你的 Xcode 工程中就能查到。如这幅截图所示, Xcode 中所有 framework 的头文件都是我们可用肉眼查询的 Public API 列表。

    同此同时,民间也流传着一个非官方的 Private API 列表

    于是你说,那问题不就解决了呗,只要我们洁身自好,保证自己的代码里只使用 Cocoa Touch 公布的 API ,我们就肯定不会惹上 Private API 啦。

    然而实际情况往往不是这样,当今世界,嗯嗯当今世界,App Store 的竞争越发激烈,每位开发者都希望自己的代码能站在前辈优秀开源代码的基础上高屋建瓴,而不是每新建一个工程就得自己花十天半个月一遍遍 reinvent the wheel 重造车轮。 随手举几个例子, ASIHTTPRequest 、JSON 、Facebook / Three20 、 SFHFKeychainUtils ,这几套知名开源代码包存在于许许多多优秀的 iOS 应用之中。其他名气稍小但是同样流传广泛的开源或者闭源代码包就更数不胜数了。作为开发者,我们不得不频繁面对这样一个问题,我们如何确保这些第三方的代 码报里,不存在 private API ?

    苹果提供了几种机器识别方法,比如 string 命令,比如 otool -ov 命令,但都不太好用。江湖上有人做了一套解决方案,名叫 AppScanner ,我老人家决定强烈推荐一下。

  • 怎么用?很简单,你把工程编译好,然后直接将 .app 文件夹整个拖进 AppScanner 窗口里。
  • 免费的么?几乎是免费的,虽然收费(也才 $2.99 ),但是头 14 天免费。
  • 是否有人维护?有,而且只要你愿意出 $2.99 支持他们维护。他们还会继续开发下去。

    这是一个实例的截屏,头两项 API 可疑度 100% ,说明它们就是来搞破坏的 Private API。

    最后插一则八卦, Facebook / Three20 如雷贯耳,想必很多开发者都使用过。然而要命的事,在 Three20 的第一个版本中,就悄悄的藏着一条因为重名导致的假阳性 Private API 。虽然是假阳性,但那次事故仍然导致了所有使用那个版本 Three20 的 app 被惨拒。当然了,后来他们很快就修正了这个问题。

原文地址:https://www.cnblogs.com/MarkLewis/p/4374431.html