Библиотека OS X Framework не загружена: «Изображение не найдено»

279

Я пытаюсь создать базовую OS X Framework, сейчас у меня только что создана тестовая среда: TestMacFramework.frameworkя пытаюсь импортировать ее в совершенно новый проект приложения OS 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 contents / frameworks, но не устанавливается в каталог Library / Frameworks на HD

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

ОБНОВЛЕНИЕ 2:

Сборка ссылки правильно, если я вручную скопировать TestMacFramework.frameworkв Library/Frameworksкаталог

Sammio2
источник
1
Что otool -Lговорит вам о том, где приложение ожидает найти структуру?
trojanfoe
Хорошо, я понял, как его запустить ... Это вывод, который я получаю для своей библиотеки (я исключил другие зависимости, такие как Foundation и т. Д.)/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, принятый ответ является правильным способом сделать это. Если у вас все еще есть проблемы, это может быть не связанной проблемой?
Sammio2

Ответы:

553

[Xcode 11+]

Единственное, что нужно сделать, это добавить фреймворк в General->Frameworks, Libraries And Embedded Contentраздел на Generalвкладке цели вашего приложения.

Убедитесь, что вы выбрали опцию «Вставить и подписать».

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

[Xcode v6 -> Xcode v10]

Единственное, что нужно сделать, это добавить фреймворк в Embedded binariesраздел на Generalвкладке цели вашего приложения.

Скриншот из Xcode

Kappe
источник
32
Это единственный шаг, необходимый для iOS.
Николовский
7
Спасибо! Решил это для меня на iOS.
user1244109
6
Спасибо! Это помогло мне для iOS
Александр Хитев
4
Я использую класс из импортированного фреймворка в раскадровке, и у меня была эта ошибка. Просто хочу добавить, что в дополнение к настройке Custom CLASS в раскадровке, вы также должны установить поле MODULE.
Рубен Мартинес младший
8
@ZevsVU У меня нет Embedded binariesраздела в моем проекте MacOS. В чем дело?
fnc12
56

Так что мне удалось заставить его работать, это довольно просто, когда у вас есть правильные инструкции. То, что я искал, было "частной" структурой, которая живет в комплекте приложений, а не записывается в папку системной библиотеки.

Построение Рамок

  1. Добавить цель для создания Cocoa Framework
  2. В рамках этих целей «Настройки сборки» настройте «Каталог установки» на «@executable_path /../ Frameworks»
  3. Создайте библиотеку и получите доступ к .framework из архива или каталога продуктов

Включая рамки

  1. Перетащите созданный файл .framework в проект Xcode, обязательно отметьте «Копировать файлы в каталог».
  2. В целевой папке с приложениями добавьте новый этап копирования файла
  3. Установите «Назначение» на «Рамки»
  4. Перетащите в созданную .framework
Sammio2
источник
1
Это также работает для платформ iOS. При добавлении пользовательского фреймворка в рабочее пространство нужно строить вместе с ним. Вы должны добавить часть Inclusive The Framework этого решения, чтобы решить эту ошибку при отладке на устройстве!
cynistersix
1
Спасибо, работал на iOS. Я не выполнил ваши первые шаги, так как фреймворки уже были встроены в мою папку производных данных
Gmeister4
Потрясающие! Спас мой чертов день! 2017 - Xcode 8.3.2 Спасибо!
Гленн
По какой-то странной причине вы не можете перетащить каркас из стандартного раздела «Связать двоичные файлы с библиотеками» в раздел «Встроенные каркасы», но вы можете перетащить каркас из списка проектов слева. Вам все равно придется вручную удалить структуру из раздела «Связать двоичные файлы с библиотеками» с помощью кнопки «-».
Уильям Чернюк
18

Это было довольно просто для меня, я просто добавил свой фреймворк во мои встроенные двоичные файлы под целями приложения

Робин Делапорте
источник
15

Варианты выше, где я не могу включить. Я решил это, указав путь поиска Runpath

Это на вкладке « Настройки сборки ». В разделе « Связывание ». Измените « Пути поиска пути » на$(inherited) @executable_path/Frameworks

Винсент
источник
Мне нужно было оба шага, этот шаг и добавить новую «Фазу сборки файла копирования» с фреймворком.
user23
У меня был старый проект 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 

С этим изменением я больше не получаю ошибку

Амос Джошуа
источник
8

Удаление полученных данных сохранило их для меня

SleepsOnNewspapers
источник
3
У меня не сработало, но когда я это сделал, pod installэто сработало.
Hola Soy Edu Feliz Navidad
7

Ни один из этих вопросов не решил это для меня. Проблема в конце была довольно простой. Похоже, это довольно серьезная ошибка XCode, которую я зарегистрировал проблему и исправил под ошибкой Apple: 29820370. Если вы боретесь (как кажется, есть несколько страниц с подобными проблемами), то было бы здорово, если вы можете поднять ошибку на репортере ошибок: https://bugreport.apple.com/ и сослаться на ошибку, которую я поднял, чтобы получить видимость. Я хочу вернуть Xcode в удовольствие, которое было раньше - и я уверен, что Xcode должен был исправить это сам.

Вот исправление: 1. Откройте Keychain - перейдите на Apple Worldwide Developer Cert. 2. Дважды щелкните по нему 3. Измените уровень разрешений с «всегда доверять», чтобы использовать системные значения по умолчанию 4. Сохраните и закройте его 5. Перезапустите Xcode, очистите и соберите свой проект, и он должен исчезнуть.

Снимок экрана ниже с правильными настройками: Доступ к связке ключей исправлен надеюсь, это поможет!

UKDataGeek
источник
2
«Использовать системные настройки по умолчанию», кажется, стандартная настройка.
Рафаэль
Не всегда - кажется, что-то меняет это, что приводит к этой
ошибке
Спасибо, это решило и мою проблему! К сожалению, я не вижу ваш билет на трекере ошибок, чтобы дать ему дополнительную информацию. Я не уверен, почему, там нет никаких ошибок.
Джим
7

Xcode 11:

в Xcode 11 добавить рамки в General->Frameworks, Libraries And Embedded Content

после добавления убедитесь, что вы выбрали Embed & Signопцию

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

Сайфан Надаф
источник
2
если вы сделаете это, то вы не сможете загрузить свое приложение в магазине приложений
Mahendra
@ Махендра, какую альтернативу вы используете в этом случае? У меня была похожая проблема.
Деррил Томас
@DerrylThomas, приложение все еще находится в режиме разработки, поэтому не проверял этот случай
Махендра
1
@ Махендра, пожалуйста, поделитесь здесь, если вы найдете альтернативу для этого. Я был бы очень благодарен.
Деррил Томас
@DerrylThomas При создании архива вернитесь к параметру Не вставлять и создайте исполняемый файл для загрузки в магазин приложений.
BlackPearl12
6

Когда вы перетаскиваете пользовательский фреймворк в проект под Xcode 10.1 , он предполагает что фреймворк является системным фреймворком, и помещает фреймворк в раздел «Связать двоичные файлы с библиотеками» в «Фазы сборки» под вашей целью.

Системные инфраструктуры уже есть на устройстве, поэтому они не копируются на устройство и, следовательно, не могут выполняться во время выполнения, поэтому KABOOM (сбой в __abort_with_payload и ошибка дезинформирования: «Причина: изображение не найдено»). Это потому, что код структуры не копируется на устройство ...

В действительности, чтобы Xcode связывал пользовательскую платформу и гарантировал, что она копируется вместе с вашим кодом на устройство iOS (реальное или симулятор), пользовательскую платформу необходимо переместить в «Копировать ресурсы комплекта». Это в конечном итоге упаковывает фреймворк вместе с исполняемым кодом, чтобы они были доступны на устройстве вместе.

Чтобы добавить пользовательский фреймворк в проект и избежать сбоя Apple:

  1. Перетащите пользовательский фреймворк в список файлов вашего проекта iOS
  2. Выберите «Имя проекта» в «Навигаторе» -> «Имя цели» -> «Фазы сборки» -> Треугольник раскрытия бинарных ссылок с библиотеками
  3. Перетащите пользовательский фреймворк вниз и вниз в раздел «Копирование ресурсов комплекта» ниже (Xcode теперь перемещает ссылку на фреймворк, исправлено в Xcode 10)
  4. Запустить в симуляторе или устройстве

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

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

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

Уильям Чернюк
источник
5

Должен быть 'Run Script' в 'Build Phases' с этим: '/ usr / local / bin / carthage copy-frameworks'

В «Входных файлах» этого «Run Script» вы должны добавить путь к своим библиотекам. Как это:

Скрипт запуска фаз сборки

thacilima
источник
4

Если вы случайно сбросили связку ключей, это может произойти из-за отсутствия сертификатов Apple в связке ключей. Я последовал за этим, чтобы решить мою проблему.

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

user1742302
источник
Это решило и мою проблему. Не забудьте очистить папку сборки перед перекомпиляцией.
Джастин Майло,
4

Если вы используете Xcode 11 , убедитесь, что у вас есть инфраструктура, добавленная в Frameworks, Libraries и Embed Content под Target settings - General. Измените статус «Внедрить» с «Не вставлять» на «Вставить и подписать»

Сачин Наутиял
источник
Но это приведет к ошибке поддержки Invalid Swift 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

Для меня это было решением после многих часов поиска!

По какой-то причине, в разработке собственной платформы 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 )

Encaps
источник
0

Я обнаружил, что эта проблема связана только с подписанием кода и сертификатами, а не с самим кодом. Чтобы убедиться в этом, создайте базовое приложение с одним представлением и попробуйте запустить его без каких-либо изменений на вашем устройстве. Если вы видите тот же тип ошибки, это показывает, что ваш код в порядке. Как и я, вы обнаружите, что ваши сертификаты являются недействительными. Загрузите все снова и исправьте все просроченные. Затем, когда вы заставите основное приложение не сообщать об ошибке, попробуйте ваше приложение еще раз после выхода из XCode и, возможно, перезапустите ваш Mac для хорошей меры. Это наконец положило конец этому кошмару. Скорее всего, это не имеет ничего общего с вашим кодом, особенно если вы получаете сообщение Build Successful при попытке его запустить. FYI

iOS4Fun
источник
0

Возникла проблема при попытке запустить бета-версию Xcode 9 и вернуться к Xcode 8. Простая очистка цели позволила решить проблему.

Ксавье
источник
0

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

[Xcode 9]

Юваль
источник
0

Единственное, что сработало для меня:

Цель> Фазы сборки> [CP] Встраивать модули Pods Снимите флажок «Показывать переменные среды в журнале сборки» и «Запускать сценарий только при установке»

Нил
источник
0

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

Изменить: Моя цель тестирования пользовательского интерфейса не работает, и решение, которое я нашел, состояло в том, чтобы удалить его и сгенерировать его снова.

Гонсало
источник
0

открыть xcode -> general -> Embedded Binaries -> добавить QBImagepicker.framework и RSKImageCropper -> очистить проект

просто добавьте QBImagePicker.framework и RSKImageCropper.framework во встроенных двоичных файлах работал для меня

Agustiar
источник
0

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

Я проверил все способы, опубликованные в Интернете, такие как продление сертификата, изменение настроек в XCode (все способы, упомянутые выше), на самом деле все настройки в XCode уже были установлены так, как было запрошено ранее, ни один из способов не работает для меня. До этого утра, когда я удаляю стручки и переустанавливаю, ошибка наконец-то появится через неделю. Если вы также используете cocoapod, а затем ошибка просто появилась без какой-либо конкретной причины, может быть, вы можете попробовать мой путь.

  1. Проверьте мою версию Cocoapods.
  2. Обновите его, если доступна новая версия.
  3. Перейдите в папку проекта, удалите файл Podfile.lock, файл Pods, проект xcworkspace.
  4. Запустить установку pod
разъем
источник
0

Я столкнулся с этой проблемой только при работе на реальном устройстве (iPhone SE). На симуляторе проект работал как положено.

Я попробовал все исправления из этой самой ветки и отсюда . Никто из них не работал для меня.

Для меня проблема была решена после перезагрузки iPhone (так!).

Я сделал:

  • папка чистой сборки,
  • очистить полученные данные,
  • удалить приложение с устройства,
  • перезагрузите устройство

И это наконец работает. :)

Если любое другое решение не помогает, не забудьте попробовать его.

vandermesis
источник
0

Xcode 11: этапы сборки -> встроить рамки

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

Офир Малахи
источник