Xcode не удаляет неиспользуемый символ для статической структуры
Я пытаюсь изучить концепцию удаления мертвого кода Apple.
Чтобы проверить это поведение, я создал простую демонстрацию с использованием SPM. Я измерил размер приложения в трех разных сценариях:
Создайте новый проект, затем экспортируйте его с включенным прореживанием приложений. Добавьте пользовательский интерфейс Pulse и Pulse через SPM, но я не импортирую и не использую пользовательский интерфейс Pulse и Pulse в исходном коде, затем экспортируйте приложение с включенным прореживанием приложений. Импортируйте пользовательский интерфейс Pulse & Pulse и используйте в исходном коде, а затем экспортируйте приложение с включенным уменьшением количества приложений. Вот размер приложения и исполняемый файл приложения в трех сценариях:
Размер приложения — 148 КБ в несжатом виде, размер исполняемого файла приложения — 88 КБ. Размер приложения — 2,7 МБ в несжатом виде, размер исполняемого файла приложения — 2,7 МБ. Размер приложения — 2,7 МБ в несжатом виде, размер исполняемого файла приложения — 2,7 МБ.
Что я пробовал:
- Я использую Xcode14 с параметром Enable Bitcode = NO.
- В случае 2 я запустил команду dwarf-dump для файла dSYM и увидел, что Pulse и PulseUI все еще там.
- Я следил за мертвым кодом полосы конфигурации в этом блоге: https://www.emergetools.com/blog/posts/how-xcode14-unintentionally-increases-app-size, но безуспешно.
- Я использую Apple Swift версии 5.7.2, последнюю версию Pulse и PulseUI в основной ветке, Pulse был статически связан с исполняемым файлом приложения.
- Я запустил эту команду: «xcrun dyld_info -exports» на терминале, чтобы проверить наличие удаленных символов, и выходные данные показывают, что Pulse уже удален.
Вот мой демонстрационный проект: https://github.com/hoangatuan/DeadCodeStrippingExample .
Ожидаемое поведение: я понимаю, что для второго сценария, поскольку я не импортирую и не использую Pulse и Pulse UI, тогда, когда я экспортирую приложение с включенным прореживанием приложения и удалением мертвого кода, Pulse должен быть удален из исполняемого файла приложения. . Поэтому я ожидаю, что размер приложения и исполняемый файл приложения в 1-м сценарии должны быть примерно равны 2-му сценарию.
Вопрос. Это ошибка или мое понимание удаления мертвого кода неверно? Или я пропустил какую-то конфигурацию здесь? Заранее спасибо за вашу помощь