Приложение iOS с фреймворком на устройстве упало, dyld: библиотека не загружена, Xcode 6 Beta

573

Этот сбой был проблемой блокировки. Я использовал следующие шаги, чтобы воспроизвести проблему:

  • Создать проект 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. Кто-нибудь может пролить свет на это?

vladof81
источник
1
Что я не понимаю, так это то, почему все другие сторонние фреймворки работают «из коробки» и их легко можно перетаскивать Link Binary with Librariesи каким-то образом Xcode знает, как скопировать их в ваш пакет приложений, тогда как для пользовательских фреймворков этого просто не происходит.
фатухоку
ответ sazzad hissain khan здесь stackoverflow.com/questions/26024100/… это лучший ответ ..
Анкит Кумар
1
Проверьте этот stackoverflow.com/a/52129141/2020034 . Это работает
Vinayak Parmar
Вы можете сделать толстую библиотеку, вы можете увидеть эту ссылку: stackoverflow.com/a/54977145/3992606
Mohsen
Версия Xcode не совпадает , решена с помощью stackoverflow.com/a/55738882/5443510 .
Джимми Инь

Ответы:

975

На вкладке General цели есть поле Embedded Binaries . Когда вы добавляете фреймворк, сбой разрешается.

Ссылка здесь на форумах разработчиков Apple.

vladof81
источник
73
У меня есть структура в Embedded Binaries, и у меня также есть Фаза копирования, установленная на «Frameworks». В любом случае он падает.
loretoparisi
11
Это решается только в режиме отладки. Ошибка снова возникнет, когда вы архивируете или создаете проект
Saad Ur Rehman
13
Добавление @ executetable_path / Frameworks в «Путь поиска Runpath» решило эту проблему, т.е. в дополнение к добавлению фреймворка в «Embedded Binaries»
ArdenDev
14
Кто-нибудь может помочь, как добавить фреймворк в Embedded Binaries, из POD?
Боннке
3
То же самое. Я также хотел бы знать , как добавить из стручков, учитывая не существует никакого «Общие> закладного Binaries» можно найти в XCode 6.4 с использованием PODS
DED
259

Для iOS больше или равно 8

Под вкладкой General цели в разделе Embedded Binaries добавьте платформу. Это скопирует фреймворк в скомпилированный, так что он может быть связан с во время выполнения.

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

Почему это происходит? : потому что фреймворк, на который вы ссылаетесь, компилируется как динамически связанный фреймворк и, следовательно, связан с ним во время выполнения.

** Примечание: ** Встраивание пользовательских каркасов поддерживается только в iOS> 8, поэтому следует альтернативное решение, которое работает на более старых версиях iOS.

Для iOS менее 8

Если вы влияете на эту платформу (имеете доступ к исходному коду / процессу сборки), вы можете изменить эту платформу, чтобы она была статически связана, а не динамически связана. Это приведет к тому, что код будет включен в ваше скомпилированное приложение, а не связан с ним во время выполнения, и, следовательно, не нужно будет внедрять фреймворк.

** Как: ** На вкладке Настройка сборки фреймворка в разделе Связывание измените Тип Mach-O на Статическая библиотека. Теперь вам не нужно включать фреймворк во встроенные двоичные файлы.

Статическая структура

Включая активы: для включения таких вещей, как изображения, аудио или файлы xib / nib, я рекомендую создать пакет (по сути, каталог, дополнительную информацию здесь bit.ly/ios_bundle), а затем загрузить ресурсы из пакета с помощью NSBundle.

Доусон
источник
1
Как добавить фреймворк во встроенные бинарные файлы, если фреймворк находится в Pods?
TomazStoiljkovic
Что вы подразумеваете под "фреймворк в стручках"? Что ваш пользовательский фреймворк распространяется через CocoaPods?
Доусон
2
Это должно быть «Больше или равно 8». Я должен был сделать это на iOS 8, а также.
Cruinh
ошибкаSwift is not supported for static libraries
jose920405
@TomazStoiljkovic ты это понял? У меня та же проблема, у меня есть фреймворк, который я хочу построить как двоичный файл, но это зависит от других фреймворков через какао-бобы.
MegaManX
125

Просто перетаскивание фреймворка в ваш проект не будет достаточно хорошим. Это все равно, что быть на одной площадке, но не найти своих детей. Следуй этим шагам:

1) Создайте свой фреймворк

  • Развейте свою структуру.
  • Как только ваша разработка будет завершена, COMMAND+ Bсоздайте свою среду и убедитесь, что вы получили «Build Succeeded».

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

2) Доступ к вашей структуре

  • Как только ваш каркасный проект будет успешно собран, он будет готов для доступа к вашей Productsпапке в вашем проекте.

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

  • Щелкните правой кнопкой мыши .frameworkи выберите «Показать в Finder».

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

3) Поместите фреймворк в свой проект

  • Перетащите его .frameworkиз окна Finder в папку «Framework» проекта приложения.

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

4) Настройте проект приложения для фреймворка

  • Выберите верхний уровень в вашем проекте

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

  • Выберите цель

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

  • Перейдите в «Фазы сборки», затем «Связать двоичные файлы с библиотеками» и убедитесь, что ваша инфраструктура включена с опционально выбранным .

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

  • Все еще в «Этапы сборки», перейдите в верхний левый угол и нажмите +кнопку. В раскрывающемся списке выберите «Этап создания новых файлов».

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

  • Прокрутите вниз до нового раздела «Копировать файлы» и убедитесь, что вы установили Destination«Фреймворки». Оставьте подпуть пустым. Затем нажмите +кнопку внизу слева.

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

  • Вам будет представлена ​​иерархия вашего проекта. Прокрутите вниз до папки «Frameworks», в которую вы добавили структуру на шаге 3, или найдите ее в строке поиска вверху. Выберите ваш фреймворк и нажмите «Добавить».

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

  • Убедитесь, что ваш фреймворк включен с выбранным «Code Sign On Copy».

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

5) Очистите, а затем запустите свой проект

  • COMMAND+ SHIFT+K
  • COMMAND+R
Брэндон А
источник
5
Хорошая точка зрения. Это почти работает для меня. Я сделал каркас A, в который входит Alamofire. Мой хост App (встроенный фреймворк A) работает в симуляторах. Но когда я пытаюсь запустить его на реальном iPhone, он вылетает с ошибкой: Alamofire: dyld: Библиотека не загружена: @ rpath / Alamofire.framework / Alamofire Причина: подходящее изображение не найдено. Обнаружил: xxx / ddcdemo.app / Frameworks / iddc.framework / Frameworks / Alamofire.framework / Alamofire: машина, но неправильная архитектура
DàChún
1
@Brandon Создание дополнительных опций для фреймворка решило мою проблему. Но не могли бы вы объяснить, каково поведение фреймворка?
Митеш Добарея
2
Спасибо! На вашем шаге 5 я проверил «Копировать только при установке», и это была моя проблема.
Анди
48

Я создал фреймворк с использованием Swift3 / Xcode 8.1 и использовал его в проекте Objective-C / Xcode 8.1. Чтобы решить эту проблему, я должен был включить Always Embed Swift Standard Librariesопцию в Build Options.

Посмотрите на этот скриншот:

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

NeverHopeless
источник
3
Это теперь работает для меня в. Решение этой проблемы состоит в том, чтобы перейти к BuildPhases -> Copy Files -> select Framework под Destination и добавить свою инфраструктуру. Скорее всего, ваша библиотека здесь отсутствует.
Хариш
@Harish, решение, которое вы предлагаете, уже предложено несколькими, и я определенно позабочусь об этом в первую очередь. В моем случае фреймворк был добавлен туда, но все равно появилась та же проблема. Тогда я копаю сам. Если вы проголосовали за это решение, я не знаю, почему вы достаточно уверены в своем пути, когда он не работает в моем случае: S
NeverHopeless
@ Привет, спасибо. Ваш ответ помог мне намного больше, и, разумеется, NeverHopeless помог :) Спасибо вам, ребята
Мохсин Хубаиб Ахмед
Это было единственное, что сработало для меня ... но я уже "встраиваю" фреймворк в Embedded Binariesраздел моей цели . Так почему же это работает?
Гупрон
Круто, эта штука работает, потому что, если вы используете быструю библиотеку или модуль для встраивания в целевой C-проект. Проект Objective C часто имеет этот флаг к Нет
Swaroop S
47

Сначала попробуйте собрать после Ctrl + Option + Shift + K. Если все равно не получается, сделайте следующее.

Если кто-то сталкивается с этой ошибкой в ​​Xcode 8, тогда измените свой статус структуры на Необязательный вместо Обязательного на вкладке General вашей цели.

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

Пустынная роза
источник
3
Это заставит среду выполнения не распознавать классы из фреймворка
Tesla
@azimov правильно. Я сталкиваюсь с этой дилеммой в данный момент. Обязательный вызывает ошибку «изображение не найдено», и если мы попытаемся установить его как необязательный, то произойдет сбой во время выполнения с «нераспознанным селектором»
Адам Мендоса
1
Хотя мой фреймворк уже был в Link Binaries и Embed, мне все равно пришлось добавить фазу копирования. dyld: библиотека не загружена: @ rpath / AFNetworking.framework / AFNetworking Ссылка на: / Пользователи / {Пользователь} / Библиотека / Разработчик / CoreSimulator / Устройства / 6833A85C-5783-45FA-A4D5-991D286B28C2 / data / Containers / Bundle / Application / B1A0A3B2-92A2-41B0-9884-6DB6995A0D7E / MyApp.app / MyApp Причина: изображение не найдено (lldb) Решение: Проект -> Цель -> Фазы сборки -> + вверху для добавления новой фазы копирования файлов Назначение = Каркасы Выберите платформу что нужно скопировать
Адам Мендоса
@AdamMendoza Я отклонил мое приложение из-за этого.
Джбуазиз
@jbouaziz, да, ошибка, с которой вы можете столкнуться, связана с тем, что .framework толстый, то есть он имеет архитектуры, которые не поддерживаются в iOS, такие как i386 x86_64, кроме необходимого armv7 arm64. Магазин выдаст вам ошибку, но вы можете не увидеть ошибку в Xcode. Используйте загрузчик в Xcode -> Open Developer Tool -> Application Loader. SolutionL сделать его тонким, увидеть -> ikennd.ac/blog/2015/02/…
Адам Мендоса,
28

У меня такая же проблема в версии iOS 9.x

ПРОБЛЕМА: приложение вылетает, как только я открываю приложение с приведенной ниже ошибкой.

dyld: библиотека не загружена: /System/Library/Frameworks/UserNotifications.framework/UserNotifications Ссылка на: /var/containers/Bundle/Application/######/TestApp.app/TestApp Причина: изображение не найдено

Я решил эту проблему путем изменения Requiredв Optionalв Linked Frameworks and Librariesтечение UserNotifications.frameworkрамки.

jfalexvijay
источник
Это работает. Кто-нибудь знает почему? Потому что некоторые устройства нуждаются в этой настройке, другие нет.
NEO
Я получаю «предупреждение: не удалось выполнить код поддержки для чтения данных класса Objective-C в процессе. Это может снизить качество доступной информации типа». когда
помечаю мою библиотеку
это сработало, может быть, причина в том, что какой-то фреймворк не работал в симуляторе, вот почему
Gowtham Sooryaraj
@ redent84 Этот ответ вместе с вашим комментарием спас меня от безумия. Столкнулся с этой проблемой с AuthenticationServices.framework, который требует iOS 12.
Тамас Сенгель
26

Я должен был (сверх того , что упомянутые здесь) добавить следующую строку в Runpath Пути поиска под Параметры построения закладки:
@executable_path/Frameworks

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

Авиэль Гросс
источник
Это исправило проблему для меня. У меня возникла проблема после добавления расширения приложения в мое приложение iOS 9. Перед добавлением расширения мой фреймворк был найден просто отлично. Добавление фазы сборки Copy Files не помогло, и я уже встраивал фреймворк.
Грег
Это так странно, это не включено по умолчанию. Если вы разархивируете и посмотрите на свой IPA, вы должны найти свои фреймворки в Payloads / appname.app / Frameworks /. Тем не менее, добавление этого пути поиска должно быть доступно приложению для просмотра в этой папке во время выполнения. Weird.
mattv123
25

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

См. Как добавить «Фаза сборки Copy Files» в мою Target для получения дополнительной информации.

Официальные документы Apple: https://developer.apple.com/library/mac/recipes/xcode_help-project_editor/Articles/CreatingaCopyFilesBuildPhase.html

liamnichols
источник
Попробовав так много вещей, я решил это. У меня уже были рамки в Link Binary и Embed Framework. Я не думал, что должен был также добавить Фазу Копирования, но это исправило это.
Адам Мендоса
14

Если вы используете Xcode 11 или новее :

  1. Перейдите к настройкам вашей цели и выберите Общие .

Настройки цели / Общие

  1. Прокрутите вниз до Каркасы, Библиотеки и Встроенный контент .

  2. Убедитесь, что для параметра « Встроить» при необходимости выбрано значение « Внедрить и подписать» или « Вложить без подписи» .

Раздел фреймворков, библиотек и встроенного контента

Тамас Сенгель
источник
13

Добавьте фреймворк в Embedded Binaries введите описание изображения здесь

Затем очистить и построить.

Винееш ТП
источник
11

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

PBXCp /Users/xyz/Library/Developer/Xcode/DerivedData/MyApp-cbcnqafhywqkjufwsvbzckecmjjs/Build/Products/Debug-iphoneos/MyFramework.framework

[Многие подробные строки удалены, но это ясно из упрощенной расшифровки в пользовательском интерфейсе Xcode.]

Я до сих пор не знаю, почему XCode DYLIB_INSTALL_NAME_BASEнеправильно установил значение для меня.

BaseZen
источник
1
Спасибо, это оказалось моей проблемой в Xcode 11. Я импортировал одну из моих собственных платформ, которая ранее работала, но начала выдавать ошибку «dyld: Библиотека не загружена». Чтобы было ясно, вы хотите установить для параметра сборки "База имен динамической установки библиотеки" значение "@rpath" в проекте платформы, которую вы пытаетесь импортировать, а не в проекте, в который вы импортируете. Каким-то образом это было установлено в "/ Library / Frameworks".
Бен Шталь
Рад, что это было полезно 3 года спустя. Отредактировано соответственно.
BaseZen
9

В моем случае решение состояло в том, чтобы удалить скомпилированную среду из Embedded Binaries, которая представляла собой отдельный проект в рабочей области, очистить и перестроить его и, наконец, повторно добавить в Embedded Binaries.

Андреа Леганза
источник
8

Моя среда: Cocos2d 2.0, Box2d, Цель C

В дополнение к другим ответам, приведенным выше, я, наконец, перешел на вкладку «Общие» и сделал WatchKit необязательным.

Целевые общие связанные фреймворки и библиотеки Watchkit.framework Необязательно

Джим Рота
источник
8

Если вы используете стороннюю платформу и используете Cocoapods в качестве менеджера зависимостей, попробуйте выполнить команду a, pod installчтобы обновить ваши модули.

Этот сбой происходил в сторонней библиотеке, которую я использовал, поэтому рад, что вышеупомянутое решение сработало для меня, надеюсь, оно работает для вас!

NYC Tech Engineer
источник
1
Большой! исправил мою проблему. Но есть ли способ избежать установки зависимостей pod в моем хост-приложении?
17
8

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

Решено для меня, сняв флажок «Копировать только при установке» на этапах сборки-> Вставить рамки

Шохин
источник
1
Было бы хорошо узнать смысл этого флажка, если система не считает, что «отладочная установка» не является «установкой». В любом случае, если это вызывает сбой приложения на аппаратном обеспечении, а не запрещает запуск приложения с предупреждением, это еще один
явный
8

Это ошибка времени выполнения, вызванная Dynamic Linker

dyld: Library not loaded: @rpath/...
...
Reason: image not found

Ошибка Library not loadedс @rpathуказывает, что Dynamic Linkerне удается найти двоичный файл.

  1. Проверьте, был ли динамический каркас добавлен в General -> Embedded Binaries

  2. Проверьте @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

//Framework1 Dynamic Library Install Name
/some_path/Framework1.framework/subfolder1

@executable_path

@executable_path - относительно записи двоичного файла - Пример использования Framework2
: встроить Dynamic frameworkв приложение

//Application bundle(`.app` package) absolute path
/some_path/Application.аpp

//Application binary absolute path 
/some_path/Application.аpp/subfolder1

//Framework2 binary absolute path
/some_path/Application.аpp/Frameworks/Framework2.framework/subfolder1

//Framework2 @executable_path == Application binary absolute path
/some_path/Application.аpp/subfolder1

//Framework2 Dynamic Library Install Name 
@executable_path/../Frameworks/Framework2.framework/subfolder1

//Framework2 binary resolved absolute path by dyld
/some_path/Application.аpp/subfolder1/../Frameworks/Framework2.framework/subfolder1
/some_path/Application.аpp/Frameworks/Framework2.framework/subfolder1

@loader_path

@loader_path - относительно пакета, который является владельцем этого двоичного варианта
использования: фреймворк со встроенным фреймворком - Framework3_1 с Framework3_2 внутри

//Framework3_1 binary absolute path
/some_path/Application.аpp/Frameworks/Framework3_1.framework/subfolder1

//Framework3_2 binary absolute path
/some_path/Application.аpp/Frameworks/Framework3_1.framework/Frameworks/Framework3_2.framework/subfolder1

//Framework3_1 @executable_path == Application binary absolute path
/some_path/Application.аpp/subfolder1

//Framework3_1 @loader_path == Framework3_1 @executable_path
/some_path/Application.аpp/subfolder1

//Framework3_2 @executable_path == Application binary absolute path
/some_path/Application.аpp/subfolder1

//Framework3_2 @loader_path == Framework3_1 binary absolute path
/some_path/Application.аpp/Frameworks/Framework3_1.framework/subfolder1

//Framework3_2 Dynamic Library Install Name 
@loader_path/../Frameworks/Framework3_2.framework/subfolder1

//Framework3_2 binary resolved absolute path by dyld
/some_path/Application.аpp/Frameworks/Framework3_1.framework/subfolder1/../Frameworks/Framework3_2.framework/subfolder1
/some_path/Application.аpp/Frameworks/Framework3_1.framework/Frameworks/Framework3_2.framework/subfolder1

@rpath - Путь поиска Runpath

Пример Framework2

Ранее нам приходилось настраивать Framework для работы с dyld. Это не удобно, потому что один и тот же Framework не может быть использован с другими конфигурациями

@rpath является составной концепцией, которая опирается на внешнюю (Application) и вложенную (Dynamic Framework) части:

  • Заявка:

    • Runpath Search Paths(LD_RUNPATH_SEARCH_PATHS)- определяет список шаблонов, которые будут заменены @rpath.
       @executable_path/../Frameworks
    • Пересмотрите Build Phases -> Embed Frameworks -> Destination, Subpath, где находится именно структура для встраивания
  • Динамическая структура:

    • Dynamic Library Install Name(LD_DYLIB_INSTALL_NAME)- точка, которая @rpathиспользуется вместе с локальным путём к бинарному файлу
      @rpath/Framework2.framework/subfolder1
//Application Runpath Search Paths
@executable_path/../Frameworks

//Framework2 Dynamic Library Install Name
@rpath/Framework2.framework/subfolder1

//Framework2 binary resolved absolute path by dyld
//Framework2 @rpath is replaced by each element of Application Runpath Search Paths
@executable_path/../Frameworks/Framework2.framework/subfolder1
/some_path/Application.аpp/Frameworks/Framework2.framework/subfolder1

*../ - перейти к родителю текущего каталога

otool - инструмент для отображения объектных файлов

//-L print shared libraries used
//Application otool -L
@rpath/Framework2.framework/subfolder1/Framework2

//Framework2 otool -L
@rpath/Framework2.framework/subfolder1/Framework2

//-l print the load commands
//Application otool -l
LC_LOAD_DYLIB
@rpath/Framework2.framework/subfolder1/Framework2

LC_RPATH
@executable_path/../Frameworks

//Framework2 otool -l
LC_ID_DYLIB
@rpath/Framework2.framework/subfolder1/Framework2

install_name_tool изменить динамические имена установки разделяемой библиотеки с помощью -rpath

CocoaPodsиспользует use_frameworks![О] для регулированияDynamic Linker

[Словарь]

yoAlex5
источник
6

Недавно столкнулся с этой проблемой при импорте CoreNFC на старые телефоны (например, iPhone 6) и Xcode (11.3.1). Я смог заставить его работать

  1. В ваших проектах выберите цель.
  2. Перейдите на вкладку Общие вверху.
  3. В разделе « Фреймворки, библиотеки и встроенный контент » добавьте фреймворк (для меня это был CoreNFC). Повторите для других целей.
  4. Нажмите сверху на фазы сборки и разверните « Связать двоичные файлы с библиотеками ».
  5. Сделайте проблемные рамки необязательными (из обязательных).

Это позволило мне скомпилировать для старых / новых iPhone без каких-либо изменений кода. Я надеюсь, что это помогает другим.

whawhat
источник
1
БЛАГОДАРЮ ВАС. Сделать необязательным было недостающее звено ...
fl034
не работает, приложение аварийно завершает работу, и в некотором коде сборки отсутствует сообщение с указанием типа сбоя вместо точки останова.
Newsonic
почему это необходимо сделать необязательным?
rohitwtbs
5

Я была такая же проблема. Я попытался создать свой проект с iPhone, который я никогда не использовал прежде, и я не добавил новый фреймворк. Для меня уборка работала нормально ( Shift + Command + K ). Может быть, это потому, что я использую бета 5 Xcode 7 и iPhone 6 с iOS 9 Beta, но это сработало.

Хенрик-DMG
источник
И, возможно, Чистая папка сборки тоже (CMD + Shift + Alt + K)
Grifas
4

В моем случае мой проект написан target-c, а в библиотеке есть файлы Swift. Поэтому я изменил «Всегда встраивать Swift Стандартные библиотеки» на вкладке « Настройки сборки » моего проекта на « Да», и все стало совершенно нормально.

User18474728
источник
4

Для любого проекта или фреймворкового проекта в XCode, которые используют pods, один из простых способов избежать загрузки динамической библиотеки (dylb) состоит в том, чтобы установить ваш файл pod для чернил в статическом режиме. Для этого просто не пишите следующую строку в вашем файле pod.

use_frameworks!

Как только строка удалена из вашего файла, который вы сохранили, просто запустите из консоли:

$ pod update
Стефан де Лука
источник
2

Если есть модуль разработки Удалите приложение из симулятора, установите из модуля -> очистить -> запустить снова ...

Раджеш Кумар
источник
2

То же самое было, когда я создал новую схему конфигурации и сборки.

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

pod install

для этой вновь созданной конфигурации.

atereshkov
источник
1

После того, как я попробовал все методы, доступные в интернете, и мои собственные уловки проб и ошибок 100 раз. Наконец я смог решить это. - Apeksha Sahu 6 минут назад Перейдите в
iTunes в Mac -> Учетные записи -> Авторизуйте этот компьютер - Apeksha Sahu 5 минут назад -
второй шаг .... Перейдите к настройкам в настройках iPad и iPhone и переиндексации с идентификаторами и очистите все компьютеры доверия. Это сработало для меня ........ ....... После переустановки версии Mac OSHigh seria 10.13.15 из последней версии Mac OS seirra beta, до переустановки последней версии Xcode, после обновления всех сертификатов. и т. д. и т. д. ... так много методов, как вы думаете, я сделал. -введите описание изображения здесь

Апекша Саху
источник
1

Попробуйте изменить флаг ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES(в более ранних версиях xcode:) Embedded Content Contains Swift Codeв настройках сборки с NO на YES.

Витталь Пай
источник
1

Xcode 11

  1. Перейдите к настройкам вашей цели и выберите Общие.
  2. Ищите «Каркасы, библиотеки и встроенный контент»
  3. Оставьте «Не вставлять» и убедитесь, что все ваши цели (если у вас их больше одного) установили только свою собственную структуру, а не другие цели.
Матиас Юрфест
источник
1

В Xcode 11

Я столкнулся с той же проблемой

Изменение «Не встраивать » на вкладке « Общие» > «Каркасы, библиотеки и встроенный контент» по- прежнему приводило к той же ошибке.

Что для меня решило, так это добавление фреймворка во вкладку «Фазы сборки» > раздел «Внедрение фреймворков».

--Updated ---

Я заметил, что в проектах, созданных в предыдущих версиях Xcode Embed Frameworks Section, недоступен при работе в Xcode 11, найдите следующие шаги для достижения решения:

1: Сначала нужно добавить новую копию файлы фазы при Построить Фазы вкладки.

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

2: во-вторых, измените имя добавленной фазы на Embed Frameworks введите описание изображения здесь

3: изменить место назначения на Frameworks .

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

4: Добавьте структуру, для которой произошла ошибка.

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

Виней
источник
1

Хотя все говорят о том, что нужно встроить фреймворк в Embedded Binaries, но все равно он не работает, потому что здесь мы пропустили один важный шаг.

Вот два правильных шага для добавления двоичных файлов на вкладке «Встроенные двоичные файлы»:

  1. Удалите фреймворк, сообщающий об ошибке, из «Связанных фреймворков и библиотек» на вкладке «Общие».

  2. Теперь добавьте удаленный фреймворк только на вкладке «Встроенные двоичные файлы», и это все, что нужно сделать.

Запустите его на устройстве и продолжайте улыбаться;)

Маниш Гупта
источник
0
  1. Перейти к файлу в xcode -> настройки рабочего пространства
  2. Нажмите на стрелку рядом с которой появляется / Пользователи / яблоко / Библиотека / Разработчик / Xcode / DerivedData
  3. Выберите производные данные и переместите их в корзину.
  4. Достаточно xcode и открыть его снова.
  5. Очистите проект и запустите снова.

Вышеуказанные шаги решили мои проблемы.

Джон Раджа
источник
0

Простое решение - следуйте за этим снимком экрана, тогда крах исчезнет:

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

Отметил: это Xcode 11,5

Кислый LeangChhean
источник
-5

Если кто-то все еще испытывает эту проблему, несмотря на выполнение всех шагов, описанных во многих других ответах, вам может потребоваться отозвать и заново создать сертификат подписи кода , как указано ниже:

https://developer.apple.com/library/ios/qa/qa1886/_index.html

Сэм
источник
Точно. Подписание кода не имеет ничего общего с этой ошибкой.
igraczech