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



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




  • создать проект Cocoa Touch Framework

  • добавить swift файл и класс собака

  • построить фреймворк для устройства

  • создать одно представление приложения в 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 устройств, они оба имеют тот же сбой. Однако я могу построить приложение и работать на симуляторе нормально. Также я знаю, что могу изменить фреймворк на from требуются до дополнительно на Связать Двоичный Файл С Библиотеками, но это не полностью решить проблему, приложение разбился, когда я создаю экземпляр собака. Поведение отличается на устройстве и симуляторе, я подозреваю, что мы не можем распространять фреймворк для устройства с использованием бета-версии Xcode. Кто-нибудь может пролить свет на это?

642   20  

20 ответов:

на цели общие tab, есть Встроенном Файлы

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

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

enter image description here

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

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

для iOS менее 8

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

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

Static Framework

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

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

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

  • развивать свой рамки.
  • как только разработка будет завершена, COMMAND+B создайте свой фреймворк и убедитесь, что вы получили "Build Succeeded".

enter image description here

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

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

enter image description here

  • Правой Кнопкой Мыши .framework и выберите "Показать в Finder".

enter image description here

3) в рамках проекта

  • перетащить .framework из окна Finder в папку "Framework" вашего проекта приложения.

enter image description here

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

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

enter image description here

  • выбрать элемент

enter image description here

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

enter image description here

  • все еще в "фазах сборки", перейдите в верхний левый и выберите . В раскрывающемся списке выберите "Новая фаза копирования файлов".

enter image description here

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

enter image description here

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

enter image description here

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

enter image description here

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

  • COMMAND+SHIFT+K
  • COMMAND+R

сначала попробуйте построить после команды + Option + Shift+K .Если все еще не удается, то выполните следующие шаги.

Если кто-то сталкивается с этой ошибкой в Xcode 8, измените свой статус фреймворка на дополнительно вместо требуется на вкладке Общие вашей цели.

enter image description here

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

взгляните на этот скриншот:

enter image description here

надеюсь, что это поможет!

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

enter image description here

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

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

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

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

ISSUE IS: App crashes as soon as I open the app with below error.

dyld: Library not loaded: /System/Library/Frameworks/UserNotifications.framework/UserNotifications Referenced from: /var/containers/Bundle/Application/######/TestApp.app/TestApp Reason: image not found

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

добавить фреймворк во встроенных двоичных файлах enter image description here

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

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

моя среда: Cocos2d 2.0, Box2d, Objective C

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

Target General Linked Frameworks and Libraries Watchkit.framework Optional

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

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

Удивительно, но не все необходимые части документированы здесь, по крайней мере для Xcode 8.

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

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

что касается всех остальных настроек: it тут должны быть в 3-х местах в Build Phases, но они все установлены сразу, когда вы просто добавляете его в Embedded Binaries задание из хостинг приложение.

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

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

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

у меня еще есть нет идея, почему Xcode установить DYLIB_INSTALL_NAME_BASE значение неправильно на меня.

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

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

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

  1. перейти к файлу в xcode - > настройки рабочего пространства
  2. щелкните стрелку рядом с которой появляется /Users/apple/Library/Developer/Xcode / DerivedData
  3. выберите производные данные и переместите их в корзину.
  4. довольно xcode и снова открыть его.
  5. очистите проект и запустите его снова.

выше шаги решена моя проблема.

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

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

pod install

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

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

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

для тех, кто исправление не работает, попробуйте обновить ОС до Yosemite. Это сработало для меня!

Comments

    Ничего не найдено.