Невозможно добавить встроенные двоичные файлы (другие проекты) в зависимости от проекта в XCode
У меня есть рабочее пространство XCode, созданное с XCode 6.0.1. Он содержит 2 (Swift) библиотеки и одно приложение iOS (Swift), которое зависит от этих двух библиотек. У меня была стабильная настройка, которая позволила мне запустить приложение iOS на iPhone и симуляторах: два проекта библиотеки были добавлены как встроенные бинарные файлы (см. Рисунок) приложения.
Теперь у меня XCode 6.1. Недавно я удалил папку DerivedData
в папке ~/Library/Developer/Xcode
во время работы XCode. После этого мое рабочее пространство не сработало - приложение iOS не скомпилировалось, и я получил ошибку компоновщика, заявив, что не может найти проекты библиотеки.
Я попытался решить эту проблему, удалив мои 2 библиотеки из Embedded Binaries проекта приложения, и я не могу их добавить. При нажатии кнопки + в разделе "Встроенные двоичные файлы" в настройках проекта отображаются проекты рабочей области правильно, но выбор и добавление моего проекта библиотеки не добавляет их в список встроенных бинарных файлов. Я решил ошибку компоновщика, создав новое рабочее пространство. Приложение компилирует, но то, как он связывает библиотеки, является для меня загадкой: они не входят в перечисленные встроенные двоичные файлы или связанные структуры и библиотеки, а не в путь поиска Framework. Похоже, что нет никакой связи между приложением и библиотеками, которые ему нужны (и, очевидно, имеют при компиляции), за исключением того, что проекты библиотек находятся в одном рабочем пространстве.
Почему я не могу добавить библиотечные проекты в встроенные двоичные файлы? Нормально ли в XCode 6.1 проекты зависимостей просто компилируются и внедряются в приложение без ссылки или ссылки где-нибудь?
![enter image description here]()
Ответы
Ответ 1
Это сводка моего ответа на вопрос Xcode не добавит "Встроенный двоичный файл" после удаления "DerivedData" , см. исходный вопрос и ответ для большего контекста и информации:
- Удалите все каркасные проекты из рабочей области
- Выполните "чистую сборку" и/или удалите "DerivedData"
- Добавить проект обратно в рабочую область
- Постройте проект (возможно, необязательно)
- На вкладке "Общие" целевого приложения нажмите "+" под "Связанные структуры и библиотеки" , выберите фреймворк.
- Создайте и запустите в симуляторе (не должно быть никаких проблем при создании или запуске)
- Создайте и запустите для устройства (это может привести к сбою из-за неправильной привязки структуры, игнорировать этот сбой)
- Нажмите + в "Встроенные бинарные файлы" , выберите фреймворк. Это должно добавить его в проект (возможный дубликат в разделе "Связанные структуры и библиотеки" ).
- Повторить для всех необходимых фреймворков
- После создания и запуска (на устройстве) вы можете удалить любые дубликаты (и/или красные) фреймворки в Навигаторе проектов или на вкладке "Общие"
Ответ 2
Хорошо, я столкнулся с той же проблемой, что и вы. После удаления полученных данных я не смог снова связать свои двоичные файлы. Я думаю, причина в том, что производные данные - это то, где двоичные файлы записываются и связаны с вашим проектом.
То, что я сделал для решения, заключалось в том, чтобы выбрать my Framework в качестве моей цели сборки. После его создания рамочная цель превратилась из красного в черный. Я вижу на вашем скриншоте красный цвет, то есть он не был скомпилирован в двоичный файл и записан на диск.
Как только я это сделал, мне удалось повторно связать Framework с моим проектом, потому что на нем была ссылка на диск. Надеюсь, это поможет!
Ответ 3
Сначала очистите свои проекты и создайте свою инфраструктуру. После этого вы можете вставить его.
Ответ 4
Вот как я решил проблему:
-
Постройте фреймворк.
-
Откройте папку сборки и перетащите встроенную фреймворк в проект приложения (поэтому он использует путь к DerivedData).
-
Добавьте фреймворк в список встроенных фреймворков.
-
В Finder сделайте Show Contents в файле приложения xcodeproj, затем откройте project.pbxproj в своем любимом текстовом редакторе.
-
Найдите строку с длинным пути DerivedData. Измените его так, чтобы имя не было, путь - это имя фрейма, а исходное дерево - BUILT_PRODUCTS_DIR
Xcode должен заметить изменение, и библиотека в проекте приложения будет черной, а не красной, и теперь будет правильно работать и работать.
Ответ 5
У меня очень похожая проблема, и я исправил ее только вчера вечером. Решил вернуться к этой теме и предложить свое обходное решение, так как решение rjstelling выше не помогло моему делу.
У меня есть рабочее пространство, содержащее две структуры и одно приложение. Приложение долгое время использовало оба фреймворка, пока я не попал в таинственную компиляцию, где решил, что добавление свойства доступа к переменной экземпляра, называемой "кубом" типа класса, найденной в одной из фреймворков, к "_cube" невозможно (жалуясь, что он не был объявлен, хотя он фактически работал ранее в методе setter).
Короче говоря, после чистого, каким-то образом проект рабочей области/приложения потерял следы встроенной инфраструктуры моего проекта iOS 8+. Удаление встроенной инфраструктуры было последней каплей в этой строке отказа, в результате чего мой проект больше не позволял выбирать любые фреймворки для встраивания.
Возвращение проекта и рабочего пространства к более ранней версии не избавило вас от voodoo.
В итоге я включил в проект основного проекта (в виде файлов) готовые проекты фреймворка и представил целевые зависимости для фреймворков.
Затем я смог повторно внедрить фреймворки и ссылку.
Что касается объекта _cube, я должен был указать getter для свойства и @synthesize свойство для другого имени. У меня нет объяснений для этого.
Ответ 6
Вероятно, потому, что ваша инфраструктура - отдельный проект, а не отдельная цель. Попробуйте внимательно посмотреть Сессия 416: Создание современной структуры в течение примерно минут 34-36. Он покажет вам, как правильно настроить его.
Это немного сбивает с толку, если вы хотите разделить структуру между несколькими проектами, тем самым