dyld: Бібліотека не завантажена: @ rpath / libswiftCore.dylib / Зображення не знайдено


77

Я запускаю свою програму з xcode на свій пристрій iOS, і я отримую цей і чорний екран на пристрої iOS.

Текст консолі:

dyld: Library not loaded: @rpath/libswiftCore.dylib
Referenced from: /private/var/mobile/Containers/Bundle/Application/10DB2FE8-EF09-4857-B4AC-0DB2E4419D6F/App-Name.app/App-Name           
Reason: image not found        
(lldb)

Знімок екрана додано


Які фреймворки використовують? Який iOS працює на вашому пристрої?
повернення true

@return true - iOS 8 У моїй грі є такі фреймворки: UIKit, AdSupport, CoreGraphics, AudioToolbox, AVFoundation, CoreTelephony, MessageUI, SystemConfiguration, Accelerate, Foundation, SpriteKit. Записав усіх: D
Стіг Омдал



на реальному пристрої я перевірив цілі способи і не отримав відповіді, але нарешті я видалив cocoaPod зі свого проекту і знову перевстановив його, проблема вирішена, і моя програма працює на пристрої !! це відповідь на видалення cocoaPod:
stackoverflow.com/a/34765245/2201814

Відповіді:


90

Спробуйте додати наступний рядок до шляхів пошуку Runpath вашої цілі.

@executable_path/Frameworks

your_target -> Параметри побудови -> Посилання -> Шляхи пошуку шляхів запуску


53
у моїх шляхах пошуку Runpath у мене це вже є за замовчуванням
SP Balu Kommuri

3
вирішено! Дякую! Я б запропонував також прибрати проект:shift + cmd + k
ric

У моєму випадку ця помилка трапилася після того, як я об’єднався в іншу гілку, де я створив розширення Today (віджет). Після конфлікту злиття шлях пробігу для мого об’єднаного віджета-цілі був якимось чином пошкоджений і не містив належного шляху проходження. Коли я повернувся до попереднього злиття віджету, я помітив, що у нього є ці дві шляхи проходження: @executable_path/Frameworks @executable_path/../../Frameworks(на додаток до $(CONFIGURATION_BUILD_DIR))
Sti

У моєму випадку я створив дві цілі та додав файл Swift, який створює мостовий файл заголовка та деякі конфігурації, але я позначив його лише як члена однієї цілі. Перша ціль працює належним чином, а друга - ні, і я помітив, що різницею в налаштуваннях збірки були такі налаштування: Шляхи шляху запуску -> $ (успадковано) та @ executable_path / Frameworks. А також мені потрібно було посилатись на заголовок об'єднання-Objective-C до файл, створений раніше. Після додавання цих двох налаштувань друга ціль почала працювати належним чином.
Дієго Каррера

50

У мене була така сама проблема. У підсумку я додав фреймворк у таких місцях:

  1. General > Embedded Binaries
  2. General > Linked Frameworks and Libraries
  3. Build Phases > Link Binaries with Libraries

Ці вбудовані виконавчі файли , здавалося, ключ для мене.


3
Вбудовані двійкові файли! Здавалося, це є ключовим фактором, який бракує у багатьох інших відповідях, побачених тут для мене
bitwit

Ця проблема виникла під час посилання на мій "SharedCode.framework". Додавання .framework у програму Target> General> "Embedded Binaries" вирішило проблему.
Альфонс Р. Дзуза,

29

Мені допомагає додавання @executable_path/Frameworksдо проекту Runpath Search Paths, а не target. введіть тут опис зображення your_project -> Параметри побудови -> Посилання -> Шляхи пошуку шляхів запуску


15

Жодне з інших рішень мені не допомогло, але все було виправлено шляхом видалення каталогу похідних даних Xcode .


Так, це спрацювало для мене. Я попередньо лише видаляв похідні дані для конкретного проекту, але мені потрібно було видалити папку похідних даних Xcode. Дякую.
vikzilla

6
Де похідні дані ?
JW.ZG

2
Каталог DerivedData можна знайти за адресою Xcode -> Налаштування -> Місцеположення, потім клацніть стрілку, щоб перейти до каталогу
Кароліна

13

О, так. Я зіткнувся з цією проблемою, витрачаючи години на рішення. Ви можете спробувати встановити для параметра «Завжди вбудовувати стандартні бібліотеки Swift» значення «Так» у налаштуваннях збірки> Параметри збірки

dyld: Бібліотека не завантажена: @ rpath / libswiftCore.dylib

(не забудьте змінити + cmd + K ваш проект після)


2
Дякую, пропозиція "(не забудьте змінити + cmd + K до вашого проекту після") працює для мене :)
Салех Енам Шохаг,

11

Мені довелося перемкнути "Вбудований вміст містить швидкий код" на "Так", щоб моє додаток Obj-C запрацювало після оновлення вбудованого фреймворку Obj-C за допомогою об'єкта Swift.


10

У цілі Framework ( не в цілі програми ) перейдіть до Параметри побудови> Параметри побудови> Завжди вставляти стандартні швидкі бібліотеки в ТАК.

Це вирішило проблему для мене!


1
Мені підходить, але після встановлення для Завжди вбудовувати стандартні швидкі бібліотеки на ТАК. Потрібна чиста збірка (shift + cmd + K).
Салех Енам Шохаг

9

У мене виникла ця помилка в проекті командного рядка (Xcode 10.2 та macOS 10.14.3)

Рішенням було оновлення до macOS 10.14.4

Проекти командного рядка Swift не запускатимуться на macOS 10.14.3 і раніше, якщо не встановити пакет підтримки Swift 5 Runtime Support для командного рядка. Без цього пакета проекти командного рядка Swift аварійно завершують роботу під час запуску з помилками “dyld: Бібліотека не завантажена”. (46824656)

З приміток до випуску Swift 5 для Xcode 10.2


Це мені це виправило. Навіть не вдалося запустити програму командного рядка vanilla без помилки dlyd.
Роберт Джозеф,

Це також було виправленням для мене. Я зіткнувся з цією помилкою в абсолютно новому проекті Swift (привіт світ) з версією ОС 10.14.3. Оновлено до 10.14.4 і він спрацював.
Росс Таджвар,

7

У моєму випадку ця проблема виходить у проекті Objective-c, в якому я використовую структуру Swift (AirWatch SDK).

Рішення: Я вирішив цю проблему з Xcode 9.3 та 11.0.1 iOS, як зазначено нижче.

  1. Перетягніть свій швидкий фреймворк у свій проект і перемістіться до папки Framework за замовчуванням для вашого проекту.
  2. Потім додайте їх як вбудовані двійкові файли, як показано на скріншоті.
  3. Змініть статус фреймворку з Обов’язковий на Необов’язковий, як показано на знімку екрана. (Фази побудови> Пов'язати двійковий файл з бібліотекою)

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

  1. Встановіть для Завжди вбудовувати швидкі стандартні бібліотеки значення Так у налаштуваннях збірки.

  2. Встановіть Subpath та виберіть пункт призначення як Framework для вашого доданого фреймворка в Phases Build> Embed framework, як показано на скріншоті. введіть тут опис зображення

Сподіваюся, це комусь допоможе.


Якщо ми робимо фреймворк необов’язковим, то класи фреймворків, до яких ми отримуємо доступ у коді, є нульовими. У вас є якесь рішення для цього?
Віджай,

Скажіть, будь ласка, як ви отримали цей SDK AirWatch? У мене з цим проблеми. ось моє запитання: stackoverflow.com/questions/53023149/…
Алекс

Дякуємо !, це єдине рішення, яке спрацювало для мене! +1
акдсуза

@akdsouza Приємно чути :)
Aashish1aug

5

Я зіткнувся з тією ж проблемою, встановивши правильну ідентифікацію кодового знака, вирішив проблему (Параметри побудови-> Ідентифікація підпису коду).

Згідно технічних питань Apple: "Усі сертифікати розробника для корпоративних і стандартних iOS, які створюються після випуску iOS 8, мають нове поле Ідентифікатор команди у відповідному місці, щоб дозволити запускати мовні програми Swift"


5

Я виправив, видаливши все з каталогу похідних даних Xcode:

~ / Library / Developer / Xcode / DerivedData

Всім удачі!


3

У мене було те саме повідомлення про помилку, ось як я його вирішив:

Проблема виникла в сертифікатах, автоматично згенерованих Xcode. Мені довелося відкликати ці сертифікати за умови їх повернення з developer.apple.com

Тоді рішення: слідуйте інструкціям для створення нових сертифікатів - У Xcode у моєму проекті: перейдіть до ідентифікатора підпису коду та підпишіть обидва рядки налагодження згенерованим сертифікатом - Обидва рядки випуску встановлені на «Розробник iOS» - Потім проект> очистити - Створення та запуск на пристрої


3

Відповідь @ Saikiran спрацювала.

Мої сертифікати були створені до випуску iOS 8. Я відкликав усі свої сертифікати та відновив усі профілі забезпечення, і це негайно вирішило мої проблеми.

У мене недостатньо репутації, щоб проголосувати відповідь @ Saikiran, але це, безумовно, допомогло вирішити проблему.


3

Це повідомлення про помилку може також виникнути під час використання збірки фреймворку в іншій версії Swift, ніж та, що використовується в даний час, наприклад, якщо ви оновите Xcode.


Я перепробував усі можливі сценарії, які обговорювали скрізь, але, здається, нічого не працює, я впевнений, що фреймворк, який я використовую, побудований на іншій версії Swift, але я не впевнений, що це проблема. Я спробую відновити структуру для нової версії Swift і поділюсь статусом тут.
Фаран Рашід,

Я думаю, що це було саме для мене - використовував Xcode 9.2 з фреймворком, використовуючи Swift 4.1, який потребує Xcode 9.3.
Fenix ​​Voltres

2

Для мене спрацював встановити варіант

ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES

до ТАК у Проекті -> Налаштування збірки -> Параметри збірки

(Наміріальний фреймворк через Cocoapods)


2

Жодне з наведених вище рішень не спрацювало для мене. Я змінив налаштування довіри до сертифіката розробника iPhone у Keychain. Це має бути Завжди довіра . Змініть його на Використання системних значень за замовчуванням . Двічі клацніть сертифікат у брелоку, щоб відкрити екран опцій Виявлено, що з цього блогу


Зміна, щоб Use System Defaultsвирішити це для мене також.
Нгоан Нгуєн,

Моя вже була "Використовувати системні за замовчуванням" і досі не працює
Стефан

1

У мене було те саме повідомлення про помилку, ось як я його вирішив: Це відбувається, тому що я змінив ідентифікатор набору, тому я просто поставив старий ідентифікатор набору, і він знову почав працювати


1

Я вже правильно встановив шляхи пошуку Runpath, але він все одно не працював. Відповідь @Justin Domnitz поставив мене на правильний шлях: встановлення "Завжди вбудовувати Swift Standard Libraries" на Так у налаштуваннях побудови моєї цілі зробило для мене фокус.


1

Здається, ця проблема була викликана включенням файлу Swift у спеціальну структуру object-c. Також не впевнений, що це пов’язано, але ціль мого додатка також була вбудована в цель-с. Також будується симулятор під час налагодження. Ще не перевірено на випуск чи збірку архіву.
Крім того, налаштування пошуку Runpath для цілі проекту були встановлені на "@ executable_path / Frameworks", у межах цільових налаштувань для фреймворку вони були встановлені: "@ executable_path / Frameworks" та "@ loader_path / Frameworks".

Після спроби відновити користувальницький фреймворк і повторно приєднати його до цілі програми, очистити папку похідних даних та ще кілька пропозицій, що, зрештою, спрацювало для мене, це зміна налаштування збірки в межах цільового проекту для проекту нестандартного фреймворку (не цільової програми): Стандартні бібліотеки "до" ТАК ​​". Здавалося, неважливо, для якого параметра встановлено ціль програми. Я перевірив це, скинувши тренажер та відновивши його. Це схоже на відповідь Даніеле Чеглії, але я не зміг додати коментар і хотів надати більше ясності.



1

Я також отримав таку проблему. Усі інші способи мені не могли допомогти, тому я зробив це по-дурному, створив новий проект та встановив pod з нуля, а після підтвердження, що він працює правильно, я скопіював усі файли класів та файли розкадрування, нарешті ! Я думаю, що це останній спосіб для цього, можливо, може допомогти вам


1

У мене була подібна проблема в проекті Objective-C, де я почав включати файли Swift.

У моєму випадку я створив дві цілі в основному проекті і додав порожній файл Swift, який створює мостовий файл заголовка та деякі конфігурації, але я позначив його лише як члена однієї цілі. Перша ціль працює належним чином, а друга - ні, і я помітив, що різниця в налаштуваннях збірки полягала в такому налаштуванні:

Шляхи пошукової стежки -> $(inherited)та@executable_path/Frameworks

І мені також потрібно було звернутися до заголовка Objective-C Bridging до файлу, який був створений раніше:

Мост-заголовок Objective-C -> pathTo/Target-Bridging-Header.h

Після додавання цих двох налаштувань друга ціль почала працювати належним чином.


1

Спробуйте очистити папку збірки, у мене була та ж проблема, і я вирішив це таким чином: Продукт -> Очистити папку збірки



0

Я спробував купу вищезазначених випадків, і це, здавалося, не вирішило мого питання. Я використовую git і cocoapods для проекту, і помилка зникла, як тільки я зробив новий коміт.


0

У мене була ця проблема раніше в iPod touch iOS 9.3. І я використав усі методи, згадані в цій публікації , але жоден з них не спрацював. Я перевірив налаштування проекту. І в іншому прапорі посилання я знайшов, що додав -Wl,-sectcreate,__RESTRICT,__restrict,/dev/null.

Цей прапорець запобігає введенню дилда в розбитий телефон. Коли я видалю цей прапор, програму можна буде запустити знову. Я не впевнений, чому це спрацювало. Оскільки в iPhone se iOS 10 мені не потрібно видаляти цей рядок. Але це справді працювало в iPod touch iOS 9.3. Тож перевірте це, якщо у вас така сама ситуація, як і я.


0

Будь ласка, перевірте * .framework Якщо існує каталог підписів _CodeSignature. Якщо папки _CodeSignature немає, перейдіть до Фази побудови, натисніть +, щоб додати Нову фазу копіювання файлу для створення файлів копіювання. після цього зверніться до * .framework і виберіть Код підпису на копію

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.