приложение 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. Кто-нибудь может пролить свет на это?
20 ответов:
для iOS больше или равно 8
На вкладке Общие цели в разделе встроенные двоичные файлы добавьте фреймворк. Это скопирует фреймворк в скомпилированный, чтобы его можно было связать во время выполнения.
почему это происходит? : потому что фреймворк, на который вы ссылаетесь, компилируется как динамически связанный фреймворк и, таким образом, связан с ним во время выполнения.
Примечание : встраивание пользовательских фреймворки поддерживаются только в iOS > 8 и, следовательно, и альтернативное решение, которое работает на более старых версиях iOS следует.
для iOS менее 8
Если вы имеете влияние на эту структуру (имеете доступ к исходному коду / процессу сборки), вы можете изменить эту структуру на статически связанную, а не на динамически связанную. Это приведет к тому, что код будет включен в ваше скомпилированное приложение, а не связан с ним во время выполнения, и поэтому платформа не должна быть встроенный.
как : на вкладке настроек сборки фреймворка в разделе связывания измените Тип Mach-O в статическую библиотеку. Теперь вам не нужно включать фреймворк во встроенные двоичные файлы.
В Том Числе Средства : чтобы включить такие вещи, как изображения, аудио или файлы xib/nib, я рекомендую создать пакет (по сути, каталог, подробнее здесь bit.ly/ios_bundle) а затем загрузить активы из пакета с помощью NSBundle.
я получил эту же ошибку при попытке вручную добавить свою созданную базу в свой проект. Просто перетаскивание фреймворка в ваш проект не будет достаточно хорошим. Это похоже на то, что вы находитесь на том же стадионе, но не можете найти своих детей. Мне потребовались некоторые проб и ошибок, чтобы заставить его работать должным образом, но после этих шагов сделал это для меня.
1) создайте свой фреймворк
- развивать свой рамки.
- как только разработка будет завершена,
COMMAND+Bсоздайте свой фреймворк и убедитесь, что вы получили "Build Succeeded".2) доступ к вашей структуре
- после того, как ваш проект рамки успешно строит он будет готов для вас, чтобы получить доступ в вашем
Productsпапка в проект.
- Правой Кнопкой Мыши
.frameworkи выберите "Показать в Finder".3) в рамках проекта
- перетащить
.frameworkиз окна Finder в папку "Framework" вашего проекта приложения.4) Настройка проекта приложения для framework
- выберите верхний уровень в проекте
- выбрать элемент
- перейдите в раздел "этапы сборки", затем "связать двоичный файл с библиотеками" и убедитесь, что ваш фреймворк включен с дополнительным выбрано.
- все еще в "фазах сборки", перейдите в верхний левый и выберите . В раскрывающемся списке выберите "Новая фаза копирования файлов".
- прокрутите вниз до нового раздела "копировать файлы" и убедитесь, что вы установили
Destinationв "рамки". Оставьте подпутье пустым. Затем нажмите кнопку+кнопка в левом нижнем углу.
- вам будет представлена иерархия проекта. Прокрутите вниз до папки "фреймворки", в которую вы добавили фреймворк на Шаге 3, или найдите его в строке поиска вверху. Выберите свой фреймворк и нажмите кнопку "Добавить".
- убедитесь, что ваш фреймворк включен в " Code Sign On Copy" выбранный.
5) очистите, затем запустите свой проект
COMMAND+SHIFT+KCOMMAND+R
Я должен был (поверх того, что упоминалось здесь) добавить следующую строку в Runpath Поиск Путей под Настройки Сборки tab:
@executable_path/Frameworks
необходимо добавить фреймворк на новый этап сборки файлов копирования, чтобы убедиться, что фреймворк копируется в пакет приложений во время выполнения..
посмотреть как добавить фазу сборки "копировать файлы" в мою цель для получения дополнительной информации.
официальные документы 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я решил эту проблему путем изменения
RequiredtoOptionalнаLinked Frameworks and LibrariesнаUserNotifications.frameworkосновы.
в моем случае решение состояло в том, чтобы удалить скомпилированный фреймворк из встроенных двоичных файлов, который был автономным проектом в рабочей области, очистить и перестроить его и, наконец, повторно добавить во встроенные двоичные файлы.
Если вы используете сторонний фреймворк и используете 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, после обновления всех сертификатов. и так далее и тому подобное... так много методов, как вы можете думать, что я сделал. -
Если есть разработка pod удалить приложение из симулятора установить из pod - > очистить - > запустить снова...
- перейти к файлу в xcode - > настройки рабочего пространства
- щелкните стрелку рядом с которой появляется /Users/apple/Library/Developer/Xcode / DerivedData
- выберите производные данные и переместите их в корзину.
- довольно xcode и снова открыть его.
- очистите проект и запустите его снова.
выше шаги решена моя проблема.
то же самое было, когда я создал новый конфигурация и схема сборки.
Так что решение для меня было запустить
pod installдля вновь созданной конфигурации.
в случае, если кто-то все еще испытывает эту проблему, несмотря на выполнение всех шагов, описанных во многих других ответах, вам может потребоваться отменить и воссоздать сертификат подписи кода, например:
https://developer.apple.com/library/ios/qa/qa1886/_index.html



















Comments