Библиотека 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
вкладка цели вашего приложения.
Так что мне удалось заставить его работать, это довольно просто, когда у вас есть правильные инструкции. То, что я искал, было "частным" фреймворком, который живет в комплекте приложений, а не записывается в папку системной библиотеки.
Построение Рамок
- Добавить цель для создания Cocoa Framework
- В рамках этих целей "Настройки сборки" настройте "Каталог установки" на "@executable_path/../Frameworks"
- Создайте библиотеку и получите доступ к.framework из архива или каталога продуктов
Включая рамки
- Перетащите созданный файл.framework в проект Xcode, обязательно отметьте "Копировать файлы в каталог".
- В целевом приложении, содержащем приложения, добавьте новый этап копирования файла.
- Установите "Назначение" на "Рамки"
- Перетащите в созданную.рамку
Это было довольно просто для меня, я просто добавил свой фреймворк во мои встроенные двоичные файлы под целями приложения
Варианты выше, где я не могу их включить. Я решил это, указав путь поиска 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:
- Перетащите пользовательский фреймворк в список файлов вашего проекта iOS
- Выберите ProjectName в Navigator -> TargetName -> "Этапы сборки" -> Треугольник раскрытия бинарных ссылок с библиотеками
- Перетащите пользовательский фреймворк вниз и вниз в раздел "Копирование ресурсов комплекта" ниже (Xcode теперь перемещает ссылку на фреймворк, исправлено в Xcode 10)
- Запустить в симуляторе или устройстве
Таким образом, пользовательская структура копируется вместе с вашим кодом на целевое устройство и становится доступной во время выполнения.
[от редакции: вы могли бы подумать, что 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)
Основываясь на мысли автора, я нашел этот журнал сборки из своего дела.
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
починил это.
Это может произойти с
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.
Итак, я получал ту же ошибку, связанную с одним из моих внутренних фреймворков. Чтобы решить эту проблему, сделайте следующее:
перейти к проекту
General
ВкладкаВыберите свою цель (в моем случае это была цель расширения службы уведомлений)
Убедись в том, что
Framework and Libraries
раздел содержит ваш недостающий фреймворк. Я оставил этоEmbed Without Signing
в моей NSE Target, но он также был добавлен с помощьюEmbed & Sign
к моей основной цели приложенияНе снимая выделения с цели, переключитесь на
Build Settings
вкладкаТам в строке поиска введите
LD_RUNPATH_SEARCH_PATHS
(убедись в том, чтоAll
будут отображены возможные настройки, а не толькоBasic
)Ты увидишь
Runpath Search Paths
и он был для меня пуст.Добавьте туда 3 следующих значения:
- $ (унаследовано)
- @ исполняемый_путь / Фреймворки
- @executable_path/../../ Фреймворки
Вот что мне помогло.
Возникла проблема при попытке запустить бета-версию Xcode 9 и вернуться к Xcode 8. Простая очистка цели позволила решить проблему.
Я перепробовал много исправлений, но мне помогло удалить отсутствующую цель, указанную на вкладке сборки схемы сборки. Вы можете добраться до него, открыв окно редактирования текущей схемы.
Изменить: Моя цель тестирования пользовательского интерфейса не работает, и решение, которое я нашел, состояло в том, чтобы удалить его и сгенерировать его снова.
У меня была та же проблема по другой причине. Я создал новую конфигурацию для отладки и выпуска (в разделе ПРОЕКТ -> вкладка Информация -> Конфигурация). И мне пришлось изменить скрипт оболочки pod frameworks (Pods-"appName"-frameworks.sh, в разделе "Файлы поддержки целей"), чтобы он работал.
[Xcode 9]
Единственное, что сработало для меня:
Цель> Фазы сборки> [CP] Встраивать модули Pods Снимите флажок "Показывать переменные среды в журнале сборки" и "Запускать сценарий только при установке"
Я думаю, что нет определенного способа решить эту проблему, поскольку она может быть вызвана другой причиной. У меня также была эта проблема на прошлой неделе, я не знаю, когда и в чем именно причина этой проблемы, только когда я запускаю его на симуляторе с Xcode или пытаюсь установить его на телефон, тогда он сообщает об ошибке такого рода, но когда я запустить его с реакцией-родной run-ios с терминалом, нет проблем.
Я проверил все способы, опубликованные в Интернете, такие как обновление сертификата, изменение настроек в XCode (все способы, упомянутые выше), на самом деле все настройки в XCode уже были установлены так, как было запрошено ранее, ни один из способов не работает для меня. До этого утра, когда я удаляю стручки и переустанавливаю, ошибка наконец-то появится через неделю. Если вы также используете cocoapod, а затем ошибка просто появилась без какой-либо конкретной причины, может быть, вы можете попробовать мой путь.
- Проверьте мою версию Cocoapods.
- Обновите его, если доступна новая версия.
- Перейдите в папку вашего проекта, удалите файл Podfile.lock, файл Pods, проект xcworkspace.
- Запустить установку pod
Я столкнулся с этой проблемой только при работе на реальном устройстве (iPhone SE). На симуляторе проект работал как положено.
Я пробовал все исправления из этой же ветки и отсюда. Ни один из них не помог мне.
Для меня проблема решилась после перезагрузки iPhone (sic!).
Я сделал:
- чистая папка сборки,
- чистые производные данные,
- удалить приложение с устройства,
- перезагрузите устройство
И это наконец работает.:)
Если любое другое решение не сработает, не забудьте попробовать его.