2009-12-08 58 views
9

現在,Apple正在運行某種靜態分析來自動檢查私有API的使用情況,由於Three20庫的存在,許多人已被捕獲。我使用另一個第三方庫(我從代碼編譯我自己),我想在提交給Apple之前自動對它進行審覈以供私有API使用,以便我可以刪除/重寫這些部分。如何檢測和避免在第三方庫中使用私有API

如果我在我的應用程序可執行文件上運行nm,我得到一個符號列表,我看到那裏沒有使用的符號。例如,我看到_AudioServicesPlaySystemSound,並且如果我在XCode中搜索「AudioServicesPlaySystemSound」,則不會得到任何結果。有沒有什麼辦法可以自動區分對私有API的調用,例如我注意到Apple有習慣用初始下劃線對它們進行命名。

但是:如果我故意將一個調用包含到私有API中,它不會顯示在nm的輸出中,但是如果我在二進制文件上運行strings,它會顯示出來。基於此,我的一個想法是將所有私有API調用的龐大列表編譯成一個巨大的表格,並自動在字符串輸出中搜索它們。我還沒有這樣做。

有沒有人有關於如何自動捕捉這些東西的任何提示,所以我只通過審查過程一次?

+0

他們反對Three20?這實際上是由爲iPhone創建Facebook應用程序的開發人員編寫的。如果您的應用因Three20而被拒絕,Facebook應用應該也是如此...... heh。只是說;-) – 2009-12-08 01:04:49

+0

是的... http://groups.google.com/group/three20/browse_thread/thread/c442af6e39a918b0/6d5046771539d139 – 2009-12-08 02:25:35

+0

我想象下一次Facebook提交更新時,他們將被拒絕如果他們不使用符合Apple政策的最新版本。 – bpapa 2009-12-08 04:26:56

回答

4

你可以嘗試在目標文件而不是鏈接的可執行文件運行處:

nm -g -j *.o | sort | uniq 

的對象應該是在build/<app>.build/*/<app>.build/Objects-normal子目錄。

您看到對AudioServicesPlaySystemSound的引用,因爲您確實調用的某個功能依次調用AudioServicesPlaySystemSound

Objective C的通話一般不會在nm轉儲顯示出來,你就需要使用otool爲:

otool -ov <object file> 
3

使用該工具開發,App Scanner。它會掃描您的.app文件以獲取私有API方法。未來版本還將檢查私有API實例變量。

+1

該鏈接被破壞。試試這個:https://github.com/ChimpStudios/App-Scanner – chown 2012-10-31 20:12:46

+0

是APP掃描儀真的有效嗎? 確切的說是 – Kiarash 2013-05-06 06:48:14

+0

項目已經死了,沒有發佈。 – 2017-03-28 01:24:51

相關問題