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

Я пытаюсь создать базовую 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 каталог

27 ответов

Решение

[из Xcode 6 -> 7.3]

(Да, все еще работаю на Xcode 10, iOS и macOS)

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

Скриншот из Xcode

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

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

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

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

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

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

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

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

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

Ошибка в оригинальном сообщении:

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 

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

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

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

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

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

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

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

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

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

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

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

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

Xcode 11:

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

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

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

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

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

Я столкнулся с этой проблемой в бета-версиях Xcode 13 с помощью UniformTypeIdentifiers.framework. Приложение не удалось запустить на версиях iOS ниже 13. Приведенный ниже подход устранил проблему:

Перейдите к цели -> Этапы сборки -> Связать двоичный файл с библиотеками -> Добавить фреймворк -> Добавить статус « Необязательный » . Вышеизложенное отлично сработало для меня! Надеюсь это поможет!

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

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

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

То, что решило это для меня, менялось abstract_target в target для основной цели в моем Podfile. Я ранее установил его abstract_target и это вызвало описанную ошибку. Теперь это работает как шарм

Для 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, указанный выше журнал удаления исчезает после перестроения.

Просто уточнить мою ситуацию и причину, надеюсь, это будет полезно для кого-то.

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

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

Это может произойти с Pod Frameworks. Я столкнулся с той же проблемой с AnswerBotProvidersSDK.frameworkи моя ошибка заключалась в том, что я установил флажок Run Script для установки сборок только на этапах сборки цели.

Неправильные настройки:

Правильные настройки:

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

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

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

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

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

  1. перейти к проекту General Вкладка

  2. Выберите свою цель (в моем случае это была цель расширения службы уведомлений)

  3. Убедись в том, что Framework and Librariesраздел содержит ваш недостающий фреймворк. Я оставил это Embed Without Signing в моей NSE Target, но он также был добавлен с помощью Embed & Sign к моей основной цели приложения

  4. Не снимая выделения с цели, переключитесь на Build Settings вкладка

  5. Там в строке поиска введите LD_RUNPATH_SEARCH_PATHS (убедись в том, что All будут отображены возможные настройки, а не только Basic)

  6. Ты увидишь Runpath Search Paths и он был для меня пуст.

  7. Добавьте туда 3 следующих значения:

    • $ (унаследовано)
    • @ исполняемый_путь / Фреймворки
    • @executable_path/../../ Фреймворки

Вот что мне помогло.

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

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

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

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

[Xcode 9]

Xcode 11: Этапы сборки -> Внедрить фреймворки

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

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

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

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

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

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

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

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

Я сделал:

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

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

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

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