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 и нашел похожие отчеты и попробовал исправления, перечисленные там, в том числе:
- Удаление папки DerivedDatali >
- Перезапуск Xcode и симулятор iPhone
- Обеспечение установки
Always Embed Swift Standard Libraries = YES
, как в моей структуре, так и в настройках моей сборки приложения
- Обеспечение установки
Enable Bitcode=NO
, как в моих рамках, так и в моих настройках сборки приложений
- Убедитесь, что
Runpath Search Paths
установлен на @executable_path/Frameworks
, как в моей структуре, так и в моих настройках сборки приложения
- Скопировал все файлы libswift из моей установки Xcode в локальную копию в моем проекте и добавил пользовательскую фазу сборки, чтобы скопировать эти файлы в папку фреймворков.
В каждом случае я получаю ту же ошибку, когда пытаюсь запустить приложение.
- Xcode Version 8.1 (8B62)
- Apple Swift версия 3.0.1 (swiftlang-800.0.58.6 clang-800.0.42.1)
Ответы
Ответ 1
В итоге я получил эту работу, используя сочетание исправлений. Я не уверен, что все они нужны, но я документирую, что, казалось, работает для меня здесь, на всякий случай, если кто-то может выиграть от того, что я нашел.
- Я установил
Always Embed Swift Standard Libraries
значение YES
на вкладке настроек сборки как для моей инфраструктуры Swift, так и для приложения Swift, использующего фреймворк.
- Я добавил
Foundation.framework
в раздел "Связанные рамки и библиотеки" на вкладке "Общие" как для моей инфраструктуры Swift, так и для приложения Swift, которое использует фреймворк.
- Я добавил
Foundation.framework
в раздел "Встроенные двоичные файлы" общей вкладки для приложения Swift, которое использует фреймворк.
Со всеми тремя этими настройками я могу создать и запустить приложение без возникновения этой ошибки.
Ответ 2
Это может быть не для всех, но я решил это, написав код в главной цели.
У меня был пустой проект, состоящий из рамки и тестовой цели, а при выполнении тестов я получал эту ошибку. Очевидно, Swift довольно умный, чтобы обнаружить, что вам действительно не нужна эта библиотека, и не ссылается на libswiftSwiftOnoneSupport.dylib
.
Исправить это просто добавить код, я просто добавил:
class Test {
func a() { print ("something") }
}
и libswiftSwiftOnoneSupport.dylib
связаны.
Ответ 3
После нескольких дней зацикливания на этой проблеме я наконец нашел кое-что, что работало для меня; надеюсь, это поможет и другим.
Оказывается, что конкретное использование print()
любом месте кода каким-то образом заставит libswiftSwiftOnoneSupport.dylib быть загруженным, и проблема исчезнет.
Я использую Xcode 10.1, Swift 4.2 и модуль, который давал мне эту проблему, был Nimble.
Кстати, мне известно о предложении @S2dent "просто добавить некоторый код", но в моем случае в моей среде уже было несколько разных классов, поэтому это мне не помогло.
Ответ 4
Как вы устанавливаете свои зависимости?
У меня была аналогичная проблема:
dyld: Library not loaded: @rpath/libswiftSwiftOnoneSupport.dylib
Referenced from: <internal framework>
Reason: image not found
Оказалось, что это связано с оптимизацией всего модуля Swift.
Используя Carthage в качестве менеджера зависимостей, они были скомпилированы для Release и, таким образом, скомпилированы с оптимизацией всего модуля, которую Xcode предложил включить. Запуск приложения на симуляторе компилирует его для Debug. Я предполагаю, что динамические фреймворки не могут быть на другом уровне оптимизации из приложения, использующего его.
Решение заключалось в том, чтобы явно указать конфигурацию, которую я хотел создать для Карфагена. (carthage bootstrap --configuration Debug
) О, и, конечно, очистка моей папки для сборки.
Ответ 5
У меня была такая же проблема, добавив библиотеку (моя собственная сборка) на вкладку " Linked Frameworks and Libraries
на вкладке " General
" приложения, решив проблему.
Ответ 6
Вы также можете предоставить хост-приложение для своей цели тестирования, если не хотите добавлять Foundation.framework в Linked Frameworks или Embedded Binaries.
Ответ 7
Вы можете решить эту проблему, установив "Всегда встраивать стандартные библиотеки Swift" в "Да" в настройках сборки вашей цели.
Ответ 8
@rpath
обозначает Runpath Search Path
. В XCode это установлено с настройкой LD_RUNPATH_SEARCH_PATH
.
Вкратце: динамическое связывание произошло. Dynamic linking
это операция, которая происходит, когда часть кода распространяется по разным файлам, а двоичное содержимое двоичного файла загружается во время выполнения.
Это означает, что пока мы разрабатываем приложение, мы можем пропустить его, пока программа не запуститсяdyld: Library not loaded: @rpath Reason: image not found
По умолчанию @rpath
указывает на @executable_path/Frameworks
![]()
@executable_path
- Полезно для каркасов, встроенных в приложения, поскольку позволяет указать расположение каркаса относительно исполняемого файла приложения. Читать дальше
![]()
Источник здесь