Удаление вызова метода изнутри статического lib (.a) без перекомпиляции
Я использую статический lib, который дает мне предупреждение при загрузке моего двоичного файла для просмотра apple.
Метод в статической lib, вызывающий предупреждение (непубличные селекторы), никогда не вызывается мной, его соответствующий .h удаляется из моего proj, но предупреждение все еще сохраняется.
Учитывая, что я знаю имя метода, вызывающее проблему, есть ли способ открыть или отредактировать этот .a и прокомментировать/удалить фрагмент кода, а затем использовать измененный .a в моем проекте.
У меня нет доступа к источнику .a, чтобы перекомпилировать его, а его очень старый и его создатель не имеют контактных данных для отслеживания.
Большое спасибо,
-Cake
Ответы
Ответ 1
Быстрое и грязное решение: откройте файл .a в шестнадцатеричном редакторе и измените все экземпляры имени. Оставьте имя функции той же длины, чтобы смещения в файле не менялись, просто измените букву или что-то в этом роде. Я сделал быстрый тест, добавив фиктивную функцию в подпроект, который мы создаем как статическую библиотеку, затем изменил имя функции в файле .a(было пять экземпляров, для чего это стоит), и все построено хорошо. Я не вижу причин, по которым он не прошел бы проверку App Store после этого.
Я действительно удивлен, что функция все еще была в финальной сборке, хотя я думал, что Dead Code Stripping должен был очистить любой неиспользуемый код. Да.
Ответ 2
http://opensource.apple.com/source/cctools/cctools-809/
Я не могу позволить себе получить свою награду, потому что я не предоставил простое решение. Но да, это теоретически возможно. У вас есть работа, вырезанная для вас.
Ответ 3
Не нужно взламывать двоичные файлы. Просто отключите предупреждение "неиспользуемые селекторы" компилятора: -fno-unused-selectors.
Ответ 4
В зависимости от вашей библиотеки и проекта существует несколько решений.
В настройках сборки:
-
Включить " удаление мертвого кода", если это возможно: если метод никогда не используется (даже внутри), символ будет удален.
-
Используйте " Файл с неэкспонированными символами": просто добавьте символ в файл и он будет удален из двоичного файла. Это будет работать, даже если символ используется внутри.
-
Включить " Постепенная обработка развертывания" и " Связанный с лентой продукт" с Стиль полосы ", установленный на" Все символ "
-
(Не уверен) Используйте " Символы, скрытые по умолчанию". Это связано с генерированием кода и не должно влиять на привязку, но на всякий случай все вышеописанное не удалось...