Динамическая платформа iOS 8: библиотека не загружена

Я работал над приложением для iOS 8, которое включает расширение для общего доступа. И в приложениях, и в целях расширения используется новая динамическая среда в стиле iOS 8. Вчера, пытаясь включить эту чертову штуку в обзор бета-версии приложения TestFlight (см. Здесь и здесь), я внес ряд изменений в конфигурацию своей сборки. В конечном итоге магазин принял приложение к рассмотрению, но сегодня, когда я пытаюсь запустить его на своем устройстве, я получаю следующую ошибку:

dyld: Library not loaded: /Users/aaron/Library/Developer/Xcode/DerivedData/VideoGrabber-gpyzpfvbijsnuyglzzvynckkuwee/Build/Products/Debug-iphoneos/MyAppKitiOS.framework/MyAppKitiOS Referenced from: /private/var/mobile/Containers/Bundle/Application/4C6CFF22-0595-4222-A515-D0D5A1696DBF/MyApp.app/MyApp Reason: image not found

Ища помощи в другом месте, я наткнулся на ряд предложенных решений:

  • Добавьте платформу в раздел "Встроенные двоичные файлы" целевого объекта приложения на вкладке "Общие". Готово.

  • Введите "@executetable_path/Frameworks" в разделе "Пути поиска по пути" в параметрах сборки в целевом приложении. Готово.

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

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

1 ответ

Решение

Я получил его, сравнив что-то хорошо известное ( приложение Apple Lister) с моими собственными настройками сборки. Сравнивая пути установки для инфраструктуры, а затем пути поиска для моего целевого приложения, я смог заставить его работать. В итоге:

  1. В базе имен установки динамической библиотеки Framework Target используйте "@rpath"
  2. В имени установки динамической библиотеки целевого объекта Framework используйте "$(DYLIB_INSTALL_NAME_BASE:standardizepath)/$(EXECUTABLE_PATH)" - это автоматически преобразуется в имя вашего фреймворка.
  3. В путях поиска пути выполнения цели приложения используйте "@executetable_path/Frameworks".
  4. Убедитесь, что для параметра "Всегда искать пути пользователя" задано значение Нет. Путь поиска платформы также может быть пустым.
  5. Если это после обеда, налейте себе три пальца скотча. Ты заслужил это.

Так как еще утро, я утешу себя нежным плачем.

Другие вопросы по тегам