Как обнаружить и избежать использования частных API в сторонних библиотеках

StackOverflow https://stackoverflow.com/questions/1863764

  •  16-09-2019
  •  | 
  •  

Вопрос

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

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

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

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

Это было полезно?

Решение

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

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

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

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

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

otool -ov <object file>

Другие советы

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top