本文由2篇文章綜合而成,原文地址為:
http://www./iphonedev/sdk/2011/0531/2906.html
http://bbs.51cto.com/archiver/tid-846159.html
一、關(guān)于蘋(píng)果API: 1、Published API(公開(kāi)的API):又稱(chēng) Documented API(文檔中記錄的API)。是蘋(píng)果通過(guò) Cocoa Touch 向全世界第三方開(kāi)發(fā)者公開(kāi)的所有 API 。 2、UnPublished API(未公開(kāi)API):又稱(chēng) Undocumented API(文檔中未記錄的API),是指雖然放在Frameworks框架中,但是卻沒(méi)有在蘋(píng)果的官方文檔中有使用說(shuō)明、代碼介紹等記錄的API。按蘋(píng)果的說(shuō)法,未公開(kāi)的API是還不夠成熟,可能還會(huì)變動(dòng)的API,等完全成型了后會(huì)變成公開(kāi)的API,但是目前不對(duì)其提供承諾,就是系統(tǒng)版本升級(jí)后可能會(huì)失效。 3、Private API(私有API):指的是SDK下的 PrivateFrameWorks框架下的API,真實(shí)存在于 Cocoa Touch 中。私有API是蘋(píng)果明確規(guī)定不能使用的API,一旦你的作品中有私有API,在上傳AppStore的時(shí)候會(huì)100%被拒絕的。如果當(dāng)作小范圍軟件的話就可以嘗試一下,比如再Cydia上發(fā)布,91上發(fā)布,條件不會(huì)很苛刻的。
二、查找應(yīng)用中的 Private API 雖然我們能夠保證自己的APP中只使用 Cocoa Touch 公布的 API ,沒(méi)有使用私有API。但是我們?nèi)绾未_保這些第三方的代 碼報(bào)里,不存在 private API ?
蘋(píng)果提供了幾種機(jī)器識(shí)別方法,比如 string 命令,比如 otool -ov 命令,但都不太好用。江湖上有人做了一套解決方案,名叫 AppScanner ,我老人家決定強(qiáng)烈推薦一下。
這是一個(gè)實(shí)例的截屏,頭兩項(xiàng) API 可疑度 100% ,說(shuō)明它們就是來(lái)搞破壞的 Private API。
最后插一則八卦, Facebook / Three20 如雷貫耳,想必很多開(kāi)發(fā)者都使用過(guò)。然而要命的事,在 Three20 的第一個(gè)版本中,就悄悄的藏著一條因?yàn)橹孛麑?dǎo)致的假陽(yáng)性 Private API 。雖然是假陽(yáng)性,但那次事故仍然導(dǎo)致了所有使用那個(gè)版本
Three20 的 app 被慘拒。當(dāng)然了,后來(lái)他們很快就修正了這個(gè)問(wèn)題。
三、使用私有API:
1.導(dǎo)出生成私有API的頭文件聲明
gitHub有老外整理:https://github.com/nst/iOS-Runtime-Headers |
|