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 ответа

Решение

В конце концов я получил эту работу, используя набор исправлений. Я не уверен, что все они необходимы, но я документирую то, что мне показалось здесь полезным, на тот случай, если кто-то еще сможет извлечь выгоду из того, что я нашел.

  1. Я поставил Always Embed Swift Standard Libraries до значения YES на вкладке параметров сборки для моей платформы Swift и в приложении Swift, которое использует среду.
  2. я добавил Foundation.framework в раздел "Связанные фреймворки и библиотеки" на вкладке "Общие" как для моей инфраструктуры Swift, так и для приложения Swift, использующего эту среду.
  3. я добавил 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 Вкладка приложения решает проблему.

Это ошибка динамического компоновщика, которая связывает двоичный файл при загрузке или во время выполнения.

[@rpath]

Вы можете решить эту проблему, установив "Всегда встраивать стандартные библиотеки Swift" в "Да" в настройках сборки вашей цели.

Вы также можете предоставить хост-приложение для своей цели тестирования, если не хотите добавлять Foundation.framework в Linked Frameworks или Embedded Binaries.

Другие вопросы по тегам