OS X Framework Library не завантажена: "Зображення не знайдено"


279

Я намагаюся створити базовий OS X Framework, зараз у мене просто створений тестовий фреймворк: TestMacFramework.frameworkі я намагаюся імпортувати його в абсолютно новий проект програми X X.

Я створив файл .framework і імпортував його в новий проект. Здається, що рамка посилається добре, і я можу посилатись на загальнодоступний файл заголовка, який я додав до розділу фаз збірки рамки.

Однак, коли я намагаюся запустити контейнерний додаток, я отримую таку помилку:

dyld: Library not loaded: /Library/Frameworks/TestMacFramework.framework/Versions/A/TestMacFramework
  Referenced from: /Users/samharman/Library/Developer/Xcode/DerivedData/TestMacContainer-dzabuelobzfknafuhmgooqhqrgzl/Build/Products/Debug/TestMacContainer.app/Contents/MacOS/TestMacContainer
  Reason: image not found

Після трохи гуглінгу я зрозумів, що мені потрібно додати Copy Filesрозділ до фаз збирання додатків для контейнерів, тому я це зробив і налаштував так ...

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

Однак я все ще отримую помилку виконання. Я очевидно роблю щось не так тут, але ресурс бібліотеки розробників Apple для цього посилання Xcode 2, тому не дуже корисний!

Що я пропустив?

ОНОВЛЕННЯ:

Я можу побачити в журналі складання, що мій TestMacFramework.frameworkкопіюється в каталог .app content / frameworks, але він не встановлюється в каталог Library / Frameworks на HD

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

ОНОВЛЕННЯ 2:

Правильно створюються посилання, якщо я вручну копіюю TestMacFramework.frameworkв Library/Frameworksкаталог


1
Що otool -Lговорить вам про те, де програма очікує, що знайде основу?
trojanfoe

Гаразд, я зрозумів, як це запустити ... Це результат, який я отримую для моєї бібліотеки (я виключив інші залежності, як-от Фонд тощо)/Library/Frameworks/TestMacFramework.framework/Versions/A/TestMacFramework (compatibility version 1.0.0, current version 1.0.0)
Sammio2

Моє виправлення було Вставлення як бінарні файли потрібної мені бібліотеки (Alamofire). Це прийнятно?
Cmag

2
Дуже заплутано, що це питання чітко позначене як для OS X, і всі відповіді, включаючи прийнятий, призначені для iOS. У мене така ж помилка, і я не можу використовувати жодну з відповідей.
RenniePet

@RenniePet Оскільки процес Xcode 7.3 є однаковим для iOS та macOS, то прийнята відповідь - це правильний спосіб зробити це. Якщо у вас все ще виникають проблеми, це може бути непов'язана проблема?
Самміо2

Відповіді:


553

[Xcode 11+]

Єдине, що потрібно зробити - це додати рамку до General->Frameworks, Libraries And Embedded Contentрозділу на Generalвкладці цілі програми.

Переконайтесь, що ви вибрали опцію "Вставити та підписати".

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

[Xcode v6 -> Xcode v10]

Єдине, що потрібно зробити - це додати рамку до Embedded binariesрозділу на Generalвкладці цілі програми.

Знімок екрана з Xcode


32
Це єдиний крок, необхідний для iOS.
nikolovski

7
Дякую! Вирішили це для мене на iOS.
користувач1244109

6
Дякую! Це допомогло мені для iOS
Олександр Хітев

4
Я використовую клас із імпортованого фреймворку на Storyboard, і у мене була ця помилка. Просто хотів додати, що на додаток до налаштування користувальницького класу на дошці аркушів, ви також повинні встановити поле МОДУЛЬ.
Рубен Мартинес-молодший

8
@ZevsVU У Embedded binariesмоєму проекті macOS немає розділу. Що не так?
fnc12

56

Тож мені вдалося змусити його працювати, це досить просто, коли у вас є правильні вказівки. Що я шукав - це «приватний» фреймворк, який живе в пакеті додатків, а не записується в папку системної бібліотеки.

Побудова рамки

  1. Додайте ціль, щоб створити рамку какао
  2. У межах цілей "Налаштування збірки" налаштуйте "Каталог інсталяції" на "@executable_path /../ Frameworks"
  3. Створіть бібліотеку та отримайте доступ до .framework з архіву чи каталогу продуктів

У тому числі Рамки

  1. Перетягніть створений файл .framework в проект Xcode, обов'язково поставте галочку "Копіювати файли в каталог".
  2. У додаток, що містить програми, додайте нову фазу "Скопіювати файл"
  3. Встановіть для пункту "Місце призначення" значення "Рамки"
  4. Перетягніть створений .framework

1
Це також працює для iOS фреймворків. При додаванні нестандартного фреймворку в робочу область для створення разом з ним Ви повинні додати частину цього рішення, що включає The Framework The Framework, щоб вирішити цю помилку під час налагодження на пристрої!
cynistersix

1
Дякую, працював для iOS. Я не дотримувався ваших перших кроків, оскільки рамки вже були вбудовані в мою отриману папку даних
Gmeister4

Дивовижно! Врятував мій вигаданий день! 2017 - Xcode 8.3.2 Дякую!
Гленн

З якоїсь дивної причини ви не можете перетягнути рамку з розділу за замовчуванням «Пов’язати бінарне з бібліотеками» до розділу «Вбудовані рамки», але ви можете перетягнути рамку зі списку Проекти зліва. Вам все одно доведеться видалити рамку вручну з розділу "Посилання бінарних бібліотек" кнопкою "-".
Вільям Чернюк

18

Для мене це було досить просто, я просто додав рамки до своїх вбудованих бінарних файлів під цілями додатків


15

Наведені вище варіанти, куди мені неможливо включити. Я вирішив це, вказавши Шлях пошуку Runpath

Це на вкладці " Налаштування побудови ". У розділі " Зв'язування ". Змініть " Шляхи пошуку для запуску " на "$(inherited) @executable_path/Frameworks


Мені були потрібні обидва кроки, цей крок та додати новий "Копіювати фазу збирання файлів" з рамкою раніше.
користувач23

У мене був старий проект Xcode, який поступово оновлювався, і ці настройки для мене відсутні. Додано і зараз працює як очікувалося.
Маттіо

з усіх цих рішень це спрацювало, настільки дратує те, як підхід до проблеми виглядає як «добре, дозвольте мені зійти зі списку всіх цих публікацій stackoverflow, оскільки першопричина незрозуміла» APPLEEEEE
Райан

9

Я зіткнувся з тим самим питанням, але прийняте рішення не працювало для мене. Натомість рішенням було змінити ім'я встановлення рамки.

Помилка в початковій публікації:

dyld: Library not loaded: /Library/Frameworks/TestMacFramework.framework/Versions/A/TestMacFramework
  Referenced from: /Users/samharman/Library/Developer/Xcode/DerivedData/TestMacContainer-dzabuelobzfknafuhmgooqhqrgzl/Build/Products/Debug/TestMacContainer.app/Contents/MacOS/TestMacContainer
  Reason: image not found

Зверніть увагу на перший шлях після завантаження бібліотеки . Рамка завантажується з абсолютного шляху. Цей шлях походить від назви встановлення рамки (іноді її називають rpath), яку можна перевірити, використовуючи:

otool -D MyFramework.framework/MyFramework

Коли рамка вбудована в додаток, цей шлях повинен бути відносним і мати такий вигляд: @ rpath / MyFramework.framework / MyFramework . Якщо назва установки вашої рамки є абсолютним шляхом, вона може не завантажуватися під час виконання, і буде створена помилка, схожа на описану вище.

Рішення полягає в зміні назви установки:

install_name_tool -id "@rpath/MyFramework.framework/MyFramework" MyFramework.framework/MyFramework 

З цією зміною я більше не отримую помилки



7

Жодне з цих питань не вирішило цього для мене. Проблема зрештою була досить легкою. Схоже, це досить велика помилка Xcode, яку я зареєстрував проблему та виправив під помилкою Apple: 29820370. Якщо ви боретеся (як здається, є кілька сторінок проблем, подібних до цієї), то було б чудово, якщо зможете підняти помилку на репортера про помилку: https://bugreport.apple.com/ та посилатися на помилку, яку я підняв, щоб отримати видимість. Я хочу повернути Xcode в задоволення, що було раніше - і це те, що я впевнений, що Xcode повинен був виправити себе.

Ось виправлення: 1. Відкрийте брелок - перейдіть до Apple Worldwide Developer Cert. 2. Двічі клацніть по ній 3. Змініть рівень дозволу на "завжди довіряйте", щоб використовувати системні параметри за замовчуванням 4. Збережіть і закрийте 5. Перезавантажте Xcode, очистіть і складіть свій проект, і його не повинно бути більше.

Знімок екрана нижче правильних налаштувань: Доступ до брелоків фіксований Сподіваюся, це допоможе!


2
Здається, стандартна настройка "Використання системних значень за замовчуванням".
Рафаель

Не завжди - щось здається, що це змінить, що призводить до цієї
помилки

Завдяки цьому виправили і мою проблему! На жаль, я не можу побачити ваш квиток на трекері помилок, щоб надати йому додаткову видимість. Я не впевнений, чому це не відображає жодних помилок.
Джим

7

Xcode 11:

в Xcode 11 додайте фреймворк в General->Frameworks, Libraries And Embedded Content

після додавання переконайтесь, що ви вибрали Embed & Signопцію

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


2
якщо ви це зробите, тоді ви не зможете завантажувати свою програму в магазин додатків
Mahendra

@Mahendra, яку альтернативу ви використовуєте в цьому випадку? У мене було подібне питання.
Дерріл Томас

@DerrylThomas, Додаток все ще знаходиться в режимі розробки, тому не перевіряв цю справу
Mahendra

1
@Mahendra, будь ласка, поділіться тут, якщо ви знайдете альтернативу для цього. Я був би дуже вдячний.
Дерріл Томас

@DerrylThomas Створюючи архів, відновіть назад до параметра "Не вставляйте" та створіть виконуваний файл для завантаження в магазин додатків.
BlackPearl12

6

Коли ви перетягуєте користувацький фреймворк у проект під Xcode 10.1 , він передбачає, що фреймворк є системною рамкою і ставить рамку в розділ "Пов’язати бінарні бібліотеки" розділу "Фази збірки" під вашою ціллю.

Системні рамки вже є на пристрої, тому вони не скопійовані на пристрій і тому не можуть виконуватись під час виконання, тому KABOOM (збій у __abort_with_payload та помилка дезінформування: "Причина: зображення не знайдено"). Це тому, що рамковий код не копіюється на пристрій ...

Насправді, щоб обоє Xcode пов'язували користувальницьку структуру та забезпечували її скопіювання разом із кодом на пристрій iOS (реальний або симулятор), користувацьку структуру потрібно перенести на "Копіювати ресурси ресурсу". Це в кінцевому підсумку пакує рамки разом із вашим виконуваним кодом, щоб вони були доступні разом на пристрої.

Щоб додати в проект власну систему та уникнути аварій Apple:

  1. Перетягніть власну рамку у список файлів проекту iOS
  2. Клацніть ProjectName у Навігаторі -> TargetName -> "Фази збірки" -> Посилання Бінарне з трикутником розкриття бібліотек
  3. Перетягніть спеціальні рамки вниз і вниз до розділу "Копіювати ресурси ресурсу" нижче (Xcode тепер переміщує посилання на фреймворк, зафіксований у Xcode 10)
  4. Запуск у тренажері чи пристрої

Таким чином, спеціальна рамка копіюється разом із кодом на ваш цільовий пристрій і доступна під час виконання.

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

[редакція: ви вважаєте, що Xcode буде досить розумним, щоб визначити різницю між однією з його системних рамок, яку не потрібно копіювати на пристрій, та користувацьким фреймворком, який є, о, я не знаю, в ієрархії кореневих каталогів проекту. ... 🙄]


5

У "Фазах збірки" має бути "Запустити сценарій" із цим: "/ usr / local / bin / carthage copy-frameworks"

У "Вхідних файлах" цього "Запуск сценарію" слід додати шлях до своїх бібліотек. Подобається це:

Фази побудови запуску сценарію


4

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

У мене виникла та сама проблема, яку вдалося виправити, повторно завантаживши WWDR (Apple Worldwide Developers Certification Authority). Завантажте звідси: http://developer.apple.com/certificationauthority/AppleWWDRCA.cer


Це вирішило і мою проблему. Не забудьте очистити папку збірки перед перекомпіляцією.
Джастін Міло

4

Якщо ви використовуєте Xcode 11 , переконайтеся, що ви додали фреймворк у рамки, бібліотеки та вставити вміст у налаштуваннях цілі - загальні. Змініть статус "Вставити" - "Не вставляти" на "Вставити та підписати"


Але це призведе до помилки підтримки швидкої підтримки ITMS-90206 під час розповсюдження в App Store. Працює лише в розвитку.
Раптор

2

Що вирішило це для мене, було зміною abstract_targetна targetголовну ціль мого Podfile. Я попередньо встановив це, abstract_targetі це спричинило описану помилку. Зараз це працює як шарм


1

Для Xcode 8 деякі застарілі продукти будуть видалені з похідної папки даних, посилаючись на це рішення .

Apple: у macOS 10.12 та пізніших версіях Xcode очищає застарілі дані, попередньо складені заголовки та кеші модулів. (23282174)

Система збірки Xcode підтримує видалення файлів з усталеним файлом деяких типів артефактів збірки, які були створені в попередній збірці, але з тих пір були вилучені з проекту.

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

Remove stale build products

/bin/rm -rf /Users/usename/Library/Developer/Xcode/DerivedData/myapp-esvvhwwwwngijeemhatmklwzoxnb/Build/Products/Debug-iphonesimulator/myapp.app/Frameworks/AliyunVodPlayerSDK.framework
/bin/rmdir /Users/usename/Library/Developer/Xcode/DerivedData/myapp-esvvhwwwwngijeemhatmklwzoxnb/Build/Products/Debug-iphonesimulator/myapp.app/Frameworks

Після створення нової фази файлу копіювання та скопіювання цільового стійкого фрейму до пункту призначення Frameworks вищезазначений журнал видалення зникає після відновлення.

Просто з’ясуйте мою ситуацію та причини, сподіваюся, що це комусь корисно.


1

Для мене це було рішення, після багатьох годин пошуку !!

Чомусь, добре розробивши спеціальний Framework Swift 2.3, Xcode 8 видалив DYLIB_INSTALL_NAME_BASEналаштування з project.pbxprojфайлу. Трохи пройдіться в Build Settings / Dynamic Library Install Name Baseналаштування назад, щоб @rpathвиправити це.

https://forums.developer.apple.com/thread/4687 )


0

Я виявив, що ця проблема стосувалася лише підписання коду та сертифікатів, а не самого коду. Щоб підтвердити це, створіть основний додаток для єдиного перегляду та спробуйте запустити його без змін у своєму пристрої. Якщо ви бачите той самий тип помилки, це показує, що ваш код нормально. Як і я, ви побачите, що ваші сертифікати недійсні. Завантажте все ще раз і виправте всі терміни, що минули. Потім, коли ви отримаєте базовий додаток, щоб не повідомити про помилку, спробуйте додаток ще раз після виходу з Xcode і, можливо, перезавантажте комп'ютер для гарної міри. Це нарешті поклало кінець цьому кошмару. Швидше за все, це не має нічого спільного з вашим кодом, особливо якщо ви отримуєте повідомлення про збірку успішних при спробі запуску. FYI


0

Отримав проблему при спробі бета-версії Xcode 9 та повернення до Xcode 8. Проста проблема Clean на цілі вирішила проблему.


0

У мене було те саме питання з іншої причини. Я створив нову конфігурацію для налагодження та випуску (на сторінці ПРОЕКТ -> вкладка Інформація -> Конфігурація). І мені довелося змінити мій скрипт оболонки фреймворків (Pods- "appName" -frameworks.sh, під Файли підтримки файлів), щоб він працював.

[Xcode 9]


0

Єдине, що працювало для мене:

Ціль> Фази збірки> [CP] Вставити рамки Pods зніміть прапорець "Показати змінні середовища в журналі збірки" та "Запустити сценарій лише під час встановлення"


0

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

Редагувати: Моя ціль тестування на користувальницький інтерфейс також не працює, і знайдене нами рішення - видалити та знову створити її.


0

відкрити xcode -> загальний -> Вбудовані файли -> додати QBImagepicker.framework та RSKImageCropper -> чистий проект

просто додайте QBImagePicker.framework та RSKImageCropper.framework у вбудованих двійкових файлах, які працювали на мене


0

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

Я перевірив всі способи, розміщені в Інтернеті, як оновити сертифікат, змінити налаштування в Xcode (усі способи згадуються вище), насправді всі налаштування в Xcode були вже встановлені так, як це вимагалося раніше, жоден із способів не працює для мене. До цього ранку, коли я видаляю стручки та перевстановлюю, помилка нарешті збирається через тиждень. Якщо ви також використовуєте cocoapod, а помилка виявилася просто без конкретних причин, можливо, ви можете спробувати.

  1. Перевірте мою версію какаодів.
  2. Оновіть його, якщо є нова версія.
  3. Перейдіть до папки проекту, видаліть файл Podfile.lock, файл Pods, проект xcworkspace.
  4. Запустіть установку pod

0

Я відчув цю проблему лише під час роботи на реальному пристрої (iPhone SE). На тренажері проект працював як очікувалося.

Я спробував усі виправлення з цієї самої теми і звідси . Ніхто з цих не працював на мене.

Для мене проблема була вирішена після перезавантаження iPhone (sic!).

Я зробила:

  • чиста папка збірки,
  • чисті отримані дані,
  • видалити додаток із пристрою,
  • перезавантажити пристрій

І це нарешті спрацьовує. :)

Якщо будь-яке інше рішення не вдається, не забудьте спробувати його.


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