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​​li >
  • Перезапуск 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 - Полезно для каркасов, встроенных в приложения, поскольку позволяет указать расположение каркаса относительно исполняемого файла приложения. Читать дальше

Источник здесь