Как обнаружить и избежать использования частных API в сторонних библиотеках - PullRequest
10 голосов
/ 08 декабря 2009

Теперь, когда Apple выполняет какой-то статический анализ для автоматической проверки использования частного API, многие люди были пойманы из-за библиотеки Three20. Я использую другую стороннюю библиотеку (которую я сам компилирую из кода), и я хотел бы автоматически проверять ее на предмет использования частного API перед отправкой в ​​Apple, чтобы я мог исключить / переписать эти части.

Если я запускаю nm на своем исполняемом файле приложения, я получаю список символов, и я вижу там символы, которые я не использую. Например, я вижу _AudioServicesPlaySystemSound, и если я ищу «AudioServicesPlaySystemSound» в XCode, я не получаю никаких результатов. Есть ли способ автоматически различать вызовы к частным API, например, я заметил, что Apple имеет привычку называть их начальным подчеркиванием.

Однако: если я намеренно включаю вызов в частный API, он не отображается в выводе nm, но он появляется, если я запускаю strings в двоичном файле. Исходя из этого, у меня была одна идея - собрать огромный список всех частных вызовов API в огромную таблицу и автоматически искать их в выводе строк. Я еще этого не сделал.

У кого-нибудь есть какие-либо советы о том, как автоматически отловить этот материал, поэтому я проверяю процесс только один раз?

Ответы [ 2 ]

6 голосов
/ 08 декабря 2009

Вы можете попробовать запустить nm на объектных файлах вместо связанного исполняемого файла:

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

Объекты должны находиться в подкаталоге build/<app>.build/*/<app>.build/Objects-normal.

Вы видите ссылку на AudioServicesPlaySystemSound, потому что одна из функций, которые вы вызывали, в свою очередь вызывает AudioServicesPlaySystemSound.

Вызовы Objective C обычно не отображаются в nm дампах, для этого вам нужно будет использовать otool:

otool -ov <object file>
3 голосов
/ 10 октября 2010

Используйте этот инструмент разработки, App Scanner . Он сканирует ваш файл .app на наличие частных методов API. В будущем выпуске также будут проверяться частные переменные экземпляра API.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...