Динамическая платформа 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) с моими собственными настройками сборки. Сравнивая пути установки для инфраструктуры, а затем пути поиска для моего целевого приложения, я смог заставить его работать. В итоге:
- В базе имен установки динамической библиотеки Framework Target используйте "@rpath"
- В имени установки динамической библиотеки целевого объекта Framework используйте "$(DYLIB_INSTALL_NAME_BASE:standardizepath)/$(EXECUTABLE_PATH)" - это автоматически преобразуется в имя вашего фреймворка.
- В путях поиска пути выполнения цели приложения используйте "@executetable_path/Frameworks".
- Убедитесь, что для параметра "Всегда искать пути пользователя" задано значение Нет. Путь поиска платформы также может быть пустым.
- Если это после обеда, налейте себе три пальца скотча. Ты заслужил это.
Так как еще утро, я утешу себя нежным плачем.