Xcode не может сгенерировать Swift представление для моей собственной платформы
Я создал фреймворк, который хочу использовать в своем приложении для OS X. С момента обновления до Xcode 7 на El Capitan
, когда я пытаюсь командным нажатием на import
Заявление, Xcode переходит к следующему представлению.
Как я могу заставить Xcode правильно отобразить представление Swift? У меня было это раньше, и мое решение было воссоздать каждый файл проекта, который я не хочу делать снова.
9 ответов
Из моего опыта есть две возможные причины этой проблемы. Во-первых, ваша структура не может быть найдена. Чтобы это исправить, вам нужно перейти к настройкам сборки цели и добавить путь к путям поиска Framework либо в абсолют:
/Users/{user}/path-to-framework-parent-directory
или относительно каталога проекта:
$(PROJECT_DIR)/path-to-framework-parent-directory
Другой возможной причиной является то, что путь к вашей среде содержит пробел. Я обнаружил, что не имеет значения, пытаетесь ли вы избежать его с помощью обратной косой черты ../Project\ Name/frameworks
или взять весь путь в двойных кавычках "../Project Name/frameworks"
, В результате SourceKit не сможет загрузить модуль.
Обратите внимание, что $(PROJECT_DIR)
может расшириться до пути с пробелом в нем, и это также приведет к той же ошибке. Так что это похоже на ошибку в Xcode/SourceKit (я попробовал последнюю версию Xcode 7.2-beta3, и ошибка все еще есть).
Мой репозиторий был на втором жестком диске /Voluems/Macintosh HD/Repos
, Я просто переименовал жесткий диск в HD
так путь выглядит /Volumes/HD/Repos
и проблема исчезла.
Ответ Max S. указал мне верное направление, однако я использовал опцию 'recursive' для моего пути к структуре.
Чтобы все заработало, мне пришлось явно добавить путь непосредственно к рассматриваемому фреймворку непосредственно родительской директории (вместо того, чтобы просто указывать путь к одному из его более высоких каталогов с установленным параметром 'recursive').
НТН
У меня тоже была эта проблема, и другие решения не работали. Я наконец понял это в моем случае:
Имя цели также не может содержать пробел
Чтобы переименовать это:
- Зайдите в настройки вашего проекта
- Разверните столбец списка целей слева, если его там еще нет
- Нажмите на соответствующую цель один раз (или нажмите Enter или Tab при ее выборе) и введите новое имя без пробела
Странно, но просто изменив имя моей папки с "Разработчик" на "Разработка", я решил эту проблему.
Запуск Product->Clean, Product->Build - это то, что сработало для меня.
В моем случае проблема заключалась в том, что не удалось найти структуру. Благодаря предложению @Max S. я добавил родительский каталог платформы в пути поиска платформы , а затем очистил папку сборки Product > Clean Build Folder . Но проблема все еще существовала. Я попытался полностью удалить папку «Производные данные Xcode» , но ничего не получилось. Итак, после нескольких других неудачных попыток я перезапустил Xcode , и произошло волшебство, проблема исчезла.
Поэтому, если шагов, указанных @Max S., недостаточно, попробуйте также перезапустить Xcode.
Попробуйте, изменив целевое устройство. Вместо того, чтобы выбирать физическое устройство, выберите симулятор. Затем попробуйте использовать действие «команда-щелчок», чтобы открыть документацию в Xcode.
В моем случае я создал фреймворк для своего SDK вместе с podspec, чтобы сделать его какао-стручком.
У меня была такая же проблема, когда я использовал свой SDK, и она исправлена, когда я импортировал Foundation API в файл, в котором я использую свой SDK.
import Foundation
Вот еще одно потенциальное решение, которое сработало для меня:
После импорта фреймворка я никогда не строил для симулятора, только для реальных устройств. Модули Swift не отображались, та же ошибка. Затем я создал для Simulator, и он внезапно сработал, я увидел модули Swift.
Причина в том, что когда я создаю свой фреймворк, у меня есть шаг, который копирует быстрые модули из iphonesimulator
build в универсальную сборку, но ничего не делает с модулями из iphoneos
построить. Я предполагаю, что именно поэтому это не сработало.
Примечание: как только я выбрал симулятор и построил его, он начал работать все время, независимо от места назначения сборки.