OS X Framework Library не загружена: "Изображение не найдено"

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

После небольшого поиска в Google я понял, что мне нужно добавить раздел Copy Files к этапам сборки контейнера, поэтому я сделал это и установил его так...

enter image description here

Тем не менее, я все еще получаю ошибку времени выполнения. Я, очевидно, делаю что-то не так, но ресурс библиотеки разработчиков Apple для этого ссылается на Xcode 2, так что это не очень полезно!

Что я пропустил?

UPDATE:

В журнале сборки я вижу, что мой TestMacFramework.framework копируется в каталог .app contents/frameworks, но он не устанавливается в каталог Library/Frameworks на HD

enter image description here

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

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

Ответ 1

[Протестировано в iOS/macOS - Xcode 6 → 10.2.1]

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

Screenshot from Xcode

Ответ 2

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

Создание структуры

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

Включая Framework

  • Перетащите созданный файл .framework в проект Xcode, обязательно отметьте "Скопировать файлы в каталог"
  • В целевом назначении приложений добавьте новую "Фазу сборки файла копирования"
  • Установите 'Destination' в 'Frameworks'
  • Перетащите созданный .framework

Ответ 3

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

Ответ 4

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

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

Ответ 5

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

Ответ 6

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

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

Снимок экрана ниже с правильными настройками: Keychain access fixed Надеюсь, это поможет!

Ответ 7

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

Ошибка в исходном сообщении:

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

В "Сборка фаз" должен быть "Запустить Script" с помощью этого: '/usr/local/bin/carthage copy-frameworks'

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

Build Phases Run Script

Ответ 9

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

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

Ответ 10

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

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

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

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

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

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

enter image description here

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

Ответ 11

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

Ответ 12

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

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

Ответ 13

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

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

Ответ 14

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

Ответ 15

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

Ответ 16

У меня была такая же проблема по другой причине. Я создал новую конфигурацию для Debug и Release (в разделе PROJECT → Info → Конфигурация). И мне пришлось изменить оболочку оболочки pod script (Pods- "appName" -frameworks.sh в разделе Файлы поддержки целей), чтобы она работала.

[Xcode 9]

Ответ 17

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

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

Ответ 18

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

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

Ответ 19

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

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

Ответ 20

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

Ответ 21

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

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

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

Ответ 22

Xcode 11 :

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

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

enter image description here