Этот сбой был проблемой блокировки. Я использовал следующие шаги, чтобы воспроизвести проблему:
- Создать проект Cocoa Touch Framework
- Добавьте файл swift и класс Dog
- Построить рамки для устройства
- Создайте приложение Single View в Swift
- Импортировать фреймворк в проект приложения
- Создание экземпляра класса swift из фреймворка во ViewController
- Создайте и запустите приложение на устройстве
При запуске приложения произошел сбой, вот консольный журнал:
dyld: Library not loaded: @rpath/FrameworkTest03.framework/FrameworkTest03
Referenced from: /var/mobile/Applications/FA6BAAC8-1AAD-49B4-8326-F30F66458CB6/FrameworkTest03App.app/FrameworkTest03App
Reason: image not found
Я пытался собрать на устройствах iOS 7.1 и 8.0, у них обоих один и тот же сбой. Тем не менее, я могу создать приложение и нормально работать на симуляторе. Кроме того, я знаю, что могу изменить структуру для формирования Обязательный на Необязательный в Link Binary With Libraries , но это не полностью решило проблему, приложение упало при создании экземпляра Dog . Поведение отличается на устройстве и симуляторе, я подозреваю, что мы не можем распространять платформу для устройства, используя бета-версию XCode. Кто-нибудь может пролить свет на это?
Link Binary with Libraries
и каким-то образом Xcode знает, как скопировать их в ваш пакет приложений, тогда как для пользовательских фреймворков этого просто не происходит.Ответы:
На вкладке General цели есть поле Embedded Binaries . Когда вы добавляете фреймворк, сбой разрешается.
Ссылка здесь на форумах разработчиков Apple.
источник
Для iOS больше или равно 8
Под вкладкой General цели в разделе Embedded Binaries добавьте платформу. Это скопирует фреймворк в скомпилированный, так что он может быть связан с во время выполнения.
Почему это происходит? : потому что фреймворк, на который вы ссылаетесь, компилируется как динамически связанный фреймворк и, следовательно, связан с ним во время выполнения.
** Примечание: ** Встраивание пользовательских каркасов поддерживается только в iOS> 8, поэтому следует альтернативное решение, которое работает на более старых версиях iOS.
Для iOS менее 8
Если вы влияете на эту платформу (имеете доступ к исходному коду / процессу сборки), вы можете изменить эту платформу, чтобы она была статически связана, а не динамически связана. Это приведет к тому, что код будет включен в ваше скомпилированное приложение, а не связан с ним во время выполнения, и, следовательно, не нужно будет внедрять фреймворк.
** Как: ** На вкладке Настройка сборки фреймворка в разделе Связывание измените Тип Mach-O на Статическая библиотека. Теперь вам не нужно включать фреймворк во встроенные двоичные файлы.
Включая активы: для включения таких вещей, как изображения, аудио или файлы xib / nib, я рекомендую создать пакет (по сути, каталог, дополнительную информацию здесь bit.ly/ios_bundle), а затем загрузить ресурсы из пакета с помощью NSBundle.
источник
Swift is not supported for static libraries
Просто перетаскивание фреймворка в ваш проект не будет достаточно хорошим. Это все равно, что быть на одной площадке, но не найти своих детей. Следуй этим шагам:
1) Создайте свой фреймворк
COMMAND
+B
создайте свою среду и убедитесь, что вы получили «Build Succeeded».2) Доступ к вашей структуре
Products
папке в вашем проекте..framework
и выберите «Показать в Finder».3) Поместите фреймворк в свой проект
.framework
из окна Finder в папку «Framework» проекта приложения.4) Настройте проект приложения для фреймворка
+
кнопку. В раскрывающемся списке выберите «Этап создания новых файлов».Destination
«Фреймворки». Оставьте подпуть пустым. Затем нажмите+
кнопку внизу слева.5) Очистите, а затем запустите свой проект
COMMAND
+SHIFT
+K
COMMAND
+R
источник
Я создал фреймворк с использованием Swift3 / Xcode 8.1 и использовал его в проекте Objective-C / Xcode 8.1. Чтобы решить эту проблему, я должен был включить
Always Embed Swift Standard Libraries
опцию вBuild Options
.Посмотрите на этот скриншот:
источник
Embedded Binaries
раздел моей цели . Так почему же это работает?Сначала попробуйте собрать после Ctrl + Option + Shift + K. Если все равно не получается, сделайте следующее.
Если кто-то сталкивается с этой ошибкой в Xcode 8, тогда измените свой статус структуры на Необязательный вместо Обязательного на вкладке General вашей цели.
источник
У меня такая же проблема в версии iOS 9.x
Я решил эту проблему путем изменения
Required
вOptional
вLinked Frameworks and Libraries
течениеUserNotifications.framework
рамки.источник
Я должен был (сверх того , что упомянутые здесь) добавить следующую строку в Runpath Пути поиска под Параметры построения закладки:
@executable_path/Frameworks
источник
Вам необходимо добавить каркас к новой фазе сборки файлов копирования, чтобы во время выполнения каркас копировался в комплект приложения.
См. Как добавить «Фаза сборки Copy Files» в мою Target для получения дополнительной информации.
Официальные документы Apple: https://developer.apple.com/library/mac/recipes/xcode_help-project_editor/Articles/CreatingaCopyFilesBuildPhase.html
источник
Если вы используете Xcode 11 или новее :
Прокрутите вниз до Каркасы, Библиотеки и Встроенный контент .
Убедитесь, что для параметра « Встроить» при необходимости выбрано значение « Внедрить и подписать» или « Вложить без подписи» .
источник
Добавьте фреймворк в Embedded Binaries
Затем очистить и построить.
источник
Удивительно, но не все необходимые части описаны здесь, по крайней мере, для Xcode 8.
В моем случае это была специально созданная среда как часть того же рабочего пространства. Оказывается, он был построен неправильно. Основываясь на последнем ответе Джеремиху на эту тему:
https://forums.developer.apple.com/thread/4687
Мне пришлось установить
Dynamic Library Install Name Base
(DYLIB_INSTALL_NAME_BASE
)Build Settings
в рамках рамочного проекта, а затем перестроить его. Он был неправильно установлен,$(LOCAL_LIBRARY_DIR)
и мне пришлось изменить его на@rpath
.Таким образом, на этапе обработки ссылок в проекте приложения он инструктировал хост-приложение динамически загружать инфраструктуру во время выполнения из
/Library/Frameworks/fw.Framework/fw
(например, в корневой каталог файловой системы времени выполнения), а не из пути к приложению./Frameworks/fw.Framework/fw
Что касается всех остальных параметров: это делает должно быть в 3 -х местах
Build Phases
, но они все установлены на один раз , когда вы просто добавить его кEmbedded Binaries
установке изGeneral
вкладке хостинга App.Мне не нужно было устанавливать дополнительную
Copy Files
фазу, которая в любом случае кажется интуитивно избыточной по отношению к стадии встраивания. Проверяя хвостовую часть транскрипта сборки, мы можем убедиться, что в этом нет необходимости.[Многие подробные строки удалены, но это ясно из упрощенной расшифровки в пользовательском интерфейсе Xcode.]
Я до сих пор не знаю, почему XCode
DYLIB_INSTALL_NAME_BASE
неправильно установил значение для меня.источник
В моем случае решение состояло в том, чтобы удалить скомпилированную среду из Embedded Binaries, которая представляла собой отдельный проект в рабочей области, очистить и перестроить его и, наконец, повторно добавить в Embedded Binaries.
источник
Моя среда: Cocos2d 2.0, Box2d, Цель C
В дополнение к другим ответам, приведенным выше, я, наконец, перешел на вкладку «Общие» и сделал WatchKit необязательным.
источник
Если вы используете стороннюю платформу и используете Cocoapods в качестве менеджера зависимостей, попробуйте выполнить команду a,
pod install
чтобы обновить ваши модули.Этот сбой происходил в сторонней библиотеке, которую я использовал, поэтому рад, что вышеупомянутое решение сработало для меня, надеюсь, оно работает для вас!
источник
Решено для меня, сняв флажок «Копировать только при установке» на этапах сборки-> Вставить рамки
источник
Это ошибка времени выполнения, вызванная
Dynamic Linker
Ошибка
Library not loaded
с@rpath
указывает, чтоDynamic Linker
не удается найти двоичный файл.Проверьте, был ли динамический каркас добавлен в
General -> Embedded Binaries
Проверьте
@rpath
настройку между потребителем (приложение) и производителем (динамическая структура):Build Settings -> Dynamic Library Install Name
Build Settings -> Runpath Search Paths
Build Phases -> Embed Frameworks -> Destination, Subpath
Динамический компоновщик
Dynamic Library Install Name(LD_DYLIB_INSTALL_NAME)
который используетсяloadable bundle
(Dynamic framework
как производная), гдеdyld
вступают в игруDynamic Library Install Name
- путь к двоичному файлу (не .framework). Да, они имеют такое же имя, ноMyFramework.framework
этоpackaged bundle
сMyFramework
двоичным файлом и ресурсами внутри.Этот путь к директории может быть абсолютным или относительным (например
@executable_path
,@loader_path
,@rpath
). Относительный путь более предпочтителен, потому что он изменяется вместе с привязкой, которая полезна, когда вы распространяете свой пакет как один каталогабсолютный путь - пример Framework1
@executable_path
@executable_path - относительно записи двоичного файла - Пример использования Framework2
: встроить
Dynamic framework
в приложение@loader_path
@loader_path - относительно пакета, который является владельцем этого двоичного варианта
использования: фреймворк со встроенным фреймворком - Framework3_1 с Framework3_2 внутри
@rpath - Путь поиска Runpath
Пример Framework2
Ранее нам приходилось настраивать Framework для работы с dyld. Это не удобно, потому что один и тот же Framework не может быть использован с другими конфигурациями
@rpath
является составной концепцией, которая опирается на внешнюю (Application) и вложенную (Dynamic Framework) части:Заявка:
Runpath Search Paths(LD_RUNPATH_SEARCH_PATHS)
- определяет список шаблонов, которые будут заменены@rpath
.Build Phases -> Embed Frameworks -> Destination, Subpath
, где находится именно структура для встраиванияДинамическая структура:
Dynamic Library Install Name(LD_DYLIB_INSTALL_NAME)
- точка, которая@rpath
используется вместе с локальным путём к бинарному файлу*
../
- перейти к родителю текущего каталогаotool
- инструмент для отображения объектных файловinstall_name_tool
изменить динамические имена установки разделяемой библиотеки с помощью-rpath
CocoaPods
используетuse_frameworks!
[О] для регулированияDynamic Linker
[Словарь]
источник
Недавно столкнулся с этой проблемой при импорте CoreNFC на старые телефоны (например, iPhone 6) и Xcode (11.3.1). Я смог заставить его работать
Это позволило мне скомпилировать для старых / новых iPhone без каких-либо изменений кода. Я надеюсь, что это помогает другим.
источник
Я была такая же проблема. Я попытался создать свой проект с iPhone, который я никогда не использовал прежде, и я не добавил новый фреймворк. Для меня уборка работала нормально ( Shift + Command + K ). Может быть, это потому, что я использую бета 5 Xcode 7 и iPhone 6 с iOS 9 Beta, но это сработало.
источник
В моем случае мой проект написан target-c, а в библиотеке есть файлы Swift. Поэтому я изменил «Всегда встраивать Swift Стандартные библиотеки» на вкладке « Настройки сборки » моего проекта на « Да», и все стало совершенно нормально.
источник
Для любого проекта или фреймворкового проекта в XCode, которые используют pods, один из простых способов избежать загрузки динамической библиотеки (dylb) состоит в том, чтобы установить ваш файл pod для чернил в статическом режиме. Для этого просто не пишите следующую строку в вашем файле pod.
Как только строка удалена из вашего файла, который вы сохранили, просто запустите из консоли:
источник
Если есть модуль разработки Удалите приложение из симулятора, установите из модуля -> очистить -> запустить снова ...
источник
То же самое было, когда я создал новую схему конфигурации и сборки.
Таким образом, решение для меня было запустить
для этой вновь созданной конфигурации.
источник
После того, как я попробовал все методы, доступные в интернете, и мои собственные уловки проб и ошибок 100 раз. Наконец я смог решить это. - Apeksha Sahu 6 минут назад Перейдите в
iTunes в Mac -> Учетные записи -> Авторизуйте этот компьютер - Apeksha Sahu 5 минут назад -
второй шаг .... Перейдите к настройкам в настройках iPad и iPhone и переиндексации с идентификаторами и очистите все компьютеры доверия. Это сработало для меня ........ ....... После переустановки версии Mac OSHigh seria 10.13.15 из последней версии Mac OS seirra beta, до переустановки последней версии Xcode, после обновления всех сертификатов. и т. д. и т. д. ... так много методов, как вы думаете, я сделал. -
источник
Попробуйте изменить флаг
ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES
(в более ранних версиях xcode:)Embedded Content Contains Swift Code
в настройках сборки с NO на YES.источник
Xcode 11
источник
В Xcode 11
Я столкнулся с той же проблемой
Изменение «Не встраивать » на вкладке « Общие» > «Каркасы, библиотеки и встроенный контент» по- прежнему приводило к той же ошибке.
Что для меня решило, так это добавление фреймворка во вкладку «Фазы сборки» > раздел «Внедрение фреймворков».
--Updated ---
Я заметил, что в проектах, созданных в предыдущих версиях Xcode Embed Frameworks Section, недоступен при работе в Xcode 11, найдите следующие шаги для достижения решения:
1: Сначала нужно добавить новую копию файлы фазы при Построить Фазы вкладки.
2: во-вторых, измените имя добавленной фазы на Embed Frameworks
3: изменить место назначения на Frameworks .
4: Добавьте структуру, для которой произошла ошибка.
источник
Хотя все говорят о том, что нужно встроить фреймворк в Embedded Binaries, но все равно он не работает, потому что здесь мы пропустили один важный шаг.
Вот два правильных шага для добавления двоичных файлов на вкладке «Встроенные двоичные файлы»:
Удалите фреймворк, сообщающий об ошибке, из «Связанных фреймворков и библиотек» на вкладке «Общие».
Теперь добавьте удаленный фреймворк только на вкладке «Встроенные двоичные файлы», и это все, что нужно сделать.
Запустите его на устройстве и продолжайте улыбаться;)
источник
Вышеуказанные шаги решили мои проблемы.
источник
Простое решение - следуйте за этим снимком экрана, тогда крах исчезнет:
Отметил: это Xcode 11,5
источник
Если кто-то все еще испытывает эту проблему, несмотря на выполнение всех шагов, описанных во многих других ответах, вам может потребоваться отозвать и заново создать сертификат подписи кода , как указано ниже:
https://developer.apple.com/library/ios/qa/qa1886/_index.html
источник