Приложение iOS содержит информацию о пути разработчика

Проверяя заархивированное приложение, я вижу полный путь, указанный для нескольких файлов исходного кода в бинарном приложении. Не все файлы исходного кода указаны.

strings - the_binary_app | grep "\.m"

показывает

/Users/bbarnhart/myPath/myPath/App/path/path/SourceCodeFile.m

а также несколько других. Я не могу определить, как полные пути для нескольких файлов исходного кода встроены в двоичный файл приложения. Я хотел бы удалить их. Есть идеи? Является ли это установкой сборки или файл проекта слегка поврежден?

Некоторые принадлежат lib, а другие - файлы, принадлежащие проекту.

Ответ 1

Макрос __FILE__ расширяется до полного пути к текущему файлу. Это один из возможных способов получить пути к вашему исполняемому файлу. Например, расширение макроса assert включает макрос __FILE__.

Посмотрите на вывод вашего конвейера strings | grep. Для каждого из этих файлов зайдите в свой проект в Xcode и откройте этот файл. Затем перейдите в "Связанные файлы doodad" и выберите "Preprocess":

связанные файлы doodad

Затем выполните поиск по выходу препроцессора для пути к файлу. Вы найдете много ложных срабатываний, потому что будет много директив # line number/path. Вы можете игнорировать их, потому что они производят только отладочный вывод, который не входит в ваш исполняемый файл (если только вы не сделали что-то странное с настройками сборки). Скорее вы можете сохранить вывод препроцессора в файл, затем открыть этот файл и передать его через grep или использовать поиск/замену регулярного выражения, чтобы удалить все строки, начинающиеся с #.

Найдите другие экземпляры, где ваш путь отображается как строковая константа. Например, если вы использовали макрос assert, вы найдете что-то вроде этого:

(__builtin_expect(!(argc > 0), 0) ? __assert_rtn(__func__, "/Volumes/b/Users/mayoff/TestProjects/textViewChanged/textViewChanged/main.m", 16, "argc > 0") : (void)0);

Это случай, когда путь будет завершен в ваш исполняемый файл.

Если вы не найдете все места, где вы вставляете свой путь, попробуйте выбрать "Сборка" из файла "Связанные файлы" doodad. Сборка будет заполнена комментариями, содержащими ваш путь; все после @ является комментарием в сборке, поэтому игнорируйте их.

Вы также увидите свои пути в директивах .file. Я считаю, что они производят только вывод символа отладки, который не входит в ваш исполняемый файл, поэтому вы также можете игнорировать их.

Вы также увидите свои пути в директивах .asciz вскоре после директив .section DWARF,.... Это больше отладочного символа, который можно игнорировать.

Ищите оставшиеся случаи, когда ваш путь появляется на выходе сборки. Вам нужно выяснить, как устранить эти случаи. Как вы это сделаете, это зависит от контекста, в котором отображаются пути, поэтому, если вам нужна дополнительная помощь, обновите свой вопрос с помощью того, что вы найдете.

Ответ 2

Похоже, что ваш код содержит макрос __FILE__.