dyld: библиотека не загружена: @ rpath / libswift_stdlib_core.dylib


205

Я получаю эту ошибку после добавления класса Swift в старый проект XCode.

dyld: Library not loaded: @rpath/libswift_stdlib_core.dylib

Как я могу снова запустить проект?


Вы также можете посмотреть на stackoverflow.com/questions/38364320, где показано, как отлаживать это с помощьюotool
— Джим Хейс,

2017 год - невероятно, просто перезапуск XCode решил эту отвратительную проблему для меня.
— Толстяк

Ответы:


152

Для меня ни одно из предыдущих решений не сработало. Мы обнаружили, что ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIESв настройках сборки есть флаг (в более ранних версиях: «Встроенный контент содержит код Swift»), для которого необходимо установить значение YES. Это было НЕТ по умолчанию!


Это исправило и меня, я изменил настройку расширения на true. Проект является объективным, но он быстрый и не сработал с самого начала
— Cristi Băluță

Это было и мое решение. У меня есть существующий проект приложения для iOS (ObjC), к которому я добавляю расширение Today (новая цель в проекте, расширение является плагином для основного приложения). Мне нужно было зайти в настройки цели приложения и разрешить проблему «Настройка сборки» и «Альт ...». Имеет смысл, но, учитывая, сколько других вещей Xcode 6.0 автоматически настраивает для вас, обидно, что эта важная опция была упущена.
— hsoi

Это исправило мою проблему - у нас был старый проект с большим количеством ObjC, к которому мы недавно начали добавлять Swift. Несмотря на то, что IPA была собрана и включала библиотеки Swift, она не работала на некоторых устройствах iOS7, пока этот параметр сборки не был проверен, и мы не сделали новый IPA. Это работало на всех наших проблемных устройствах.
— Кендалл Хельмштеттер Гелнер

1
Ничто не сработало, кроме этого. Ты чудак, мой добрый сэр!
— Рики Хартманн

2
Встроенный контент содержит код Swift, который не рекомендуется использовать ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES
— nivritgupta

91

Эта ошибка может возникать, если во время преобразования проекта Objective-C в программу Swift что-то пошло не так. Проблема в том, что параметры сборки Linker никогда не были настроены должным образом, поэтому вам придется делать это вручную. Найдите параметр сборки Runpath Search Paths и установите для него:

$(inherited) @executable_path/Frameworks

введите описание изображения здесь

РЕДАКТИРОВАТЬ: Я должен также добавить, что в последнее время был поток этих ошибок, вызванных чем-то совершенно другим - Apple внесла изменения в самом Swift, начиная, возможно, с Xcode 6.1 или 6.1.1. Похоже, единственное решение состоит в том, чтобы выйти из XCode, уничтожить ваши сертификаты в Keychain Access, перейти в Member Center и удалить все сертификаты и профили (кроме профилей для приложений в Магазине - вы не можете удалить их), а затем запустить весь процесс запроса сертификата с нуля.


3
Работал на меня. Обновлен до последней версии XCode и обнаружил, что этот путь установки в моем проекте приводил к более старой версии.
— ObjectiveTC

1
работал!! ты спас мой день! Я использовал быстрый контроль GitHub в цели C с xcode 6 GM. Спасибо.
— imthegiga

1
Это сработало и для меня. Перезапуска Xcode не было.
— Дэн Левенхерц,

1
работал на меня. Кстати, я получил «Причина: изображение не найдено» в конце сообщения об ошибке.
— Питер Чжоу

2
Слава Богу! Там это было!
— BoilingLime

79

Я не совсем уверен, почему этот вопрос опровергается, у меня тоже была эта проблема, когда я впервые попытался использовать Swift с существующим проектом. Перезапуск Xcode также исправил это для меня.


20
Я пытаюсь использовать swift в новом проекте iOS и получаю эту ошибку при попытке запустить на устройстве iOS 8, но не в симуляторе. Перезапуск Xcode, моего ноутбука или телефона не решает проблему. Есть ли другое решение?
— Дэвид Скрундз

2
К сожалению, это не сработало для меня в Beta 4, когда я пытался запустить приложение Mac, использующее среду на основе Swift.
— Крейг Отис

Пожалуйста, включите ссылку @Developer в ваш ответ, потому что это действительно помогает.
— Лачезар Тодоров

Попробуйте это, но добавьте в чистоту.
— Скотт Маккензи

55

Я долго искал по этому вопросу. Есть несколько причин, вызывающих эту проблему.

Если вы сталкиваетесь с тем, когда вы и Swift-код / ​​библиотека в проекте Objectice C, вам следует попробовать Решение 1-2-3

Если вы столкнулись с этой проблемой с новым проектом Swift, Solution 4 подойдет вам лучше всего.

Решение 1:

Перезагрузите Xcode, затем компьютер и iPhone

Решение 2:

Перейти к настройкам сборки проекта и установить Always Embed Swift Standard Libraries(ранее Embedded Content Contains Swift Code) флагYES

Решение 3:

Зайдите в настройки сборки проекта и добавьте @executable_path/Frameworksв Runpath Search Pathsопцию

Решение 4:

Если ничего из вышеперечисленного не работает, это должно. Apple, кажется, патчи сертификаты ниндзя, как упомянуто в сообщении AirSign

На InHouse сертификаты

Subject: UID=269J2W3P2L, CN=iPhone Distribution: Company Name, O=Company Name, C=FR

они добавили новое поле с именем OU

Subject: UID=269J2W3P2L, CN=iPhone Distribution: Company Name, OU=269J2W3P2L, O=Company Name, C=FR

поэтому вы должны просто восстановить сертификат и предоставление


1
Объявление 2: теперь оно называется «ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES» (см. Комментарий ниже принятого ответа).
— Рафаэль

1
Я хотел добавить ... проекты MacOS требуют, @executable_path/../Frameworksгде проекты iOS требуют этого без ..в середине. Изменение этого значения важно, если вы преобразовали цель из одной ОС в другую.
— Мэтт Галлахер

41

В моем случае я пытался импортировать пользовательский фреймворк и получал похожую ошибку. Оказывается, мне пришлось импортировать фреймворк во встроенные двоичные файлы, а не в связанные фреймворки и библиотеки.

Встроенные двоичные файлы находятся в разделе «Настройки проекта» -> -> «Общие».


Спас мой день! Потрясающие!
— Клаас

1
Я видел эту ошибку, когда пытался использовать скомпилированный фреймворк, написанный на swift (вместо встраивания исходных файлов в качестве отдельной цели). Вышеупомянутое решение сработало и для меня.
— Алекс да Франка

Огромное спасибо, спас мой полный день.
— Бадринат

1
Сработал для меня после попытки связать структуру, частично написанную на swift, в старый проект, который был полностью объективным. Настройка была на самом деле под настройками сборки, хотя. Более подробная информация здесь: stackoverflow.com/questions/24163870/…
— Пеллет

Это в настройках Target, а не Project, просто чтобы быть уверенным.
— Legoless

16

Для разработчиков, у которых была эта проблема с дистрибутивами Adhoc / Enterprise,

Создайте производственный сертификат на портале dev, а затем заново создайте профиль распространения. Загрузите и установите их на свой Mac. Убедитесь, что вы выбрали правильный профиль в настройках сборки XCode и перестройте приложение.

Источник: https://devforums.apple.com/message/1022908#1022908


Хотя эта ссылка может ответить на вопрос, ссылки ломаются. Таким образом, рекомендуется включить ключевые части из ссылки. Ответы только на ссылки не рекомендуются.
— Pokechu22

Работал для моего корпоративного приложения. Спасибо!
— Сильванаар

15

Решение 5:

В моем случае все решения, упомянутые в ответе на рассылку, были очень полезными, но ни одно из них не сработало. Я решил свою проблему, добавив свою быструю библиотеку в раздел «Встроенные двоичные файлы» в разделе «Общие» цели моего проекта. Может быть, это связано с тем, что я включил мой быстрый фреймворк в мое рабочее пространство? Что бы это ни собиралось сейчас! Готовься, Свифт, я здесь!


ОК, это похоже на работу. Я просто пытаюсь написать библиотеку быстрого кода для быстрого проекта. Почему-то мне все еще интересно, правильно ли это. Однако я в восторге от его работы.
— kpierce8

Я включил свои фреймворки в раздел «Копирование фреймворков» на вкладке «Фазы сборки», но одну фреймворк здесь не удалось выбрать. «Общие» позволили выбрать этот другой фреймворк и добавили его в фазы сборки, а приложение создает и запускает. Как ни странно, я все еще мог запустить приложение на симуляторе.
— DJBP

Спасибо, Кристоф. Как и вы, перепробовал все решения, и было явно не интуитивно понятно, что быструю библиотеку нельзя просто перетащить в один проект. Вам явно нужно поместить библиотеку во встроенный раздел (более понятный модуль swift, я сомневаюсь, что могут быть другие типы встроенных компонентов). Даже если XCode может автоматически обнаружить это автоматически и сделать эту работу за нас ... Но это не задача нашего любимого XCode;), безусловно, здесь, чтобы тратить наше время впустую ...
— Мистер Бонжур

Кроме того, если библиотека уже есть в списке, убедитесь, что она помечена как «Вставить и подписать». Это исправляет мою проблему.
— SquareBox

10

Простой перезапуск Xcode решил проблему для меня.


Я собираюсь дать пощечину следующему фанату Apple, который высмеивает перезагрузку Windows
— Джош

5

Для меня проблема была связана с тем, что мой центр сертификации отношений с разработчиками Apple Worldwide недействителен.

Загрузите его отсюда: https://developer.apple.com/certificationauthority/AppleWWDRCA.cer.

Перетащите его в Keychain Access, очистите проект и запустите.


Это начало происходить после того, как мы добавили право CloudKit. До этого, я думаю, было все равно, что сертификат WWDR был недействительным.
— CommaToast

3

У меня был проект Obj-C, где я начал добавлять быстрые исходные файлы. Следующее исправило проблему для меня:

  1. Связь: RUNPATH SEARCH PATHS = $(inherited) @executable_path/Frameworks
  2. Swift Compiler - генерация кода: EMBEDDED CONTENT CONTAINS SWIFT = YES

Я только что создал новый проект из шаблонов Xcode 6.3 и сравнил настройки проекта со своим старым оригинальным проектом.


3

Попробуйте удерживать Alt, затем перейдите в Product -> Clean Build Folder ...

Надеюсь, это поможет кому-то ..


Это не дает ответа на вопрос. Как только у вас будет достаточно репутации, вы сможете комментировать любой пост ; вместо этого предоставьте ответы, которые не требуют разъяснений от автора . - Из обзора
— Rakete1111

Это произошло после попытки добавить новый класс в старый проект. Нет информации о том, сколько лет проекту. Итак, очистка проекта и принудительное обновление кеша имеют смысл. Старый проект также подразумевает, что существует высокая вероятность того, что сертификат будет заменен в то же время, поскольку срок действия сертификатов Apple Production и Developer истекает каждый год. Прочитайте об основной причине ошибки в соответствии с Apple Technical Q & A на. developer.apple.com/library/ios/qa/qa1886/_index.html . Со мной произошло то же самое, и Clean Build Folder снова запускает проект. Пусть люди попробуют ..
— stakahop

Это произошло сразу после перезагрузки моего сертификата iOs. Простая чистка (меню «Продукт»), и все работает отлично ;-)
— Себастьян РЕМИ

Работал отлично. Спасибо.
— София

3

Причин для этого много. Проведя веселые выходные в поисках еще одной проблемы, вызывающей эту проблему (порядок подписания кода), я хотел создать краткий ответ, объединяющий все возможные решения:

  1. Добавить встроенный контент Содержит код Swift для проекта. Вам необходимо установить этот флаг, если ваше приложение содержит код Swift.
  2. Чистый проект . В дополнение к проекту> Clean вы также можете удалить DerivedDataи Buildкаталоги. Посмотрите в настройках для местоположения DerivedData. Buildдолжен быть в папке вашего проекта.
  3. Убедитесь, что пути поиска Runpath содержат@executable_path/Frameworks .
  4. Убедитесь, что ваш сертификат содержит ваш Apple Team ID в поле OU (Organization Unit). Apple добавит его для вас, просто отмените существующий сертификат распространения и создайте новый, загрузите, установите на KeyChain, восстановите все профили обеспечения, загрузите их и перестраивать.
  5. Перезапуск Xcode. Если все в принципе хорошо, но Xcode еще не дошел.

Это легко. Если вы делаете свою собственную сборку командной строки, вы можете создавать свои собственные .ipaфайлы для загрузки. В этом случае вам необходимо обеспечить следующее:

  1. Убедитесь, что версия файлов Swift внутри SwiftSupport/iphoneosсовпадает с версией в.Contents/YourApp.app/Frameworks Поскольку Swift еще не совместим между версиями в двоичном формате, вы должны убедиться, что эти версии являются теми, для которых вы создали свое приложение. Вы можете найти эти библиотеки в /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/swift/iphoneos.
  2. Сначала подпишите библиотеки и фреймворки . Вам нужно сначала codesignбиблиотеки и файлы инфраструктуры ( Frameworksв .appпапке), а затем подписать все .appдерево. .appДерево должно быть подписано с , entitlements.plistно не в рамках.

Надеемся, что когда выйдет Swift 3.0 и нам больше не понадобится связывать Swift с нашими приложениями, вся эта проблема исчезнет.


2

У меня была эта проблема с использованием специального мобильного (или корпоративного) мобильного решения с производственным сертификатом. Переход на сертификат развития и mobileprovision решил проблему.


4
Это может позволить вам запустить приложение в разработке, но как вы будете развертывать, если не работает специальный или корпоративный профиль?
— Кристофер Джонсон

2

Мой проект - проект Swift с некоторыми классами Objective-C. У меня была такая же проблема при подписании со старым сертификатом inHouse (enterprise).

Следующие шаги исправили это для меня.

  1. Создайте и используйте новый сертификат и мобильное обеспечение.
    (Ссылка на блог AIRSIGN )
  2. Установите Runpath Search Pathsнастройки сборки на: $(inherited) @executable_path/Frameworks.
    (См. Ответ Мэтта )

2

Решение 6:

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

(Кажется, есть много разных причин этой ошибки. Надеюсь, это кому-нибудь поможет.)


Это решило мою проблему. Святое дерьмо, что пустая трата времени пытается это исправить. Я надеюсь, что это решает проблемы других пользователей. Я смог отладить свое приложение с помощью своей пользовательской среды, но не смог запустить версию машины сборки на jenkins. Отмена моих сертификатов распространения и создание нового профиля обеспечения предприятия исправили сборки для меня.
— Cynistersix

2
— То

2

Я перепробовал все ответы, приведенные выше, ничего не получалось.

Наконец-то сработало после обновления до Yosemite


2

Я столкнулся с той же самой проблемой, установив правильную идентификацию знака кода, решил проблему (Настройки сборки-> Идентификация подписи кода).

Согласно техническому вопросу Apple «Все корпоративные и стандартные сертификаты разработчика iOS, созданные после выпуска iOS 8, имеют новое поле Team ID в надлежащем месте для запуска приложений на языке Swift»


2

Если вы добавите три фреймворка через встроенные двоичные файлы, они также будут добавлены в связанные фреймворки и библиотеки. Удаление трех записей в связанных фреймворках и библиотеках решит проблему.

Магические методы, такие как перезапуск Xcode и перезагрузка Mac, не работают на меня.


Спасибо за улучшение формата. Выглядит лучше «Связанные рамки и библиотеки» - это один раздел, а не два. Я изменяю «и» на жирный. @ Bartłomiej
— Арбифер

来 来 шуа фэн зи шу бу дин
— мороженое

2

Добавление фреймворка как «Embedded Binary» вместо просто «связанных фреймворков и библиотек» - исправил мою проблему.

Я также установил флаг «Внедренный контент содержит код Swift» на «Да».


1

Обновление до последней версии OS X (Yosemite)

После нескольких часов проб и ошибок я пришел к решению этой проблемы. - Если это относится к вашему случаю, конечно.

У меня была такая же проблема, пока я не обновил свой Mac OS X с Mavericks до Yosemite. - Это исправило мою проблему, надеюсь, это исправит и вашу


1

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

Единственный способ запустить xcode после 6 месяцев попыток - создать новую учетную запись на моем macbook.


1

Обычно эта ошибка исчезает, если вы добавляете эту библиотеку в сегмент «Копирование файлов» на этапах сборки.


Это работало для меня на XCode 7.2.1. Я использовал + на панели «Фазы сборки», выбрал «Фаза создания новых файлов копирования», затем перетащил структуру из дерева рабочей области в раздел «Копирование файлов». Наконец я выбрал пункт назначения: рамки. После чистой сборки мое приложение запустилось как положено.
— Роб Смоллшир

1

И если все вышеперечисленное не поможет вам, и вы действительно расстроены ... Попробуйте лучший трюк из всех: Cleanи просто, чтобы быть уверенным Clean Build Folder. :) Надеюсь, это кому-нибудь поможет!


1

Ни одно из этих решений, казалось, не работало для меня постоянно; после каждой пары успешных запусков это снова не получится. Для меня флаг «Внедренный контент содержит Swift Code» всегда был установлен на YES.

Оказывается, я бы установил Xcode на 6,3-совместимый. Изменение обратно на 3.2-совместимое решило это:


Спасибо! Я попробовал все остальное. Я изменил его обратно на 3.2, очистил проект, перезапустил Xcode и он
— заработал

1

У меня тоже была эта проблема, только она не была обнаружена libswiftXCTest.dylib.

Решение состояло в том, чтобы добавить XCTest.frameworkк цели Тестов, в Build Phases/Link Binary with Library. Я получал эту ошибку, даже когда пытался построить основную цель.


0

Это обнаружилось, когда я добавил новую цель расширения Today с языком Swift в старый проект. Исправлено легко путем обновления проекта до рекомендуемых настроек. Xcode 6.0.1


0

Я получил ту же проблему, используя Mavericks, Xcode 6.1.1, тестирование на iPhone5 с iOS 8.1.1. Я перепробовал все возможные решения, включая новые сертификаты и профили обеспечения, но ничего не помогло. Я сделал изменения Embedded Content Contains Swift CodeиRunpath Search Paths на уровне проекта, и на уровне цели.

Я сейчас установил Yosemite, и без каких-либо дальнейших изменений он начал работать.


0

Та же самая проблема здесь, для меня это была Crashlytics / Fabric / Beta / Twitter / Независимо от того, что они сами называют загрузкой двоичного файла, в котором отсутствовали встроенные фреймворки. Если я сделал архив, а затем экспортировал сборку Enterprise стандартным способом, они сработали.


0

Моя среда: Cocos2d 2.0, Box2d, Цель C

В дополнение к другим ответам, приведенным выше, я, наконец, перешел на вкладку «Общие» и сделал WatchKit необязательным.

Цели: Общее: Связанные фреймворки и библиотеки: WatchKit.framework: Необязательно


0

После месяцев и месяцев, пытаясь всё здесь ... Определение безумия ... запуск Xcode под новым пользователем Mac решил это за меня.

Я удалил ~ / Library / Developer / * и переустановил Xcode - так что понятия не имею, что еще нужно отформатировать, чтобы он работал.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.