dyld: библиотека не загружена: @rpath/libswiftSwiftOnoneSupport.dylib
Я построил фреймворк Swift, и теперь я пытаюсь приступить к созданию приложения Swift для iOS, которое будет использовать этот фреймворк. Я получаю эту ошибку:
dyld: Library not loaded: @rpath/libswiftSwiftOnoneSupport.dylib
Referenced from: /Users/tdean/Library/Developer/Xcode/DerivedData/NFLApplication-ejmafvjrlqgjaabggwvadjarjjlg/Build/Products/Debug-iphonesimulator/NFLStatsModel.framework/NFLStatsModel
Reason: image not found
Я просмотрел SO, нашел похожие отчеты и попробовал перечисленные там исправления, в том числе:
- Очистка моей папки DerivedData
- Перезапуск Xcode и симулятора iPhone
- Обеспечение этого
Always Embed Swift Standard Libraries = YES
установлено, как в моей структуре, так и в настройках сборки моего приложения - Обеспечение этого
Enable Bitcode=NO
установлено, как в моем фреймворке, так и в настройках сборки моего приложения - Обеспечение этого
Runpath Search Paths
установлен в@executable_path/Frameworks
, как в моем фреймворке, так и в настройках сборки моего приложения - Скопировал все файлы libswift из моей установки XCode в локальную копию в моем проекте и добавил пользовательскую фазу сборки, чтобы скопировать эти файлы в папку frameworks.
В каждом случае я получаю одну и ту же ошибку при попытке запустить свое приложение.
- Версия Xcode 8.1 (8B62)
- Apple Swift версия 3.0.1 (swiftlang-800.0.58.6 clang-800.0.42.1)
3 ответа
В конце концов я получил эту работу, используя набор исправлений. Я не уверен, что все они необходимы, но я документирую то, что мне показалось здесь полезным, на тот случай, если кто-то еще сможет извлечь выгоду из того, что я нашел.
- Я поставил
Always Embed Swift Standard Libraries
до значенияYES
на вкладке параметров сборки для моей платформы Swift и в приложении Swift, которое использует среду. - я добавил
Foundation.framework
в раздел "Связанные фреймворки и библиотеки" на вкладке "Общие" как для моей инфраструктуры Swift, так и для приложения Swift, использующего эту среду. - я добавил
Foundation.framework
в раздел "Встроенные двоичные файлы" на вкладке "Общие" для приложения Swift, использующего инфраструктуру.
Со всеми этими тремя настройками я могу создавать и запускать свое приложение, не сталкиваясь с этой ошибкой.
Это может быть не для всех, но я решил это путем написания некоторого кода в основной цели.
У меня был пустой проект, состоящий из фреймворка и цели тестирования, и при запуске тестов я получал эту ошибку. Очевидно, Swift достаточно умен, чтобы обнаружить, что эта библиотека вам на самом деле не нужна и не ссылается на libswiftSwiftOnoneSupport.dylib
,
Исправление - просто добавить код, я просто добавил:
class Test {
func a() { print ("something") }
}
а также libswiftSwiftOnoneSupport.dylib
получил связь.
После нескольких дней зацикливания на этой проблеме я наконец нашел кое-что, что работало для меня; надеюсь, это поможет и другим.
Оказывается, что специально используя print()
в любом месте кода каким-то образом будет загружаться libswiftSwiftOnoneSupport.dylib, и проблема исчезнет.
Я использую Xcode 10.1, Swift 4.2 и модуль, который давал мне эту проблему, был Nimble.
Кстати, мне известно о предложении @S2dent"просто добавить некоторый код", но в моем случае в моей среде уже было несколько разных классов, поэтому это мне не помогло.
Как вы устанавливаете свои зависимости?
У меня была похожая проблема:
dyld: Library not loaded: @rpath/libswiftSwiftOnoneSupport.dylib
Referenced from: <internal framework>
Reason: image not found
Оказалось, что это связано с оптимизацией всего модуля Swift.
Используя Carthage в качестве менеджера зависимостей, они компилировались для Release, и, таким образом, компилировались с оптимизацией всего модуля, которую Xcode предложил включить. Запуск приложения на симуляторе компилирует его для отладки. Я предполагаю, что динамические фреймворки не могут быть на другом уровне оптимизации, чем приложение, в котором они работают.
Решение состояло в том, чтобы явно указать конфигурацию, для которой я хотел построить Карфаген. (carthage bootstrap --configuration Debug
О, и, конечно же, очистка моей папки сборки.
У меня была такая же проблема, добавление библиотеки (моей собственной сборки) в Linked Frameworks and Libraries
в General
Вкладка приложения решает проблему.
Это ошибка динамического компоновщика, которая связывает двоичный файл при загрузке или во время выполнения.
Вы можете решить эту проблему, установив "Всегда встраивать стандартные библиотеки Swift" в "Да" в настройках сборки вашей цели.
Вы также можете предоставить хост-приложение для своей цели тестирования, если не хотите добавлять Foundation.framework в Linked Frameworks или Embedded Binaries.