Чтобы исправить вашу проблему, нам нужно изменить способ, которым Xcode обрабатывает Swift Инструмент командной строки целей по умолчанию, в частности соглашение о связывании со стандартными библиотеками Swift.
Нам нужно:
- встраивает стандартные библиотеки Swift в вашу
SwizzleSrc
framework - заставляет ваш исполняемый файл командной строки
swizzler
динамически связывать все библиотеки Swift - и наконец, убедитесь, что ваш *Затем исполняемый файл 1014 * может найти все необходимые библиотеки Swift (теперь он находится в целевом фреймворке)
Давайте начнем (предполагается, что вы используете Xcode 10.1 или выше):
Встраивание библиотек Swift в Framework
Это довольно просто.Измените следующие Настройки сборки для целевого фреймворка SwizzleSrc
:
- Всегда встраивать Swift Стандартные библиотеки в Да
Динамическое связывание всех библиотек Swift с помощью инструмента командной строки
Это довольно сложная часть.Добавьте следующие Определяемые пользователем настройки для цели инструмента swizzler
(в Настройки сборки ):
SWIFT_FORCE_DYNAMIC_LINK_STDLIB
, установленный на YES
SWIFT_FORCE_STATIC_LINK_STDLIB
установлен на NO
(Чтобы добавить новую Определяемую пользователем настройку, просто нажмите кнопку +
чуть ниже Настройки сборки заголовок вкладки.)
Это обеспечит динамическое связывание всех исполняемых файлов вашей командной строки вместо этого (т. Е. По умолчанию они статически )связаны).Кстати, эти же настройки используются диспетчером пакетов Swift для исправления связанной проблемы.
Обновите путь выполнения для инструмента командной строки
Добавьте следующий Путь поиска пути выполнения записей для цели инструмента swizzler
(в Настройки сборки ):
@executable_path
@executable_path/SwizzleSrc.framework/Versions/Current/Frameworks
Теперь очистите папку сборки, перестройте заново обе цели и проверьте, исправила ли это вашу проблему навсегда;)
Ссылки
Для получения дополнительной информацииОбязательно проверьте следующие ссылки:
Я также создал (очень!) Простой проект Xcode, демонстрирующийвышеописанные шаги: